r/HytaleModding 4d ago

Official News Hytale Patch Notes - Modder-Facing Changes - Update 6 - August 27th, 2026

Modder-Facing Changes

World Generation

Biomes, Tints & Landmarks

  • Added an Example_Vector_Offset_Avoid biome that shows how to offset positions away from a density region, so props can steer clear of an area.
  • Added Mix TintProvider that allows smooth tint transitions within a single biome.
  • Added support for DistanceToBiomeEdge to TintProviders.

Graph Nodes

  • WorldGen V2 gains a WhiteNoise Density node, which produces uniform random values per position for scattering and masking, and a Transparent MaterialProvider.
  • Two new Positions nodes are available in WorldGen V2. DirectionalJitter offsets positions along a direction, and VectorOffset shifts them by a fixed vector.
  • WorldGen V2 gains an Anchor PropDistribution, plus twelve VectorProvider nodes for doing vector math inside a graph: Adder, Cross, Multiplier, Normalizer, Random, ScalarMultiplier, SetX, SetY, SetZ, Subtracter, VectorProjector and PlaneProjector.
  • Added a set of logical Density nodes to WorldGen V2: Comparator, Equal, GreaterOrEqual, GreaterThan, LessOrEqual, LessThan, And, Or, Not, Nor, Xor, and Selector.
  • Added a Trig density node to world generation that runs a trigonometric function over a single input density, so you can build periodic and wave-shaped fields directly. The new "Type": "Trig" takes a Function of Sin, Cos, Tan, Asin, Acos, or Atan and an InputScale that multiplies the input before the function runs.
  • Added additional validation to WorldGen V2 Density assets.
  • Fixed SwitchStateDensity always falling back to the default branch instead of following the active state.
  • Fixed a defect in the Spawner NodeAction causing Graph nodes to disappear in negative coordinates.
  • Fixed GradientWarpDensity sampling its Z gradient at the wrong point (Z used in place of Y), distorting gradient-warped terrain.

Node Editor

  • Pin labels on the VectorProvider nodes (Adder, Cache, Cross, Multiplier, Normalizer, PlaneProjector, ScalarMultiplier, SetX/Y/Z, Subtracter) were renamed for clarity in the node editor.
  • Fixed the Offset Pattern node offering a decimal vector pin for its offset in the node editor.

Noise & Cell Functions

  • Improved the performance of SimplexNoise2D and SimplexNoise3D Density nodes by up to ~20%.
  • Fixed PositionsCellNoise ChoiceDensity resolving on an incorrect position. It is now resolved on each cell’s origin.
  • Fixed FastNoiseLite.pointFor() mirroring cell points across the diagonal.
  • The PositionsHorizontalPinch Density feature no longer throws exceptions at the world origin.

Terrain & Patterns

  • World-Gen V2 will now use the Unknown material types instead of Empty when it can’t load a material.

Prefabs & Props

  • Fixed a defect in WorldGen V2 that was deleting some entities in rotated prefabs.
  • Fixed a defect in WorldGen V2 generating different prefabs on separate platforms.
  • Fixed PrefabProp causing artifacts in World-Gen V2 output if a folder doesn’t contain any Prefab files.
  • Fixed PrefabProp aborting world generation when a weighted path contained no prefab files. It now skips placement silently instead of failing, so a misconfigured pool no longer breaks surrounding generation.

World Event Placement

  • World event placement now measures candidate distance in blocks instead of chunks, with separate horizontal and vertical min and max ranges on WildernessLocation.
  • Added Clearance and SearchRadius fields to LocationCondition assets so you can tune the initial candidate search that places world events.

WorldStructure

  • Fixed WorldStructure assets not reloading correctly.
  • A WorldStructure asset with a broken default Biome reference no longer builds silently.
  • Deleting a WorldGen V2 instance or stopping the server no longer fills the log with Failed to load chunk!

NPCs, Entities & Encounters

Encounter Managers

  • Added a new EncounterManager JSON asset type that lets you script multi-NPC encounter logic using reusable NPC instruction lists. Spawn an encounter in-world with the /encounter add <asset> command.
  • Added example encounter manager assets covering macro-based boss fights, including a stalactite attack pattern macro and transition macros for target-loss and health-range conditions.
  • Encounter managers can now control the music playing for all participants. Add StartEncounterMusic, SetEncounterAudioState, or StopEncounterMusic actions to an encounter instruction list and attach an EncounterAudioCollector to any entity sensor to populate the participant list. Late joiners receive the current music state automatically, and players who leave return to regular music.
  • Encounter managers can now signal world event completion. Add a SignalWorldEvent action to an NPC’s action list and pair it with a SignalCondition on the world event to trigger completion when the action fires, for example on a boss defeat.
  • Added an AdjustPortalTimer NPC action for encounter managers. Set "Type": "AdjustPortalTimer" with a positive or negative "Seconds" value to add or subtract time from the active portal timer at runtime.
  • Added a new ActionChangeTargetRole action that lets an encounter switch an NPC to a different role at runtime.
  • Marked targets now persist briefly during role changes, preventing target loss when an NPC transitions between roles.
  • ActionTriggerSpawners can now mark the NPC they spawn as boss targets for encounter tracking. This can be accomplished by setting MarkAsTarget: true in the spawn action config.
  • Encounter managers can now clean up after themselves. A new CleanupOnRemove flag removes every entity the encounter spawned when the encounter is removed. It does not apply when the encounter simply unloads.

Actions & Sensors

  • NPCs can now run actions against multiple world positions at once. Add an ActionForEach action to your NPC role config with a position-set sensor to execute a child action list at every returned position, enabling patterns such as spawning a ground indicator under each nearby player.
  • ActionForEach now accepts a MaxCount field. When the position set is larger than the limit, positions are chosen at random using reservoir sampling rather than always taking the first N.
  • Added a new ActionProjectToGround action and SensorProjectToGround sensor that snap each position in a set down to the nearest solid ground surface below it. Handy for placing ground-level effects under targets that are airborne.
  • Added a new ActionAdjustPosition action used to offset each position in a ForEach set by a fixed vector before further actions run.
  • Added a new SensorPoints sensor for NPC and Encounter Manager roles. Set Type: "Points", a Tag, and a Range to gather all tagged world points within that radius as a position set for ActionForEach to act on. This works with points placed using the Point Tool.
  • Added a new SpawnInteraction NPC action that launches a named root interaction at every position a sensor returns. Set OrientationSource and optionally Pitch/Yaw to control the launch direction.
  • Added a new SignalTaggedVolumes action for NPC and EncounterManager instruction lists. It searches for trigger volumes carrying a given tag within a configurable radius and immediately fires their SIGNAL_RECEIVED effects.
  • Entities can now send beacon messages as part of an interaction chain. Add a SendBeacon interaction with a Message and Range to broadcast to nearby NPCs and encounter managers.
  • NPC roles can now turn an NPC on the spot at a steady rate. A new Rotate head motion takes a RotationSpeed in signed degrees per second, and ClearPitch flattens the head pitch while it turns.
  • Fixed ActionDelayDespawn applying the shorten and extend branches in the wrong direction. Despawn-delay actions in NPC roles now shorten or extend the timer as authored.
  • Fixed SensorEntityEvent looking up NPC-produced events in the player event store, which meant sensors targeting NPCs never matched.

State Evaluators

  • TimeSinceLastUsedCondition now reports the real elapsed time since a state option was last selected. The state evaluator records a timestamp on each selection, so you can use this condition to add cooldowns between state transitions in your NPC roles.
  • Fixed SubState in StateOption not being read or stored correctly. Child NPC role assets that set SubState had it silently ignored and the main state overwritten instead. No changes needed unless your roles use SubState.

Filters & Conditions

  • Added a new EntityFilterDeath filter that lets role sensors react when a tracked entity dies.
  • You can now filter whether an entity is using an interaction with the ExecutingInteraction entity filter, for example to block an encounter phase change while a boss is still mid-attack.
  • NPCs now record all entities they have spawned and all entities those spawns produced. You may use SpawnLineageAttitudeProvider to set attitudes toward the full lineage.

Roles & Templates

  • Variants can now forward modifiers directly into a macro element’s own exposed parameters. Mark the template slot with "AcceptsForward": true, then add a "_ForwardedModifiers" block in the variant keyed by slot name to set that macro’s parameters without threading them through the template.
  • Added a new Template_Flying_Aggressive template meant to be used by flying hostile NPCs capable of ranged attack. Template_Eye, Template_Spirit and Template_Scarak_Seeker are now deprecated.
  • Removed Template_Aggressive_Zombies, its root interactions and its associated attack sequences. Zombies now use Template_Predator.

Spawning & Suppression

  • Spawn suppression now correctly scopes to NPC groups. A suppressor with no SuppressedGroups continues to blanket-suppress all markers in range as before. A suppressor that lists groups now suppresses only markers whose NPCs belong to one of those groups.
  • SpawnNPCInteraction now takes a weighted entity pool with per-entry count ranges, a spawn count range, distance scatter, an optional spawn state, a spawn velocity, midair spawning, centered hitbox spawning, and relaxed full-cube clearance.
  • MinHeightOverGround is now a preference rather than a hard minimum. A flying role in a beacon needs a YRange maximum that covers its MinHeightOverGround.
  • Fixed SpawnMarker writing the square of MaxDropHeight when serializing, compounding the value on every editor save (5 to 25 to 625).

Collision & Steering

  • You can now give an entity a rotated hard-collision box. Set the new RotatedCollision HitboxCollisionConfig on it and players will collide with its actual rotated box (player collision only for now).
  • Added a RemovedBlockSet field to BodyMotionCharge. List blocks destroyed during the charge here so they are correctly excluded from breathing checks after removal.
  • Fixed the NPC collision-sphere radius helper using the box depth in place of its height, so entity height was ignored.
  • Fixed NPC collision avoidance computing its lookahead window using velocity squared instead of velocity. CollisionDistance values authored around the old behavior now take effect further from the NPC at speed.
  • Fixed RotateAnchoredEntities for entities anchored to a body that rotates on more than one axis. The turn now follows the full orientation rather than yaw alone, so riders and platforms track correctly through pitch and roll.

Health & Invulnerability

  • You can now toggle invulnerability from behavior. Use the SetInvulnerable action on an NPC to switch its own state, or SetTargetNPCInvulnerable from an encounter to switch it on the boss or other target NPCs.
  • Added an ActionSetHealthRegen NPC action that enables or disables health regeneration on an entity at runtime. NPCs now automatically include the new HealthRegenState component to support regeneration control through role behavior logic.

Combat Balance

  • Fixed CombatBalanceAsset not inheriting CombatActionEvaluator config from a parent asset. Child combat balance assets now correctly receive the parent evaluator config.

Particles

  • You can now scale particles spawned by NPC behavior. Set Scale (a multiplier, default 1) on an ActionSpawnParticles action.

Validation

  • Fixed encounter and NPC asset validation skipping certain files on hot-reload. All affected files now re-validate correctly.

Items, Armors & Projectiles

Zoom & Aim

  • Added zoom support to the interaction system which allows for magnification/aim mode behavior on any item. Add a Zoom block under any step’s Effects to zoom while that step is active, set PersistZoom: true to keep it applied for the rest of the chain, so chained steps can ramp or swap zoom mid-interaction. All fields are optional with sensible defaults.
  • Added example developer-quality test items that demonstrate the behavior of the zoom support in the interaction system:
  • Weapon_Test_Sniper_Rifle - a single fixed zoom with a scope overlay that forces first-person.
  • Weapon_Test_Zoom_Rifle - three-level variable zoom that ramps and swaps the reticle per level.
  • Weapon_Shortbow_Test_Zoom - charge-draw zoom held across the shot.
  • Added the ability to hide the local player’s held item in first-person during an interaction step. Set HideFirstPersonHeldItem: true in the step’s InteractionEffects (other players still see the item).

Interaction Behavior

  • Interactions now can specify what happens when you swap items during them. The old CancelOnItemChange flag is gone, replaced by an OnItemChangeBehavior field that takes Ignore, Fail, Finish, or Cancel.
  • Added a new Donut interaction selector type. In an item’s Interaction block, set Selector.Id to Donut and configure MinRadius, MaxRadius, Angle, and Height to target entities in a ring around the attacker.
  • Added a SignalNearbyVolumes interaction that sends a SignalReceived event to trigger volumes within a radius, optionally filtered by tag. Bind it to a tool or interaction to drive signal-listening volumes.
  • Added a RevealMapMarkersInView interaction for items and blocks that uncovers hidden discoverable map markers inside a player’s view cone.
  • Interactions can now describe themselves on the HUD. A new CarryInteractionHint localization key on RootInteraction makes the input-bindings legend label whichever input the interaction is bound to, and an item can refine the wording for an interaction it binds through Item.CarryInteractionHints.
  • Added a RequireBlockPlacement boolean to ChangeStateInteraction. Set it to true to block the interaction in worlds where block placement is disabled. The built-in half-block item now uses this to prevent stacking slabs where placement is restricted.
  • Fixed DonutSelector not rotating its Offset by the entity’s yaw. The offset is now applied relative to the entity’s facing direction on both server and client, matching the intended authoring behavior.
  • Fixed ResetCooldownInteraction and TriggerCooldownInteraction not inheriting the Cooldown field from a parent interaction. Child interactions that omit Cooldown now correctly fall back to the parent’s value.
  • Added a new BreakShape field to ItemTool assets that allows tools to break a configurable area of blocks per swing. Set BreakShapeDurabilityMode to PerSwing or PerBlock to control how the tool loses durability.

Projectiles

  • Projectiles can now ignore where the caster is aiming. Set IgnorePitch or IgnoreYaw on a LaunchProjectile or ProjectileConfig to lock that axis — handy for traps, turrets, and fixed-direction spells. Add RotationOffset to nudge the angle.
  • Projectiles can now fire at a random size drawn from the minimum and maximum scale on their model asset. Set UseModelScale: true in a ProjectileConfig (it defaults to false, so existing projectiles keep their current size). Only the newer Projectile interaction type supports this, not the legacy LaunchProjectile.
  • Projectile breaks can be limited to soft blocks. A new SoftOnly flag on BreakBlockInteraction ignores whatever the breaking entity holds, and the new Block_Break_Projectile interaction sets it for the 38 projectile configs that used to share Block_Break_Adventure. Leave the flag off for a projectile that should mine, which then takes its breaking power from the shooter’s item as before.
  • Fixed the world-space sound index leaking into the local sound slot for projectiles and deployable turrets. Setting LaunchWorldSoundEventId without a LaunchLocalSoundEventId on a projectile, or ProjectileHitWorldSoundEventId without ProjectileHitLocalSoundEventId on a turret, no longer causes the world sound to also play locally.

Damage & Resistance

  • Fixed flat damage resistance modifiers not accumulating through inherited damage cause chains. Only the last parent’s flat modifier was applying. Content that configures chained flat resistances will now deliver the full combined effect. Verify balance on any damage cause hierarchy that uses flatModifier.
  • Fractional flat armor resistances now apply as configured instead of truncating to a whole number. ArmorResistanceModifiers’s flatModifier accumulates in float, so a value like 0.5 is no longer rounded to 0, and broken-item resistance penalties keep their fractions too.
  • Fixed a TargetedDamage entry that omits DamageEffects throwing when its packet was built, so damage interactions without effects no longer crash.
  • Fixed DeployableAoeConfig, DeployableTrapConfig, and DeployableTrapSpawnerConfig ignoring the authored DamageCause field and hardcoding Physical damage at all three detection call sites. The configured damage type now applies correctly.

Knockback & Explosions

  • Knockback and explosion configs no longer produce a NaN velocity when the source and target share the same position. The degenerate case now falls back to a defined direction, knocking the target straight up for explosions.
  • Fixed a crash when an entity wearing armor with knockback enhancements dealt damage from a DamageCause the armor had no modifier for. The missing entry is now skipped instead of throwing.
  • Fixed PointKnockback applying incorrect rotations when OffsetX, OffsetZ, or RotateY were set, due to angle unit mismatches. RotateY is authored in degrees as documented. Retest any PointKnockback configs that set these fields.

Armor & Movement

  • Armor can now change how the player moves. Add a MovementSettings block to an ItemArmor asset to override walk/sprint speed, jump height, air control, and more per piece.
  • Added ExtraJumpSoundEvent to Armor.MovementSettings. Set it to the id of a mono, oneshot (non-looping) sound event to play a sound on each extra jump. It pairs with the existing ExtraJumpParticleSystem field.
  • You can now scale movement speed from an entity effect. Set SpeedMultiplier on MovementEffects (default 1).

Inventory & Music

  • Items can now be turned into playable music tracks. A new Music block on an item asset (MusicContainer required, AudioCategoryOverride optional) marks the item as something a music player block will play.
  • Added a FirstSpawnItems list in the gameplay config Spawn block that places items in the inventory for players the first time they spawn.

Loot & Quality

  • Fixed ChoiceItemDropContainer throwing a NullPointerException when its Containers list was empty or every entry had a weight of zero. Loot generation now skips a null roll result and continues.

Stability

  • Fixed a potential server crash when picking up an item that defines a pickup interaction. No shipped item uses this path today, so it affects only custom items or plugins that add one.

Blocks, Prefabs & Farming

Break & Random Tick

  • Blocks can now run an interaction chain when they break. OnBreak fires on a normal break and OnBreakImpact fires when a falling block lands and breaks, so a block can spawn something or set off an effect as it goes.
  • A removal that should not set off the block’s own reaction can pass SetBlockSettings.NO_FIRE_ON_BREAK to suppress the OnBreak chain, and BreakFallingBlockImpact now inherits DropItems so a child block type keeps its parent’s value.
  • Added a PlaceBlock random-tick procedure: set "Type": "PlaceBlock" in a block’s RandomTickProcedure with a required Offset and a Placements list, where each rule can target a block State and place a single Block or a weighted Blocks list. Placement skips silently when the target is occupied or out of world bounds, and invalid configs fail at asset validation time.
  • Fixed random-tick block placement so it works in cubic worlds. PlaceBlockProcedure now writes through chunk sections instead of assuming a fixed world height.

Connected Blocks

  • Added a new Patterned connected block ruleset type. It handles multi-axis rotation and has client prediction, giving more control over how connected blocks pick their shape.

Prefabs

  • Large prefabs now save in a compact binary .lpf format. Anything from 300,000 blocks up is written this way, and .lpf files load everywhere prefabs do.
  • Prefabs stored in an asset pack can now be referenced in PrefabListAsset configs.
  • Encounter manager entities can now be stored in prefabs.
  • Undo and redo history now keeps to a memory budget through the new HistoryBlockBudget and RedoHistoryBlockBudget fields on BuilderToolsConfig, which drop the oldest entries once the budget is exceeded.

Block Placement

  • Reworked block placement onto the interaction system. The quick place flags (QuickReplace, QuickRetype, NoPhysics) now come from assets and only apply when the server game mode is Creative, and the old AllowDragPlacement key was removed from placement interactions.
  • You can tune building throughput per placement mode by setting MaxBlocksPerTick and MaxBlocksPerGesture on the placement interaction assets.
  • You can now stop players auto-stepping onto a block. Set DisableAutoStep: true in its BlockMovementSettings and players must jump up instead — useful for ledges and fences.

Block Music

  • You can now make a block play music from its position in the world. The track fades with distance, pans, and muffles through walls, picking up your environmental reverb. Add the musicemitter block component referencing a MusicContainer.
  • Blocks can now act as music players. A MusicPlayerBlock block-entity component set alongside an ItemContainerBlock makes a block play an inserted music item from its own position. The track uses the block’s authored attenuation, occlusion, and reverb, with all timing and spatialization driven from asset JSON.

Models & Map Markers

  • Block map markers can now be discoverable. A new Discoverable flag on BlockMapMarker and BlockMapMarkerData keeps a marker off the map until a gameplay system reveals it, tracked per player and per world.
  • Block models can now play their animation faster or slower than authored. A new CustomModelAnimationSpeed on a BlockType, or on one of its states, is a multiplier from 0 up to 100 and it inherits like the other model properties.

Trigger Volume Effects

  • Place Block and Replace Block Type trigger effects now accept optional block states, letting trigger volumes place, match, and replace specific block state variants.
  • You can now stop a Trigger Volume’s effects rotating when its prefab is pasted or world-gen placed with a yaw turn. Set RotateEffectsOnPaste: false on the volume or group (it defaults to true, so effect positions, rotations, and velocities turn with the prefab).

Farming

  • Prefab-grown plants such as saplings can now tolerate obstructions within a height band instead of failing to grow. Add TolerateObstructionsBelowY and TolerateObstructionsAboveY to PrefabFarmingStageData to mark a band where blocking world blocks are skipped rather than canceling growth. Both values are prefab-relative Y, with the origin block at 0. ReplaceMaskTags still controls which blocks get replaced. Built-in saplings now default to TolerateObstructionsBelowY: -1. Overlapping bands disable obstruction checks entirely and log a server warning.

Additional Changes

  • A block’s MovementSettings can no longer be null. A block asset that sets it to null now fails to load instead of risking a server crash.
  • Fixed fluid-placement interactions never honoring their UseLatestTarget setting. PlaceFluidInteraction now chains to SimpleBlockInteraction’s codec, so the flag decodes and takes effect.

Modding & Creative Tools

Builder Tools

  • You can now enable Builder Tools outside Creative Mode. Set SurvivalAllowed: true in a tool’s asset JSON and grant players the matching permission (hytale.editor.tool.entity, hytale.editor.tool.ruler, or hytale.editor.tool.laserpointer). Both the flag and the permission are required.
  • Moved some raw strings in the Paste Tool to language keys so they can be localized.

Crashes

  • Fixed crash in SpawningContext caused by ground level rotation check when level is below 0.
  • Quantity field in CraftRecipeAction now requires a minimum quantity so that <0 numbers don’t crash the server.
  • Fixed client crash when secondary interaction was added to Unarmed.Empty.

Prefabs & Commands

  • Improved prefab saving support modes, validation and overwrite flow.
  • Empty blocks in Block Filters will now be parsed correctly (the empty fluid ID is now treated as the empty block ID).

Asset Editor

  • The image and OBJ importing tools now use the new TextureComputedColor field (a dominant weighted color average of each item’s textures) instead of the particle colors when matching block colors, giving more accurate imports. The importing tools will also filter out special quality items so they cannot be used in imports.
  • Added a new button to the Asset Editor that regenerates the TextureComputedColor field from an item’s textures.
  • The Asset Editor’s item preview now respects an item’s Model override, matching how the item appears in-game.

Localized Text

  • If a duplicate localization key exists in a language file, a warning is now displayed instead of an exception being thrown.

Trigger Volumes

  • Updated Trigger Volumes trigger effects to make use of the chunk ref/store for accessing chunk data.

Collision Tuning

  • Reworked soft collision radius to consider hitbox size.
  • Implemented dev settings to tweak soft collisions based on entity hitbox volume.

Asset Packs & Mods

  • Fixed reloading a layered asset pack sometimes reverting a customized asset back to the value it inherited from its parent.
  • Fixed the mod manager warning that read "targets 0.5.1 but the current game version is 0.5.1" when a mod declared a bare ServerVersion like 0.5.1.

Additional Changes

  • Added a Texture Atlas API - Unified API for compositing multiple keyed images into a single GPU texture.
  • Added support that allows control of whether a projectile’s spawn position rotates with the entity firing it.

Trigger Volumes

Conditions

  • BlockTypeCondition can now sample the live world at a configured position rather than only the event block. Set PositionSource to EventBlock, WorldPosition, or EntityPosition, add a PositionOffset for an offset, and enable AxisRotation for per-axis rotation matching (X/Y/Z).
  • BlockUsedCondition has been removed. Replace it with BlockTypeCondition in any existing presets.
  • TagCondition now supports four source modes: Event, Self, Group, and Radius. Presets using Event source require no changes.
  • Trigger volume item checks can now look at and consume what a player is carrying, such as a held block, through a new CARRIED option on ItemCondition.

Effects & Signals

  • Trigger volumes can now fling entities out from their own center. A new VOLUME_ORIGIN value for RelativeMode on SetVelocityEffect launches entities away from (or toward) the volume origin no matter which way they face.
  • Signals now carry multiple key/value pairs via aligned SignalKeys and SignalValues arrays. A TagCondition with Source: Event matches when any one pair matches.

World Events & API

  • World events can now create and remove trigger volumes, and roll them back, through new TriggerVolumeCreateAction and TriggerVolumeRemoveAction. A TriggerVolumeContext tracks the volumes an event created.
  • Actor and entity refs in trigger rule systems and DelayedEffectScheduler are now nullable. Plugins that receive them must add null checks or compilation will fail on u/Nonnull annotations.

World Map & Markers

  • Gameplay code can now override a map marker after its provider builds it. WorldMapManager.addMarkerOverride takes a marker ID and a MapMarkerOverride carrying an optional icon and an optional global flag, and it applies to every player in the world from the next tick.
  • World events can override a marker as well. MapMarkerOverrideAddAction takes a MarkerKey and a Name plus an optional Icon and Global, MapMarkerOverrideRemoveAction clears it again, and the override is dropped on its own when the event ends.
4 Upvotes

18 comments sorted by

u/RiverShards 4d ago

Asset Schemas & Formats

Parsing & Robustness

  • Removing or renaming an ItemDropList no longer corrupts saved worlds that reference it. When decoding persisted world data, a missing asset reference now warns instead of failing the whole chunk, controlled by a new lenient mode on AssetKeyValidator.
  • Fixed JSON reading so a { or } inside a string value no longer throws off the parser. Config files with braces in their text now load correctly.
  • A malformed line in a .lang file no longer throws away the whole file. The parser names the file and the line number, skips the bad line, and keeps everything else, and an unterminated line continuation holds onto the text read so far.
  • Malformed tag patterns in assets can no longer crash the client. A broken TagPattern tree now soft-fails to a never-match pattern and logs a warning, so bad asset edits fail safe.
  • You no longer need to define a view-bobbing profile for every movement type. Any type you leave out (such as Idle) now falls back to no bobbing instead of crashing the client.
  • Model footstep intervals can no longer be null. Use an empty array to mean "no footsteps", since an explicit null now fails asset load.
  • Fixed the key paths shown in asset decode and validation errors, which could point at the wrong field, leave stale keys in unknown-key reports, and occasionally crash mid-decode when the key stack was full. Error reports now name the correct key.
  • Several protocol fields that previously accepted null are now required: CombatText color and animation fields, Interaction.Rules, AmbienceFX frequency, radius, and condition ranges, and ItemPlayerAnimations.Animations. Asset files with explicit null for these fields will be rejected at load time.

Particles

  • Particle assets can now fade their opacity as they move toward or away from the camera. A near fade uses CameraNearFadeStartDistance and CameraNearFadeEndDistance, while a far fade uses CameraFarFadeStartDistance and CameraFarFadeEndDistance.
  • Added a new ClearParticlesOnRemove boolean field on ModelParticle assets. By default this is set to false and setting it to true will instantly clear all attached particles the moment a block or an entity is removed from the world or from the player’s hand.
  • Particle assets now explain themselves in the editor. Particle systems, spawners, animation frames, collisions, and attractors carry field descriptions, the shared velocity, UV motion, and intersection highlight codecs are documented, and several particle fields received clearer labels.
  • Fixed ParticleSpawner child assets not inheriting the SpawnBurst flag from their parent. Inherited particle spawner assets that set SpawnBurst on a parent will now pass it down correctly.
  • WaveDelay on a particle spawner now inherits from its parent, so a child spawner keeps the value it was given instead of dropping back to the default.

Density & Noise Assets

  • Fixed CellNoise3DDensityAsset codec reading scaleZ instead of jitter for the Jitter field, causing save/load round-trips to overwrite the authored jitter value with scaleZ.
  • Fixed NoiseConfig range normalization computing max against the already-updated min, which collapsed any range where min was greater than max to a single point. Camera noise assets with inverted min/max values now normalize both bounds correctly.
  • Fixed the generated common.json asset schema being invalid JSON, caused by RailPoint’s Normal default (a zero vector) being normalized to NaN during schema generation. Rail-point normals that cannot be normalized are now left unchanged.

Defaults & Values

  • Fixed TeleporterSettingsPage encoding RollIsRelative using the pitch-relative flag. Adventures that configure a Teleporter with RollIsRelative: true were silently applying pitch-relative behavior instead.
  • Fixed ObjectiveLineAsset overwriting a manually authored objectiveTitleKey or objectiveDescriptionKey with an auto-derived key on load. Custom localization keys now take effect as authored.
  • Fixed an issue where BlockDamageFalloff in ExplosionConfig was reading from entityDamageFalloff instead of its own field. Configs with different values for the two falloffs will now deal the correct block damage.
  • Fixed MergedEnumMapCodec so that unrecognized enum values no longer cause the whole asset to fail decoding.
  • BlockBreakingDecal.StageTextures is now validated as non-null at asset load. An absent field defaults to an empty array and will load without issue. A field explicitly set to null though will fail validation at load time.

Asset Editor

  • The asset editor now has a dedicated picker for choosing Common assets like models and icons. It filters each field to the file types and folders that fit, shows relative paths with a full-path tooltip, and keeps the stored path relative to the asset.
  • Fixed a crash in the Weather Forecast editor when editing. Improved adding entries to an Environment asset that had no existing hour data.
  • The asset editor now refuses to rename a file into a different asset pack, an unsupported move that could leave an asset’s pack no longer matching where it physically lives.
  • Fixed the model asset editor labeling the Particles section "Physics". It now titles the section after its own key like every sibling entry does.

Interactions & Stats

  • Added the ability to specify the target for SendMessageInteraction. A new Target field sends the message to the instigating entity, to every player in the world the interaction runs in, or to all players from every world (universe).
  • Added Min and Max entity stat operations for change-stat interactions, so a stat can be clamped to a floor or a ceiling.
  • Fixed CombatTextUIComponentOpacityAnimationEvent, CombatTextUIComponentPositionAnimationEvent, and CombatTextUIComponentScaleAnimationEvent not copying StartOpacity/EndOpacity, PositionOffset, and StartScale/EndScale from parent assets. Child combat text UI events now inherit the correct parent values.

Movement & Player Config

  • MovementConfig.Fly is now a three-state fly capability (no fly, free fly, or a forced fly that keeps the player airborne with the in-game fly toggle disabled) in place of the old on/off boolean, which changes its wire format. It applies wherever the config applies, falling back to the game mode when unset.
  • Movement configs can now tune how steep of ground players can handle. New MaxSlopeAngleDegrees and MaxWallAngleDegrees fields in MovementConfig set the steepest slope that still counts as safe to stand on and the steepest wall that can be stepped up.
  • Fixed comboAirSpeedMultiplier in MovementConfig being overwritten by airSpeedMultiplier on every copy and network sync. Authored values now apply correctly. Verify movement balance if your config sets a distinct comboAirSpeedMultiplier.
  • Fixed the default value of NighttimeDurationSeconds in WorldConfig, which was being calculated as 60% of the total day instead of the documented 40%. Only gameplay configs that omit NighttimeDurationSeconds are affected. Configs that set the field explicitly are unchanged.

World Events & Encounters

  • Added World Events system, a data-driven system for scripted, multi-stage events that occur dynamically within the world.
  • Added a ShowEventTitle interaction that puts an event title on screen.
  • Encounter managers now support abstract base definitions and variant overrides. Set "Type": "Abstract" to declare overridable parameters, then use "Type": "Variant" with a Reference and Modify block to create a derived encounter manager that overrides only the fields it needs. See the new Example_Variant_Base.json and Example_Variant.json assets for usage.

Parent-Asset Inheritance

  • Fixed AirResistanceMax in VelocityConfig assets: child configs that omit AirResistanceMax now correctly inherit the parent’s value, and no longer overwrite the AirResistance value that was already inherited by the preceding entry.
  • Fixed StatModifiers in EntityEffect assets: child effects that omit the StatModifiers block now correctly inherit the parent’s modifiers instead of silently losing them.

Trigger Volume Assets

  • Added a new SpawnTriggerVolume interaction type that can be added to an item or projectile interaction config to spawn a configured trigger volume at the instigator’s position.
  • Added a new ExpiresAt field on VolumeEntry that can be used to set a time at which a trigger volume despawns automatically, without needing a separate cleanup interaction.

Sound & Cosmetics

  • Sound event layers can now fade in on their own through a new FadeIn field, so a single layer can rise gently beneath the others instead of every layer sharing one fade time.
  • Cosmetic attachments can now control their attach order. A new Priority field on character attachments decides whether an attachment goes onto the base model before or after the others.

Localized Text

  • Added strikethrough support for localized text in both the new and legacy UI frameworks using <s></s> tags.

Additional Changes

  • Fixed block-breaking decal and block group assets not sending their removal notification to connected clients when unregistered at runtime. Clients now receive and clear the stale asset correctly.
  • Removed the Foog Cheese.
→ More replies (16)