@dcl-regenesislabs/web-editor 0.3.20 → 0.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor.js +2276 -452
- package/package.json +1 -1
- package/prefabs/camera-rig/ai.md +81 -0
- package/prefabs/camera-rig/composite.json +52 -0
- package/prefabs/camera-rig/data.json +22 -0
- package/prefabs/camera-rig/scripts/camera-rig.ts +199 -0
- package/prefabs/camera-rig/thumbnail.png +0 -0
- package/prefabs/catalog.json +1 -1
- package/prefabs/pickup-item/ai.md +94 -0
- package/prefabs/pickup-item/composite.json +44 -0
- package/prefabs/pickup-item/data.json +26 -0
- package/prefabs/pickup-item/scripts/pickup-item.ts +43 -0
- package/prefabs/pickup-item/thumbnail.png +0 -0
- package/prefabs/work-station/ai.md +91 -0
- package/prefabs/work-station/composite.json +52 -0
- package/prefabs/work-station/data.json +26 -0
- package/prefabs/work-station/scripts/work-station.ts +46 -0
- package/prefabs/work-station/thumbnail.png +0 -0
- package/scene/about +1 -1
- package/scene/{bafkreidloe2ozo4x2bmsjzt7svco43amj6pmj5zo7sisjnubj5w4et4sjm → bafkreihd3gtmg3p2azy5yfmzwihyk2pwunwuqkhrjybqzdp6vavsosna4y} +1 -1
- package/scene/{bafybeid4ndp7yylj3crls72kctre6gtc4hggnrxf7qqutw5giym2rr4qba → bafybeifiaotfpb4kis6f46xdw6a2rm6c534wewr55bq7zwcidmthvd4y7m} +1 -1
package/prefabs/catalog.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"admin-tools","data":"{\n \"id\": \"14f55d0a-1691-439c-9017-8903afcce3e3\",\n \"name\": \"Admin Tools\",\n \"description\": \"In-world admin panel: moderate players, post announcements and control video screens. Only admins you list can open it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"admin\",\n \"moderation\",\n \"video\",\n \"announcements\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The panel stays inside the area the explorer leaves free of its own controls, and the full-screen layer no longer blocks clicks.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: an in-world panel only the admins you list can open — moderate players, post announcements and control the scene's video screens.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"USE_FETCH\",\n \"USE_WEB3_API\",\n \"USE_WEBSOCKET\",\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\"\n ]\n}\n","files":{"composite.json":{"integrity":"sha384-WYmVW/WiIQ9MIezdTLx0l9KALl8G6IYSnZplhupYGyuk9QOW7GXVM1GBJanG96OX","size":1886},"data.json":{"integrity":"sha384-OTrnY78c8LfxaEXN6NeJIfNscBPi6142qRQp9P9m/+GbCvKw86x/J0faFwW7ERTn","size":927},"icons/admin-panel-control-button.png":{"integrity":"sha384-gs8sS7NlWDosiswd38dlTSRMIxSmPy4uuMH9/Z0G8gWpvKerKgcp3ui7Nme/wbci","size":2217},"icons/admin-panel-moderation-control-button.png":{"integrity":"sha384-mBy3ESO3Mq875LIiSGzFVnD9iLmf9DWMqjEBRnZnT/vmQTy4cendMAM0Pw3iw4I5","size":1631},"icons/admin-panel-rewards-control-button.png":{"integrity":"sha384-lbA1p3+WUiCqMyLQZCtb/GY7G+XGMXvpmsvv6DJWVIV2F4K5G47BJGdJDcuOk9pj","size":1796},"icons/admin-panel-smart-item-control-button.png":{"integrity":"sha384-4dx0rzzVKfDcfpUwMvngJ9THOAclyEDKbUwtTo826cRQOvFez6s78DipQSJt9WMY","size":846},"icons/admin-panel-text-announcement-control-button.png":{"integrity":"sha384-Tp9W3GXQPvd9OwANHFYrfekQpNHdFzcAdRgK0KedviMH4GtXirlh1xNDZivpN7Ii","size":522},"icons/admin-panel-video-control-button.png":{"integrity":"sha384-GR1IO0b/6EbWm9nZwfSm0c6JOfNgxGMC9JmF4+dcI2E47tz5ayJ75fKIn5EdIiZn","size":726},"icons/admin-tool-background.png":{"integrity":"sha384-I87kdzFsmxJLWQNdkQAJK7ech9hyy/I5eA/LbF8+O8R+mQF/+PHTOjGoEgqnDD+M","size":792},"icons/announcements/text-announcement-chat-message.png":{"integrity":"sha384-Wamzz2shgywHVGOsvtruJrW6pEJ8BA4wLopI9m6Aj3QfLpS6+JIhVd/gQW1BeHQz","size":14307},"icons/announcements/text-announcement-check.png":{"integrity":"sha384-ocqK42WSlHJF+8PKK8yUlxlgLaq98LHnmrksUDGjZY/griiuV0QTW4LjC9N5ibj7","size":283},"icons/announcements/text-announcement-close-button.png":{"integrity":"sha384-2/dJo7RNlVSyWFmyM8PI7k2Mn7NbpTrhugMCn4b6+doaqJa83i6V1q0Lft19vMj6","size":1148},"icons/moderation-control-icon.png":{"integrity":"sha384-7A2sHB+ce6HTmfiULIsEQp/N+UZdf3tivJui0rNjghcCka7n7eSfWgl4fjvz4Cgn","size":1312},"icons/moderation/admin-panel-verified-user.png":{"integrity":"sha384-vNcq6YpNNQ7lFotU8SaOCKBhil8PLzDWsblH357op7HxAA2/M6Rg0Vj/HQzpnbZI","size":1213},"icons/moderation/ban.png":{"integrity":"sha384-cmN14nYErcvzkNCovoKGXocGHo7KGrn6R+k91cdCG/wIXtvr3RNim70WTj7rNBeN","size":470},"icons/moderation/chevron-back.png":{"integrity":"sha384-mqnl54KA63yVGjEnCmpO4OP5d0P1Yn6mKr+vBskc0k6X195fA2sby0tLRf1U/rh+","size":3165},"icons/moderation/chevron-forward.png":{"integrity":"sha384-rLe+qxxpQqYMMynmmpvQtFf7721X2H/dqLeqpe3O/PQ3GoUBU9gPU2+VrLoXbFxm","size":3171},"icons/moderation/close.png":{"integrity":"sha384-3MgIzHRKOzSovLyjR7BqmW+CDECeCtQP+qgwJYp7DyG6UncrCp69WwDmQFrAPAab","size":3851},"icons/moderation/error.png":{"integrity":"sha384-UaTdOECxl6EaoYfijFAVBut8YPdUyMQLeRibiNc1Zgl7icEN2xEXrar8IGahlkb8","size":798},"icons/moderation/person-outline.png":{"integrity":"sha384-SpgAMD/+hqIDVz9fx+47lsGoP5R04k76Ld7Vsjt/avZBqVRhfq9+1i/2cXKLYgm+","size":1085},"icons/rewards-control.png":{"integrity":"sha384-o16Vo2/34yoPpO5eaLkz2PsbfOsN6d0OKKCAiYai4QfHN3cSi6WAUJ2BNDsYcrYu","size":785},"icons/rewards/close.png":{"integrity":"sha384-3MgIzHRKOzSovLyjR7BqmW+CDECeCtQP+qgwJYp7DyG6UncrCp69WwDmQFrAPAab","size":3851},"icons/rewards/send.png":{"integrity":"sha384-S33P3X184uAhwTQAeuj9xsMUNXbZ+u/NQTEfFGBA7T0U+AJgGEf7fF++U43aoT1p","size":500},"icons/smart-item-control.png":{"integrity":"sha384-ifsViL2s+VFP4zoJYSRnK3YbSC/CHaJip0TZ+t21bWNVl70IbI1HKlCfdeW2UDSg","size":496},"icons/text-announcement-control.png":{"integrity":"sha384-7URWvpEp3gmP6yJ2hO0TRwMoGwneSaTftS0G8oJJkxEDfLuAFC0v3e5svRbe06s3","size":454},"icons/video-control.png":{"integrity":"sha384-08i8/ot11Lq7VQmc0m2GEqXsE7SydKZBg3zgTAlFEWUFw17F9+agTncc8jPekmSl","size":643},"icons/video/chevron-down.png":{"integrity":"sha384-OcKDCPWWVFuK9NILpIRUhFTh39zgaew6mFlyV7T40mJrBJXr2Q1p4/xABVEplRnf","size":343},"icons/video/chevron-up.png":{"integrity":"sha384-yX6sXRFGFknZtfhtuXNUJr3lc0DgnN8K3y2gPoHbowu9bbkdme0TxDU4/UQh9hfQ","size":346},"icons/video/copy-to-clipboard.png":{"integrity":"sha384-eyjGkM9EtomLolYvPV/xK39hFFazZIwtzd/XF34srRydJTSp2bxS3UafHk+/cP7D","size":304},"icons/video/error.png":{"integrity":"sha384-UaTdOECxl6EaoYfijFAVBut8YPdUyMQLeRibiNc1Zgl7icEN2xEXrar8IGahlkb8","size":798},"icons/video/eye-off.png":{"integrity":"sha384-xQXGDg/WIuy/UdZlYzBuwUY/d1Qp0wfSiavWmAbe5Jzs2+x2O2+qzc+wQyvpY5eS","size":9468},"icons/video/eye.png":{"integrity":"sha384-wwXqHg8tIOK/X1H/xf+6d3GWRtObvrgE553mA8H0RX05t+LFegaRQ+oekZNhfzUb","size":9696},"icons/video/help.png":{"integrity":"sha384-wur+rnzxUR5aoo/HZGtbcRtH46TTEe51XrORkzXpI6GJEzgxe26v1wB4dqUMl6rY","size":6353},"icons/video/info.png":{"integrity":"sha384-2VAiLc08J0wHLo6rbMq0dryIHmXyIwxmz+QLGvOy4CA/FoVwUw7QcxKkJdWy389l","size":37460},"icons/video/person-outline.png":{"integrity":"sha384-SpgAMD/+hqIDVz9fx+47lsGoP5R04k76Ld7Vsjt/avZBqVRhfq9+1i/2cXKLYgm+","size":1085},"icons/video/star.png":{"integrity":"sha384-9GFGGyegeJD8W7mQETsKMaajbcVwTftNidPsCZ4ZdguEqe4e7ApgMaWbbQK3Wq5q","size":612},"icons/video/video-control-dcl-cast.png":{"integrity":"sha384-jfetm7VqkoaYFM60cRDbHYFUKV9PFYdoSJoJJjnlmUMcHXJaXMdqf8CEsfTbfiW0","size":3958},"icons/video/video-control-live.png":{"integrity":"sha384-zKG2r2mRC2+KaBSuCOr8GXCooPlhdS0DM/bhkKuJcZESHLGHUmIKqKCSpBQrTtAB","size":12998},"icons/video/video-control-loop.png":{"integrity":"sha384-PmW7BM5QYFSdD7yWHRAM2ENhpXqabDVBMBraqbQZQX+FSgtzQkM+5sxOvzdnploj","size":8685},"icons/video/video-control-mute.png":{"integrity":"sha384-UNYvZ+/8Gxof8muaqCDw/PIz7H3tLC3j5WyD3vBQvf5JBnQEd0QCIlr+T24HlYPW","size":5752},"icons/video/video-control-pause-button.png":{"integrity":"sha384-cvfT4+N9agDRnU6Ow9wT+Ronr/RJx1c2CAaAt4t3xHPQLvWOJNnPlfXW/O0hyYus","size":5267},"icons/video/video-control-play-button.png":{"integrity":"sha384-CAvkQGDWHS1tYlEA/z33gKf9mvIXPAsISRbl3pdzT52NN6eF/woOQJ+ihnflI7pd","size":402},"icons/video/video-control-video-icon.png":{"integrity":"sha384-yKtdqQ/8ARbNu6EXx2DO479v9R89Qf/gkYmwT9Srj6Olr2qZom3S/TAhJSmR3Ufu","size":667},"icons/video/video-control-volume-minus-button.png":{"integrity":"sha384-P2EM6fgmDXOFDFdfWKYbfUS3/j1pIXgYe6SYkvxhOkLcVNkvDc5rM/P60COE64QP","size":188},"icons/video/video-control-volume-plus-button.png":{"integrity":"sha384-lBnQMGgUEbRTddesn4aY7SxDQ07mz3UKlB9hcwwbfJ1sO215UNs1cXIuIeGfJ4we","size":267},"scripts/actions.ts":{"integrity":"sha384-hE/4GuMatbDddD196YnJeLlpA57vKLHYTS5eRqrChRbpKSWYlfD+d69W4AWD7K52","size":7017},"scripts/admin.tsx":{"integrity":"sha384-Ej24LfV0mpU0RNLnAlt1nWWrDhrbpVFQQUu6gnPt4EO1k0IlvKz3cAfdA6vHzHfM","size":7868},"scripts/api.ts":{"integrity":"sha384-dhPp6JRdztKLmBTidsgYNe69Y/ZEFwDc73blrCgLgRtkgq6kByvEusNYrpKR8gCf","size":4464},"scripts/components.ts":{"integrity":"sha384-OvrIEnNGEwWpatTyqapsXXniSDfxjgtBFx0Zb8J/yGxaEl9JGg9j+e1JTcKywqu8","size":5953},"scripts/icons.ts":{"integrity":"sha384-W7so7VfFuLEVUMJGNxWA2kNXw5LPKL0D4ZkB+WU0pBp6fkM6NHwYDZHRaS3S4Gji","size":2306},"scripts/message-bus.ts":{"integrity":"sha384-BxGE3lQmg0OUPQpVtv7zQxnFG1AphUU2RpRcT0CaiIBduAZ+hpExXvd9gSj0dDkp","size":10293},"scripts/state.ts":{"integrity":"sha384-vNTXekH1jMcqiMauLtz6bZ2Yy5v8qwO66Jf0h6q+LIfGEhKVQsYPIgN/9i55bFlq","size":2000},"scripts/tabs/Moderation.tsx":{"integrity":"sha384-UsU9Wai6aff/kpLGiXtZAyHSEurtjb+B/umwgPRkYLmnqtQ2iSyeHrV2NKXg+Mlc","size":4717},"scripts/tabs/Rewards.tsx":{"integrity":"sha384-bKzO+bKEXJSdq3cDap8pn4KiCgm1gzqmf3Ei4ydcIrXCZA2KHmK7MeyGtQaOnlYP","size":4845},"scripts/tabs/SmartItemActions.tsx":{"integrity":"sha384-2EBxPB8FoidC82/EJIbfdj0WLZY9EM8DKIMfY6WcNkIJNazziDoT0c9TWLDQSgUu","size":6393},"scripts/tabs/TextAnnouncements.tsx":{"integrity":"sha384-auE1OM8qu77Mf+NJ0Q9phmWHoa/8hAELiRNzk0iMzh9p9P++K17e2r6n4wRu8V4q","size":6297},"scripts/tabs/VideoControl.tsx":{"integrity":"sha384-kb3f5pujq+a7c32PQSwUEOEPRfdjabLpJXnYsDCzDOepMmSPpIRpQ5ZEkbCDRajd","size":5199},"scripts/tabs/announcements/Overlay.tsx":{"integrity":"sha384-gwqwL5sPpKVyrX5zvXFl+spo+hOQuZ5Ao5HtwlcqNNjAszJtbZQZkRGoIeS91yQr","size":2933},"scripts/tabs/announcements/icons.ts":{"integrity":"sha384-ITtseCBy5n3WQxScQG0Y6LxNaD/L8CTPmI/lboI4QTMunXwHpmFmkW4SKHOgUnBn","size":455},"scripts/tabs/announcements/state.ts":{"integrity":"sha384-H8QR1U5I52xzN8kBd0JoMNmVPDXk+9h+G4Ophfhb413JPQgGUqva1XR1BC/ck8AN","size":2351},"scripts/tabs/announcements/ui.tsx":{"integrity":"sha384-PuNRzeUXeOVMuBO/sXnBrGEaB8n3qPofhnJOtC5FXz6EfnQ1T9wS63XPRa23GKRU","size":1072},"scripts/tabs/moderation/AddUserInput.tsx":{"integrity":"sha384-RiyCa08HtzCBd3VEe+tP6ntPOzHyb1F98RhXqkAwBKB14OT9puqedXekff7aGs37","size":5617},"scripts/tabs/moderation/RemoveAdminConfirmation.tsx":{"integrity":"sha384-tT43wHl1ywHy7tmio8nqzeZdr8kymxwHUfaPHoVc62u7ODx9GCygB4pu8jtHPRiX","size":2803},"scripts/tabs/moderation/UsersList.tsx":{"integrity":"sha384-0Wa4fy2crAQe39qgwbwdBwQSFswNGCrELHxCFZ1jBmxgh4R1HYKKDrFpAwtoq87/","size":7191},"scripts/tabs/moderation/api.ts":{"integrity":"sha384-Q/qkDk6GC53eutQvYwf4Lmyy3fPEH84nj1c+7JZDYEt0xrmGHgYPcXcfju2bWNii","size":1322},"scripts/tabs/moderation/icons.ts":{"integrity":"sha384-QqvX+zxVEVZojv5uHj0yl9aaSO3dPX8g7bvAizI7+jmUfT7Y919Bu6m1lbM33FYC","size":706},"scripts/tabs/moderation/kick.ts":{"integrity":"sha384-Rgr5yEmwEtTgZQirGmAOjGlJ2S9eBk35RwCgLTnkfvIQL4Q+ueU77sJ1nkeyPjfL","size":3965},"scripts/tabs/moderation/state.ts":{"integrity":"sha384-xvW2sWrMBcIr395zhA4Z/CJmvRzdtUJYIwJj4jBO0BcqYtaokEtRInseFPyfWU5A","size":1950},"scripts/tabs/moderation/ui.tsx":{"integrity":"sha384-s/X9vWTUhAfIZbzFtFwAJsjBjtBx7WcNpYOV1X5a2aruCkBB9zGqsRGF+k8ieVfW","size":5207},"scripts/tabs/moderation/utils.ts":{"integrity":"sha384-TAcs4ANF4RdzECa13ol7kWSKBtNZZZ5n+IydZlt9vl0FqZhnaw+MiBD2Q8gtacsU","size":3184},"scripts/tabs/rewards/Button.tsx":{"integrity":"sha384-Z66D7boMToX9iMvJr2cCAvA6EuxSPNKAMnIMeyry+xnokDOenJrmDaVBqX2pN6gt","size":1539},"scripts/tabs/rewards/Captcha.tsx":{"integrity":"sha384-H89W2CtQmpxF4LU6hLh409aHbadDb/Ukv5oRVc65e6kI+C7ixvCXPDtBjlerFnyo","size":2490},"scripts/tabs/rewards/api.ts":{"integrity":"sha384-T42JhF83QZuzIB06HAa09Bclq/qUwRvP/FwxhhAaVjuH7Ml0ehmiHgZDRYj95H5S","size":4796},"scripts/tabs/rewards/claim.ts":{"integrity":"sha384-pRPeSNGiGx9wb4+v35haHCGfWX+CBiMLu/1iVLitZ6pNhTzvBu24CisrFWmycQqM","size":3656},"scripts/tabs/rewards/controller.ts":{"integrity":"sha384-JPs8MvAVa6pGrdKlvoFr0H1P3FoQMIuiwwGcZMvkHC8kVVq4saX0x5T4RCIH35Rq","size":3368},"scripts/tabs/rewards/icons.ts":{"integrity":"sha384-S/7TaZ0mzvxhZJnxzt2ilqYAINoHo81Wh2vLRELZpmS/jQuL6KGBG9Tmw+COF1pb","size":275},"scripts/tabs/rewards/state.ts":{"integrity":"sha384-4PsbphYBjuf6o9Dnz8h6Iyp+s1LQrV1PYhteV0zpHz3nQFo8mZf8gRbphB+fpEdT","size":840},"scripts/tabs/smart-items/selection.ts":{"integrity":"sha384-lxSzgZrpbsomjarF9K1UhsfX1QuiPmeqMPY3jUBOG2/CU9i9ZCXrRPAexlhOaNiv","size":3331},"scripts/tabs/video/DclCast.tsx":{"integrity":"sha384-Rz/xL437EcTxwNCYvjbuHuw3klhBGL6N/Pb0hc6Vu+gjJVrLKnqRIo9hTEzeqWs6","size":8072},"scripts/tabs/video/LiveStream.tsx":{"integrity":"sha384-xJfNS7uAkczd6Mv7jI6kfVhA4cJQfbzUXZB+POKe7scklnpJJttNimcHHfl2sh5P","size":9886},"scripts/tabs/video/SpeakerShowcase.tsx":{"integrity":"sha384-5fEeVnMIEMYTQHztNlyULWEts6h/Zgv3kH5+/iQy9uIh5eNe1iqVtwArKrM0RuAP","size":3802},"scripts/tabs/video/VideoUrl.tsx":{"integrity":"sha384-pEnlEeG6qstYzljbAkeeFfQZilijueSfKmZFUPOzDC8I6K0ETrlf45hbbMX8V0fr","size":3426},"scripts/tabs/video/Volume.tsx":{"integrity":"sha384-q4odOzbD+Mx5BzotjtIx8+GQMGX9Ysy657573+S/bts+yrr1w0bMN91NtKzNc7Vf","size":2133},"scripts/tabs/video/api.ts":{"integrity":"sha384-UDwFd8lR+diOPOejRUq8Bk/DHs1OQN9nb7jNE2Nv+1KUm4JwUxu4b7LMExuWDSuJ","size":5673},"scripts/tabs/video/controls.ts":{"integrity":"sha384-8NTX/Mu0Ps34x4kxL2gwmJrbxyUVxYwT0pH5ig22+FGJU6UqHKIV2MyPZbJyBEWM","size":3886},"scripts/tabs/video/icons.ts":{"integrity":"sha384-3/0EHH0ZB0R4gcxXUlHvWFqKEoHx0WJyl7ZWh3sAGpIYGcJFT4OtqzeUkA0gRa4X","size":1662},"scripts/tabs/video/speakers.ts":{"integrity":"sha384-6YGpbWXwW6pSBAHC8o9P2Lu0P6IbhsRseHAgDG2eHWUCFd4wAXhdR6l/FYM7wrL4","size":1105},"scripts/tabs/video/state.ts":{"integrity":"sha384-yPWXz+LaGfDLrbO6xuEAe6whwGGtahVvvpOJmQsLGc+P4qopgoD9FSA9+xOxZP8I","size":2256},"scripts/tabs/video/ui.tsx":{"integrity":"sha384-ANXvEZ75Ur0nZyxxaHFOdr+NBGx3zD25r3s8M8dVb6osakUGjBKhRUEEWKo6JmpV","size":7076},"scripts/types.ts":{"integrity":"sha384-/ieszyQ/vz9IKpyeCLEw7Gae+8EWZVQMkcWmKWn6roV3KkEj34zY8n87R5w9HxIY","size":1902},"scripts/ui.tsx":{"integrity":"sha384-fUQUBEHzEB8SO6Mhl3Trm9vfgCogyEIoOiVmP+eVnE1qI/HK6lqOFsLcNZNe/Lqy","size":3216},"thumbnail.png":{"integrity":"sha384-sh8ip9U6LNItjm30RSrxl83x7aYdlbROEDnI49S5x+uj3rpx7ohWSFgVi3jXpv+4","size":11615}}},{"name":"announcer","data":"{\n \"id\": \"fb41d8d1-b842-437d-a830-f38379e74743\",\n \"name\": \"Announcer\",\n \"description\": \"Show a themed message when a player enters or leaves a chosen Trigger Area, or receive announcements from Game Flow.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"announce\",\n \"message\",\n \"toast\",\n \"ui\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.3.0\",\n \"changelog\": [\n {\n \"version\": \"1.3.0\",\n \"notes\": \"Announcements take their place in the shared HUD layout at the bottom centre, narrow enough to stay clear of the phone touch buttons and of other HUDs.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: server code anywhere in the scene calls game.broadcast('announce', { text }) and every player's client shows the line for a few seconds.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed item's Script card now shows the broadcast line that makes it speak, under its hold seconds and font size.\"\n },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"Shared theme and a Trigger Area picker for local messages without writing code.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-D3Cv9CWg7ofWd+5NtZB9U0GLWnX/7Mbx2KN4QumC6l0qNu9t/6EXIVVuVJcY/7NS","size":3331},"composite.json":{"integrity":"sha384-3w+7KNTh3KLidBVPFpOr5uXPyrtZH1UA5l5yy+r0WC4QYO8+bFmvO10wY6Zk1osX","size":554},"data.json":{"integrity":"sha384-UiHAWkFaSxgHUM3ufcszXLhIXvc/PRRv7y2VMpJdBHNJ8C8Bzw7Yk40k9dW9Sabt","size":1217},"scripts/announcer.tsx":{"integrity":"sha384-cXTJST1CbTriSs6Vjg5CMhMzuGYX8Y5um8dH04rhrBrpMGI3/+rp7rF+OyiK6Bjs","size":1761},"scripts/pure/toast.ts":{"integrity":"sha384-5HsNX5Ao3DBwh0XwQx036b4r8OIvM4C7zYUAPHMVNPtEWb7kMdJASFEwKtxrb/jE","size":1171},"thumbnail.png":{"integrity":"sha384-HBZUcCEOa9jkubVyvd8Hrhnu3HU0OHKhshGy1LYXw0I6bANVnxcUy0psn8fuyqR6","size":2005}}},{"name":"black-chair","data":"{\n \"id\": \"1aa01433-9f2e-44ac-b1fb-a2bdffeb6776\",\n \"name\": \"Black Chair\",\n \"description\": \"A black dining chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"HighBackChair.glb":{"integrity":"sha384-BQAU/CeS2nc/qMg4zNmGfN9PL54Vok9qKD681gVfC64knQyWW/wh2rGXNVc53oJ6","size":32424},"composite.json":{"integrity":"sha384-3/TVCIpJOzxplhEyfQhTIfMqAzc6J/jyo6qWRCI3iQMMSlSNnYS69w8+vBdNheC2","size":1413},"data.json":{"integrity":"sha384-zBCFwVRiankPHLu/0p80cZPNHuuPr8KywXQh+Co6MN1LWmPfYffNk2UvpyFc3WK2","size":699},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-bZsSYvZkaq1R6jGe8fK1yvdC1ws8F0nAtbKUpWRkpEretquQ1Pcx05H14NIobZA4","size":8744}}},{"name":"classic-bench","data":"{\n \"id\": \"3e8dace7-01e4-4a98-a56e-52ad05ae654d\",\n \"name\": \"Classic Bench\",\n \"description\": \"A classic park bench, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Bench_01.glb":{"integrity":"sha384-qU+pwMwPJYsOMD3Rgh5aQ/XkBKR6ls6nQyqWaRik+z125N+cSW7f7tfaH6rQPVjz","size":54436},"composite.json":{"integrity":"sha384-KTMuUiX7SNG/qh3LQ9JANv/ql+YrUC3UHna5xa8GleFBEVOx2NTafDEFyjXPlUZL","size":2004},"data.json":{"integrity":"sha384-WzR61MlY+E4phm2i405fbw1qr2W5XZhV3elr6lpAIVX7ssoqTzxb8m3lTSKaqrLi","size":887},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-gVZ5hbkqeZCkqlNp2XTBqGLqDMFBH261RyXCV/+xogCBddr593SpTijJcTG75xRw","size":10722}}},{"name":"classic-bench-armrests","data":"{\n \"id\": \"88e01dcc-b242-4815-90e3-72ff52c24f45\",\n \"name\": \"Classic Bench Armrests\",\n \"description\": \"A classic park bench with armrests, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Bench 1.glb":{"integrity":"sha384-gEvudQhcSvOjXcqAeY8D8iPaVbsYOkBd3YdZki2iAKCkZgkf/PQLaMW5DAJHFVZB","size":42772},"composite.json":{"integrity":"sha384-KuygG/7cDAvXqt2lz2mYDyeppiq1PZN+ZmBDndaWxdqV7csCPMdXQK/Ys40UW7YZ","size":2014},"data.json":{"integrity":"sha384-t19LA1qyWZc5sRylViJkgGHA8wo0wZqEVaA586BsRGQmzQc4itLDkgxE4LIdvHeR","size":737},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-u4mWUcX2kkrcgfIKydVN3kKeDu7K2Jfg9TKNBYavhhiIjZ0bWSUPVg9VABZZuaV1","size":19258}}},{"name":"classroom-chair","data":"{\n \"id\": \"cacd50dc-5861-4b71-83ee-83cb23fea9e4\",\n \"name\": \"Classroom Chair\",\n \"description\": \"A moulded classroom chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_02.glb":{"integrity":"sha384-4sbNyI8nx8fgdkKm/Df7ooV8fEtA5sUTxy7VI2R+91f/JDklg4yFxOk4U3RXIFuo","size":16368},"composite.json":{"integrity":"sha384-Esh68GGVhUf9RCOfsDXWQaUiGb273cV7Z5cC2MOXe6JkUJknpHCpvyBwgPjvIHTg","size":1447},"data.json":{"integrity":"sha384-2FqLS4bQ26dRzDJZgb3HlB/Hrlt6x8fzSQnCoHVeGFIyZHcJ77N4WClJlt0iAYQB","size":881},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-xp435rb3UtVrmBql5h82OUHv9+1HRv4msRquMkJF1ABAwAmE0htpneGPsIovG1dU","size":14671}}},{"name":"court-chair","data":"{\n \"id\": \"e29fe7dd-20f3-4486-941e-bb85401d0d1d\",\n \"name\": \"Court Chair\",\n \"description\": \"An upright court chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_Wood_01.glb":{"integrity":"sha384-IIv1LpNQXbn42cpCwd4gsgDfThllJfAjB0pjMC51jcgUqJD6yJ25vIUv4OUSNZ0B","size":38776},"FanstasyPack_TX.png":{"integrity":"sha384-KMdE2Mz2QPnFyTWlJZWCUSxASSMsmyw/VFzHLyFQvXehN1ujIEepbskPuNqHgCI+","size":15078},"composite.json":{"integrity":"sha384-Q1IbQdubZR+c8womUaRcMywMD5GjYB/t46kuu309jIHimWA2YHGNgl/Ei5G/B1Bg","size":1408},"data.json":{"integrity":"sha384-akBy4ls/agEp39hMybq9vUIOyxV4KMBId+YLlayMWgc7QJcI/cLc+UktiHJOny6R","size":874},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-v2OuF/sRj8TMvjUqhYYJTkwfAMftvT//lNEFTULD99DFiWfc/bWhceAxxeo7emX+","size":12243}}},{"name":"curved-couch","data":"{\n \"id\": \"48dbe32d-c906-4287-bcfe-2cfe280c68f8\",\n \"name\": \"Curved Couch\",\n \"description\": \"A curved sectional couch, seating three. Players can sit along it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"CurvedCouch.glb":{"integrity":"sha384-EnJVY5fVNrynT2dL7huvsxVfZ5RbbvmrxnGjrEobubreqJ1U7qQo1ofzwBcNGYgg","size":38740},"composite.json":{"integrity":"sha384-Mx4dSJiZ3vo9xNctXyshiVZNlQ6SaYKDrtdLqpRT+ODzyJGneMwOxA/64u2rfqre","size":2013},"data.json":{"integrity":"sha384-7TJ7cPkU1KWPclbaj5CKLkVvIM6Ascfewj4ikqy9H6KRpu26ZyaBZfE6UekpP/ZU","size":722},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-oyKNtE22C6BjtcNTnnoBTYjfmIqVnik0SaM5IwfC1qheKHjXVa8Lxtihi9YDu8fs","size":14388}}},{"name":"game-flow","data":"{\n \"id\": \"44374100-12fb-481f-90ce-2a4d81949084\",\n \"name\": \"Game Flow\",\n \"description\": \"Lobby, countdown, rounds, winners — runs your game from start to end. Works with: Leaderboard, Announcer.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"round\",\n \"lobby\",\n \"countdown\",\n \"timer\",\n \"winners\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.2.0\",\n \"changelog\": [\n {\n \"version\": \"1.2.0\",\n \"notes\": \"The 2D status panel takes its place in the shared HUD layout, so it no longer overlaps other HUDs on any screen.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: lobby → round → winners on game.round, a countdown every client derives from one shared deadline, a winners line read from the board key a Leaderboard shows, and a \\\"script\\\" mode where your own game.newRound() ends the round and the round length is only a ceiling.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"Optional themed round timer and lobby countdown, configured in the inspector.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-FSQahckNpE6r400CC5Kw5Fz1uijUfaZ0N2XZBEm+YVMsbRTMfjX5zrlyKJMleUyl","size":4677},"composite.json":{"integrity":"sha384-TXN9bYBu1C79b9fTYJ2GbtOC1J4wjEpJt6rIykdYJTu3HEUw62il/8CIFSljcB4Q","size":932},"data.json":{"integrity":"sha384-cP7iRsJsHCRReEuJXncOHP41mG5PmbXB1BUnN0Kp16cOeLv+USBLanxLKbQNVY+U","size":1143},"scripts/game-flow.ts":{"integrity":"sha384-ALqBHmmmh5DxU2YGmpsDbjJyY3Lxh2rn2GBWGu0dlXOxXdG7h6NzhBlxdbVnkqYp","size":6524},"scripts/pure/flow.ts":{"integrity":"sha384-zEgjgIQS3RzCJ8Tyud8tywm5SmD+FO8WLnFpBkexnFEnmbOoWSb37HUx3X0/DLT3","size":7575},"thumbnail.png":{"integrity":"sha384-ZQHTd8rM4CaE2+qNC5at7B4H3e1ikf1ck9K6GI/TEwn/7WKzf2/9I9sInMvrxy8J","size":13227}}},{"name":"health-respawn","data":"{\n \"id\": \"5cc3b4d7-2a87-4825-9a53-e2b007bcff24\",\n \"name\": \"Health & Respawn\",\n \"description\": \"Players can take damage and respawn. Works with: Game Flow, Trigger Area.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"player\",\n \"health\",\n \"damage\",\n \"respawn\",\n \"multiplayer\",\n \"server\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\"\n ],\n \"drivenBy\": {\n \"rule\": \"Nothing takes hit points by itself — the server calls damage() wherever the harm happens, and this item does the dying and the respawn.\",\n \"code\": \"game.onEnterArea('Spikes', (player) => damage(player, 25))\",\n \"next\": \"Press New script below, write that inside the isServer() block it comes with, and import damage from the health.ts beside this item's own script.\"\n },\n \"version\": \"1.3.1\",\n \"changelog\": [\n { \"version\": \"1.3.1\", \"notes\": \"The health bar is on by default again; turn Health Bar off for a game that never deals damage.\" },\n { \"version\": \"1.3.0\", \"notes\": \"Health bar setting, off by default: a course that never deals damage shows no hit points.\" },\n { \"version\": \"1.2.1\", \"notes\": \"Guide covers in-bounds respawn destinations, permissions and course playtesting.\" },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"Per-player checkpoint destinations, healing, forced death, death counts, optional respawn delay and protection after respawning.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: hit points the server owns in game.state.health, a respawn point picked in the inspector, a \\\"die below height\\\" death plane, and a damage() other server code calls.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed item's Script card now shows the damage() call that takes hit points, under its respawn settings.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-sOrhWgNJh7HnRDNRZnTFtj+lulT6lQpepsjcZ8+8S66IEKIbA/+TR0wineLeGJ0r","size":4755},"composite.json":{"integrity":"sha384-WZskIkQZ8n8dehUBe5OKQ+99aVon0PAX6Znh5z2TmWf177Wto80aE70iod28dvCF","size":565},"data.json":{"integrity":"sha384-/9l/nKLcx51jlRHD0Yafkl9meyPTAwCxTR8XteUkuH5jmmcfa8IK6SIiDJBhoqlp","size":1911},"scripts/health-respawn.ts":{"integrity":"sha384-QwLUhaAcxp9vui+9q7ccvuEpY87QHG+d/pzfAJRPn9L2yHhrvU605ORU21pz17hP","size":5760},"scripts/health.ts":{"integrity":"sha384-/zA9uuvRZ3uRS2WdFvPml83zRvA5n4h0RTNIEd2pb59Ui6yrtX1kJHj/zbK+Md4A","size":1981},"scripts/pure/health.ts":{"integrity":"sha384-if/V7vja1R5enh/H7yM4FCh3Ea7bgld+tr76ryjTWryrk3lEw7xFe6p282WsZFji","size":2230},"scripts/pure/life.ts":{"integrity":"sha384-oNHo7xAdJWVw3t5o7oDt+wjM9ea8FD/Ynskc2l1YjP3+qvnYLNnrI4v1pENPOorD","size":2368},"thumbnail.png":{"integrity":"sha384-fVCccAg9bAVrgYD6MFlGK+1zBO5XEDpxd0Lh7LGFaobZYl2OCaxJcME3eVrQqS31","size":7116}}},{"name":"high-stool","data":"{\n \"id\": \"f8ee0d2a-19f5-45a9-9029-cd46d7a8f834\",\n \"name\": \"High Stool\",\n \"description\": \"A tall bar stool. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"HighStool.glb":{"integrity":"sha384-pELylPLTKad8MmTwL9+jXPGUf5KOnXgxBuY4JXguuov7duJEIVRk4pRcQ+gCgKmf","size":26332},"composite.json":{"integrity":"sha384-U3fv7ocM1aBZWJ+l9uC2Eg2acDqnoxy3tPhr8dXx1Vi7N1riaugAdQTDIpTQQyAK","size":1416},"data.json":{"integrity":"sha384-LjCLqThIrUN7Qk+zA6paffpTxFsPGIiDdRhVow2w9PlMxyX+EvyLO+tds9fHTX7O","size":694},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-Y4cPyTFXuHC5maHoDtEX7vdYSK76XLhw9JbnYPORlyOSmLAfhkvv/FjW0apjV9VS","size":9066}}},{"name":"large-couch","data":"{\n \"id\": \"ac233c16-699e-4f01-8e7c-910bb5a168af\",\n \"name\": \"Large Couch\",\n \"description\": \"A long couch, seating three. Players can sit along it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"ThreeSeater_Couch.glb":{"integrity":"sha384-Oo6LBiZPQO03QYxtyTqaG4NttfLoAeL14jtchqBbJjg1HQftbWUwrE1lQ8mSXCnM","size":31868},"composite.json":{"integrity":"sha384-HtdxTfaa5dyvF9BUlo0t2tzgSA4SWn3nwT2DccLeqnmscPpMqTKKmYt886lQaFYQ","size":2023},"data.json":{"integrity":"sha384-uIPJ6qQK7hXa2HghWSKPj5E8buDUVRb0XdeSUOcYoFnnQFTx3Nn9gWGf9m6kFTnU","size":709},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-/JwNvv3M/1qncoi0bQ7ZM9h7WQKP48Ti8KgAdHqtLxiwMogRZmWRhATdgF7nBz+3","size":16512}}},{"name":"leaderboard","data":"{\n \"id\": \"493daede-2afd-4c10-9c0d-6aefb25629a8\",\n \"name\": \"Leaderboard\",\n \"description\": \"Show game scores or automatic Run Progress best times on a 3D panel or themed screen overlay.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"leaderboard\",\n \"score\",\n \"ranking\",\n \"board\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.6.0\",\n \"changelog\": [\n {\n \"version\": \"1.6.0\",\n \"notes\": \"The on-screen board takes its place in the shared HUD layout, so it no longer overlaps other HUDs, and shows the top 5 on phones, whose screen is a third shorter.\"\n },\n {\n \"version\": \"1.5.0\",\n \"notes\": \"Before the first score the board tells players \\\"No scores yet — be the first!\\\" (or \\\"No times yet\\\" for times) instead of setup instructions, and its text wraps to stay inside the panel. A board placed before this keeps its old text size, where the new line already fits.\"\n },\n {\n \"version\": \"1.4.0\",\n \"notes\": \"The 3D panel's text is readable from its front, and players can no longer walk through the board. A board placed before this keeps its old text position and no collider: delete it and place it again.\"\n },\n {\n \"version\": \"1.3.0\",\n \"notes\": \"Rows show the display name of players in the scene, or a name the row carries; others show a short address.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: a panel that reads the game.state key you name in boardKey and paints its top rows, so the board a Script keeps is the board every player sees and a late joiner gets it from the snapshot.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed panel's Script card now shows the setState line that writes the rows it paints, under its own settings.\"\n },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"Themed screen overlay and automatic persisted best times from Run Progress.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-mcZT0Ub5OZ/KpfDn6OvJ43I7ITFnl+OVGL7Y/IMznJc6cRuUKOu1VWmqVdyN5+hP","size":4523},"board-panel.glb":{"integrity":"sha384-Su82WkaQqG6obG/yGRkHw+WCXQCX/vMngfKyCV/IUH7tpdqz1MS2777hwjPMNdrI","size":1276},"composite.json":{"integrity":"sha384-sFuc9KWyDZpE2r3m+p3lj2YXw/hlALVOoguXm/wf1fSuN9T5pCXAlD7ow/9gOhQk","size":1916},"data.json":{"integrity":"sha384-TC0KbVHrPpPbhd+YP/5rmdZ7DRp6HfhUbpnEOV/8tiv+/ZPF4bRdzAAch2i36XCM","size":2009},"scripts/leaderboard-hud.tsx":{"integrity":"sha384-RKTVTqgYOCXUK/Ztei5exeXq/eeKgLJYoB6i+v9kwAJOiQsWNVJhCL7YOt9bC2kD","size":1789},"scripts/leaderboard.ts":{"integrity":"sha384-dyYY7XmhpYRYuoVvK+Gwn6iWbT7avt03iiNBuKK+5vyZPJpKBKzrv6ZiAolzayaW","size":4011},"scripts/pure/board.ts":{"integrity":"sha384-ks1PrCQkVaxlFeV4JEK7VUtIstr9rmU4dBqQLqN0QThlYOZ1StHQ5Vex+djFVxN9","size":3394},"thumbnail.png":{"integrity":"sha384-PqQ+DIWqDPRtuQIuK4NvtFcicWiCgQ94XqhBZWKGArKe+GEyHpjOdd9cerdgyamu","size":5768}}},{"name":"loveseat","data":"{\n \"id\": \"78050d8f-ee51-4db7-b060-14e7a0b48939\",\n \"name\": \"Loveseat\",\n \"description\": \"A two-seat sofa. Players can sit at either end.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Couch_01.glb":{"integrity":"sha384-Ybann6g/XRgUPIClpvLHX3e6SqETbaQ5vwLxVFADEhbMCc4YY3Jzw/RH6hR9gxSj","size":26236},"composite.json":{"integrity":"sha384-6gJtUvbDA9wZB5J/eUzFxTl2Ior4BViiorJCNokaAIZk/6/qXcg/7S1zGC+NsR6N","size":2005},"data.json":{"integrity":"sha384-uAOd4Pflpvbc2DFGnB3IX/xsDWHwz+RsG7UDDmuMluZHnB1bzIxFhw8+NEzh7T9/","size":872},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-Y12yGhzQFK62sP07Qz6ipUPa++ZBer/QiCMMbpn1qnP/7n6RAJXoaDMYSGSvA4Hh","size":23593}}},{"name":"modern-sofa","data":"{\n \"id\": \"14706421-460b-4161-b06c-8ce7db73ad11\",\n \"name\": \"Modern Sofa\",\n \"description\": \"A low modern sofa, seating three. Players can sit along it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"ModernSofa.glb":{"integrity":"sha384-WT/qnGZedI5qRlBpLTndtxD90++WGbyQPpFeZJTWBDHR3555y88+LN4RG4aXLPA+","size":36796},"composite.json":{"integrity":"sha384-r6g/u0LMvBeUh8W3qMWZJ7H6OqgyqjNsPAL7jX5wOz+kvRwb178v0cD3YGoazd/T","size":2022},"data.json":{"integrity":"sha384-oMvACe5vrge+hMwWAsi9XHAe/OaFSCeWN8djSih9ET+M0j6CHHD5+tDxln/6crnw","size":714},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-+rS3k/5fjWqEHdGpcCs+Lur4gU1mESTaJ+fxHjpRjsKsUMbY1m6BP9G5VNwHtDea","size":16342}}},{"name":"outdoor-chair","data":"{\n \"id\": \"d8cb5c0f-dcf2-4fda-be37-2b76c4c0e78c\",\n \"name\": \"Outdoor Chair\",\n \"description\": \"A weathered outdoor chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_07.glb":{"integrity":"sha384-rh67Oyki0AbHvwI7VAKxG4R6BvIZ+ApNvK3Ub3pjli95VKdib6IEUeCQIS5xRtIy","size":26632},"composite.json":{"integrity":"sha384-SdEMJ9948Cqop6/F49vW9182dpnKhA6sj/sGGfRC5+7NLSOvMk/wmxej4ptvjZwX","size":1419},"data.json":{"integrity":"sha384-erXzZe+COuUtzmtc67RGz02/w4ROQZMqgeU5TAsRJMcF0D1Pjj72jmzpKYJtjULa","size":879},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-MuAlhtUctXmuZuYnp2/jzIowRuJoMj56xdErvUjb1WC8IJKidThtoJXtoDh1Mi2u","size":22220}}},{"name":"run-progress","data":"{\n \"id\": \"8ea22784-81dd-4d60-b0ae-54fef4852fb7\",\n \"name\": \"Run Progress\",\n \"description\": \"Timed runs with per-player checkpoints, collectibles, finish conditions, restart and a configurable HUD.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"course\",\n \"race\",\n \"checkpoint\",\n \"collectible\",\n \"timer\",\n \"hud\",\n \"restart\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.4.0\",\n \"changelog\": [\n {\n \"version\": \"1.4.0\",\n \"notes\": \"The run HUD fits phones: Restart moves from the bottom-right corner (under the jump button) to under the clock, panels stack in the shared HUD layout instead of overlapping other HUDs, the controls hint matches the device, and the completion screen hides the touch controls while it is open.\"\n },\n {\n \"version\": \"1.3.1\",\n \"notes\": \"Hit points show unless Health & Respawn's Health Bar is turned off, so older Health & Respawn copies keep their bar.\"\n },\n {\n \"version\": \"1.3.0\",\n \"notes\": \"A missing spawn marker respawns players on its area's floor, not mid-air, and a checkpoint/marker count mismatch shows as a problem.\"\n },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"HUD setting: Full, one big centred timer, or Hidden for a custom HUD. Health shows only when Health & Respawn turns its bar on.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"A missing spawn marker no longer stops the course: players respawn at the matching area, or at Health & Respawn's point.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Timed course runs with per-player checkpoints, collectible goals, restart, best times, a persisted leaderboard and a themed HUD.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-HEhvBW1B6ev3G9F3NJwBtkHfi3fuVS7ktxQLoQodEYlXnmA989fVh1/1U/RofXWw","size":6114},"composite.json":{"integrity":"sha384-VLC5nKAXOEJSV0e4pJv9kCp49u4nb6+OKeQImT7dYeDYMq3D21bDbiE79oyA4t0q","size":342},"data.json":{"integrity":"sha384-UrkVn6sNFnSOZ117kMO+A1RCAFy0BNX0VqJltOkoUtgeXkf6nnPPWSE3FyKUal4M","size":1751},"scripts/moving-platform.ts":{"integrity":"sha384-+OOc2vW73HOhsJCLElk2hGAcIJHfia3CKJbWkP7mOs0H7iAX3Gh5HYbcLUAZLXWh","size":1035},"scripts/run-progress.tsx":{"integrity":"sha384-qdQ+X5cdmZ4W5aogIDKuOghX0zGNiJkZE1zpq0F7iHUikOjDIX9Pe91Q4ghKjHw2","size":7645},"thumbnail.png":{"integrity":"sha384-6TEe0tNGVqIR8qvFRYv3jBgSHl7T2lZWQe6BuFofv7Lsfmwy2A6/ZHBc/Y1N6C2q","size":28248}}},{"name":"rustic-bench","data":"{\n \"id\": \"d6e264c5-a080-4702-827f-dcad4bfbc77c\",\n \"name\": \"Rustic Bench\",\n \"description\": \"A rough timber bench, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Bench_01.glb":{"integrity":"sha384-HvKGBqFZmpfflUDGmAv6bnKDgdLIRfY2gJbg+AffL+GjBuNBHpMsCpXWxfLXZDlN","size":38296},"PiratesPack_TX.png.png":{"integrity":"sha384-tvHmsChchDas/4FWyTySQozen2k/SnbQEzXKuV6p90FHRLZoH5NQyiDa9EOnNiHi","size":8600},"composite.json":{"integrity":"sha384-gGr5duM8zbC3xcX1ZPdVi5VH9qbExCukBk71DnHbpKDVp3R7BXD5Zi13eDIBoQE6","size":2007},"data.json":{"integrity":"sha384-7yCiT9oSixpR2SmV25CFxXVEFyPzmMI6/CMoXUIZp3vE1Vu0R591Vp6gjJalb/BE","size":886},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-ZmLePG5FIbmqf4RKCdidRKla6XAeP/+r51k4afbck7j8BR0RSwHEIDo7QWOSmmN2","size":11775}}},{"name":"rustic-round-stool","data":"{\n \"id\": \"80f58415-1e99-4ac3-ab21-7e4b93d8c1da\",\n \"name\": \"Rustic Round Stool\",\n \"description\": \"A round wooden stool. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chairwood_01.glb":{"integrity":"sha384-UGMRBagdJnoipOK+RMQftg0R6vXgHD/6jTQJl45SOrw8uCclBWodtVxQj8lAwH97","size":26292},"PiratesPack_TX.png.png":{"integrity":"sha384-tvHmsChchDas/4FWyTySQozen2k/SnbQEzXKuV6p90FHRLZoH5NQyiDa9EOnNiHi","size":8600},"composite.json":{"integrity":"sha384-+vEWwi/GBNSbSKxucA5WevFwKuJvMkgdOzlA0UxB3vlTLjhfNr/db8qB9zLHoSsP","size":1423},"data.json":{"integrity":"sha384-+78WMw5CS6ay5o4yyZQC7P3dtmWW4rzjnd9j1FmyNJoAuHd4E0QeZH1bPJjJzIgZ","size":879},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-N3nz6ZelKTPqOpx5g6JLCNox5W71EwtvihYfFZffMoPDlR/oDSSVk2c44Wt/ABLH","size":13077}}},{"name":"rustic-square-stool","data":"{\n \"id\": \"9bc6d2f4-fb0a-4688-b81b-a4a83636193d\",\n \"name\": \"Rustic Square Stool\",\n \"description\": \"A square wooden stool. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chairwood_02.glb":{"integrity":"sha384-IZcQfO7nBmiElbfMxtEy8WimKIB3WAefGB9cnz1A8oih4z6EuLuRleGbYwNr4DYZ","size":40548},"PiratesPack_TX.png.png":{"integrity":"sha384-tvHmsChchDas/4FWyTySQozen2k/SnbQEzXKuV6p90FHRLZoH5NQyiDa9EOnNiHi","size":8600},"composite.json":{"integrity":"sha384-Xqpw2Y5Vi9LBJsQf7uJIxPgt2ypqG7mIcjiQdnz2pAgbD9KKq88XHN22EW2vctRg","size":1424},"data.json":{"integrity":"sha384-pVW/W1QTcprakc0Yei7HEYqFpBmpDLHrzVANvYbipoPpWPf1rAI6rw4vFI9SUDys","size":881},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-8rf/o+kVZ7qhW/3D8hUzNanZVTfMvUMOB5+Zs85Tvn6EWobBD42Bvkpr2zuTMzbE","size":14789}}},{"name":"server-clock","data":"{\n \"id\": \"9e37c253-b33e-4505-8231-530f62715d21\",\n \"name\": \"Server Clock\",\n \"description\": \"A clock showing NTP-synced server time, identical for every player. Runs on the Multiplayer Server.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"clock\",\n \"time\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.2.0\",\n \"changelog\": [\n {\n \"version\": \"1.2.0\",\n \"notes\": \"The 2D clock takes its place in the shared HUD layout, so it no longer overlaps other HUDs on any screen.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: the Multiplayer Server's NTP-synced time, identical for every player, shown as 3D text at the item or as a 2D overlay on the player's client.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"Shared UI theme and independent clocks when multiple items use the overlay.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-/Awa1V4naWhY7vA66q5GEKJ4Aq7ZLOOx3xL9IKKVk5dKVMtA/MN9nWzHBA5FS5k1","size":3296},"composite.json":{"integrity":"sha384-3endi+ZKs5JfksNFuC3a+KvjsuCSyG9Ee23/mA/DKuwGPqtfLasLie3EiRd2Hqs/","size":907},"data.json":{"integrity":"sha384-6X6uh0Isy56LSYlumS2fWeQ+BL4ubUMofh/Ry7/ZF3hW2HpBdejep7t+o8bKffwt","size":955},"scripts/server-clock.ts":{"integrity":"sha384-TcnM9kQBRxlqHv6fFVkLLZ0JTEkaATZapl2FeZcCV6m0rxqtPN5VpGfzTU4vMA7W","size":2374},"thumbnail.png":{"integrity":"sha384-7vDACZ6Qb0G/LcQXW0w7DfZ/IyyT6NOmez0ZzJYgnwT9YECleSVRAHrXNZrWpVAo","size":8939}}},{"name":"simple-chair","data":"{\n \"id\": \"fe41823d-a0ef-4152-bf66-b9f44cdcffa2\",\n \"name\": \"Simple Chair\",\n \"description\": \"A simple lightweight chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_03.glb":{"integrity":"sha384-Kr1BoWrtvWuVgiTcU0TmlB2hNVHJIOjoEXu27uAvSWezai6Nn+MYq9IkPAPTVjZy","size":10140},"composite.json":{"integrity":"sha384-Ah3wQrl5kn40r1Byv3A0InbOVhRgn9Z3559lyvQCCnFhRdPjR88/pngxS0lOWYlQ","size":1444},"data.json":{"integrity":"sha384-QcAWIr/jmyykog8qMz+2TmM7WCiqgbH6WpQA7iPbyx0cvKJRIvu/FpCOwFoeCy/P","size":879},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-970of2uoK/Vy8uBQAQRDTI5ubtyaXF6NVB+QdweA/VzCaUyVlHTciY2bgnX4bbcs","size":10304}}},{"name":"sit-spot","data":"{\n \"id\": \"49bc2e26-dc56-430b-888e-509d56ae79ed\",\n \"name\": \"Sit Spot\",\n \"description\": \"An invisible seat: drop it on any surface and players can sit exactly there, facing the way it points.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"composite.json":{"integrity":"sha384-uhBFFGia5mFzOQWC/J9UxtsSaldLqPEHiwzfnBYPzokXoME91oNDnBhwjPMNjpNc","size":799},"data.json":{"integrity":"sha384-ZpWPifWI1oc5/I6vlAeNNosb8cmuu5IEKnh/rdh8vdf57V+wnNsuVqAuFYn5aVdG","size":754},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-OrhbCwB59TLqDClVqt8Hrcy+OPXXkctZ1vW7zQTWOSaEWnyNRyne5SBtsVrZKVt2","size":18923}}},{"name":"sit-spot-edge","data":"{\n \"id\": \"6c815b58-d13f-4d30-a7ea-0f275d740084\",\n \"name\": \"Edge Sit Spot\",\n \"description\": \"An invisible seat for ledges and edges — the player sits with their legs hanging over the side.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\",\n \"edge\",\n \"ledge\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"composite.json":{"integrity":"sha384-us527Hlk6/JM3bpEqqwHclf7+Xu8hXGrtrhZJ1w/atuO4025ZqJO80d0Ov4XIXnq","size":764},"data.json":{"integrity":"sha384-CH6sS8qFyE2hi/eP5h6IP+XIhtaTkrANQsfRDKzipE1+a3/anhHvfoXa66xmW6g3","size":779},"emotes/Sit_Edge1_emote.glb":{"integrity":"sha384-8oYD8S4HilS8mFsgOj5lRbBWoq3rmF7ETStGkvefUODtwN+lo5gxdKY/F80aqLIj","size":99400},"emotes/Sit_Edge2_emote.glb":{"integrity":"sha384-bS47w9rNkTXOUXmHoSOTkM8g+3AcRbSRLwGblftdTa2Hr0avdubdOdiC2D5bkM2E","size":89300},"scripts/seat.ts":{"integrity":"sha384-XonZTJcIqIC//h6SCTzpxOTs+MfpK2IHjkDTg1t+XmUUSZ7777snXkZeRzpahO7Q","size":7017},"thumbnail.png":{"integrity":"sha384-OrhbCwB59TLqDClVqt8Hrcy+OPXXkctZ1vW7zQTWOSaEWnyNRyne5SBtsVrZKVt2","size":18923}}},{"name":"small-couch","data":"{\n \"id\": \"acca7441-52c9-4b80-83fb-af18bcbf4c7e\",\n \"name\": \"Small Couch\",\n \"description\": \"A compact couch, seating two. Players can sit at either end.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"TwoSeater_Couch.glb":{"integrity":"sha384-3aFVc1VRYCZMbuV54qKD37CG/Gyy8g4KkdPSjqqbmNMVELB8RVdCVn4bhaaJeTIA","size":35116},"composite.json":{"integrity":"sha384-4SsVtae9U3jtnd8ws0MFI6eEqXQA+K9d0YanHazJzExwBdh4yL/10B6oDCa5m9OE","size":2006},"data.json":{"integrity":"sha384-u6WCss6xFK0tfHpKnL40yNXkaJg1VNGwvL6RdTYzaSWbFZGSOUHJh0fK6CZhN4Io","size":715},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-Vo9jNKeVjbITSNCMK5+1FvD6QgI6prs0AZptiMN1LybCqlnhS3syD/yd7o6Dhos9","size":15304}}},{"name":"spawner","data":"{\n \"id\": \"fc759fc0-57a1-461c-aa06-22c0d3d4c3e0\",\n \"name\": \"Spawner\",\n \"description\": \"Makes copies of a prefab appear while playing — on a click, when a player walks in, on a timer, or when another script asks. Copies appear at the Spawner's own spot, only on this player's client.\",\n \"category\": \"custom\",\n \"tags\": [\n \"spawner\",\n \"spawn\",\n \"pickup\",\n \"enemy\"\n ],\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: copies of a prefab appear while playing — on a click, when a player walks in, on a timer, or when another Script asks — made on that player's own client, with a per-spot cap, a lifetime and scatter.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-z0Sma23V3knVRWNDZMCDl+EKMeObpA2NxJzO543HDEWXdjM8rq2BUvW8ivVC3s2r","size":5423},"composite.json":{"integrity":"sha384-11bTytc5FvYc2S+noZUzFBRPTTCZ+JK3gMOGtS1vg57/Aqv0jIG+H6StFjCHbr+o","size":1383},"data.json":{"integrity":"sha384-te+nomjlQGpKcP1TUxjeJBvcNMY2e/q67l6VHqU0B81p9tCWgjz8qTps7gUZ2kdf","size":747},"scripts/spawner.ts":{"integrity":"sha384-2BCX+ZtBU07fyYb1gxapwzivM8DRe8i4CetRZgpVN8N5ta0vlxxFEDdfHUmEYOkJ","size":16034},"thumbnail.png":{"integrity":"sha384-4nU0PNVHtK4o6zj4kZ7zbNlQzczBQKUQPC3F8ZPrcP7BWYbExlEs3VlFajqKPwZG","size":6786}}},{"name":"steampunk-bench","data":"{\n \"id\": \"8a80b964-1f4d-4ea3-8f6b-078809891a17\",\n \"name\": \"Steampunk Bench\",\n \"description\": \"A riveted steampunk bench, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Steampunk Bench.glb":{"integrity":"sha384-l8rvgt9Z8JKpRwRI3rxw9qoH/vx1v7HvwxJoQWJi/xQ2v3+HIFzUE3SEMakC13lj","size":159244},"composite.json":{"integrity":"sha384-qT/zOtPEwpaAhxx6YNaSnoFHWNCzk9cluTzkbWVOT1ASokLY9hfUd+lhKDF6w/np","size":2019},"data.json":{"integrity":"sha384-ywBxOVAXX1Eo07MEC1qn5iwpz4Wxa0Sf9JHs8cYCOa0JL8D5/M0pRS/k2RuNCzD0","size":721},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-NNFHgxb81gJ0y4Z1APmww5ZHZz4My+jv53ogLyEKS+qjno5TAMnoSE4PFSELuGsR","size":16622}}},{"name":"steampunk-chair","data":"{\n \"id\": \"0cdcf518-9bb8-454e-9b18-a851b2a0b1df\",\n \"name\": \"Steampunk Chair\",\n \"description\": \"A brass-and-leather steampunk chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Steampunk Chair.glb":{"integrity":"sha384-jx1WnrmD7GigwvCDb4X6HDhs3Q4rc7J10DlakX2I31xP/64hO8E76U6nCARYu1D/","size":137292},"composite.json":{"integrity":"sha384-C9XF/cSfbX7UfnePwSOg2BrpL9m3nB5WyQRJkINrSOsmV+JoEcEAEv/2bl7pl9Kd","size":1420},"data.json":{"integrity":"sha384-qoBLKLZCSylATy78bslEs1GaUl+YjZPvDh4GBtS4cAkM5JzvXbQMX2QxWjOapOAU","size":718},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-tAJBIbkGkYJOtHKoWzPwIUmcjypRoYnqLu5S7mLiuQ5KUiHKZ493plJyalIZ5aYH","size":22358}}},{"name":"tall-stool","data":"{\n \"id\": \"f83a91fb-b939-4251-a298-d334c3e48996\",\n \"name\": \"Tall Stool\",\n \"description\": \"A tall stool with a footrest. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Stool_D.glb":{"integrity":"sha384-H8ztvhYutHrOV6dbXUfUSODKyMLIy/P5eEntuQxEe2zEHwMLnlQVfvqFRhWMtA+h","size":320312},"composite.json":{"integrity":"sha384-RnEdGr2iP41goFt9Gmfi5bYDprFCHPslIt+zDWXP25ohLUd8p2RO8Q6Q3fEm91w5","size":1412},"data.json":{"integrity":"sha384-C8mP3L8l99WT0GJixLoSzlekZHxR+orHexOZdET85GqVMSpbbRLCqQ6KRn9r8mjR","size":706},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-/VHtkn6ezh/nPA9bGkGF7eNlD7G/e+32phC0qmZ0/LSbEtn+jo5mWb+1RfzomHQW","size":11715}}},{"name":"trigger-zone","data":"{\n \"id\": \"f1794ec8-ed62-42c8-a71b-6c52e04b161a\",\n \"name\": \"Trigger Area\",\n \"slug\": \"trigger_zone\",\n \"description\": \"An invisible area that knows who is standing in it. Name it, scale it with the gizmo, then have a script react to that name.\",\n \"category\": \"custom\",\n \"tags\": [\n \"trigger\",\n \"area\",\n \"interactivity\"\n ],\n \"drivenBy\": {\n \"rule\": \"The area only publishes who is standing in it — a Script reacts to its name through './runtime/zoneBus', on this item or on any other entity in the scene.\",\n \"code\": \"onZone('Front Door', 'enter', (event) => { /* what happens */ })\",\n \"next\": \"Use the Add a reaction button below and the new Script arrives already listening to this area.\"\n },\n \"version\": \"1.1.1\",\n \"changelog\": [\n { \"version\": \"1.1.1\", \"notes\": \"Guide covers model bounds, active parcels and course prefab integration.\" },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: an invisible named area that publishes who is standing in it, so a Script anywhere in the scene reacts to it by name with nothing wired.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed area's Script card now shows the onZone line a Script reacts with, under its area settings.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-D++yhIulqWPCrKizIyGTqDJF2ZxBv5GUgm9n8tbZKFO2xiwWUs8H5jMl49jSr+GK","size":6096},"composite.json":{"integrity":"sha384-VWkNF79zDduwdioBw5OubcoLdmnXzzZq6GXkq3u3k5qwD4JDktJw+wiLhI3Hzto+","size":917},"data.json":{"integrity":"sha384-r3pReo7kADyb6lmgav6cxgC2hwAVQoEGbLaINBkvAgkObtAk517Tf/GGZPI9Ocov","size":1286},"scripts/trigger-zone.ts":{"integrity":"sha384-57lvbBOHUXnIGndfQD1G9oRA9gVOpLg7JWwSAV9LJzeD6xGyTKCPhuLai3nhXE9R","size":3837},"thumbnail.png":{"integrity":"sha384-4htEAGokLp2yZKaMa5PZanI+3zqPe3TnLcXpmfyJjfnXhYmij+KVgZ51pXdeTnXN","size":4283}}},{"name":"ui-theme","data":"{\n \"id\": \"41939776-72b2-45f1-b40a-097fa66c9790\",\n \"name\": \"UI Theme\",\n \"description\": \"One accent color and appearance for game HUDs, timers, leaderboards, buttons, results and announcements.\",\n \"category\": \"custom\",\n \"group\": \"Scene UI\",\n \"tags\": [\n \"ui\",\n \"theme\",\n \"color\",\n \"hud\",\n \"design\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"Custom HUDs are placed through the shared HUD layout, which keeps them clear of the phone touch controls and of each other.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"One accent color and dark or light appearance shared by the scene's game HUDs, buttons, timers, leaderboards and results.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-nxOv4VlTrgwQXS1doZ8l2Ka0Lf+49wlK5fZe6IeN6ym0d49eVorEF0pkP+mW0zup","size":2263},"composite.json":{"integrity":"sha384-GLLTfiifHN/3BNFuV3tozHl5PqIr2Sw/1lsM/jQQ8BcUY8FIt6gPCUgxcloJaxsW","size":551},"data.json":{"integrity":"sha384-gPrFuwJDKwYj8TGgJIkhTtOc+M6nawLruchbna5wTiCJ+3yXQQ3HlLyc/Ck0xpB8","size":766},"scripts/ui-theme.ts":{"integrity":"sha384-InUblgjcHMPeDZ/IKir/gTVfws6YE4FkR/SUd0AA285wV7rJUfEorIxCetjIiXNj","size":420},"thumbnail.png":{"integrity":"sha384-Q+XsR3csSrtPv1vWF2KsovKOoh15mPBgVsBKlMdNnjJSOJi4JhhkrPZEBpjdzjRR","size":5983}}},{"name":"video-screen","data":"{\n \"id\": \"37188734-4562-4f21-afeb-2752c39278f4\",\n \"name\": \"Video Screen\",\n \"description\": \"A flat screen that plays a video file or a live stream, with volume and playback controls.\",\n \"category\": \"custom\",\n \"tags\": [\n \"video\",\n \"screen\",\n \"stream\"\n ],\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"composite.json":{"integrity":"sha384-PNwL0kv1USZnEFOSnC3oF6kLaG3Hy0S5VGGvk16R+dkdkIidEPn40/SpRI4Eipsm","size":2536},"data.json":{"integrity":"sha384-CWXT5tqC3clzqs6wTwRMXrxBBT8PdHaNRpa4H4SFhZBVw4GfOe9/vmdjzk58KTaK","size":427},"thumbnail.png":{"integrity":"sha384-OQnhEX0GsIogArcrXaPYIo5bRqaYsK7V6GnniDUiiHDPOmojTFQKbcopVX8poMbd","size":3919},"video_player.glb":{"integrity":"sha384-Su82WkaQqG6obG/yGRkHw+WCXQCX/vMngfKyCV/IUH7tpdqz1MS2777hwjPMNdrI","size":1276}}},{"name":"wooden-chair","data":"{\n \"id\": \"c0f3a3f1-7fad-47bf-a855-e27f41f7894f\",\n \"name\": \"Wooden Chair\",\n \"description\": \"A plain wooden chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair 1.glb":{"integrity":"sha384-OBKh/Bj43q8Sx1wRponwlbgpevgaWMUiN0giUov/12Oi6zrbOTERiktleBfycvzW","size":34444},"composite.json":{"integrity":"sha384-Bl50OjO++oWtYNycDeONS6QDpxb6NUTuEcNYezYybT6QL2mKs1e+Ar7bZi9C8vQ7","size":1411},"data.json":{"integrity":"sha384-5LcT4SUEiXzUl7Fm686bC0qwplC+5wqCoijTQxWYqrKqiayYS6IBeCF8cfvayJS9","size":700},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-85oGX4HxIuc6wLmDYZYFS2Et0rxNcuex0sgvRhWn/hG3xXfMjbhWHOq16rkU629x","size":18385}}},{"name":"wooden-chair-armrests","data":"{\n \"id\": \"ebd62f4c-fa46-489f-bf8e-104aafc10b0f\",\n \"name\": \"Wooden Chair Armrests\",\n \"description\": \"A wooden chair with armrests. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair 3.glb":{"integrity":"sha384-qC94v3lBqcsvDYKbxOFSBG9sXvO2WlwJ4CZlUVUKmTvKvsn94KetxdVRfO/8VJ9Z","size":40316},"composite.json":{"integrity":"sha384-8c+9B2WZVYU90TjDED4IskWU7oRBdYvk29okBEMaheh/V6vRP82wbUlM2syOB48g","size":1426},"data.json":{"integrity":"sha384-olI3fBaKG8LfISwoMdmldQE4DxzqD2THTl9YwQlF85f4L7M+FU/6uPTx1i/vs+C0","size":717},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-g1sgPvNl8JeOjulBezQcWzMoT1bkFgk/dNp9BfPv1SEQWa8dABvHvh4IDDnrKnlG","size":16240}}}]
|
|
1
|
+
[{"name":"admin-tools","data":"{\n \"id\": \"14f55d0a-1691-439c-9017-8903afcce3e3\",\n \"name\": \"Admin Tools\",\n \"description\": \"In-world admin panel: moderate players, post announcements and control video screens. Only admins you list can open it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"admin\",\n \"moderation\",\n \"video\",\n \"announcements\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The panel stays inside the area the explorer leaves free of its own controls, and the full-screen layer no longer blocks clicks.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: an in-world panel only the admins you list can open — moderate players, post announcements and control the scene's video screens.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"USE_FETCH\",\n \"USE_WEB3_API\",\n \"USE_WEBSOCKET\",\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\"\n ]\n}\n","files":{"composite.json":{"integrity":"sha384-WYmVW/WiIQ9MIezdTLx0l9KALl8G6IYSnZplhupYGyuk9QOW7GXVM1GBJanG96OX","size":1886},"data.json":{"integrity":"sha384-OTrnY78c8LfxaEXN6NeJIfNscBPi6142qRQp9P9m/+GbCvKw86x/J0faFwW7ERTn","size":927},"icons/admin-panel-control-button.png":{"integrity":"sha384-gs8sS7NlWDosiswd38dlTSRMIxSmPy4uuMH9/Z0G8gWpvKerKgcp3ui7Nme/wbci","size":2217},"icons/admin-panel-moderation-control-button.png":{"integrity":"sha384-mBy3ESO3Mq875LIiSGzFVnD9iLmf9DWMqjEBRnZnT/vmQTy4cendMAM0Pw3iw4I5","size":1631},"icons/admin-panel-rewards-control-button.png":{"integrity":"sha384-lbA1p3+WUiCqMyLQZCtb/GY7G+XGMXvpmsvv6DJWVIV2F4K5G47BJGdJDcuOk9pj","size":1796},"icons/admin-panel-smart-item-control-button.png":{"integrity":"sha384-4dx0rzzVKfDcfpUwMvngJ9THOAclyEDKbUwtTo826cRQOvFez6s78DipQSJt9WMY","size":846},"icons/admin-panel-text-announcement-control-button.png":{"integrity":"sha384-Tp9W3GXQPvd9OwANHFYrfekQpNHdFzcAdRgK0KedviMH4GtXirlh1xNDZivpN7Ii","size":522},"icons/admin-panel-video-control-button.png":{"integrity":"sha384-GR1IO0b/6EbWm9nZwfSm0c6JOfNgxGMC9JmF4+dcI2E47tz5ayJ75fKIn5EdIiZn","size":726},"icons/admin-tool-background.png":{"integrity":"sha384-I87kdzFsmxJLWQNdkQAJK7ech9hyy/I5eA/LbF8+O8R+mQF/+PHTOjGoEgqnDD+M","size":792},"icons/announcements/text-announcement-chat-message.png":{"integrity":"sha384-Wamzz2shgywHVGOsvtruJrW6pEJ8BA4wLopI9m6Aj3QfLpS6+JIhVd/gQW1BeHQz","size":14307},"icons/announcements/text-announcement-check.png":{"integrity":"sha384-ocqK42WSlHJF+8PKK8yUlxlgLaq98LHnmrksUDGjZY/griiuV0QTW4LjC9N5ibj7","size":283},"icons/announcements/text-announcement-close-button.png":{"integrity":"sha384-2/dJo7RNlVSyWFmyM8PI7k2Mn7NbpTrhugMCn4b6+doaqJa83i6V1q0Lft19vMj6","size":1148},"icons/moderation-control-icon.png":{"integrity":"sha384-7A2sHB+ce6HTmfiULIsEQp/N+UZdf3tivJui0rNjghcCka7n7eSfWgl4fjvz4Cgn","size":1312},"icons/moderation/admin-panel-verified-user.png":{"integrity":"sha384-vNcq6YpNNQ7lFotU8SaOCKBhil8PLzDWsblH357op7HxAA2/M6Rg0Vj/HQzpnbZI","size":1213},"icons/moderation/ban.png":{"integrity":"sha384-cmN14nYErcvzkNCovoKGXocGHo7KGrn6R+k91cdCG/wIXtvr3RNim70WTj7rNBeN","size":470},"icons/moderation/chevron-back.png":{"integrity":"sha384-mqnl54KA63yVGjEnCmpO4OP5d0P1Yn6mKr+vBskc0k6X195fA2sby0tLRf1U/rh+","size":3165},"icons/moderation/chevron-forward.png":{"integrity":"sha384-rLe+qxxpQqYMMynmmpvQtFf7721X2H/dqLeqpe3O/PQ3GoUBU9gPU2+VrLoXbFxm","size":3171},"icons/moderation/close.png":{"integrity":"sha384-3MgIzHRKOzSovLyjR7BqmW+CDECeCtQP+qgwJYp7DyG6UncrCp69WwDmQFrAPAab","size":3851},"icons/moderation/error.png":{"integrity":"sha384-UaTdOECxl6EaoYfijFAVBut8YPdUyMQLeRibiNc1Zgl7icEN2xEXrar8IGahlkb8","size":798},"icons/moderation/person-outline.png":{"integrity":"sha384-SpgAMD/+hqIDVz9fx+47lsGoP5R04k76Ld7Vsjt/avZBqVRhfq9+1i/2cXKLYgm+","size":1085},"icons/rewards-control.png":{"integrity":"sha384-o16Vo2/34yoPpO5eaLkz2PsbfOsN6d0OKKCAiYai4QfHN3cSi6WAUJ2BNDsYcrYu","size":785},"icons/rewards/close.png":{"integrity":"sha384-3MgIzHRKOzSovLyjR7BqmW+CDECeCtQP+qgwJYp7DyG6UncrCp69WwDmQFrAPAab","size":3851},"icons/rewards/send.png":{"integrity":"sha384-S33P3X184uAhwTQAeuj9xsMUNXbZ+u/NQTEfFGBA7T0U+AJgGEf7fF++U43aoT1p","size":500},"icons/smart-item-control.png":{"integrity":"sha384-ifsViL2s+VFP4zoJYSRnK3YbSC/CHaJip0TZ+t21bWNVl70IbI1HKlCfdeW2UDSg","size":496},"icons/text-announcement-control.png":{"integrity":"sha384-7URWvpEp3gmP6yJ2hO0TRwMoGwneSaTftS0G8oJJkxEDfLuAFC0v3e5svRbe06s3","size":454},"icons/video-control.png":{"integrity":"sha384-08i8/ot11Lq7VQmc0m2GEqXsE7SydKZBg3zgTAlFEWUFw17F9+agTncc8jPekmSl","size":643},"icons/video/chevron-down.png":{"integrity":"sha384-OcKDCPWWVFuK9NILpIRUhFTh39zgaew6mFlyV7T40mJrBJXr2Q1p4/xABVEplRnf","size":343},"icons/video/chevron-up.png":{"integrity":"sha384-yX6sXRFGFknZtfhtuXNUJr3lc0DgnN8K3y2gPoHbowu9bbkdme0TxDU4/UQh9hfQ","size":346},"icons/video/copy-to-clipboard.png":{"integrity":"sha384-eyjGkM9EtomLolYvPV/xK39hFFazZIwtzd/XF34srRydJTSp2bxS3UafHk+/cP7D","size":304},"icons/video/error.png":{"integrity":"sha384-UaTdOECxl6EaoYfijFAVBut8YPdUyMQLeRibiNc1Zgl7icEN2xEXrar8IGahlkb8","size":798},"icons/video/eye-off.png":{"integrity":"sha384-xQXGDg/WIuy/UdZlYzBuwUY/d1Qp0wfSiavWmAbe5Jzs2+x2O2+qzc+wQyvpY5eS","size":9468},"icons/video/eye.png":{"integrity":"sha384-wwXqHg8tIOK/X1H/xf+6d3GWRtObvrgE553mA8H0RX05t+LFegaRQ+oekZNhfzUb","size":9696},"icons/video/help.png":{"integrity":"sha384-wur+rnzxUR5aoo/HZGtbcRtH46TTEe51XrORkzXpI6GJEzgxe26v1wB4dqUMl6rY","size":6353},"icons/video/info.png":{"integrity":"sha384-2VAiLc08J0wHLo6rbMq0dryIHmXyIwxmz+QLGvOy4CA/FoVwUw7QcxKkJdWy389l","size":37460},"icons/video/person-outline.png":{"integrity":"sha384-SpgAMD/+hqIDVz9fx+47lsGoP5R04k76Ld7Vsjt/avZBqVRhfq9+1i/2cXKLYgm+","size":1085},"icons/video/star.png":{"integrity":"sha384-9GFGGyegeJD8W7mQETsKMaajbcVwTftNidPsCZ4ZdguEqe4e7ApgMaWbbQK3Wq5q","size":612},"icons/video/video-control-dcl-cast.png":{"integrity":"sha384-jfetm7VqkoaYFM60cRDbHYFUKV9PFYdoSJoJJjnlmUMcHXJaXMdqf8CEsfTbfiW0","size":3958},"icons/video/video-control-live.png":{"integrity":"sha384-zKG2r2mRC2+KaBSuCOr8GXCooPlhdS0DM/bhkKuJcZESHLGHUmIKqKCSpBQrTtAB","size":12998},"icons/video/video-control-loop.png":{"integrity":"sha384-PmW7BM5QYFSdD7yWHRAM2ENhpXqabDVBMBraqbQZQX+FSgtzQkM+5sxOvzdnploj","size":8685},"icons/video/video-control-mute.png":{"integrity":"sha384-UNYvZ+/8Gxof8muaqCDw/PIz7H3tLC3j5WyD3vBQvf5JBnQEd0QCIlr+T24HlYPW","size":5752},"icons/video/video-control-pause-button.png":{"integrity":"sha384-cvfT4+N9agDRnU6Ow9wT+Ronr/RJx1c2CAaAt4t3xHPQLvWOJNnPlfXW/O0hyYus","size":5267},"icons/video/video-control-play-button.png":{"integrity":"sha384-CAvkQGDWHS1tYlEA/z33gKf9mvIXPAsISRbl3pdzT52NN6eF/woOQJ+ihnflI7pd","size":402},"icons/video/video-control-video-icon.png":{"integrity":"sha384-yKtdqQ/8ARbNu6EXx2DO479v9R89Qf/gkYmwT9Srj6Olr2qZom3S/TAhJSmR3Ufu","size":667},"icons/video/video-control-volume-minus-button.png":{"integrity":"sha384-P2EM6fgmDXOFDFdfWKYbfUS3/j1pIXgYe6SYkvxhOkLcVNkvDc5rM/P60COE64QP","size":188},"icons/video/video-control-volume-plus-button.png":{"integrity":"sha384-lBnQMGgUEbRTddesn4aY7SxDQ07mz3UKlB9hcwwbfJ1sO215UNs1cXIuIeGfJ4we","size":267},"scripts/actions.ts":{"integrity":"sha384-hE/4GuMatbDddD196YnJeLlpA57vKLHYTS5eRqrChRbpKSWYlfD+d69W4AWD7K52","size":7017},"scripts/admin.tsx":{"integrity":"sha384-Ej24LfV0mpU0RNLnAlt1nWWrDhrbpVFQQUu6gnPt4EO1k0IlvKz3cAfdA6vHzHfM","size":7868},"scripts/api.ts":{"integrity":"sha384-dhPp6JRdztKLmBTidsgYNe69Y/ZEFwDc73blrCgLgRtkgq6kByvEusNYrpKR8gCf","size":4464},"scripts/components.ts":{"integrity":"sha384-OvrIEnNGEwWpatTyqapsXXniSDfxjgtBFx0Zb8J/yGxaEl9JGg9j+e1JTcKywqu8","size":5953},"scripts/icons.ts":{"integrity":"sha384-W7so7VfFuLEVUMJGNxWA2kNXw5LPKL0D4ZkB+WU0pBp6fkM6NHwYDZHRaS3S4Gji","size":2306},"scripts/message-bus.ts":{"integrity":"sha384-BxGE3lQmg0OUPQpVtv7zQxnFG1AphUU2RpRcT0CaiIBduAZ+hpExXvd9gSj0dDkp","size":10293},"scripts/state.ts":{"integrity":"sha384-vNTXekH1jMcqiMauLtz6bZ2Yy5v8qwO66Jf0h6q+LIfGEhKVQsYPIgN/9i55bFlq","size":2000},"scripts/tabs/Moderation.tsx":{"integrity":"sha384-UsU9Wai6aff/kpLGiXtZAyHSEurtjb+B/umwgPRkYLmnqtQ2iSyeHrV2NKXg+Mlc","size":4717},"scripts/tabs/Rewards.tsx":{"integrity":"sha384-bKzO+bKEXJSdq3cDap8pn4KiCgm1gzqmf3Ei4ydcIrXCZA2KHmK7MeyGtQaOnlYP","size":4845},"scripts/tabs/SmartItemActions.tsx":{"integrity":"sha384-2EBxPB8FoidC82/EJIbfdj0WLZY9EM8DKIMfY6WcNkIJNazziDoT0c9TWLDQSgUu","size":6393},"scripts/tabs/TextAnnouncements.tsx":{"integrity":"sha384-auE1OM8qu77Mf+NJ0Q9phmWHoa/8hAELiRNzk0iMzh9p9P++K17e2r6n4wRu8V4q","size":6297},"scripts/tabs/VideoControl.tsx":{"integrity":"sha384-kb3f5pujq+a7c32PQSwUEOEPRfdjabLpJXnYsDCzDOepMmSPpIRpQ5ZEkbCDRajd","size":5199},"scripts/tabs/announcements/Overlay.tsx":{"integrity":"sha384-gwqwL5sPpKVyrX5zvXFl+spo+hOQuZ5Ao5HtwlcqNNjAszJtbZQZkRGoIeS91yQr","size":2933},"scripts/tabs/announcements/icons.ts":{"integrity":"sha384-ITtseCBy5n3WQxScQG0Y6LxNaD/L8CTPmI/lboI4QTMunXwHpmFmkW4SKHOgUnBn","size":455},"scripts/tabs/announcements/state.ts":{"integrity":"sha384-H8QR1U5I52xzN8kBd0JoMNmVPDXk+9h+G4Ophfhb413JPQgGUqva1XR1BC/ck8AN","size":2351},"scripts/tabs/announcements/ui.tsx":{"integrity":"sha384-PuNRzeUXeOVMuBO/sXnBrGEaB8n3qPofhnJOtC5FXz6EfnQ1T9wS63XPRa23GKRU","size":1072},"scripts/tabs/moderation/AddUserInput.tsx":{"integrity":"sha384-RiyCa08HtzCBd3VEe+tP6ntPOzHyb1F98RhXqkAwBKB14OT9puqedXekff7aGs37","size":5617},"scripts/tabs/moderation/RemoveAdminConfirmation.tsx":{"integrity":"sha384-tT43wHl1ywHy7tmio8nqzeZdr8kymxwHUfaPHoVc62u7ODx9GCygB4pu8jtHPRiX","size":2803},"scripts/tabs/moderation/UsersList.tsx":{"integrity":"sha384-0Wa4fy2crAQe39qgwbwdBwQSFswNGCrELHxCFZ1jBmxgh4R1HYKKDrFpAwtoq87/","size":7191},"scripts/tabs/moderation/api.ts":{"integrity":"sha384-Q/qkDk6GC53eutQvYwf4Lmyy3fPEH84nj1c+7JZDYEt0xrmGHgYPcXcfju2bWNii","size":1322},"scripts/tabs/moderation/icons.ts":{"integrity":"sha384-QqvX+zxVEVZojv5uHj0yl9aaSO3dPX8g7bvAizI7+jmUfT7Y919Bu6m1lbM33FYC","size":706},"scripts/tabs/moderation/kick.ts":{"integrity":"sha384-Rgr5yEmwEtTgZQirGmAOjGlJ2S9eBk35RwCgLTnkfvIQL4Q+ueU77sJ1nkeyPjfL","size":3965},"scripts/tabs/moderation/state.ts":{"integrity":"sha384-xvW2sWrMBcIr395zhA4Z/CJmvRzdtUJYIwJj4jBO0BcqYtaokEtRInseFPyfWU5A","size":1950},"scripts/tabs/moderation/ui.tsx":{"integrity":"sha384-s/X9vWTUhAfIZbzFtFwAJsjBjtBx7WcNpYOV1X5a2aruCkBB9zGqsRGF+k8ieVfW","size":5207},"scripts/tabs/moderation/utils.ts":{"integrity":"sha384-TAcs4ANF4RdzECa13ol7kWSKBtNZZZ5n+IydZlt9vl0FqZhnaw+MiBD2Q8gtacsU","size":3184},"scripts/tabs/rewards/Button.tsx":{"integrity":"sha384-Z66D7boMToX9iMvJr2cCAvA6EuxSPNKAMnIMeyry+xnokDOenJrmDaVBqX2pN6gt","size":1539},"scripts/tabs/rewards/Captcha.tsx":{"integrity":"sha384-H89W2CtQmpxF4LU6hLh409aHbadDb/Ukv5oRVc65e6kI+C7ixvCXPDtBjlerFnyo","size":2490},"scripts/tabs/rewards/api.ts":{"integrity":"sha384-T42JhF83QZuzIB06HAa09Bclq/qUwRvP/FwxhhAaVjuH7Ml0ehmiHgZDRYj95H5S","size":4796},"scripts/tabs/rewards/claim.ts":{"integrity":"sha384-pRPeSNGiGx9wb4+v35haHCGfWX+CBiMLu/1iVLitZ6pNhTzvBu24CisrFWmycQqM","size":3656},"scripts/tabs/rewards/controller.ts":{"integrity":"sha384-JPs8MvAVa6pGrdKlvoFr0H1P3FoQMIuiwwGcZMvkHC8kVVq4saX0x5T4RCIH35Rq","size":3368},"scripts/tabs/rewards/icons.ts":{"integrity":"sha384-S/7TaZ0mzvxhZJnxzt2ilqYAINoHo81Wh2vLRELZpmS/jQuL6KGBG9Tmw+COF1pb","size":275},"scripts/tabs/rewards/state.ts":{"integrity":"sha384-4PsbphYBjuf6o9Dnz8h6Iyp+s1LQrV1PYhteV0zpHz3nQFo8mZf8gRbphB+fpEdT","size":840},"scripts/tabs/smart-items/selection.ts":{"integrity":"sha384-lxSzgZrpbsomjarF9K1UhsfX1QuiPmeqMPY3jUBOG2/CU9i9ZCXrRPAexlhOaNiv","size":3331},"scripts/tabs/video/DclCast.tsx":{"integrity":"sha384-Rz/xL437EcTxwNCYvjbuHuw3klhBGL6N/Pb0hc6Vu+gjJVrLKnqRIo9hTEzeqWs6","size":8072},"scripts/tabs/video/LiveStream.tsx":{"integrity":"sha384-xJfNS7uAkczd6Mv7jI6kfVhA4cJQfbzUXZB+POKe7scklnpJJttNimcHHfl2sh5P","size":9886},"scripts/tabs/video/SpeakerShowcase.tsx":{"integrity":"sha384-5fEeVnMIEMYTQHztNlyULWEts6h/Zgv3kH5+/iQy9uIh5eNe1iqVtwArKrM0RuAP","size":3802},"scripts/tabs/video/VideoUrl.tsx":{"integrity":"sha384-pEnlEeG6qstYzljbAkeeFfQZilijueSfKmZFUPOzDC8I6K0ETrlf45hbbMX8V0fr","size":3426},"scripts/tabs/video/Volume.tsx":{"integrity":"sha384-q4odOzbD+Mx5BzotjtIx8+GQMGX9Ysy657573+S/bts+yrr1w0bMN91NtKzNc7Vf","size":2133},"scripts/tabs/video/api.ts":{"integrity":"sha384-UDwFd8lR+diOPOejRUq8Bk/DHs1OQN9nb7jNE2Nv+1KUm4JwUxu4b7LMExuWDSuJ","size":5673},"scripts/tabs/video/controls.ts":{"integrity":"sha384-8NTX/Mu0Ps34x4kxL2gwmJrbxyUVxYwT0pH5ig22+FGJU6UqHKIV2MyPZbJyBEWM","size":3886},"scripts/tabs/video/icons.ts":{"integrity":"sha384-3/0EHH0ZB0R4gcxXUlHvWFqKEoHx0WJyl7ZWh3sAGpIYGcJFT4OtqzeUkA0gRa4X","size":1662},"scripts/tabs/video/speakers.ts":{"integrity":"sha384-6YGpbWXwW6pSBAHC8o9P2Lu0P6IbhsRseHAgDG2eHWUCFd4wAXhdR6l/FYM7wrL4","size":1105},"scripts/tabs/video/state.ts":{"integrity":"sha384-yPWXz+LaGfDLrbO6xuEAe6whwGGtahVvvpOJmQsLGc+P4qopgoD9FSA9+xOxZP8I","size":2256},"scripts/tabs/video/ui.tsx":{"integrity":"sha384-ANXvEZ75Ur0nZyxxaHFOdr+NBGx3zD25r3s8M8dVb6osakUGjBKhRUEEWKo6JmpV","size":7076},"scripts/types.ts":{"integrity":"sha384-/ieszyQ/vz9IKpyeCLEw7Gae+8EWZVQMkcWmKWn6roV3KkEj34zY8n87R5w9HxIY","size":1902},"scripts/ui.tsx":{"integrity":"sha384-fUQUBEHzEB8SO6Mhl3Trm9vfgCogyEIoOiVmP+eVnE1qI/HK6lqOFsLcNZNe/Lqy","size":3216},"thumbnail.png":{"integrity":"sha384-sh8ip9U6LNItjm30RSrxl83x7aYdlbROEDnI49S5x+uj3rpx7ohWSFgVi3jXpv+4","size":11615}}},{"name":"announcer","data":"{\n \"id\": \"fb41d8d1-b842-437d-a830-f38379e74743\",\n \"name\": \"Announcer\",\n \"description\": \"Show a themed message when a player enters or leaves a chosen Trigger Area, or receive announcements from Game Flow.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"announce\",\n \"message\",\n \"toast\",\n \"ui\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.3.0\",\n \"changelog\": [\n {\n \"version\": \"1.3.0\",\n \"notes\": \"Announcements take their place in the shared HUD layout at the bottom centre, narrow enough to stay clear of the phone touch buttons and of other HUDs.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: server code anywhere in the scene calls game.broadcast('announce', { text }) and every player's client shows the line for a few seconds.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed item's Script card now shows the broadcast line that makes it speak, under its hold seconds and font size.\"\n },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"Shared theme and a Trigger Area picker for local messages without writing code.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-D3Cv9CWg7ofWd+5NtZB9U0GLWnX/7Mbx2KN4QumC6l0qNu9t/6EXIVVuVJcY/7NS","size":3331},"composite.json":{"integrity":"sha384-3w+7KNTh3KLidBVPFpOr5uXPyrtZH1UA5l5yy+r0WC4QYO8+bFmvO10wY6Zk1osX","size":554},"data.json":{"integrity":"sha384-UiHAWkFaSxgHUM3ufcszXLhIXvc/PRRv7y2VMpJdBHNJ8C8Bzw7Yk40k9dW9Sabt","size":1217},"scripts/announcer.tsx":{"integrity":"sha384-cXTJST1CbTriSs6Vjg5CMhMzuGYX8Y5um8dH04rhrBrpMGI3/+rp7rF+OyiK6Bjs","size":1761},"scripts/pure/toast.ts":{"integrity":"sha384-5HsNX5Ao3DBwh0XwQx036b4r8OIvM4C7zYUAPHMVNPtEWb7kMdJASFEwKtxrb/jE","size":1171},"thumbnail.png":{"integrity":"sha384-HBZUcCEOa9jkubVyvd8Hrhnu3HU0OHKhshGy1LYXw0I6bANVnxcUy0psn8fuyqR6","size":2005}}},{"name":"black-chair","data":"{\n \"id\": \"1aa01433-9f2e-44ac-b1fb-a2bdffeb6776\",\n \"name\": \"Black Chair\",\n \"description\": \"A black dining chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"HighBackChair.glb":{"integrity":"sha384-BQAU/CeS2nc/qMg4zNmGfN9PL54Vok9qKD681gVfC64knQyWW/wh2rGXNVc53oJ6","size":32424},"composite.json":{"integrity":"sha384-3/TVCIpJOzxplhEyfQhTIfMqAzc6J/jyo6qWRCI3iQMMSlSNnYS69w8+vBdNheC2","size":1413},"data.json":{"integrity":"sha384-zBCFwVRiankPHLu/0p80cZPNHuuPr8KywXQh+Co6MN1LWmPfYffNk2UvpyFc3WK2","size":699},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-bZsSYvZkaq1R6jGe8fK1yvdC1ws8F0nAtbKUpWRkpEretquQ1Pcx05H14NIobZA4","size":8744}}},{"name":"camera-rig","data":"{\n \"id\": \"7ea892f3-168f-40fb-8338-d9c91c23708e\",\n \"name\": \"Camera Rig\",\n \"description\": \"A fixed game camera — top-down, isometric or following the player — that takes over while a player is inside its area and frames the whole area on any screen, phones included.\",\n \"category\": \"custom\",\n \"tags\": [\n \"camera\",\n \"top-down\",\n \"isometric\",\n \"view\"\n ],\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: a top-down, isometric or follow camera that takes over while a player is inside its area (or all the time), fits the whole area on desktop and phone screens, and hands the default camera back on the way out.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-9x73whqmr1qGQuEfpGqJgQdFYwZ4mvb0z2siWJEDgaCAU+qn18Dty0o9x9vHvKha","size":3869},"composite.json":{"integrity":"sha384-ou9CI0Q1Mt9ikRHU0UUDqqrC1Y3E4dv/vSlrYzb2d9SZbesrFlrit1ulk0D/gJDT","size":915},"data.json":{"integrity":"sha384-siOIwgynLDVrAOmq+E6fjUJdUWxyGruViMlGQCbIW6fB69RRfj6dA/QCQ2m0/fbL","size":741},"scripts/camera-rig.ts":{"integrity":"sha384-S/ZnswWj9Wh/IMJ6RL84LmU6H6B0JLLRB6mRB2ucG3unU2jAMBVHklNp0z4vZ7iA","size":7767},"thumbnail.png":{"integrity":"sha384-jkkA8fFCJKFnzNRruLLm6Snhpa/+0i224sx+HrpzEd6JGw1+fzITRRXnFyn0lSO3","size":16703}}},{"name":"classic-bench","data":"{\n \"id\": \"3e8dace7-01e4-4a98-a56e-52ad05ae654d\",\n \"name\": \"Classic Bench\",\n \"description\": \"A classic park bench, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Bench_01.glb":{"integrity":"sha384-qU+pwMwPJYsOMD3Rgh5aQ/XkBKR6ls6nQyqWaRik+z125N+cSW7f7tfaH6rQPVjz","size":54436},"composite.json":{"integrity":"sha384-KTMuUiX7SNG/qh3LQ9JANv/ql+YrUC3UHna5xa8GleFBEVOx2NTafDEFyjXPlUZL","size":2004},"data.json":{"integrity":"sha384-WzR61MlY+E4phm2i405fbw1qr2W5XZhV3elr6lpAIVX7ssoqTzxb8m3lTSKaqrLi","size":887},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-gVZ5hbkqeZCkqlNp2XTBqGLqDMFBH261RyXCV/+xogCBddr593SpTijJcTG75xRw","size":10722}}},{"name":"classic-bench-armrests","data":"{\n \"id\": \"88e01dcc-b242-4815-90e3-72ff52c24f45\",\n \"name\": \"Classic Bench Armrests\",\n \"description\": \"A classic park bench with armrests, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Bench 1.glb":{"integrity":"sha384-gEvudQhcSvOjXcqAeY8D8iPaVbsYOkBd3YdZki2iAKCkZgkf/PQLaMW5DAJHFVZB","size":42772},"composite.json":{"integrity":"sha384-KuygG/7cDAvXqt2lz2mYDyeppiq1PZN+ZmBDndaWxdqV7csCPMdXQK/Ys40UW7YZ","size":2014},"data.json":{"integrity":"sha384-t19LA1qyWZc5sRylViJkgGHA8wo0wZqEVaA586BsRGQmzQc4itLDkgxE4LIdvHeR","size":737},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-u4mWUcX2kkrcgfIKydVN3kKeDu7K2Jfg9TKNBYavhhiIjZ0bWSUPVg9VABZZuaV1","size":19258}}},{"name":"classroom-chair","data":"{\n \"id\": \"cacd50dc-5861-4b71-83ee-83cb23fea9e4\",\n \"name\": \"Classroom Chair\",\n \"description\": \"A moulded classroom chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_02.glb":{"integrity":"sha384-4sbNyI8nx8fgdkKm/Df7ooV8fEtA5sUTxy7VI2R+91f/JDklg4yFxOk4U3RXIFuo","size":16368},"composite.json":{"integrity":"sha384-Esh68GGVhUf9RCOfsDXWQaUiGb273cV7Z5cC2MOXe6JkUJknpHCpvyBwgPjvIHTg","size":1447},"data.json":{"integrity":"sha384-2FqLS4bQ26dRzDJZgb3HlB/Hrlt6x8fzSQnCoHVeGFIyZHcJ77N4WClJlt0iAYQB","size":881},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-xp435rb3UtVrmBql5h82OUHv9+1HRv4msRquMkJF1ABAwAmE0htpneGPsIovG1dU","size":14671}}},{"name":"court-chair","data":"{\n \"id\": \"e29fe7dd-20f3-4486-941e-bb85401d0d1d\",\n \"name\": \"Court Chair\",\n \"description\": \"An upright court chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_Wood_01.glb":{"integrity":"sha384-IIv1LpNQXbn42cpCwd4gsgDfThllJfAjB0pjMC51jcgUqJD6yJ25vIUv4OUSNZ0B","size":38776},"FanstasyPack_TX.png":{"integrity":"sha384-KMdE2Mz2QPnFyTWlJZWCUSxASSMsmyw/VFzHLyFQvXehN1ujIEepbskPuNqHgCI+","size":15078},"composite.json":{"integrity":"sha384-Q1IbQdubZR+c8womUaRcMywMD5GjYB/t46kuu309jIHimWA2YHGNgl/Ei5G/B1Bg","size":1408},"data.json":{"integrity":"sha384-akBy4ls/agEp39hMybq9vUIOyxV4KMBId+YLlayMWgc7QJcI/cLc+UktiHJOny6R","size":874},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-v2OuF/sRj8TMvjUqhYYJTkwfAMftvT//lNEFTULD99DFiWfc/bWhceAxxeo7emX+","size":12243}}},{"name":"curved-couch","data":"{\n \"id\": \"48dbe32d-c906-4287-bcfe-2cfe280c68f8\",\n \"name\": \"Curved Couch\",\n \"description\": \"A curved sectional couch, seating three. Players can sit along it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"CurvedCouch.glb":{"integrity":"sha384-EnJVY5fVNrynT2dL7huvsxVfZ5RbbvmrxnGjrEobubreqJ1U7qQo1ofzwBcNGYgg","size":38740},"composite.json":{"integrity":"sha384-Mx4dSJiZ3vo9xNctXyshiVZNlQ6SaYKDrtdLqpRT+ODzyJGneMwOxA/64u2rfqre","size":2013},"data.json":{"integrity":"sha384-7TJ7cPkU1KWPclbaj5CKLkVvIM6Ascfewj4ikqy9H6KRpu26ZyaBZfE6UekpP/ZU","size":722},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-oyKNtE22C6BjtcNTnnoBTYjfmIqVnik0SaM5IwfC1qheKHjXVa8Lxtihi9YDu8fs","size":14388}}},{"name":"game-flow","data":"{\n \"id\": \"44374100-12fb-481f-90ce-2a4d81949084\",\n \"name\": \"Game Flow\",\n \"description\": \"Lobby, countdown, rounds, winners — runs your game from start to end. Works with: Leaderboard, Announcer.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"round\",\n \"lobby\",\n \"countdown\",\n \"timer\",\n \"winners\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.2.0\",\n \"changelog\": [\n {\n \"version\": \"1.2.0\",\n \"notes\": \"The 2D status panel takes its place in the shared HUD layout, so it no longer overlaps other HUDs on any screen.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: lobby → round → winners on game.round, a countdown every client derives from one shared deadline, a winners line read from the board key a Leaderboard shows, and a \\\"script\\\" mode where your own game.newRound() ends the round and the round length is only a ceiling.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"Optional themed round timer and lobby countdown, configured in the inspector.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-FSQahckNpE6r400CC5Kw5Fz1uijUfaZ0N2XZBEm+YVMsbRTMfjX5zrlyKJMleUyl","size":4677},"composite.json":{"integrity":"sha384-TXN9bYBu1C79b9fTYJ2GbtOC1J4wjEpJt6rIykdYJTu3HEUw62il/8CIFSljcB4Q","size":932},"data.json":{"integrity":"sha384-cP7iRsJsHCRReEuJXncOHP41mG5PmbXB1BUnN0Kp16cOeLv+USBLanxLKbQNVY+U","size":1143},"scripts/game-flow.ts":{"integrity":"sha384-ALqBHmmmh5DxU2YGmpsDbjJyY3Lxh2rn2GBWGu0dlXOxXdG7h6NzhBlxdbVnkqYp","size":6524},"scripts/pure/flow.ts":{"integrity":"sha384-zEgjgIQS3RzCJ8Tyud8tywm5SmD+FO8WLnFpBkexnFEnmbOoWSb37HUx3X0/DLT3","size":7575},"thumbnail.png":{"integrity":"sha384-ZQHTd8rM4CaE2+qNC5at7B4H3e1ikf1ck9K6GI/TEwn/7WKzf2/9I9sInMvrxy8J","size":13227}}},{"name":"health-respawn","data":"{\n \"id\": \"5cc3b4d7-2a87-4825-9a53-e2b007bcff24\",\n \"name\": \"Health & Respawn\",\n \"description\": \"Players can take damage and respawn. Works with: Game Flow, Trigger Area.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"player\",\n \"health\",\n \"damage\",\n \"respawn\",\n \"multiplayer\",\n \"server\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\"\n ],\n \"drivenBy\": {\n \"rule\": \"Nothing takes hit points by itself — the server calls damage() wherever the harm happens, and this item does the dying and the respawn.\",\n \"code\": \"game.onEnterArea('Spikes', (player) => damage(player, 25))\",\n \"next\": \"Press New script below, write that inside the isServer() block it comes with, and import damage from the health.ts beside this item's own script.\"\n },\n \"version\": \"1.3.1\",\n \"changelog\": [\n { \"version\": \"1.3.1\", \"notes\": \"The health bar is on by default again; turn Health Bar off for a game that never deals damage.\" },\n { \"version\": \"1.3.0\", \"notes\": \"Health bar setting, off by default: a course that never deals damage shows no hit points.\" },\n { \"version\": \"1.2.1\", \"notes\": \"Guide covers in-bounds respawn destinations, permissions and course playtesting.\" },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"Per-player checkpoint destinations, healing, forced death, death counts, optional respawn delay and protection after respawning.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: hit points the server owns in game.state.health, a respawn point picked in the inspector, a \\\"die below height\\\" death plane, and a damage() other server code calls.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed item's Script card now shows the damage() call that takes hit points, under its respawn settings.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-sOrhWgNJh7HnRDNRZnTFtj+lulT6lQpepsjcZ8+8S66IEKIbA/+TR0wineLeGJ0r","size":4755},"composite.json":{"integrity":"sha384-WZskIkQZ8n8dehUBe5OKQ+99aVon0PAX6Znh5z2TmWf177Wto80aE70iod28dvCF","size":565},"data.json":{"integrity":"sha384-/9l/nKLcx51jlRHD0Yafkl9meyPTAwCxTR8XteUkuH5jmmcfa8IK6SIiDJBhoqlp","size":1911},"scripts/health-respawn.ts":{"integrity":"sha384-QwLUhaAcxp9vui+9q7ccvuEpY87QHG+d/pzfAJRPn9L2yHhrvU605ORU21pz17hP","size":5760},"scripts/health.ts":{"integrity":"sha384-/zA9uuvRZ3uRS2WdFvPml83zRvA5n4h0RTNIEd2pb59Ui6yrtX1kJHj/zbK+Md4A","size":1981},"scripts/pure/health.ts":{"integrity":"sha384-if/V7vja1R5enh/H7yM4FCh3Ea7bgld+tr76ryjTWryrk3lEw7xFe6p282WsZFji","size":2230},"scripts/pure/life.ts":{"integrity":"sha384-oNHo7xAdJWVw3t5o7oDt+wjM9ea8FD/Ynskc2l1YjP3+qvnYLNnrI4v1pENPOorD","size":2368},"thumbnail.png":{"integrity":"sha384-fVCccAg9bAVrgYD6MFlGK+1zBO5XEDpxd0Lh7LGFaobZYl2OCaxJcME3eVrQqS31","size":7116}}},{"name":"high-stool","data":"{\n \"id\": \"f8ee0d2a-19f5-45a9-9029-cd46d7a8f834\",\n \"name\": \"High Stool\",\n \"description\": \"A tall bar stool. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"HighStool.glb":{"integrity":"sha384-pELylPLTKad8MmTwL9+jXPGUf5KOnXgxBuY4JXguuov7duJEIVRk4pRcQ+gCgKmf","size":26332},"composite.json":{"integrity":"sha384-U3fv7ocM1aBZWJ+l9uC2Eg2acDqnoxy3tPhr8dXx1Vi7N1riaugAdQTDIpTQQyAK","size":1416},"data.json":{"integrity":"sha384-LjCLqThIrUN7Qk+zA6paffpTxFsPGIiDdRhVow2w9PlMxyX+EvyLO+tds9fHTX7O","size":694},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-Y4cPyTFXuHC5maHoDtEX7vdYSK76XLhw9JbnYPORlyOSmLAfhkvv/FjW0apjV9VS","size":9066}}},{"name":"large-couch","data":"{\n \"id\": \"ac233c16-699e-4f01-8e7c-910bb5a168af\",\n \"name\": \"Large Couch\",\n \"description\": \"A long couch, seating three. Players can sit along it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"ThreeSeater_Couch.glb":{"integrity":"sha384-Oo6LBiZPQO03QYxtyTqaG4NttfLoAeL14jtchqBbJjg1HQftbWUwrE1lQ8mSXCnM","size":31868},"composite.json":{"integrity":"sha384-HtdxTfaa5dyvF9BUlo0t2tzgSA4SWn3nwT2DccLeqnmscPpMqTKKmYt886lQaFYQ","size":2023},"data.json":{"integrity":"sha384-uIPJ6qQK7hXa2HghWSKPj5E8buDUVRb0XdeSUOcYoFnnQFTx3Nn9gWGf9m6kFTnU","size":709},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-/JwNvv3M/1qncoi0bQ7ZM9h7WQKP48Ti8KgAdHqtLxiwMogRZmWRhATdgF7nBz+3","size":16512}}},{"name":"leaderboard","data":"{\n \"id\": \"493daede-2afd-4c10-9c0d-6aefb25629a8\",\n \"name\": \"Leaderboard\",\n \"description\": \"Show game scores or automatic Run Progress best times on a 3D panel or themed screen overlay.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"leaderboard\",\n \"score\",\n \"ranking\",\n \"board\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.6.0\",\n \"changelog\": [\n {\n \"version\": \"1.6.0\",\n \"notes\": \"The on-screen board takes its place in the shared HUD layout, so it no longer overlaps other HUDs, and shows the top 5 on phones, whose screen is a third shorter.\"\n },\n {\n \"version\": \"1.5.0\",\n \"notes\": \"Before the first score the board tells players \\\"No scores yet — be the first!\\\" (or \\\"No times yet\\\" for times) instead of setup instructions, and its text wraps to stay inside the panel. A board placed before this keeps its old text size, where the new line already fits.\"\n },\n {\n \"version\": \"1.4.0\",\n \"notes\": \"The 3D panel's text is readable from its front, and players can no longer walk through the board. A board placed before this keeps its old text position and no collider: delete it and place it again.\"\n },\n {\n \"version\": \"1.3.0\",\n \"notes\": \"Rows show the display name of players in the scene, or a name the row carries; others show a short address.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: a panel that reads the game.state key you name in boardKey and paints its top rows, so the board a Script keeps is the board every player sees and a late joiner gets it from the snapshot.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed panel's Script card now shows the setState line that writes the rows it paints, under its own settings.\"\n },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"Themed screen overlay and automatic persisted best times from Run Progress.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-mcZT0Ub5OZ/KpfDn6OvJ43I7ITFnl+OVGL7Y/IMznJc6cRuUKOu1VWmqVdyN5+hP","size":4523},"board-panel.glb":{"integrity":"sha384-Su82WkaQqG6obG/yGRkHw+WCXQCX/vMngfKyCV/IUH7tpdqz1MS2777hwjPMNdrI","size":1276},"composite.json":{"integrity":"sha384-sFuc9KWyDZpE2r3m+p3lj2YXw/hlALVOoguXm/wf1fSuN9T5pCXAlD7ow/9gOhQk","size":1916},"data.json":{"integrity":"sha384-TC0KbVHrPpPbhd+YP/5rmdZ7DRp6HfhUbpnEOV/8tiv+/ZPF4bRdzAAch2i36XCM","size":2009},"scripts/leaderboard-hud.tsx":{"integrity":"sha384-RKTVTqgYOCXUK/Ztei5exeXq/eeKgLJYoB6i+v9kwAJOiQsWNVJhCL7YOt9bC2kD","size":1789},"scripts/leaderboard.ts":{"integrity":"sha384-dyYY7XmhpYRYuoVvK+Gwn6iWbT7avt03iiNBuKK+5vyZPJpKBKzrv6ZiAolzayaW","size":4011},"scripts/pure/board.ts":{"integrity":"sha384-ks1PrCQkVaxlFeV4JEK7VUtIstr9rmU4dBqQLqN0QThlYOZ1StHQ5Vex+djFVxN9","size":3394},"thumbnail.png":{"integrity":"sha384-PqQ+DIWqDPRtuQIuK4NvtFcicWiCgQ94XqhBZWKGArKe+GEyHpjOdd9cerdgyamu","size":5768}}},{"name":"loveseat","data":"{\n \"id\": \"78050d8f-ee51-4db7-b060-14e7a0b48939\",\n \"name\": \"Loveseat\",\n \"description\": \"A two-seat sofa. Players can sit at either end.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Couch_01.glb":{"integrity":"sha384-Ybann6g/XRgUPIClpvLHX3e6SqETbaQ5vwLxVFADEhbMCc4YY3Jzw/RH6hR9gxSj","size":26236},"composite.json":{"integrity":"sha384-6gJtUvbDA9wZB5J/eUzFxTl2Ior4BViiorJCNokaAIZk/6/qXcg/7S1zGC+NsR6N","size":2005},"data.json":{"integrity":"sha384-uAOd4Pflpvbc2DFGnB3IX/xsDWHwz+RsG7UDDmuMluZHnB1bzIxFhw8+NEzh7T9/","size":872},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-Y12yGhzQFK62sP07Qz6ipUPa++ZBer/QiCMMbpn1qnP/7n6RAJXoaDMYSGSvA4Hh","size":23593}}},{"name":"modern-sofa","data":"{\n \"id\": \"14706421-460b-4161-b06c-8ce7db73ad11\",\n \"name\": \"Modern Sofa\",\n \"description\": \"A low modern sofa, seating three. Players can sit along it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"ModernSofa.glb":{"integrity":"sha384-WT/qnGZedI5qRlBpLTndtxD90++WGbyQPpFeZJTWBDHR3555y88+LN4RG4aXLPA+","size":36796},"composite.json":{"integrity":"sha384-r6g/u0LMvBeUh8W3qMWZJ7H6OqgyqjNsPAL7jX5wOz+kvRwb178v0cD3YGoazd/T","size":2022},"data.json":{"integrity":"sha384-oMvACe5vrge+hMwWAsi9XHAe/OaFSCeWN8djSih9ET+M0j6CHHD5+tDxln/6crnw","size":714},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-+rS3k/5fjWqEHdGpcCs+Lur4gU1mESTaJ+fxHjpRjsKsUMbY1m6BP9G5VNwHtDea","size":16342}}},{"name":"outdoor-chair","data":"{\n \"id\": \"d8cb5c0f-dcf2-4fda-be37-2b76c4c0e78c\",\n \"name\": \"Outdoor Chair\",\n \"description\": \"A weathered outdoor chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_07.glb":{"integrity":"sha384-rh67Oyki0AbHvwI7VAKxG4R6BvIZ+ApNvK3Ub3pjli95VKdib6IEUeCQIS5xRtIy","size":26632},"composite.json":{"integrity":"sha384-SdEMJ9948Cqop6/F49vW9182dpnKhA6sj/sGGfRC5+7NLSOvMk/wmxej4ptvjZwX","size":1419},"data.json":{"integrity":"sha384-erXzZe+COuUtzmtc67RGz02/w4ROQZMqgeU5TAsRJMcF0D1Pjj72jmzpKYJtjULa","size":879},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-MuAlhtUctXmuZuYnp2/jzIowRuJoMj56xdErvUjb1WC8IJKidThtoJXtoDh1Mi2u","size":22220}}},{"name":"pickup-item","data":"{\n \"id\": \"3dd512ef-86ba-4ca2-8974-dc7629ded037\",\n \"name\": \"Pickup Item\",\n \"description\": \"Something players pick up with E (or the phone's action button), carry in the right hand, drop and throw. The Multiplayer Server decides who holds it, and the player sees it in hand at once. Works with: Work Station.\",\n \"category\": \"custom\",\n \"tags\": [\n \"pickup\",\n \"carry\",\n \"hold\",\n \"item\",\n \"ingredient\",\n \"throw\",\n \"multiplayer\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: one holder at a time decided by the Multiplayer Server, held in the right hand and shown at once, a floating prompt with the device's own control, drop, optional throw, endless supply crates, and a script API to read, give and take what players carry.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-CzKBYLtOWD8mljnxlNig5FXr+fvWXIfxtSOHA5xWGcht/zTTS+cAO8upLSnaRqvn","size":3877},"composite.json":{"integrity":"sha384-2FkUxWGQrVSUBrsJ+VIOsWI6UM2xaB5Zwx24VZSuu9Eygn+gZHtHZs0+3Efb7hca","size":1118},"data.json":{"integrity":"sha384-SCVQG/tntqzcNSWqAx+xKsX+yM1Mq8i3uQlk7aus9g7PuLtjbOgcvmzoqfUzFTZh","size":897},"scripts/pickup-item.ts":{"integrity":"sha384-McRdI62+bnf+FbGoUaQUj8GkQq9ZQaqsMGexK30YHX9hkZbnwCd85jzgv49awInR","size":1712},"thumbnail.png":{"integrity":"sha384-2NzW1gGzZb7s0Dazwb5HwmzYU+SvssGabNn1GyXPh5tKslvz58F+6LRUfhmferWV","size":6826}}},{"name":"run-progress","data":"{\n \"id\": \"8ea22784-81dd-4d60-b0ae-54fef4852fb7\",\n \"name\": \"Run Progress\",\n \"description\": \"Timed runs with per-player checkpoints, collectibles, finish conditions, restart and a configurable HUD.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"course\",\n \"race\",\n \"checkpoint\",\n \"collectible\",\n \"timer\",\n \"hud\",\n \"restart\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.4.0\",\n \"changelog\": [\n {\n \"version\": \"1.4.0\",\n \"notes\": \"The run HUD fits phones: Restart moves from the bottom-right corner (under the jump button) to under the clock, panels stack in the shared HUD layout instead of overlapping other HUDs, the controls hint matches the device, and the completion screen hides the touch controls while it is open.\"\n },\n {\n \"version\": \"1.3.1\",\n \"notes\": \"Hit points show unless Health & Respawn's Health Bar is turned off, so older Health & Respawn copies keep their bar.\"\n },\n {\n \"version\": \"1.3.0\",\n \"notes\": \"A missing spawn marker respawns players on its area's floor, not mid-air, and a checkpoint/marker count mismatch shows as a problem.\"\n },\n {\n \"version\": \"1.2.0\",\n \"notes\": \"HUD setting: Full, one big centred timer, or Hidden for a custom HUD. Health shows only when Health & Respawn turns its bar on.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"A missing spawn marker no longer stops the course: players respawn at the matching area, or at Health & Respawn's point.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Timed course runs with per-player checkpoints, collectible goals, restart, best times, a persisted leaderboard and a themed HUD.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-HEhvBW1B6ev3G9F3NJwBtkHfi3fuVS7ktxQLoQodEYlXnmA989fVh1/1U/RofXWw","size":6114},"composite.json":{"integrity":"sha384-VLC5nKAXOEJSV0e4pJv9kCp49u4nb6+OKeQImT7dYeDYMq3D21bDbiE79oyA4t0q","size":342},"data.json":{"integrity":"sha384-UrkVn6sNFnSOZ117kMO+A1RCAFy0BNX0VqJltOkoUtgeXkf6nnPPWSE3FyKUal4M","size":1751},"scripts/moving-platform.ts":{"integrity":"sha384-+OOc2vW73HOhsJCLElk2hGAcIJHfia3CKJbWkP7mOs0H7iAX3Gh5HYbcLUAZLXWh","size":1035},"scripts/run-progress.tsx":{"integrity":"sha384-qdQ+X5cdmZ4W5aogIDKuOghX0zGNiJkZE1zpq0F7iHUikOjDIX9Pe91Q4ghKjHw2","size":7645},"thumbnail.png":{"integrity":"sha384-6TEe0tNGVqIR8qvFRYv3jBgSHl7T2lZWQe6BuFofv7Lsfmwy2A6/ZHBc/Y1N6C2q","size":28248}}},{"name":"rustic-bench","data":"{\n \"id\": \"d6e264c5-a080-4702-827f-dcad4bfbc77c\",\n \"name\": \"Rustic Bench\",\n \"description\": \"A rough timber bench, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Bench_01.glb":{"integrity":"sha384-HvKGBqFZmpfflUDGmAv6bnKDgdLIRfY2gJbg+AffL+GjBuNBHpMsCpXWxfLXZDlN","size":38296},"PiratesPack_TX.png.png":{"integrity":"sha384-tvHmsChchDas/4FWyTySQozen2k/SnbQEzXKuV6p90FHRLZoH5NQyiDa9EOnNiHi","size":8600},"composite.json":{"integrity":"sha384-gGr5duM8zbC3xcX1ZPdVi5VH9qbExCukBk71DnHbpKDVp3R7BXD5Zi13eDIBoQE6","size":2007},"data.json":{"integrity":"sha384-7yCiT9oSixpR2SmV25CFxXVEFyPzmMI6/CMoXUIZp3vE1Vu0R591Vp6gjJalb/BE","size":886},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-ZmLePG5FIbmqf4RKCdidRKla6XAeP/+r51k4afbck7j8BR0RSwHEIDo7QWOSmmN2","size":11775}}},{"name":"rustic-round-stool","data":"{\n \"id\": \"80f58415-1e99-4ac3-ab21-7e4b93d8c1da\",\n \"name\": \"Rustic Round Stool\",\n \"description\": \"A round wooden stool. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chairwood_01.glb":{"integrity":"sha384-UGMRBagdJnoipOK+RMQftg0R6vXgHD/6jTQJl45SOrw8uCclBWodtVxQj8lAwH97","size":26292},"PiratesPack_TX.png.png":{"integrity":"sha384-tvHmsChchDas/4FWyTySQozen2k/SnbQEzXKuV6p90FHRLZoH5NQyiDa9EOnNiHi","size":8600},"composite.json":{"integrity":"sha384-+vEWwi/GBNSbSKxucA5WevFwKuJvMkgdOzlA0UxB3vlTLjhfNr/db8qB9zLHoSsP","size":1423},"data.json":{"integrity":"sha384-+78WMw5CS6ay5o4yyZQC7P3dtmWW4rzjnd9j1FmyNJoAuHd4E0QeZH1bPJjJzIgZ","size":879},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-N3nz6ZelKTPqOpx5g6JLCNox5W71EwtvihYfFZffMoPDlR/oDSSVk2c44Wt/ABLH","size":13077}}},{"name":"rustic-square-stool","data":"{\n \"id\": \"9bc6d2f4-fb0a-4688-b81b-a4a83636193d\",\n \"name\": \"Rustic Square Stool\",\n \"description\": \"A square wooden stool. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chairwood_02.glb":{"integrity":"sha384-IZcQfO7nBmiElbfMxtEy8WimKIB3WAefGB9cnz1A8oih4z6EuLuRleGbYwNr4DYZ","size":40548},"PiratesPack_TX.png.png":{"integrity":"sha384-tvHmsChchDas/4FWyTySQozen2k/SnbQEzXKuV6p90FHRLZoH5NQyiDa9EOnNiHi","size":8600},"composite.json":{"integrity":"sha384-Xqpw2Y5Vi9LBJsQf7uJIxPgt2ypqG7mIcjiQdnz2pAgbD9KKq88XHN22EW2vctRg","size":1424},"data.json":{"integrity":"sha384-pVW/W1QTcprakc0Yei7HEYqFpBmpDLHrzVANvYbipoPpWPf1rAI6rw4vFI9SUDys","size":881},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-8rf/o+kVZ7qhW/3D8hUzNanZVTfMvUMOB5+Zs85Tvn6EWobBD42Bvkpr2zuTMzbE","size":14789}}},{"name":"server-clock","data":"{\n \"id\": \"9e37c253-b33e-4505-8231-530f62715d21\",\n \"name\": \"Server Clock\",\n \"description\": \"A clock showing NTP-synced server time, identical for every player. Runs on the Multiplayer Server.\",\n \"category\": \"custom\",\n \"group\": \"Multiplayer Server\",\n \"tags\": [\n \"multiplayer\",\n \"server\",\n \"clock\",\n \"time\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.2.0\",\n \"changelog\": [\n {\n \"version\": \"1.2.0\",\n \"notes\": \"The 2D clock takes its place in the shared HUD layout, so it no longer overlaps other HUDs on any screen.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: the Multiplayer Server's NTP-synced time, identical for every player, shown as 3D text at the item or as a 2D overlay on the player's client.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"Shared UI theme and independent clocks when multiple items use the overlay.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-/Awa1V4naWhY7vA66q5GEKJ4Aq7ZLOOx3xL9IKKVk5dKVMtA/MN9nWzHBA5FS5k1","size":3296},"composite.json":{"integrity":"sha384-3endi+ZKs5JfksNFuC3a+KvjsuCSyG9Ee23/mA/DKuwGPqtfLasLie3EiRd2Hqs/","size":907},"data.json":{"integrity":"sha384-6X6uh0Isy56LSYlumS2fWeQ+BL4ubUMofh/Ry7/ZF3hW2HpBdejep7t+o8bKffwt","size":955},"scripts/server-clock.ts":{"integrity":"sha384-TcnM9kQBRxlqHv6fFVkLLZ0JTEkaATZapl2FeZcCV6m0rxqtPN5VpGfzTU4vMA7W","size":2374},"thumbnail.png":{"integrity":"sha384-7vDACZ6Qb0G/LcQXW0w7DfZ/IyyT6NOmez0ZzJYgnwT9YECleSVRAHrXNZrWpVAo","size":8939}}},{"name":"simple-chair","data":"{\n \"id\": \"fe41823d-a0ef-4152-bf66-b9f44cdcffa2\",\n \"name\": \"Simple Chair\",\n \"description\": \"A simple lightweight chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.1\",\n \"notes\": \"Ships the model's texture, which was missing from the folder — without it the model rendered blank white in-world.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair_03.glb":{"integrity":"sha384-Kr1BoWrtvWuVgiTcU0TmlB2hNVHJIOjoEXu27uAvSWezai6Nn+MYq9IkPAPTVjZy","size":10140},"composite.json":{"integrity":"sha384-Ah3wQrl5kn40r1Byv3A0InbOVhRgn9Z3559lyvQCCnFhRdPjR88/pngxS0lOWYlQ","size":1444},"data.json":{"integrity":"sha384-QcAWIr/jmyykog8qMz+2TmM7WCiqgbH6WpQA7iPbyx0cvKJRIvu/FpCOwFoeCy/P","size":879},"file1.png":{"integrity":"sha384-hkHg23U+9Yx8eU+7OWRgOsHJ1gS8nzdWZ/DEAQvtwJF3dOf7sTQwINVaIo30FRk5","size":7117},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-970of2uoK/Vy8uBQAQRDTI5ubtyaXF6NVB+QdweA/VzCaUyVlHTciY2bgnX4bbcs","size":10304}}},{"name":"sit-spot","data":"{\n \"id\": \"49bc2e26-dc56-430b-888e-509d56ae79ed\",\n \"name\": \"Sit Spot\",\n \"description\": \"An invisible seat: drop it on any surface and players can sit exactly there, facing the way it points.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"composite.json":{"integrity":"sha384-uhBFFGia5mFzOQWC/J9UxtsSaldLqPEHiwzfnBYPzokXoME91oNDnBhwjPMNjpNc","size":799},"data.json":{"integrity":"sha384-ZpWPifWI1oc5/I6vlAeNNosb8cmuu5IEKnh/rdh8vdf57V+wnNsuVqAuFYn5aVdG","size":754},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-OrhbCwB59TLqDClVqt8Hrcy+OPXXkctZ1vW7zQTWOSaEWnyNRyne5SBtsVrZKVt2","size":18923}}},{"name":"sit-spot-edge","data":"{\n \"id\": \"6c815b58-d13f-4d30-a7ea-0f275d740084\",\n \"name\": \"Edge Sit Spot\",\n \"description\": \"An invisible seat for ledges and edges — the player sits with their legs hanging over the side.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\",\n \"edge\",\n \"ledge\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"composite.json":{"integrity":"sha384-us527Hlk6/JM3bpEqqwHclf7+Xu8hXGrtrhZJ1w/atuO4025ZqJO80d0Ov4XIXnq","size":764},"data.json":{"integrity":"sha384-CH6sS8qFyE2hi/eP5h6IP+XIhtaTkrANQsfRDKzipE1+a3/anhHvfoXa66xmW6g3","size":779},"emotes/Sit_Edge1_emote.glb":{"integrity":"sha384-8oYD8S4HilS8mFsgOj5lRbBWoq3rmF7ETStGkvefUODtwN+lo5gxdKY/F80aqLIj","size":99400},"emotes/Sit_Edge2_emote.glb":{"integrity":"sha384-bS47w9rNkTXOUXmHoSOTkM8g+3AcRbSRLwGblftdTa2Hr0avdubdOdiC2D5bkM2E","size":89300},"scripts/seat.ts":{"integrity":"sha384-XonZTJcIqIC//h6SCTzpxOTs+MfpK2IHjkDTg1t+XmUUSZ7777snXkZeRzpahO7Q","size":7017},"thumbnail.png":{"integrity":"sha384-OrhbCwB59TLqDClVqt8Hrcy+OPXXkctZ1vW7zQTWOSaEWnyNRyne5SBtsVrZKVt2","size":18923}}},{"name":"small-couch","data":"{\n \"id\": \"acca7441-52c9-4b80-83fb-af18bcbf4c7e\",\n \"name\": \"Small Couch\",\n \"description\": \"A compact couch, seating two. Players can sit at either end.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"TwoSeater_Couch.glb":{"integrity":"sha384-3aFVc1VRYCZMbuV54qKD37CG/Gyy8g4KkdPSjqqbmNMVELB8RVdCVn4bhaaJeTIA","size":35116},"composite.json":{"integrity":"sha384-4SsVtae9U3jtnd8ws0MFI6eEqXQA+K9d0YanHazJzExwBdh4yL/10B6oDCa5m9OE","size":2006},"data.json":{"integrity":"sha384-u6WCss6xFK0tfHpKnL40yNXkaJg1VNGwvL6RdTYzaSWbFZGSOUHJh0fK6CZhN4Io","size":715},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-Vo9jNKeVjbITSNCMK5+1FvD6QgI6prs0AZptiMN1LybCqlnhS3syD/yd7o6Dhos9","size":15304}}},{"name":"spawner","data":"{\n \"id\": \"fc759fc0-57a1-461c-aa06-22c0d3d4c3e0\",\n \"name\": \"Spawner\",\n \"description\": \"Makes copies of a prefab appear while playing — on a click, when a player walks in, on a timer, or when another script asks. Copies appear at the Spawner's own spot, only on this player's client.\",\n \"category\": \"custom\",\n \"tags\": [\n \"spawner\",\n \"spawn\",\n \"pickup\",\n \"enemy\"\n ],\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: copies of a prefab appear while playing — on a click, when a player walks in, on a timer, or when another Script asks — made on that player's own client, with a per-spot cap, a lifetime and scatter.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-z0Sma23V3knVRWNDZMCDl+EKMeObpA2NxJzO543HDEWXdjM8rq2BUvW8ivVC3s2r","size":5423},"composite.json":{"integrity":"sha384-11bTytc5FvYc2S+noZUzFBRPTTCZ+JK3gMOGtS1vg57/Aqv0jIG+H6StFjCHbr+o","size":1383},"data.json":{"integrity":"sha384-te+nomjlQGpKcP1TUxjeJBvcNMY2e/q67l6VHqU0B81p9tCWgjz8qTps7gUZ2kdf","size":747},"scripts/spawner.ts":{"integrity":"sha384-2BCX+ZtBU07fyYb1gxapwzivM8DRe8i4CetRZgpVN8N5ta0vlxxFEDdfHUmEYOkJ","size":16034},"thumbnail.png":{"integrity":"sha384-4nU0PNVHtK4o6zj4kZ7zbNlQzczBQKUQPC3F8ZPrcP7BWYbExlEs3VlFajqKPwZG","size":6786}}},{"name":"steampunk-bench","data":"{\n \"id\": \"8a80b964-1f4d-4ea3-8f6b-078809891a17\",\n \"name\": \"Steampunk Bench\",\n \"description\": \"A riveted steampunk bench, seating two. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Steampunk Bench.glb":{"integrity":"sha384-l8rvgt9Z8JKpRwRI3rxw9qoH/vx1v7HvwxJoQWJi/xQ2v3+HIFzUE3SEMakC13lj","size":159244},"composite.json":{"integrity":"sha384-qT/zOtPEwpaAhxx6YNaSnoFHWNCzk9cluTzkbWVOT1ASokLY9hfUd+lhKDF6w/np","size":2019},"data.json":{"integrity":"sha384-ywBxOVAXX1Eo07MEC1qn5iwpz4Wxa0Sf9JHs8cYCOa0JL8D5/M0pRS/k2RuNCzD0","size":721},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-NNFHgxb81gJ0y4Z1APmww5ZHZz4My+jv53ogLyEKS+qjno5TAMnoSE4PFSELuGsR","size":16622}}},{"name":"steampunk-chair","data":"{\n \"id\": \"0cdcf518-9bb8-454e-9b18-a851b2a0b1df\",\n \"name\": \"Steampunk Chair\",\n \"description\": \"A brass-and-leather steampunk chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Steampunk Chair.glb":{"integrity":"sha384-jx1WnrmD7GigwvCDb4X6HDhs3Q4rc7J10DlakX2I31xP/64hO8E76U6nCARYu1D/","size":137292},"composite.json":{"integrity":"sha384-C9XF/cSfbX7UfnePwSOg2BrpL9m3nB5WyQRJkINrSOsmV+JoEcEAEv/2bl7pl9Kd","size":1420},"data.json":{"integrity":"sha384-qoBLKLZCSylATy78bslEs1GaUl+YjZPvDh4GBtS4cAkM5JzvXbQMX2QxWjOapOAU","size":718},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-tAJBIbkGkYJOtHKoWzPwIUmcjypRoYnqLu5S7mLiuQ5KUiHKZ493plJyalIZ5aYH","size":22358}}},{"name":"tall-stool","data":"{\n \"id\": \"f83a91fb-b939-4251-a298-d334c3e48996\",\n \"name\": \"Tall Stool\",\n \"description\": \"A tall stool with a footrest. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Stool_D.glb":{"integrity":"sha384-H8ztvhYutHrOV6dbXUfUSODKyMLIy/P5eEntuQxEe2zEHwMLnlQVfvqFRhWMtA+h","size":320312},"composite.json":{"integrity":"sha384-RnEdGr2iP41goFt9Gmfi5bYDprFCHPslIt+zDWXP25ohLUd8p2RO8Q6Q3fEm91w5","size":1412},"data.json":{"integrity":"sha384-C8mP3L8l99WT0GJixLoSzlekZHxR+orHexOZdET85GqVMSpbbRLCqQ6KRn9r8mjR","size":706},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-/VHtkn6ezh/nPA9bGkGF7eNlD7G/e+32phC0qmZ0/LSbEtn+jo5mWb+1RfzomHQW","size":11715}}},{"name":"trigger-zone","data":"{\n \"id\": \"f1794ec8-ed62-42c8-a71b-6c52e04b161a\",\n \"name\": \"Trigger Area\",\n \"slug\": \"trigger_zone\",\n \"description\": \"An invisible area that knows who is standing in it. Name it, scale it with the gizmo, then have a script react to that name.\",\n \"category\": \"custom\",\n \"tags\": [\n \"trigger\",\n \"area\",\n \"interactivity\"\n ],\n \"drivenBy\": {\n \"rule\": \"The area only publishes who is standing in it — a Script reacts to its name through './runtime/zoneBus', on this item or on any other entity in the scene.\",\n \"code\": \"onZone('Front Door', 'enter', (event) => { /* what happens */ })\",\n \"next\": \"Use the Add a reaction button below and the new Script arrives already listening to this area.\"\n },\n \"version\": \"1.1.1\",\n \"changelog\": [\n { \"version\": \"1.1.1\", \"notes\": \"Guide covers model bounds, active parcels and course prefab integration.\" },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: an invisible named area that publishes who is standing in it, so a Script anywhere in the scene reacts to it by name with nothing wired.\"\n },\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The placed area's Script card now shows the onZone line a Script reacts with, under its area settings.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-D++yhIulqWPCrKizIyGTqDJF2ZxBv5GUgm9n8tbZKFO2xiwWUs8H5jMl49jSr+GK","size":6096},"composite.json":{"integrity":"sha384-VWkNF79zDduwdioBw5OubcoLdmnXzzZq6GXkq3u3k5qwD4JDktJw+wiLhI3Hzto+","size":917},"data.json":{"integrity":"sha384-r3pReo7kADyb6lmgav6cxgC2hwAVQoEGbLaINBkvAgkObtAk517Tf/GGZPI9Ocov","size":1286},"scripts/trigger-zone.ts":{"integrity":"sha384-57lvbBOHUXnIGndfQD1G9oRA9gVOpLg7JWwSAV9LJzeD6xGyTKCPhuLai3nhXE9R","size":3837},"thumbnail.png":{"integrity":"sha384-4htEAGokLp2yZKaMa5PZanI+3zqPe3TnLcXpmfyJjfnXhYmij+KVgZ51pXdeTnXN","size":4283}}},{"name":"ui-theme","data":"{\n \"id\": \"41939776-72b2-45f1-b40a-097fa66c9790\",\n \"name\": \"UI Theme\",\n \"description\": \"One accent color and appearance for game HUDs, timers, leaderboards, buttons, results and announcements.\",\n \"category\": \"custom\",\n \"group\": \"Scene UI\",\n \"tags\": [\n \"ui\",\n \"theme\",\n \"color\",\n \"hud\",\n \"design\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"Custom HUDs are placed through the shared HUD layout, which keeps them clear of the phone touch controls and of each other.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"One accent color and dark or light appearance shared by the scene's game HUDs, buttons, timers, leaderboards and results.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-nxOv4VlTrgwQXS1doZ8l2Ka0Lf+49wlK5fZe6IeN6ym0d49eVorEF0pkP+mW0zup","size":2263},"composite.json":{"integrity":"sha384-GLLTfiifHN/3BNFuV3tozHl5PqIr2Sw/1lsM/jQQ8BcUY8FIt6gPCUgxcloJaxsW","size":551},"data.json":{"integrity":"sha384-gPrFuwJDKwYj8TGgJIkhTtOc+M6nawLruchbna5wTiCJ+3yXQQ3HlLyc/Ck0xpB8","size":766},"scripts/ui-theme.ts":{"integrity":"sha384-InUblgjcHMPeDZ/IKir/gTVfws6YE4FkR/SUd0AA285wV7rJUfEorIxCetjIiXNj","size":420},"thumbnail.png":{"integrity":"sha384-Q+XsR3csSrtPv1vWF2KsovKOoh15mPBgVsBKlMdNnjJSOJi4JhhkrPZEBpjdzjRR","size":5983}}},{"name":"video-screen","data":"{\n \"id\": \"37188734-4562-4f21-afeb-2752c39278f4\",\n \"name\": \"Video Screen\",\n \"description\": \"A flat screen that plays a video file or a live stream, with volume and playback controls.\",\n \"category\": \"custom\",\n \"tags\": [\n \"video\",\n \"screen\",\n \"stream\"\n ],\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"composite.json":{"integrity":"sha384-PNwL0kv1USZnEFOSnC3oF6kLaG3Hy0S5VGGvk16R+dkdkIidEPn40/SpRI4Eipsm","size":2536},"data.json":{"integrity":"sha384-CWXT5tqC3clzqs6wTwRMXrxBBT8PdHaNRpa4H4SFhZBVw4GfOe9/vmdjzk58KTaK","size":427},"thumbnail.png":{"integrity":"sha384-OQnhEX0GsIogArcrXaPYIo5bRqaYsK7V6GnniDUiiHDPOmojTFQKbcopVX8poMbd","size":3919},"video_player.glb":{"integrity":"sha384-Su82WkaQqG6obG/yGRkHw+WCXQCX/vMngfKyCV/IUH7tpdqz1MS2777hwjPMNdrI","size":1276}}},{"name":"wooden-chair","data":"{\n \"id\": \"c0f3a3f1-7fad-47bf-a855-e27f41f7894f\",\n \"name\": \"Wooden Chair\",\n \"description\": \"A plain wooden chair. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair 1.glb":{"integrity":"sha384-OBKh/Bj43q8Sx1wRponwlbgpevgaWMUiN0giUov/12Oi6zrbOTERiktleBfycvzW","size":34444},"composite.json":{"integrity":"sha384-Bl50OjO++oWtYNycDeONS6QDpxb6NUTuEcNYezYybT6QL2mKs1e+Ar7bZi9C8vQ7","size":1411},"data.json":{"integrity":"sha384-5LcT4SUEiXzUl7Fm686bC0qwplC+5wqCoijTQxWYqrKqiayYS6IBeCF8cfvayJS9","size":700},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-85oGX4HxIuc6wLmDYZYFS2Et0rxNcuex0sgvRhWn/hG3xXfMjbhWHOq16rkU629x","size":18385}}},{"name":"wooden-chair-armrests","data":"{\n \"id\": \"ebd62f4c-fa46-489f-bf8e-104aafc10b0f\",\n \"name\": \"Wooden Chair Armrests\",\n \"description\": \"A wooden chair with armrests. Players can sit on it.\",\n \"category\": \"custom\",\n \"tags\": [\n \"seat\",\n \"furniture\",\n \"sit\"\n ],\n \"version\": \"1.1.0\",\n \"changelog\": [\n {\n \"version\": \"1.1.0\",\n \"notes\": \"The seat no longer runs on the Multiplayer Server, where it was walking every sit spot's transform chain each frame for nobody to see.\"\n },\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n },\n \"requiredPermissions\": [\n \"ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE\",\n \"ALLOW_TO_TRIGGER_AVATAR_EMOTE\"\n ],\n \"group\": \"Seats\"\n}\n","files":{"Chair 3.glb":{"integrity":"sha384-qC94v3lBqcsvDYKbxOFSBG9sXvO2WlwJ4CZlUVUKmTvKvsn94KetxdVRfO/8VJ9Z","size":40316},"composite.json":{"integrity":"sha384-8c+9B2WZVYU90TjDED4IskWU7oRBdYvk29okBEMaheh/V6vRP82wbUlM2syOB48g","size":1426},"data.json":{"integrity":"sha384-olI3fBaKG8LfISwoMdmldQE4DxzqD2THTl9YwQlF85f4L7M+FU/6uPTx1i/vs+C0","size":717},"scripts/seat.ts":{"integrity":"sha384-qTc33dk7kx9+avQ4JugIv1csCyESSIOVst3FKQhN3pC0OIyeh/yA32h0z8zjdIWc","size":6959},"thumbnail.png":{"integrity":"sha384-g1sgPvNl8JeOjulBezQcWzMoT1bkFgk/dNp9BfPv1SEQWa8dABvHvh4IDDnrKnlG","size":16240}}},{"name":"work-station","data":"{\n \"id\": \"500b804b-8d35-420a-b323-243df2e0eaa9\",\n \"name\": \"Work Station\",\n \"description\": \"A spot where a carried item is put down and taken back, and optionally worked on: hold F (or the phone's second button) to chop or wash it, or let it cook by itself, with a progress bar over it. Works with: Pickup Item.\",\n \"category\": \"custom\",\n \"tags\": [\n \"station\",\n \"counter\",\n \"craft\",\n \"cook\",\n \"chop\",\n \"progress\",\n \"multiplayer\"\n ],\n \"requiresSdk\": \"auth-server\",\n \"version\": \"1.0.0\",\n \"changelog\": [\n {\n \"version\": \"1.0.0\",\n \"notes\": \"Initial release: put down and take back one carried item, hold-to-work and timed modes that turn one kind into another with a progress bar, combining two kinds, and station events a script reacts to by the station's Name.\"\n }\n ],\n \"origin\": {\n \"source\": \"builtin\"\n }\n}\n","files":{"ai.md":{"integrity":"sha384-OZWeKCetESx9LCTjPp7QnMkgK3Gw+aBxPvTIylaKnIQwkpyUsWaLrlYtA+ZXDM4c","size":3973},"composite.json":{"integrity":"sha384-o11OXBbs8puE3EBpzZP8RH2je6ApNF5Y8cbiVBvEosI/iFR/wME+hFImnGHPaHBa","size":1360},"data.json":{"integrity":"sha384-ETmIMiOAQcsf8Mya8OL3yPXEy6zFfBtDTK8+PKrA5YSnLitxVE2LgCdLs6r/m9dt","size":855},"scripts/work-station.ts":{"integrity":"sha384-xM18mqGzqGNv7xJ93IlP+B2/vSiQZjSrT+g2liniGgB0NY5cVHSaATVRdJqVt9S5","size":1798},"thumbnail.png":{"integrity":"sha384-WdzqTBASLJKRMCT5llVoVkuIrSoQL3cyutkNphHorfgVsTVoH9lY9rqlIJubWfkJ","size":6483}}}]
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
prefab: pickup-item
|
|
3
|
+
claims-state: game.state.carry
|
|
4
|
+
claims-rpc: carry.act
|
|
5
|
+
claims-messages: carry.event
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Pickup Item — AI guide
|
|
9
|
+
|
|
10
|
+
Something a player picks up, carries in the right hand, drops or throws. The
|
|
11
|
+
Multiplayer Server decides the one holder; every player sees who holds what.
|
|
12
|
+
|
|
13
|
+
The project copy is normally custom/pickup_item/ — check what is on disk.
|
|
14
|
+
|
|
15
|
+
## When to use
|
|
16
|
+
|
|
17
|
+
Anything a player picks up and carries: a ball, a key, a box, a package, an
|
|
18
|
+
ingredient. Place ONE per item, or ONE with `supply` "endless" for a crate that
|
|
19
|
+
hands out the same thing forever. Never hand-roll AvatarAttach, a holder map, an
|
|
20
|
+
E-key system or a "[E] Pick up" label: this prefab does all of it, on phones too.
|
|
21
|
+
Putting items on counters, chopping and cooking is the Work Station prefab; if
|
|
22
|
+
placed, read custom/work_station/ai.md.
|
|
23
|
+
|
|
24
|
+
## API
|
|
25
|
+
|
|
26
|
+
Params (set them in the placePrefab request):
|
|
27
|
+
|
|
28
|
+
- `kind`: what it is ("Tomato"). Stations, recipes and scripts match this word,
|
|
29
|
+
trimmed and case-insensitively.
|
|
30
|
+
- `supply`: "one item" (this thing; hidden at home while someone has it),
|
|
31
|
+
"endless" (a crate: each pick makes a new one, the crate stays), "look only"
|
|
32
|
+
(hidden; only gives its `kind` a look, e.g. the "Chopped Tomato" a station
|
|
33
|
+
makes — place one anywhere for every kind a station or script creates).
|
|
34
|
+
- `pickVerb`, `dropVerb`, `throwVerb`: prompt words. "{item}" marks where the
|
|
35
|
+
kind goes ("Coger {item}"), otherwise it follows the verb. Use the scene's language.
|
|
36
|
+
- `throwable`: F (the phone's second button) throws it ~6 m ahead.
|
|
37
|
+
- `range`: metres to pick it up (default 2).
|
|
38
|
+
- `heldScale`: size in the hand relative to the placed size.
|
|
39
|
+
- `returnSeconds`: a "one item" a script used up comes home after this; 0 waits
|
|
40
|
+
for the next round.
|
|
41
|
+
|
|
42
|
+
The look is the entity's own model: give the Pickup Item entity the GltfContainer
|
|
43
|
+
(or keep the box and set its Material). Child models are copied too. Its Name is
|
|
44
|
+
the item id. Every round start empties all hands and sends items home.
|
|
45
|
+
|
|
46
|
+
Controls: E / the phone's main button picks up; with nothing near it drops.
|
|
47
|
+
One floating label sits over the nearest usable thing ("[E] Pick up Tomato" on
|
|
48
|
+
desktop, "Pick up Tomato" on a phone). The player sees the pick at once; if the
|
|
49
|
+
server refuses (someone was faster) it rolls back with a short notice. The
|
|
50
|
+
prefab declares its touch buttons (E, jump, and F when throwable).
|
|
51
|
+
|
|
52
|
+
No carry pose: the item rides in the right hand. No looping carry emote ships
|
|
53
|
+
with the editor, and the pinned SDK cannot stop a looping emote.
|
|
54
|
+
|
|
55
|
+
Script API: `src/scripts/runtime/carry.ts`, imported as `./runtime/carry` —
|
|
56
|
+
read the module header in that file (heldBy, holderOf, onCarry, giveItem,
|
|
57
|
+
takeItem…). Never restate it from memory.
|
|
58
|
+
|
|
59
|
+
## Do / Don't
|
|
60
|
+
|
|
61
|
+
- DON'T keep your own "who holds what" state or a `game.onRequest('pickup', …)`;
|
|
62
|
+
read `heldBy(player)` / `holderOf(name)`.
|
|
63
|
+
- DO call `giveItem` / `takeItem` only inside `if (isServer())`.
|
|
64
|
+
- DON'T move, hide or delete the Pickup Item entity yourself; the module hides
|
|
65
|
+
it and draws a copy in the hand.
|
|
66
|
+
- DON'T use Spawner copies as pickups: they are client-local and nameless. Use
|
|
67
|
+
`supply` "endless".
|
|
68
|
+
|
|
69
|
+
## Example
|
|
70
|
+
|
|
71
|
+
"Players carry the key to the gate to open it": place a Pickup Item named
|
|
72
|
+
"Gate Key" (`kind` "Key", the key model on it) and a Trigger Area "Gate Zone".
|
|
73
|
+
Then src/scripts/GateKey.ts:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { Entity } from '@dcl/sdk/ecs'
|
|
77
|
+
import { isServer } from '@dcl/sdk/network'
|
|
78
|
+
import { game } from './runtime/game'
|
|
79
|
+
import { heldBy, takeItem } from './runtime/carry'
|
|
80
|
+
|
|
81
|
+
export class GateKey {
|
|
82
|
+
constructor(public src: string, public entity: Entity) {}
|
|
83
|
+
start(): void {
|
|
84
|
+
if (!isServer()) return
|
|
85
|
+
game.onEnterArea('Gate Zone', (player) => {
|
|
86
|
+
if (heldBy(player)?.kind !== 'Key') return
|
|
87
|
+
takeItem(player)
|
|
88
|
+
game.setState({ gateOpen: true })
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
For carry-to-station flows (chop, cook, deliver), see the Work Station guide.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"components": [
|
|
4
|
+
{ "name": "core-schema::Name", "data": { "0": { "json": { "value": "Pickup Item" } } } },
|
|
5
|
+
{
|
|
6
|
+
"name": "core::Transform",
|
|
7
|
+
"data": {
|
|
8
|
+
"0": {
|
|
9
|
+
"json": {
|
|
10
|
+
"position": { "x": 0, "y": 0, "z": 0 },
|
|
11
|
+
"rotation": { "x": 0, "y": 0, "z": 0, "w": 1 },
|
|
12
|
+
"scale": { "x": 0.3, "y": 0.3, "z": 0.3 }
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
{ "name": "core::MeshRenderer", "data": { "0": { "json": { "mesh": { "$case": "box", "box": { "uvs": [] } } } } } },
|
|
18
|
+
{
|
|
19
|
+
"name": "core::Material",
|
|
20
|
+
"data": {
|
|
21
|
+
"0": {
|
|
22
|
+
"json": {
|
|
23
|
+
"material": {
|
|
24
|
+
"$case": "pbr",
|
|
25
|
+
"pbr": { "albedoColor": { "r": 0.96, "g": 0.55, "b": 0.2, "a": 1 } }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "asset-packs::Script",
|
|
33
|
+
"data": {
|
|
34
|
+
"0": {
|
|
35
|
+
"json": {
|
|
36
|
+
"value": [
|
|
37
|
+
{ "path": "{assetPath}/scripts/pickup-item.ts", "priority": 0, "layout": "{\"params\":{},\"actions\":[]}" }
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|