The Optimization Update – HUDs and Level Streaming

Abandoned Title

The Optimization Update Release

The Optimization update releases today and it’s more than just a code cleanup. There are very powerful new features for map and mod authors, server customization, new effects, and support for virtually unlimited map sizes. Let’s cover how these new features will affect the future of Broke Protocol and modding.

Client Level Streaming

Level Streaming

Client level streaming has finally been added to Broke Protocol. This is the feature in most open-world games that loads and unload parts of the level based on distance. This is all done automatically to save memory on lower end devices but as a bonus it means that map authors can create absolutely gargantuan maps without concern for memory or rendering limitations even on mobile.

Full UI and HUD Modding

HUD Modding

HUD and full UI modding is now here. Previously missing UI assets are now in the BPResources modding package so modders can create, style, and customize any part of the UI and even the HUD now. You can even add your own elements for scripting with the server Interface API. There’s been API updates and fixes for Element lookups and Cursor handling too if you check the API changes below.

Destructible Effects

Destructible Effects

Some new Effects have been added that can be modded as well. Destructible objects can now spawn any kind of gameobject or particle system when they break. There are some built in effects for selection but these can be fully modded with custom assets and particle systems. Another step in making the world feel more reactive.

Other Updates

AI Targeting

Tons of other fixes and improvements made it in for this release. You’ll find AI improvements, World Builder fixes, Thai Language rendering corrected, and a lot more.

Here’s the full Optimization Update changelog:

v1.42 Optimization Update Changelog

  • Game Changes:
    • Client-side level streaming added (based on Render Distance)
    • New Destroy Effects added for modding
    • Destroy effects added to light poles and fire hydrants
    • Fully moddable HUD added to BPResources
    • Thai language rendering fix
    • Sync permissions to clients when groups file changes
    • Optimized game memory usage
    • Improved logging for failure to find UI Elements
    • Fixed some Input limitations when Cursor is active, etc.
    • Laser behavior changed (WIP)
    • Attempt to fix a UI element loading error with Android AssetBundles
    • Fix for broken Action Menus requiring Disconnect/Rejoin
    • All NPCs can be knocked out and will recover after a while
    • Fixed broken AI when chasing airborne targets
    • Improved player ground detection and physics on some surfaces
    • Catch a client error related to Deformable components
    • Cloud positions now randomized
    • Added static camera limits due to culling
    • More unified Asset snapshot preview lighting for built-in and custom assets
    • World Builder fix for events and other string data getting lost
    • World Builder fix when adding prefabs with ‘Select Object’ active
    • World Builder fixes for item selection and spawning
    • Fix for strange item bounds in asset snapshots (thumbnails)
    • Fix RegisterMenu sometimes showing stale data
    • Fixed UI QuerySelector to work on paths with mixed types
    • Voice Chat library updated and rebuilt with better settings
    • Updated game engine and packages
    • Fixed missing face on stair mesh
    • More UI modding capabilities (see API changes)
  • API Changes
    • Default menus will try to clone Custom UIs with the same UXML name if available
    • svPlayer.VisualElementCursorVisibility(string elementName)
      • Binds cursor visibility to a VisualElement
      • Disables Cursor automatically when element destroyed
    • SvPlayer.randomSpawn moved to GameSourceEntity type
      • EntityCollections.RandomNPC returns any NPC now, not just randomSpawns
      • Added SvPlayer.ResetPath() to clear pathing data
      • Added SvPlayer.LookTarget() for aiming/shooting at target separate from movement
      • SvManager.Instance.AddNewEntityExisting(..)
        • respawnable parameter no longer optional
      • SvPlayer.PlayerData removed
        • Use SvPlayer.CustomData directly
      • Sector -> NetSector
      • sectorRange -> netSectorRange
      • visibleRange -> netVisibleRange
      • visibleRangeSqr -> netVisibleRangeSqr
      • manhattanRange -> netPerpendicularRange
      • Some Sector methods removed
        • Reimplemented in GameSource where needed
API Changes

See you!

-Benz

Official Discord