sbox — Обновление 08.04.2026
👽 Sandbox Game (Garrys Mod 2) открыли в общий доступ. Новый визуальный язык для скриптов - Doo. Теперь каждый сможет обновить документаций, а ИИ прочесть. Новое игровое меню
Оригинал (ссылка)
Sandbox Game: Общий доступ
Это всегда был план, но мы наконец-то открыли исходный код нашего игрового режима Sandbox (он же Garry's Mod 2), чтобы вы могли учиться и заимствовать оттуда. Вы также можете делать запросы на внесение изменений и сообщать об ошибках в репозитории GitHub.
Документация в общем доступе
Мы перенесли наш исходный код документации на GitHub, он уже был в markdown, так что это не было сложно. Это означает, что он с открытым исходным кодом, любой может создать или редактировать документацию с помощью pull request.
Когда репозиторий GitHub обновляется, изменения синхронизируются с нашей страницей документации на этом сайте.
Это не замена тому, чтобы писать документацию самостоятельно, на самом деле это упрощает и нашу работу. Но это также то, о чем все давно просят помочь, и учитывая качество открытых вкладов в движок, это имеет смысл.
LLM теперь могут читать документацию
Нравится это или нет, люди используют ИИ для кодирования, и он пытается читать нашу документацию. Вместо того чтобы ИИ запрашивал, сканировал и читал целые веб-страницы, мы добавили несколько вещей, чтобы помочь ему (и разгрузить наши серверы):
- llms.txt — файл, который llms смотрит, чтобы понять s&box, а также дальнейшие ссылки на все страницы документации
- docs.md — добавление
.mdв конец любой страницы документации теперь выводит её в сыром markdown, без html, без javascript, без стилей.
Games меню
В соответствии с нашей целью улучшить интерфейс платформы перед релизом, мы улучшили интерфейс игрового хаба.
Теперь есть большой карусель с представленными играми, и мы используем новый компонент карточки игры, что обеспечивает согласованность с новым экраном главного меню и новым хабом.
У нас еще есть много улучшений, которые нужно сделать в меню до и после релиза.
Doo
Я добавил Doo в движок. Doo стремится быть более простой и дружелюбной альтернативой ActionGraph. У него есть четкие ограничения и ограничения, он не предназначен для создания целых игр или выполнения сложной логики. Он должен быть более продвинутой версией Entity I/O.
Использование простое, в компоненте определите его:
[Property] public Doo OnPressed { get; set; }Run( OnPressed );
// или с аргументами
Run( OnPressed, config =>
{
config.SetArgument( "user", presser );
} );Это мешало нам добавить стандартную библиотеку компонентов для маппинга, так что это будет следующим шагом для настоящего тестирования.
Исключение кулинга каскадных теней
Обратили внимание, что большая часть времени кадра на Steam Deck в главном меню происходит из-за второго каскада теней солнечного света.
Единственное, что отсутствует в нашей новой реализации CSM, это то, что мы никогда не перерисовывали то, что находится внутри предыдущего каскада, я с этим разобрался.
Учитывая, что теперь мы используем сферический каскад, я пришел к выводу, что мы можем установить дальнюю плоскость теней на краю сферы, также заставляя дальнюю плоскость отсеивать все, что находится за пределами границ сферы.
Должно улучшить производительность в областях с большим количеством солнечных теней.
Инструмент прокладки кабелей
Инструмент, который позволяет создавать кабели простым щелчком мыши.
Sandbox Game: NPC
На этой неделе я добавил двух новых NPC. Один - это простой боевой NPC, который пытается стрелять и убить вас с помощью пистолета.
Другой - это Roller. Он еще в разработке, но полностью основан на физике, катится и прыгает на вас.
Убийства NPC теперь также отображаются в ленте убийств. Наша система NPC является открытым исходным кодом в рамках публикации игрового режима, так что не стесняйтесь копировать и вставлять ее в свои проекты!
Sandbox Game: Эммитеры (излучатели)
У нас сейчас один эмиттер. У него есть несколько эффектов. Мы добавим больше. Также мы добавим поддержку мастерских, чтобы вы могли добавлять свои собственные.
Sandbox Game: Достижения
💙 Русскоязычное сообщество s&box
Changelogs
🎁Added
- Doo, a simpler visual scripting system for wiring up component events — designed as a friendlier alternative to ActionGraph for common use cases
- Mesh cable tool in the mesh editor for creating cables, working similarly to Hammer
- New games dashboard with a rotating carousel and redesigned game cards
- `lang.showkeys` cvar and editor toggle to display localisation keys instead of translated text for debugging
- CSS `overflow: clip` and `overflow: clip-whole` properties for UI element clipping
- CSS `background-playback-state` property to pause video backgrounds
- `[ShowIf]` and `[HideIf]` attributes now support null checks
- Center option added to the pivot list in mapping tools
- `IFormattable` whitelisted for use in the sandbox. Thank you @RumBugen!
🧼Improved
- Texture editor moved into the inspector - Thank you @boxrocket6803!
- Cascaded shadow map exclusion culling — shadows no longer render beyond each cascade boundary and objects from previous cascades are no longer re-rendered, significantly improving shadow performance
- Networking thread now processes messages at the same tick rate as the main thread
- Particle sprite GPU upload performance — buffer uploads moved into valid Graphics.Scope to avoid unnecessary render context creation
- Network packet byte arrays are now pooled in DecodeStream, reducing GC pressure for large compressed payloads
- Fixed a Steam buffer GCHandle leak where N-1 handles would leak per broadcast packet; replaced with a cheaper memcpy approach
- `Package.MountAsync` now supports mounting specific package revisions, allowing games to pin map versions
- `LoadingScreen.IsVisible` is no longer overridden every frame, allowing games to manually control loading screen visibility
- `Game.ChangeScene` now shows a loading screen for all clients instead of just the host
- Engine overlays remain visible during loading states
- ScreenPanel `Scale` property now works when Auto Scale is enabled, and `Opacity` now correctly affects ScreenPanels
- Undo support for WrapTextureToSelection and WrapTexture operations in the mapping tools
- Pause modal now uses the lighter HtmlPanel instead of a full WebPanel
- Launcher window geometry is saved when auto-closing
- PATH changes are now a no-op on non-Windows platforms. Thank you @MrSoup678!
🪛Fixed
- Disabling shadows on a directional light now works correctly
- Shader compiler shutdown crashes resolved by properly draining the material system and preventing Steam callbacks after managed shutdown
- Exceeding the maximum light count no longer triggers assertions or causes directional light flickering
- `GetPixels` arguments are now validated to prevent negative values, fixing a security vulnerability
- Referencing a deleted prefab no longer crashes — the editor shows a warning and preserves instance data for recovery
- Creating a prefab from a GameObject now correctly restores the object's position
- Reverting changes on a nested prefab instance no longer wipes all outermost overrides
- Applying changes to a nested prefab no longer regenerates all GUIDs
- Fixed cyclical library references caused by built-in projects referencing libraries
- Fixed a null `AssetTypeAttribute.Name` NRE that silently shut down the GameInstance on editor startup
- Game loading is now properly cancelled on disconnect, preventing background loads from continuing
- Fixed filesystem unmount exceptions when a load is cancelled
- Prop gibs now properly inherit velocity when spawned in a batch group
- `IgnoreSingleObject` trace now correctly checks both rigidbody and collider GameObjects
- Glass shader tint now blends correctly through multiple layers using premultiplied alpha blending. Thank you @Infiland!
- `backdrop-filter: blur` no longer generates excessive mipmap levels Thank you @Infiland!
- Toast notifications (e.g. achievements) no longer persist indefinitely
- Post-game info popup is no longer dismissed on click, so its actions can be used. Thank you @RumBugen!
- Fixed human models having deformed hands with the "holditem" holdtype
- Fixed TextRenderer alignment not updating on re-enable
- Fixed possible NRE in `Button.Text` setter
- Fixed possible NRE in
UpdateMusic