1.17.0: Difference between revisions

From Vintage Story Wiki
m (Added date)
 
(4 intermediate revisions by 2 users not shown)
Line 6: Line 6:
|prev=1.16.5
|prev=1.16.5
|prevparent=1.16.0
|prevparent=1.16.0
|next=1.17.1
}}
}}


Line 150: Line 151:


== Tweaks ==
== Tweaks ==
    Tweak: Game controls fine tuning
        In the Settings menu, the Mouse settings and Keyboard controls are now split across two tabs
        New controls option: Ctrl-click and Shift-click mouse modifiers can now be separate from the Sprint and Sneak keys (so you can re-assign Sprint to something other than the Ctrl key, but still use a Ctrl-click mouse action)
        Keyboard controls are now more logically grouped in the Settings menu
        When the Handbook refers to keyboard controls, it shows the current assigned key
        Block interaction help now shows mouse modifiers (by default, Ctrl- and Shift-) before the mouse button
        Translation: added missing lang strings for some controls e.g. Show Handbook, Show/Hide Minimap
        Bulk add material to the Bloomery is now Ctrl + right-click, for consistency with other bulk adds
    Tweak: Gameplay balance tuning
        Added a small respawn timer: the death dialog now appears with a 1.5 seconds delay
        Double the drop rate of crystallized ores. They were waaaay too rare IMO
        Hares can no longer jump over fences in snowy conditions; reduced hare spawn max light level from 8 to 6 to further mitigate them spawning in farmlands
        Boosted breadfruit satiety 120 -> 200
        Empty firepits now have a 4x burn time bonus instead of 3x
        Chiselling now requires a hammer in the off-hand in Survival mode, but does not consume durability on the hammer
        Aged wooden crates can no longer be made from aged wooden boards. To compensate, traders will now buy aged wooden crates for more than they used to
        Can now craft the stone coffin from basalt and peridotite stone
        Tree felling time is now more based on log count, less based on leaves count
        Tree felling time also based on wood type; hardwoods take 30% longer; tropical hardwoods longer still
        Higher tier metal axes fell trees slightly faster than previously
        Purpleheart requires at least a copper/scrap axe to fell; ebony requires at least a bronze axe
        Crop growth times are now calculated in months instead of days, so setting shorter months means quicker growth times. The default growth times remain unchanged
        Reduced respawn speed of wolves, slightly reduced spawn rate of butterflies
        Hares now eat sunflower and cassava crops in their early stages
        Forest floor blocks when broken now drop low fertility soil instead of medium fertility
    Minor dejanking
        Tweak: Added barrel open/close sound. Can now right click barrel again to close gui
        Tweak: Tree seeds can now be placed in display cases
        Tweak: Changed behavior of how items flow in chutes to be more intuitive
        Tweak: Wolf howl animation now more synchronized to the howl sound
        Fixed: Pounders pounding in the wrong direction (visual bug)
        Fixed: Texture overlapping issue on the 3-flower lupin
        Fixed: Helve hammer obstructed by a block where it doesn't feel like it should get obstructed
        Fixed: Multiple visual issues with potted bamboo and lily of the valley
        Fixed: Wrong texture resolution on seaweed
    Tweak: Ground storage tweaks
        Can now place spears, shovels and hoes against walls
        The rotation of the placed item now depends on the player's placing direction (used to be fixed)
        The Ground Storage selection box now stays at ground level for better visuals and more accurate sub-block placement
        Fixed wrong particle collision box with ground storage blocks
    Tweak: Allowed glass to be chiselled.  WIP: still didn't fix the wrong faces issue with them though or the wrong texture
    Tweak: Increased third-person in-hand model size for full blocks
    Worldedit updates
        Feature: Can now use worldedit to place fruit trees
        Fixed: Worldedit, using "Redo" after a move tool operation not working
        Fixed: 3 bugs related to importing entities stored in block schematics
        Tweak: Worldedit control panel now allows setting of fractional movespeeds
        Tweak: Changing the current selection is now also stored in the undo/redo history state
        Tweak: The Magic select mode will now ignore tallgrass by default
        Tweak: Added a flood fill mode more suitable for placing lakes
        Tweak: The flood fill tool now will replace all blocks of blockmaterial Plant
        Tweak: Left clicking with the flood fill tool now performs the opposite effect, a "flood erase"
        Tweak: Worldedit: Added server overload protection toggle to the options dialog
        Fixed: Multiple fixes with "/we mr" no longer creates 2 history states, also updates the current selection and does not move the whole selection up by several blocks
        Tweak: Worldedit GUI upgrades:
            Fixed: Drop down scrollbar was not visible
            Select tool now has 2 new buttons: Rotate CW and Rotate CCW
            Increased flat fog slider range 4-fold
    Various command tweaks
        Tweak: /time command now disallows setting of negative values because it has undefined behavior
        Tweak: Added "/player [plrname] entity intox" subcommand to set intoxication value
        Tweak: Added "/debug delplr name" to delete playerdata in a savegame
        Tweak: Added "/player playername movespeed" subcommand
        Fixed: /weather setev not working
        Tweak: /debug logticks command output now more informative and new layout
    Tweak: Tallgrass shadows only drawn near to the player
    Tweak: Gold and silver falx are now steel blades with gold/silver flair. As such, their recipes and stats have changed to be similar to steel falx
    Tweak: Forlorn Estoc now uses a thrust animation in 3rd person to better suit the weapon
    Tweak: Added a description to wolf pup item to indicate that it's hostile and some traders highly value it
    Tweak: Can now place side-growing mushrooms in creative mode
    Tweak: Chat dialog less obtrusive (more transparent) when not focused (experimental)
    Tweak: Trimmed the hunter class flavor text
    Tweak: Changed name of hacking spear to tuning spear to better fit the setting. Also gave it a description so players know what it does
    Tweak: Hacking spear can be made with tin bronze and bismuth bronze spears now
    Tweak: Added the 'Tinkerer' trait to the Clockmaker class: functions like the other unique crafting traits
    Tweak: Savegames should now be more robust against ungraceful exits in regards of entity spawning
    Tweak: Various improvements to creature bots (we used these for making the 2022 trailer!)
        Added bear and hacked locust bot
        More configurable playerbots
            Can wear backpacks, quivers and shields.
            Can apply a custom skin via /npc copyskin to apply a player skin
            Can now have a nametag, set via /npc setname
        Fixed /npc enq/exec playanim not working for some animations
        Added "/npcs loopall" subcommand
    Tweak: Added ability to disable crop/berry bush and fruittree growth (/worldconfigcreate bool processCrops false)
    Tweak: Added player entity repair capability when loading a savegame in repair mode
    Tweak: The paper, scroll and book lore items now have 3d models
    Tweak: Disabled span ruins, they need better spawning behaviors
    Tweak: Torches and other blocks which attach to the side of other blocks, now cannot be attached to lake ice (even if they could before)
    Fixed: Multiple issues with snow coverage on chiseled blocks
    Fixed: Dark shadows caused from SSAO, might break other things
    Fixed: Pristine forlorn body armor can now be properly crafted.
    Fixed: Wooden path block texture issues
    Fixed: Cinematic camera crash when adding 2 points at the same coords
    Fixed: Multiple issues with the immersive first person mode (clip into blocks upon death, not adjusted for running sideways swivel, etc.)
    Fixed: Heavy z-fighting on distant ice
    Fixed: Falling containers now drop their contents if they cannot be placed on impact
    Fixed: handbook entry for labeled chests, and links to it in chalk and charcoal descriptions
    Fixed: (long-standing!) leaves blocks incorrectly had a 0 degrees rotated alternate as well as 10 degrees
    Fixed: (since 1.16) blocks with general wind motion flag were incorrectly given a glow value (e.g. glow == 3)
    Fixed: (since 1.14) leaves ground-offset windshear being disabled for leaves against solid blocks was not working correctly on north side
    Fixed: Unknown texture when putting solder ingots on forges
    Fixed: Wrong glow vfx for items held in third person mode
    Fixed: In single-player, occasional flash of X-ray vision when breaking blocks underground at any chunk edge
    Fixed: Should fix stability issues when using the game updater, due to leftover files that should no longer be there
    Fixed: TempstormDurationMul world config not working
    Fixed: Some roofing faces too dark; trough fluffy hay faces too dark.
    Fixed: Particle collision box issues with the boiler
    Fixed: Water in condenser hardly visible
    Fixed: Placing fruit trees with worldedit did not respect the size values
    Fixed: Tool molds rotations during clayforming not matching finished product in some cases
    Fixed: Sealed barrels displayed block interaction help
    Fixed: Drifter killing drifter showed "eaten by" in the info text
    Fixed: Wrong SSAO on knapping surface
    Fixed: Pullets changing plumage when they mature to adults
    Fixed: Wrong texture resolution on some bamboo leaves
    Fixed: .clientconfigcreate not printing error on invalid datatype
    Fixed: Some lighting chunk border issues when rooms are closed or opened to sunlight
    Fixed: Various minor sunlighting bugs (eg. wrong values below water which spreads)
    Tweak: for Linux users, starting the game using Mono versions prior to Mono 5 should now fail (Mono 4.x and below is not supported)
    Translation:
        Fixed: lang strings for some item info such as clothing and armor properties
        Added lang strings for some colors


===Tweak: Game controls fine tuning===
 
*In the Settings menu, the Mouse settings and Keyboard controls are now split across two tabs
*New controls option: Ctrl-click and Shift-click mouse modifiers can now be separate from the Sprint and Sneak keys (so you can re-assign Sprint to something other than the Ctrl key, but still use a Ctrl-click mouse action)
*Keyboard controls are now more logically grouped in the Settings menu
*When the Handbook refers to keyboard controls, it shows the current assigned key
*Block interaction help now shows mouse modifiers (by default, Ctrl- and Shift-) before the mouse button
*Translation: added missing lang strings for some controls e.g. Show Handbook, Show/Hide Minimap
*Bulk add material to the Bloomery is now Ctrl + right-click, for consistency with other bulk adds
 
===Tweak: Gameplay balance tuning===
 
*Added a small respawn timer: the death dialog now appears with a 1.5 seconds delay
*Double the drop rate of crystallized ores. They were waaaay too rare IMO
*Hares can no longer jump over fences in snowy conditions; reduced hare spawn max light level from 8 to 6 to further mitigate them spawning in farmlands
*Boosted breadfruit satiety 120 -> 200
*Empty firepits now have a 4x burn time bonus instead of 3x
*Chiselling now requires a hammer in the off-hand in Survival mode, but does not consume durability on the hammer
*Aged wooden crates can no longer be made from aged wooden boards. To compensate, traders will now buy aged wooden crates for more than they used to
*Can now craft the stone coffin from basalt and peridotite stone
*Tree felling time is now more based on log count, less based on leaves count
*Tree felling time also based on wood type; hardwoods take 30% longer; tropical hardwoods longer still
*Higher tier metal axes fell trees slightly faster than previously
*Purpleheart requires at least a copper/scrap axe to fell; ebony requires at least a bronze axe
*Crop growth times are now calculated in months instead of days, so setting shorter months means quicker growth times. The default growth times remain unchanged
*Reduced respawn speed of wolves, slightly reduced spawn rate of butterflies
*Hares now eat sunflower and cassava crops in their early stages
*Forest floor blocks when broken now drop low fertility soil instead of medium fertility
 
===Minor dejanking===
 
*Tweak: Added barrel open/close sound. Can now right click barrel again to close gui
*Tweak: Tree seeds can now be placed in display cases
*Tweak: Changed behavior of how items flow in chutes to be more intuitive
*Tweak: Wolf howl animation now more synchronized to the howl sound
*Fixed: Pounders pounding in the wrong direction (visual bug)
*Fixed: Texture overlapping issue on the 3-flower lupin
*Fixed: Helve hammer obstructed by a block where it doesn't feel like it should get obstructed
*Fixed: Multiple visual issues with potted bamboo and lily of the valley
*Fixed: Wrong texture resolution on seaweed


API Changes
===Tweak: Ground storage tweaks===


    Tweak: All code obfuscation now been completely dropped from the game engine
*Can now place spears, shovels and hoes against walls
    Feature: Greatly improved frame profiler and slow tick logging.
*The rotation of the placed item now depends on the player's placing direction (used to be fixed)
        Instead of a flat list, frame costs are now displayed hierarchically and also show the call count. Allows for a much more fine grained analysis of costly operations / laggy sections of code.
*The Ground Storage selection box now stays at ground level for better visuals and more accurate sub-block placement
        Added new FrameProfiler.Enter() and .Leave() methods for hierarchical tick logging
*Fixed wrong particle collision box with ground storage blocks
    Feature: New "OnAnimationEnd" Mode EaseOut. Greatly helps with jerky animation endings
    Feature: Shape.TryGet(api, fileLocation) method simplifies code for loading shapes and adds consistent error checking
    Feature: still and flowing water blocks, and lake ice blocks, are now accessed separately from regular blocks, as there can be both water and a regular (non-solid) block in the same BlockPos position
        Use IBlockAccessor.GetLiquidBlock(), IBlockAccessor.SetLiquidBlock(), IBlockAccessor.SearchLiquidBlocks() for reading and writing water and lake ice
        There are also IWorldChunk.GetLiquid() and .SetLiquid() methods, but mods should generally use the IBlockAccessor methods
        IBlockAccessor.GetSolidBlock() will return the regular block at the position UNLESS there is lake ice present in which case it will return the lake ice (used e.g. for motion physics and collision detection)
        IBlockAccessor.IsSideSolid() behaves similarly: tests the regular block at the position for solidity, or will return true if lake ice is present
        to generalise, mods can add their own blocks (liquids, gasses or perhaps ice) to the new system allowing regular blocks to be submerged/enclosed/embedded in such blocks: this is done simply by overriding property Block.ForLiquidsLayer in the code for the liquid/gas/ice block
        For existing 1.16 blocks which are found in water or in ice (e.g. in vanilla, Coopers Reeds or Papyrus, which have -water- and -ice- variants, or Seaweed) you can update to the new system as follows: (a) remove the rendering of water and ice and any special water and ice properties from your block, the in-water variant should now be the same as the on-land variant; (b) for the in-water or in-ice variants only, for successful updating from 1.16 to 1.17, override property Block.RemapToLiquidsLayer to provide the water/ice code matching your block, e.g. Reeds in water set that property to "water-still-7"
        BlockUpdate and Schematic now have water data in them in addition to block data
        Mods needing to test for the presence of water or lake ice should change their code to use the IBlockAccessor.GetLiquidBlock() call
        Mods needing to test whether a neighbour side is solid should use IBlockAccessor.IsSideSolid() to detect all cases accurately, including e.g. stones embedded in lake ice
        To minimise the breaking of existing 1.16 mods, IBlockAccessor.GetBlock() will still return the water/lakeice block at a position if there is no block submerged/embedded in it - but if there is a block submerged in water (or embedded in lakeice) then .GetBlock() will return the submerged block, so that mods which do not update their code to use a .GetLiquidBlock() call will not see that there is water in the position, if a block happens to be submerged there
        To minimise the breaking of existing 1.16 mods, IBlockAccessor.SetBlock() used with a water/lakeice block (or any block for which Block.ForLiquidsLayer is true) will automatically write that block to the liquids layer, and will delete any existing regular block at the position (i.e. the same behavior as in 1.16 code).  To add water/lakeice to a block position without deleting the regular block (i.e. allowing the existing block at the position to become submerged in water or embedded in ice) use IBlockAccessor.SetLiquidBlock()
        Placing a fully solid block in any position will remove the water/lakeice at that position
    Feature: Missing lang file keys are logged in client-debug.txt (and sometimes in server-debug.txt but that is rare)
    Feature: Added <hk> or <hotkey> VTML tag. In handbook entries, can use e.g. <hk>sprint</hk> to display the actual current mapping of the sprint key
    Feature: for any keyboard controls (hotkeys) your mod adds, use new EnumHotkeyTypes: HelpAndOverlays, MouseModifiers, MovementControls and InventoryHotkeys for better grouping in the keyboard controls settings dialog
    Feature: Configurable inventory slot count for entity harvesting
    Feature: IServerWorldAccessor.IsFullyLoadedChunk(), true if all neighbor chunks are also loaded.  BlockEntities or entities can use this during tick updates for better performance, e.g. to make sure that searching neighbor chunks for blocks will not cause lag-spikes due to loading unloaded chunks.  See BEBerryBush and BEFarmland for example
    Feature: Added api.XXXAtlas.GetOrInsertTexture() to replace InsertTextureCached() which is now obsolete, as it is very inefficient
    Refactor: Collectible.GetDurability() is now renamed to Collectible.GetMaxDurability(). Added Collectible.GetRemainingDurability()
    Refactor: QueueOfInt and FastSetOfLongs moved to Vintagestory.API.Datastructures
    Tweak: ModMaker should place patches into a separate mod domain (will now also prompt for the mod domain)
    Tweak: PlayerControl.CtrlKey and PlayerControl.ShiftKey, use these for block and entity interactions which depend on Ctrl+mouseclick or Shift+mouseclick, in place of checking for Sprint and Sneak keys  (though by default Sprint is bound to Ctrl, and Sneak is bound to Shift, a player might change that)
    Tweak: Significantly re-order and properly ensure order of asset registration etc during server startup, for details of correct use, see updated descriptions in the XML help for ModSystem methods .ExecuteOrder(), .StartPre(), .Start(), .AssetsLoaded(), .StartClientSide() and .StartServerSide()
        ModSystem .Start() method may be called at a different time from previously, specifically it will now be called even before assets (including blocktypes, lang file, etc.) have been loaded; any of your code in Start() which requires assets to be loaded may need to be moved to the AssetsLoaded() method
        Additional optional initialisation call ModSystem.AssetsLoaded() called after the Start() method and after assets are loaded, but before StartClientSide/StartServerSide.  This is called on both server and client, see VSSurvivalMod Core.cs for an example.  Typically used to initialise block or item fields
        New server event AssetsFinalizers, can be used in code to modify/finalize behaviors or properties for any block or item in the game (your mod's assets or another mod's assets) after all loading from JSONs is complete. Use this in 1.17+ instead of making changes to assets in a mod's StartServerSide() method - doing it in the StartServerSide() method will likely be too late.  E.g. in vanilla, the BlockReinforcement system adds a Reinforcement behavior to every appropriate block in this event
    Tweak: Added callback method Collectible.ConsumeCraftingIngredients()
    Tweak: Added ability to disable entity behaviors and AI tasks by adding a `enabled: false` line (can also do this byType)
    Tweak: Added "ShowInCreatedBy" property for recipes to hide them from the handbook (such as repair recipes)
    Tweak: IBlockAccessor.WalkBlocks() Action now offers int x,y,z coordinates instead of a BlockPos
    Tweak: Cuboidd new method SetAndTranslate() allows both operations to be combined in a single method call
    Tweak: Vec3d can now be Set() to an EntityPos
    Tweak: BlockPos new method SetAndEquals() returns a boolean indicating whether the BlockPos already held the values set
    Tweak: Can now define separate player animations to be run in immersive first person mode (by prefixing them with "ifp-").
    Tweak: Chisel tool modes are now a bit more moddable
    Tweak: Block.SideSolid is now a custom class, SmallBoolArray
    Tweak: ShapeElement.Faces is now deprecated: use .FacesResolved instead if you need to access a ShapeElementFace
    Tweak: Block.Textures and .TexturesInventory are now IDictionary<> not Dictionary<>  (but in most cases existing code should not need to be changed)
    Tweak: EntityClientProperties.Textures is now IDictionary<> not Dictionary<>  (but in most cases existing code should not need to be changed)
    Tweak: Block.SideSolid is now a SmallBoolArray struct, not a bool[]  (but in most cases existing code should not need to be changed, e.g. Block.SideSolid[0] will still test the North face)
    Tweak: Can now define particle Bounciness as a float value (before it was a boolean)
    Tweak: "Weak shiny" mode. If the shiny bit is set and any wind data is set, the shinyness effect is reduced
    Tweak: New basic flower shapes flower-48x48 and flower-32x64, drawn with correct pixel density, see the creative-only Dandelion and Acanthus flowers as examples  (modders can test new flower textures in-game by replacing the dandelion and acanthus textures)
    Tweak: two new DrawTypes which appropriate blocks can use for instanced rendering, for higher FPS: InstancedCross (used by tallgrass, flower-horsetail, and flower-edelweiss) and InstancedFlower (used by catmint, cow parsley, poppy, redtop grass, wild daisy and woad).  Where InstancedFlower is used, petal and stem textures should be combined into one double-width .png file, see the texture files for those flowers for examples
    Tweak: The Modmaker will now work on pre-releases of the game
    Tweak: Rewrite head yaw/pitch handling, now part of EntityPos and synced.
    Fixed: Cuboidf.RotatedCopy() not rotating hitboxes correctly
    Fixed: Positioning issues in VTML/richtext
    Fixed: Compatibility util did not work on first world load


===Miscellaneous===


== Fixes ==
*Tweak: Allowed glass to be chiselled.  WIP: still didn't fix the wrong faces issue with them though or the wrong texture
*Tweak: Increased third-person in-hand model size for full blocks
===Worldedit updates===


*Feature: Can now use worldedit to place fruit trees
*Fixed: Worldedit, using "Redo" after a move tool operation not working
*Fixed: 3 bugs related to importing entities stored in block schematics
*Tweak: Worldedit control panel now allows setting of fractional movespeeds
*Tweak: Changing the current selection is now also stored in the undo/redo history state
*Tweak: The Magic select mode will now ignore tallgrass by default
*Tweak: Added a flood fill mode more suitable for placing lakes
*Tweak: The flood fill tool now will replace all blocks of blockmaterial Plant
*Tweak: Left clicking with the flood fill tool now performs the opposite effect, a "flood erase"
*Tweak: Worldedit: Added server overload protection toggle to the options dialog
*Fixed: Multiple fixes with "/we mr" no longer creates 2 history states, also updates the current selection and does not move the whole selection up by several blocks
*Tweak: Worldedit GUI upgrades:
**Fixed: Drop down scrollbar was not visible
**Select tool now has 2 new buttons: Rotate CW and Rotate CCW
**Increased flat fog slider range 4-fold


== API Changes ==
===Various command tweaks===
*Tweak: /time command now disallows setting of negative values because it has undefined behavior
*Tweak: Added "/player [plrname] entity intox" subcommand to set intoxication value
*Tweak: Added "/debug delplr name" to delete playerdata in a savegame
*Tweak: Added "/player playername movespeed" subcommand
*Fixed: /weather setev not working
*Tweak: /debug logticks command output now more informative and new layout
*Tweak: Tallgrass shadows only drawn near to the player
*Tweak: Gold and silver falx are now steel blades with gold/silver flair. As such, their recipes and stats have changed to be similar to steel falx
*Tweak: Forlorn Estoc now uses a thrust animation in 3rd person to better suit the weapon
*Tweak: Added a description to wolf pup item to indicate that it's hostile and some traders highly value it
*Tweak: Can now place side-growing mushrooms in creative mode
*Tweak: Chat dialog less obtrusive (more transparent) when not focused (experimental)
*Tweak: Trimmed the hunter class flavor text
*Tweak: Changed name of hacking spear to tuning spear to better fit the setting. Also gave it a description so players know what it does
*Tweak: Hacking spear can be made with tin bronze and bismuth bronze spears now
*Tweak: Added the 'Tinkerer' trait to the Clockmaker class: functions like the other unique crafting traits
*Tweak: Savegames should now be more robust against ungraceful exits in regards of entity spawning
*Tweak: Various improvements to creature bots (we used these for making the 2022 trailer!)
*Added bear and hacked locust bot
*More configurable playerbots
**Can wear backpacks, quivers and shields.
**Can apply a custom skin via /npc copyskin to apply a player skin
**Can now have a nametag, set via /npc setname
*Fixed /npc enq/exec playanim not working for some animations
*Added "/npcs loopall" subcommand
*Tweak: Added ability to disable crop/berry bush and fruittree growth (/worldconfigcreate bool processCrops false)
*Tweak: Added player entity repair capability when loading a savegame in repair mode
*Tweak: The paper, scroll and book lore items now have 3d models
*Tweak: Disabled span ruins, they need better spawning behaviors
*Tweak: Torches and other blocks which attach to the side of other blocks, now cannot be attached to lake ice (even if they could before)


==Fixed==
*Fixed: Multiple issues with snow coverage on chiseled blocks
*Fixed: Dark shadows caused from SSAO, might break other things
*Fixed: Pristine forlorn body armor can now be properly crafted.
*Fixed: Wooden path block texture issues
*Fixed: Cinematic camera crash when adding 2 points at the same coords
*Fixed: Multiple issues with the immersive first person mode (clip into blocks upon death, not adjusted for running sideways swivel, etc.)
*Fixed: Heavy z-fighting on distant ice
*Fixed: Falling containers now drop their contents if they cannot be placed on impact
*Fixed: handbook entry for labeled chests, and links to it in chalk and charcoal descriptions
*Fixed: (long-standing!) leaves blocks incorrectly had a 0 degrees rotated alternate as well as 10 degrees
*Fixed: (since 1.16) blocks with general wind motion flag were incorrectly given a glow value (e.g. glow == 3)
*Fixed: (since 1.14) leaves ground-offset windshear being disabled for leaves against solid blocks was not working correctly on north side
*Fixed: Unknown texture when putting solder ingots on forges
*Fixed: Wrong glow vfx for items held in third person mode
*Fixed: In single-player, occasional flash of X-ray vision when breaking blocks underground at any chunk edge
*Fixed: Should fix stability issues when using the game updater, due to leftover files that should no longer be there
*Fixed: TempstormDurationMul world config not working
*Fixed: Some roofing faces too dark; trough fluffy hay faces too dark.
*Fixed: Particle collision box issues with the boiler
*Fixed: Water in condenser hardly visible
*Fixed: Placing fruit trees with worldedit did not respect the size values
*Fixed: Tool molds rotations during clayforming not matching finished product in some cases
*Fixed: Sealed barrels displayed block interaction help
*Fixed: Drifter killing drifter showed "eaten by" in the info text
*Fixed: Wrong SSAO on knapping surface
*Fixed: Pullets changing plumage when they mature to adults
*Fixed: Wrong texture resolution on some bamboo leaves
*Fixed: .clientconfigcreate not printing error on invalid datatype
*Fixed: Some lighting chunk border issues when rooms are closed or opened to sunlight
*Fixed: Various minor sunlighting bugs (eg. wrong values below water which spreads)
*Tweak: for Linux users, starting the game using Mono versions prior to Mono 5 should now fail (Mono 4.x and below is not supported)
*Translation:
**Fixed: lang strings for some item info such as clothing and armor properties
**Added lang strings for some colors
==API Changes==
*Tweak: All code obfuscation now been completely dropped from the game engine
*Feature: Greatly improved frame profiler and slow tick logging.
**Instead of a flat list, frame costs are now displayed hierarchically and also show the call count. Allows for a much more fine grained analysis of costly operations / laggy sections of code.
**Added new FrameProfiler.Enter() and .Leave() methods for hierarchical tick logging
*Feature: New "OnAnimationEnd" Mode EaseOut. Greatly helps with jerky animation endings
*Feature: Shape.TryGet(api, fileLocation) method simplifies code for loading shapes and adds consistent error checking
*Feature: still and flowing water blocks, and lake ice blocks, are now accessed separately from regular blocks, as there can be both water and a regular (non-solid) block in the same BlockPos position
**Use IBlockAccessor.GetLiquidBlock(), IBlockAccessor.SetLiquidBlock(), IBlockAccessor.SearchLiquidBlocks() for reading and writing water and lake ice
**There are also IWorldChunk.GetLiquid() and .SetLiquid() methods, but mods should generally use the IBlockAccessor methods
**IBlockAccessor.GetSolidBlock() will return the regular block at the position UNLESS there is lake ice present in which case it will return the lake ice (used e.g. for motion physics and collision detection)
**IBlockAccessor.IsSideSolid() behaves similarly: tests the regular block at the position for solidity, or will return true if lake ice is present
**to generalise, mods can add their own blocks (liquids, gasses or perhaps ice) to the new system allowing regular blocks to be submerged/enclosed/embedded in such blocks: this is done simply by overriding property Block.ForLiquidsLayer in the code for the liquid/gas/ice block
**For existing 1.16 blocks which are found in water or in ice (e.g. in vanilla, Coopers Reeds or Papyrus, which have -water- and -ice- variants, or Seaweed) you can update to the new system as follows: (a) remove the rendering of water and ice and any special water and ice properties from your block, the in-water variant should now be the same as the on-land variant; (b) for the in-water or in-ice variants only, for successful updating from 1.16 to 1.17, override property Block.RemapToLiquidsLayer to provide the water/ice code matching your block, e.g. Reeds in water set that property to "water-still-7"
**BlockUpdate and Schematic now have water data in them in addition to block data
**Mods needing to test for the presence of water or lake ice should change their code to use the IBlockAccessor.GetLiquidBlock() call
**Mods needing to test whether a neighbour side is solid should use IBlockAccessor.IsSideSolid() to detect all cases accurately, including e.g. stones embedded in lake ice
**To minimise the breaking of existing 1.16 mods, IBlockAccessor.GetBlock() will still return the water/lakeice block at a position if there is no block submerged/embedded in it - but if there is a block submerged in water (or embedded in lakeice) then .GetBlock() will return the submerged block, so that mods which do not update their code to use a .GetLiquidBlock() call will not see that there is water in the position, if a block happens to be submerged there
**To minimise the breaking of existing 1.16 mods, IBlockAccessor.SetBlock() used with a water/lakeice block (or any block for which Block.ForLiquidsLayer is true) will automatically write that block to the liquids layer, and will delete any existing regular block at the position (i.e. the same behavior as in 1.16 code).  To add water/lakeice to a block position without deleting the regular block (i.e. allowing the existing block at the position to become submerged in water or embedded in ice) use IBlockAccessor.SetLiquidBlock()
**Placing a fully solid block in any position will remove the water/lakeice at that position
*Feature: Missing lang file keys are logged in client-debug.txt (and sometimes in server-debug.txt but that is rare)
*Feature: Added <hk> or <hotkey> VTML tag. In handbook entries, can use e.g. <hk>sprint</hk> to display the actual current mapping of the sprint key
*Feature: for any keyboard controls (hotkeys) your mod adds, use new EnumHotkeyTypes: HelpAndOverlays, MouseModifiers, MovementControls and InventoryHotkeys for better grouping in the keyboard controls settings dialog
*Feature: Configurable inventory slot count for entity harvesting
*Feature: IServerWorldAccessor.IsFullyLoadedChunk(), true if all neighbor chunks are also loaded.  BlockEntities or entities can use this during tick updates for better performance, e.g. to make sure that searching neighbor chunks for blocks will not cause lag-spikes due to loading unloaded chunks.  See BEBerryBush and BEFarmland for example
*Feature: Added api.XXXAtlas.GetOrInsertTexture() to replace InsertTextureCached() which is now obsolete, as it is very inefficient
*Refactor: Collectible.GetDurability() is now renamed to Collectible.GetMaxDurability(). Added Collectible.GetRemainingDurability()
*Refactor: QueueOfInt and FastSetOfLongs moved to Vintagestory.API.Datastructures
*Tweak: ModMaker should place patches into a separate mod domain (will now also prompt for the mod domain)
*Tweak: PlayerControl.CtrlKey and PlayerControl.ShiftKey, use these for block and entity interactions which depend on Ctrl+mouseclick or Shift+mouseclick, in place of checking for Sprint and Sneak keys  (though by default Sprint is bound to Ctrl, and Sneak is bound to Shift, a player might change that)
*Tweak: Significantly re-order and properly ensure order of asset registration etc during server startup, for details of correct use, see updated descriptions in the XML help for ModSystem methods .ExecuteOrder(), .StartPre(), .Start(), .AssetsLoaded(), .StartClientSide() and .StartServerSide()
** ModSystem .Start() method may be called at a different time from previously, specifically it will now be called even before assets (including blocktypes, lang file, etc.) have been loaded; any of your code in Start() which requires assets to be loaded may need to be moved to the AssetsLoaded() method
**Additional optional initialisation call ModSystem.AssetsLoaded() called after the Start() method and after assets are loaded, but before StartClientSide/StartServerSide.  This is called on both server and client, see VSSurvivalMod Core.cs for an example.  Typically used to initialise block or item fields
**New server event AssetsFinalizers, can be used in code to modify/finalize behaviors or properties for any block or item in the game (your mod's assets or another mod's assets) after all loading from JSONs is complete. Use this in 1.17+ instead of making changes to assets in a mod's StartServerSide() method - doing it in the StartServerSide() method will likely be too late.  E.g. in vanilla, the BlockReinforcement system adds a Reinforcement behavior to every appropriate block in this event
*Tweak: Added callback method Collectible.ConsumeCraftingIngredients()
*Tweak: Added ability to disable entity behaviors and AI tasks by adding a `enabled: false` line (can also do this byType)
*Tweak: Added "ShowInCreatedBy" property for recipes to hide them from the handbook (such as repair recipes)
*Tweak: IBlockAccessor.WalkBlocks() Action now offers int x,y,z coordinates instead of a BlockPos
*Tweak: Cuboidd new method SetAndTranslate() allows both operations to be combined in a single method call
*Tweak: Vec3d can now be Set() to an EntityPos
*Tweak: BlockPos new method SetAndEquals() returns a boolean indicating whether the BlockPos already held the values set
*Tweak: Can now define separate player animations to be run in immersive first person mode (by prefixing them with "ifp-").
*Tweak: Chisel tool modes are now a bit more moddable
*Tweak: Block.SideSolid is now a custom class, SmallBoolArray
*Tweak: ShapeElement.Faces is now deprecated: use .FacesResolved instead if you need to access a ShapeElementFace
*Tweak: Block.Textures and .TexturesInventory are now IDictionary<> not Dictionary<>  (but in most cases existing code should not need to be changed)
*Tweak: EntityClientProperties.Textures is now IDictionary<> not Dictionary<>  (but in most cases existing code should not need to be changed)
*Tweak: Block.SideSolid is now a SmallBoolArray struct, not a bool[]  (but in most cases existing code should not need to be changed, e.g. Block.SideSolid[0] will still test the North face)
*Tweak: Can now define particle Bounciness as a float value (before it was a boolean)
*Tweak: "Weak shiny" mode. If the shiny bit is set and any wind data is set, the shinyness effect is reduced
*Tweak: New basic flower shapes flower-48x48 and flower-32x64, drawn with correct pixel density, see the creative-only Dandelion and Acanthus flowers as examples  (modders can test new flower textures in-game by replacing the dandelion and acanthus textures)
*Tweak: two new DrawTypes which appropriate blocks can use for instanced rendering, for higher FPS: InstancedCross (used by tallgrass, flower-horsetail, and flower-edelweiss) and InstancedFlower (used by catmint, cow parsley, poppy, redtop grass, wild daisy and woad).  Where InstancedFlower is used, petal and stem textures should be combined into one double-width .png file, see the texture files for those flowers for examples
*Tweak: The Modmaker will now work on pre-releases of the game
*Tweak: Rewrite head yaw/pitch handling, now part of EntityPos and synced.
*Fixed: Cuboidf.RotatedCopy() not rotating hitboxes correctly
*Fixed: Positioning issues in VTML/richtext
*Fixed: Compatibility util did not work on first world load


== References ==
== References ==
# [https://www.vintagestory.at/blog.html/news/de-jank-and-game-juice-update-1170-pre1-r322/|"De-Jank and Game Juice Update (1.17.0-pre.1)"
# [https://www.vintagestory.at/blog.html/news/de-jank-and-game-juice-update-1170-pre1-r322/|"De-Jank and Game Juice Update (1.17.0-pre.1)"

Latest revision as of 10:20, 16 July 2023

UnderCon icon.png

This page is under construction.
This page is being created, or is in the process of extensive expansion or major restructuring. Until this notice is removed, please do not translate this page. Expect the content of this page to change significantly.

1.17.0
"De-Jank and Game Juice Update"1.17.0 Image.jpg
Release dateAugust 31, 2022
Development versions
  1. Pre-releases (1)
  2. Release candidates (6)
Version chronology
◄ 1.16.0
◄ 1.16.5
1.17.1 ►


1.17.0, also known as the De-Jank and Game Juice Update is a major update that released on August 31, 2022, the main focus of which is to improve various backend systems as well as graphical features in order to improve the overall experience of the game.

Features

Lightning Strikes

  • Damage creatures in a 8 block radius
  • Lightning rods can redirect lightning, be sure to place them in an elevated spot

200+ lore-rich "Clutter" Blocks

  • Currently these are only in the Creative inventory. These will be added to Survival worldgen (in ruins, tombs, etc....) in the future 1.18 Lore Update

Major Water Physics Update

  • Any (non-solid) block can be submerged
  • Water will flow through non-solid blocks
  • Non-solid blocks can become embedded in lake ice if water freezes
  • Stones, boulders, seashells and ruins etc. can be generated underwater in worldgen
  • Panning from sand and gravel blocks which are in or next to water, the reduced layers block can become submerged

More visual spectacle during temporal storms

  • Added large turning gears in the sky
  • Additional "flowing rust" shader effects on blocks
  • More wicked glitches and particles

Improved Armor

  • Armor no longer disappears when its durability reaches 0, but it will lose all its protection. Protection degrades as the armor durability reduces
  • Armor can now be repaired using its base material. Repairing armor has half the material cost.
  • Lowered the cost of crafting lamellar armor to be more accessible. Rebalanced blackguard and forlorn armor crafting costs to match repair costs for other chain/plate armors. Forlorn now requires some luxury materials to suit its fanciness.
  • Visuals: damaged armor will look visibly damaged

30-fold increase in shield variety

  • There are now nearly 300 types of shields in the game. Materials can be mixed and matched. Currently limited to just a few shield models but we will add more soon.
  • Shield durability is now dynamically determined based on the materials used: hardwoods and stronger metals add durability to the base durability value

More and prettier flora

  • Added red top grass
  • Added flowering water lily
  • Added silver torch cactus to desert mountains. Painful on touch!
  • Berry bushes are now fluffy (can be pruned with shears)
  • Improved seasonal colors for ferns
  • Improved lichen model
  • Made breadfruit texture more spiky looking. Ripe breadfruits are now larger
  • Creative-only dandelion and acanthus flowers

New and improved fauna

  • New creature: Gazelle. Male, female and calf. Found in warm/dry climates (savannah)
  • New creatures: Brown bear, black bears, sun bears and pandas now spawn in the world
  • The first fish: Salmon. No fishing or boats just yet, the salmon is only decorative right now
  • Fox pups now spawn as well
  • Can now pet tameable animals when they are generation 1 or higher (right-click a creature to pet it). Petting causes creatures to stand peacefully
  • Termite mound remake. Added much larger versions. All termite mounds are now rock typed. Added rare large patches to Savannahs
  • Improved Creature AI
    • Attacked creatures should now react more quickly
    • Improved creature AI tactics - when a attacking creature cannot reach its target and gets hurt, it will make a tactical retreat. Every time it gets hurt again, it will retreat further. Should mitigate the pillaring + ranged attack weakness of most creatures.
    • Fixed animals sprinting around a target because they overshoot the destination. Now they slow down near the target
    • Bears and other large creatures in general should no longer become stuck when wandering
    • Creatures walking into solid walls will attempt slight strafing movements to get around the wall

Extensive visual tuning

  • Much improved graphics quality when using resolutions below 100% - as it is no longer blurry (therefore, lower resolutions can be used to improve FPS without much loss of fidelity, especially on 4k monitors)
  • Improved sun ambient color and water reflections to reflect the sky colors
  • Prettier main menu - all main menu screens are now dialog based over the background image
  • Much improved reflective shader effect and more configuration options for modders for reflective stuff
  • Improved lava visuals and effects
  • Added more metal pouring vfx, added bouncy particles when smithing
  • Fences now attach to chiselled blocks
  • Random cracked texture overlay on rock
  • Tweak: Visual improvements on the death screen (permanent damage overlay + sepia effect)
  • Tweak: More sparkly crystals
  • Tweak: Larger bells and locusts
  • Tweak: Added blur effect to dialog title bars, various other minor visual tweaks
  • Tweak: Boosted SSAO intensity by 40%
  • Tweak: Third person camera zoom with +/- keys is now smooth instead of instant
  • Tweak: Added some glowy flicker to burning forges
  • Tweak: Placed curd bundles now rotateable
  • Tweak: More particles for burning coal in forges
  • Tweak: Some extra seraph head bobbing while drunk
  • Tweak: Beeswax and Honeycomb now displayed inside crates
  • Tweak: Bees no longer clip through walls
  • Tweak: Made filled crates and barrels fuller
  • Tweak: Block broken particle spawns are now multiplayer synced
  • Tweak: Added seraph chiselling animation
  • Tweak: A bit of rotation randomization on items placed in a display case
  • Tweak: Chickens now peck on the ground for longer, but now also peck for random durations
  • Tweak: Gravel texture now randomly rotated, which greatly mitigates any repetitiveness
  • Tweak: Fine tune amaranth crop texture, more fluff to some of the seraph hairstyles, fine tune layer of sticks model and texture, thicker stem for the bamboo sapling, added a bit of thickness to the condenser model
  • Fixed: Visual glitch glowy geometry during fog
  • Fixed: Weird AO on shelves against the wall
  • Fixed: Sun specular reflections on water no longer working since 1.16
  • Fixed: Distant tall grass noticeably disappearing (not being drawn at all)
  • Fixed: Minor visual glitches when distant tall grass seen against sky or water
  • Fixed: Terrain below flowing water had inconsistent shading at the end of the water flow
  • Fixed: Some inconsistencies in block sunlight levels below placed/flowing water blocks
  • Fixed: white or wrong particle colors when breaking leaves, fruit-tree leaves, berrybushes and waterlilies

Massive performance tuning

  • Faster chunk loading: We have changed our internal compression algorithm from deflate to ZStd, which is several times faster for both the server and clients and single-player
  • Even faster chunk loading and reduced memory usage: We have changed our internal chunk data storage method to palletised chunk storage, which needs two to four times less memory on average while the game is running, and made other improvements in memory efficiency, so the game uses less RAM while running, leading to smoother overall performance
  • Faster worldgen: The worldgen can now usually "keep up" with player motion as the player moves into new areas of the map
  • ~40% faster game starts: Lots of fine tuning and multithreading during the startup process should greatly reduce the game startup time. (Single player Creative world load time was 17 seconds in 1.16, now 10 seconds in 1.17, YMMV)
  • Improved overall FPS: Grass and flowers are now drawn using instanced rendering which improves FPS and allows more fine grained control over grass for future projects
  • Improved server TPS: AI pathfinding is now multi-threaded; many other entity ticking performance improvements; mitigated slow ticks caused by drifter and butterfly spawning; mitigated slow ticks caused by farmland and berrybush; for significantly fewer slow ticks / lag spikes overall
  • Greatly improved GUI dialog creation performance (the dialog edge blur algorithm now skips over the center part of the dialog)
  • Reduced SSAO quality on the "Medium SSAO" setting for more FPS
  • Improve FPS when rendering very large inventories, like the creative inventory (50 FPS -> 100 FPS)
  • Tweak: Increased server MagicNumbers values to reflect faster chunk loading speeds and faster worldgen - servers are encouraged to experiment with the servermagicnumbers - especially ChunksColumnsToRequestPerTick, ChunksToSendPerTick and ChunkColumnsToGeneratePerThreadTick to find their own optimal values
  • Temporal storm particles are now async for more performance

Wrench tool

  • Can be used to re-orient chutes, stairs, slabs, logs, pillars and plaster. Can now change armor stand arm pose with a wrench.

Lookat camera mode

  • Makes it so that in the overhead camera mode the seraph looks into the camera. Enable via .clientconfigcreate overheadLookAt bool true

Desert storms

  • Block colored fog effect in dry areas with lots of sand, when there are strong winds

Bamboo and straw hats

Support for 2x1 paintings

  • Added "sodhouse" and "lastday" paintings

Worldgen tuning

  • Now less trees in hot and dry areas
  • Reduced spawn of water in dry places by making lakes/seas more shallow. In existing 1.16 worlds this can cause lines of water at chunk borders with newly generated map regions, but only below sea level in dry areas.
  • Loose stones and boulders now also spawn in caves

Seraph fine tuning

  • Tweak: Experimental Seraph voice sound rework. Added ".debug talk" command for testing voices. Community: Let me know if this sounds any better? :D
  • Tweak: Improved immersive first person mode. Death animation no longer glitching into blocks and knapping should be easier (work in progress)
  • Sitting down on a block edge now uses a custom seraph pose (still quite buggy in multiplayer)
  • Added "protect eyes" pose to seraph during strong winds
  • Additional visual effects when cold
  • Animals and players that are low body temperature now have a frost overlay on them (when the outside temperature is below -5 °C)
  • Seraphs will have a freezing / shivering animation when cold

Added ability to place sideways hay bales

New 3D models for tailor shoes, merchant shoes, great steppe boots, and reindeer herder shoes

The longblade is no more. Long live the falx!

Added more dyed leather options to make the new shields out of

Tweaks

Tweak: Game controls fine tuning

  • In the Settings menu, the Mouse settings and Keyboard controls are now split across two tabs
  • New controls option: Ctrl-click and Shift-click mouse modifiers can now be separate from the Sprint and Sneak keys (so you can re-assign Sprint to something other than the Ctrl key, but still use a Ctrl-click mouse action)
  • Keyboard controls are now more logically grouped in the Settings menu
  • When the Handbook refers to keyboard controls, it shows the current assigned key
  • Block interaction help now shows mouse modifiers (by default, Ctrl- and Shift-) before the mouse button
  • Translation: added missing lang strings for some controls e.g. Show Handbook, Show/Hide Minimap
  • Bulk add material to the Bloomery is now Ctrl + right-click, for consistency with other bulk adds

Tweak: Gameplay balance tuning

  • Added a small respawn timer: the death dialog now appears with a 1.5 seconds delay
  • Double the drop rate of crystallized ores. They were waaaay too rare IMO
  • Hares can no longer jump over fences in snowy conditions; reduced hare spawn max light level from 8 to 6 to further mitigate them spawning in farmlands
  • Boosted breadfruit satiety 120 -> 200
  • Empty firepits now have a 4x burn time bonus instead of 3x
  • Chiselling now requires a hammer in the off-hand in Survival mode, but does not consume durability on the hammer
  • Aged wooden crates can no longer be made from aged wooden boards. To compensate, traders will now buy aged wooden crates for more than they used to
  • Can now craft the stone coffin from basalt and peridotite stone
  • Tree felling time is now more based on log count, less based on leaves count
  • Tree felling time also based on wood type; hardwoods take 30% longer; tropical hardwoods longer still
  • Higher tier metal axes fell trees slightly faster than previously
  • Purpleheart requires at least a copper/scrap axe to fell; ebony requires at least a bronze axe
  • Crop growth times are now calculated in months instead of days, so setting shorter months means quicker growth times. The default growth times remain unchanged
  • Reduced respawn speed of wolves, slightly reduced spawn rate of butterflies
  • Hares now eat sunflower and cassava crops in their early stages
  • Forest floor blocks when broken now drop low fertility soil instead of medium fertility

Minor dejanking

  • Tweak: Added barrel open/close sound. Can now right click barrel again to close gui
  • Tweak: Tree seeds can now be placed in display cases
  • Tweak: Changed behavior of how items flow in chutes to be more intuitive
  • Tweak: Wolf howl animation now more synchronized to the howl sound
  • Fixed: Pounders pounding in the wrong direction (visual bug)
  • Fixed: Texture overlapping issue on the 3-flower lupin
  • Fixed: Helve hammer obstructed by a block where it doesn't feel like it should get obstructed
  • Fixed: Multiple visual issues with potted bamboo and lily of the valley
  • Fixed: Wrong texture resolution on seaweed

Tweak: Ground storage tweaks

  • Can now place spears, shovels and hoes against walls
  • The rotation of the placed item now depends on the player's placing direction (used to be fixed)
  • The Ground Storage selection box now stays at ground level for better visuals and more accurate sub-block placement
  • Fixed wrong particle collision box with ground storage blocks

Miscellaneous

  • Tweak: Allowed glass to be chiselled. WIP: still didn't fix the wrong faces issue with them though or the wrong texture
  • Tweak: Increased third-person in-hand model size for full blocks

Worldedit updates

  • Feature: Can now use worldedit to place fruit trees
  • Fixed: Worldedit, using "Redo" after a move tool operation not working
  • Fixed: 3 bugs related to importing entities stored in block schematics
  • Tweak: Worldedit control panel now allows setting of fractional movespeeds
  • Tweak: Changing the current selection is now also stored in the undo/redo history state
  • Tweak: The Magic select mode will now ignore tallgrass by default
  • Tweak: Added a flood fill mode more suitable for placing lakes
  • Tweak: The flood fill tool now will replace all blocks of blockmaterial Plant
  • Tweak: Left clicking with the flood fill tool now performs the opposite effect, a "flood erase"
  • Tweak: Worldedit: Added server overload protection toggle to the options dialog
  • Fixed: Multiple fixes with "/we mr" no longer creates 2 history states, also updates the current selection and does not move the whole selection up by several blocks
  • Tweak: Worldedit GUI upgrades:
    • Fixed: Drop down scrollbar was not visible
    • Select tool now has 2 new buttons: Rotate CW and Rotate CCW
    • Increased flat fog slider range 4-fold

Various command tweaks

  • Tweak: /time command now disallows setting of negative values because it has undefined behavior
  • Tweak: Added "/player [plrname] entity intox" subcommand to set intoxication value
  • Tweak: Added "/debug delplr name" to delete playerdata in a savegame
  • Tweak: Added "/player playername movespeed" subcommand
  • Fixed: /weather setev not working
  • Tweak: /debug logticks command output now more informative and new layout
  • Tweak: Tallgrass shadows only drawn near to the player
  • Tweak: Gold and silver falx are now steel blades with gold/silver flair. As such, their recipes and stats have changed to be similar to steel falx
  • Tweak: Forlorn Estoc now uses a thrust animation in 3rd person to better suit the weapon
  • Tweak: Added a description to wolf pup item to indicate that it's hostile and some traders highly value it
  • Tweak: Can now place side-growing mushrooms in creative mode
  • Tweak: Chat dialog less obtrusive (more transparent) when not focused (experimental)
  • Tweak: Trimmed the hunter class flavor text
  • Tweak: Changed name of hacking spear to tuning spear to better fit the setting. Also gave it a description so players know what it does
  • Tweak: Hacking spear can be made with tin bronze and bismuth bronze spears now
  • Tweak: Added the 'Tinkerer' trait to the Clockmaker class: functions like the other unique crafting traits
  • Tweak: Savegames should now be more robust against ungraceful exits in regards of entity spawning
  • Tweak: Various improvements to creature bots (we used these for making the 2022 trailer!)
  • Added bear and hacked locust bot
  • More configurable playerbots
    • Can wear backpacks, quivers and shields.
    • Can apply a custom skin via /npc copyskin to apply a player skin
    • Can now have a nametag, set via /npc setname
  • Fixed /npc enq/exec playanim not working for some animations
  • Added "/npcs loopall" subcommand
  • Tweak: Added ability to disable crop/berry bush and fruittree growth (/worldconfigcreate bool processCrops false)
  • Tweak: Added player entity repair capability when loading a savegame in repair mode
  • Tweak: The paper, scroll and book lore items now have 3d models
  • Tweak: Disabled span ruins, they need better spawning behaviors
  • Tweak: Torches and other blocks which attach to the side of other blocks, now cannot be attached to lake ice (even if they could before)

Fixed

  • Fixed: Multiple issues with snow coverage on chiseled blocks
  • Fixed: Dark shadows caused from SSAO, might break other things
  • Fixed: Pristine forlorn body armor can now be properly crafted.
  • Fixed: Wooden path block texture issues
  • Fixed: Cinematic camera crash when adding 2 points at the same coords
  • Fixed: Multiple issues with the immersive first person mode (clip into blocks upon death, not adjusted for running sideways swivel, etc.)
  • Fixed: Heavy z-fighting on distant ice
  • Fixed: Falling containers now drop their contents if they cannot be placed on impact
  • Fixed: handbook entry for labeled chests, and links to it in chalk and charcoal descriptions
  • Fixed: (long-standing!) leaves blocks incorrectly had a 0 degrees rotated alternate as well as 10 degrees
  • Fixed: (since 1.16) blocks with general wind motion flag were incorrectly given a glow value (e.g. glow == 3)
  • Fixed: (since 1.14) leaves ground-offset windshear being disabled for leaves against solid blocks was not working correctly on north side
  • Fixed: Unknown texture when putting solder ingots on forges
  • Fixed: Wrong glow vfx for items held in third person mode
  • Fixed: In single-player, occasional flash of X-ray vision when breaking blocks underground at any chunk edge
  • Fixed: Should fix stability issues when using the game updater, due to leftover files that should no longer be there
  • Fixed: TempstormDurationMul world config not working
  • Fixed: Some roofing faces too dark; trough fluffy hay faces too dark.
  • Fixed: Particle collision box issues with the boiler
  • Fixed: Water in condenser hardly visible
  • Fixed: Placing fruit trees with worldedit did not respect the size values
  • Fixed: Tool molds rotations during clayforming not matching finished product in some cases
  • Fixed: Sealed barrels displayed block interaction help
  • Fixed: Drifter killing drifter showed "eaten by" in the info text
  • Fixed: Wrong SSAO on knapping surface
  • Fixed: Pullets changing plumage when they mature to adults
  • Fixed: Wrong texture resolution on some bamboo leaves
  • Fixed: .clientconfigcreate not printing error on invalid datatype
  • Fixed: Some lighting chunk border issues when rooms are closed or opened to sunlight
  • Fixed: Various minor sunlighting bugs (eg. wrong values below water which spreads)
  • Tweak: for Linux users, starting the game using Mono versions prior to Mono 5 should now fail (Mono 4.x and below is not supported)
  • Translation:
    • Fixed: lang strings for some item info such as clothing and armor properties
    • Added lang strings for some colors

API Changes

  • Tweak: All code obfuscation now been completely dropped from the game engine
  • Feature: Greatly improved frame profiler and slow tick logging.
    • Instead of a flat list, frame costs are now displayed hierarchically and also show the call count. Allows for a much more fine grained analysis of costly operations / laggy sections of code.
    • Added new FrameProfiler.Enter() and .Leave() methods for hierarchical tick logging
  • Feature: New "OnAnimationEnd" Mode EaseOut. Greatly helps with jerky animation endings
  • Feature: Shape.TryGet(api, fileLocation) method simplifies code for loading shapes and adds consistent error checking
  • Feature: still and flowing water blocks, and lake ice blocks, are now accessed separately from regular blocks, as there can be both water and a regular (non-solid) block in the same BlockPos position
    • Use IBlockAccessor.GetLiquidBlock(), IBlockAccessor.SetLiquidBlock(), IBlockAccessor.SearchLiquidBlocks() for reading and writing water and lake ice
    • There are also IWorldChunk.GetLiquid() and .SetLiquid() methods, but mods should generally use the IBlockAccessor methods
    • IBlockAccessor.GetSolidBlock() will return the regular block at the position UNLESS there is lake ice present in which case it will return the lake ice (used e.g. for motion physics and collision detection)
    • IBlockAccessor.IsSideSolid() behaves similarly: tests the regular block at the position for solidity, or will return true if lake ice is present
    • to generalise, mods can add their own blocks (liquids, gasses or perhaps ice) to the new system allowing regular blocks to be submerged/enclosed/embedded in such blocks: this is done simply by overriding property Block.ForLiquidsLayer in the code for the liquid/gas/ice block
    • For existing 1.16 blocks which are found in water or in ice (e.g. in vanilla, Coopers Reeds or Papyrus, which have -water- and -ice- variants, or Seaweed) you can update to the new system as follows: (a) remove the rendering of water and ice and any special water and ice properties from your block, the in-water variant should now be the same as the on-land variant; (b) for the in-water or in-ice variants only, for successful updating from 1.16 to 1.17, override property Block.RemapToLiquidsLayer to provide the water/ice code matching your block, e.g. Reeds in water set that property to "water-still-7"
    • BlockUpdate and Schematic now have water data in them in addition to block data
    • Mods needing to test for the presence of water or lake ice should change their code to use the IBlockAccessor.GetLiquidBlock() call
    • Mods needing to test whether a neighbour side is solid should use IBlockAccessor.IsSideSolid() to detect all cases accurately, including e.g. stones embedded in lake ice
    • To minimise the breaking of existing 1.16 mods, IBlockAccessor.GetBlock() will still return the water/lakeice block at a position if there is no block submerged/embedded in it - but if there is a block submerged in water (or embedded in lakeice) then .GetBlock() will return the submerged block, so that mods which do not update their code to use a .GetLiquidBlock() call will not see that there is water in the position, if a block happens to be submerged there
    • To minimise the breaking of existing 1.16 mods, IBlockAccessor.SetBlock() used with a water/lakeice block (or any block for which Block.ForLiquidsLayer is true) will automatically write that block to the liquids layer, and will delete any existing regular block at the position (i.e. the same behavior as in 1.16 code). To add water/lakeice to a block position without deleting the regular block (i.e. allowing the existing block at the position to become submerged in water or embedded in ice) use IBlockAccessor.SetLiquidBlock()
    • Placing a fully solid block in any position will remove the water/lakeice at that position
  • Feature: Missing lang file keys are logged in client-debug.txt (and sometimes in server-debug.txt but that is rare)
  • Feature: Added <hk> or <hotkey> VTML tag. In handbook entries, can use e.g. <hk>sprint</hk> to display the actual current mapping of the sprint key
  • Feature: for any keyboard controls (hotkeys) your mod adds, use new EnumHotkeyTypes: HelpAndOverlays, MouseModifiers, MovementControls and InventoryHotkeys for better grouping in the keyboard controls settings dialog
  • Feature: Configurable inventory slot count for entity harvesting
  • Feature: IServerWorldAccessor.IsFullyLoadedChunk(), true if all neighbor chunks are also loaded. BlockEntities or entities can use this during tick updates for better performance, e.g. to make sure that searching neighbor chunks for blocks will not cause lag-spikes due to loading unloaded chunks. See BEBerryBush and BEFarmland for example
  • Feature: Added api.XXXAtlas.GetOrInsertTexture() to replace InsertTextureCached() which is now obsolete, as it is very inefficient
  • Refactor: Collectible.GetDurability() is now renamed to Collectible.GetMaxDurability(). Added Collectible.GetRemainingDurability()
  • Refactor: QueueOfInt and FastSetOfLongs moved to Vintagestory.API.Datastructures
  • Tweak: ModMaker should place patches into a separate mod domain (will now also prompt for the mod domain)
  • Tweak: PlayerControl.CtrlKey and PlayerControl.ShiftKey, use these for block and entity interactions which depend on Ctrl+mouseclick or Shift+mouseclick, in place of checking for Sprint and Sneak keys (though by default Sprint is bound to Ctrl, and Sneak is bound to Shift, a player might change that)
  • Tweak: Significantly re-order and properly ensure order of asset registration etc during server startup, for details of correct use, see updated descriptions in the XML help for ModSystem methods .ExecuteOrder(), .StartPre(), .Start(), .AssetsLoaded(), .StartClientSide() and .StartServerSide()
    • ModSystem .Start() method may be called at a different time from previously, specifically it will now be called even before assets (including blocktypes, lang file, etc.) have been loaded; any of your code in Start() which requires assets to be loaded may need to be moved to the AssetsLoaded() method
    • Additional optional initialisation call ModSystem.AssetsLoaded() called after the Start() method and after assets are loaded, but before StartClientSide/StartServerSide. This is called on both server and client, see VSSurvivalMod Core.cs for an example. Typically used to initialise block or item fields
    • New server event AssetsFinalizers, can be used in code to modify/finalize behaviors or properties for any block or item in the game (your mod's assets or another mod's assets) after all loading from JSONs is complete. Use this in 1.17+ instead of making changes to assets in a mod's StartServerSide() method - doing it in the StartServerSide() method will likely be too late. E.g. in vanilla, the BlockReinforcement system adds a Reinforcement behavior to every appropriate block in this event
  • Tweak: Added callback method Collectible.ConsumeCraftingIngredients()
  • Tweak: Added ability to disable entity behaviors and AI tasks by adding a `enabled: false` line (can also do this byType)
  • Tweak: Added "ShowInCreatedBy" property for recipes to hide them from the handbook (such as repair recipes)
  • Tweak: IBlockAccessor.WalkBlocks() Action now offers int x,y,z coordinates instead of a BlockPos
  • Tweak: Cuboidd new method SetAndTranslate() allows both operations to be combined in a single method call
  • Tweak: Vec3d can now be Set() to an EntityPos
  • Tweak: BlockPos new method SetAndEquals() returns a boolean indicating whether the BlockPos already held the values set
  • Tweak: Can now define separate player animations to be run in immersive first person mode (by prefixing them with "ifp-").
  • Tweak: Chisel tool modes are now a bit more moddable
  • Tweak: Block.SideSolid is now a custom class, SmallBoolArray
  • Tweak: ShapeElement.Faces is now deprecated: use .FacesResolved instead if you need to access a ShapeElementFace
  • Tweak: Block.Textures and .TexturesInventory are now IDictionary<> not Dictionary<> (but in most cases existing code should not need to be changed)
  • Tweak: EntityClientProperties.Textures is now IDictionary<> not Dictionary<> (but in most cases existing code should not need to be changed)
  • Tweak: Block.SideSolid is now a SmallBoolArray struct, not a bool[] (but in most cases existing code should not need to be changed, e.g. Block.SideSolid[0] will still test the North face)
  • Tweak: Can now define particle Bounciness as a float value (before it was a boolean)
  • Tweak: "Weak shiny" mode. If the shiny bit is set and any wind data is set, the shinyness effect is reduced
  • Tweak: New basic flower shapes flower-48x48 and flower-32x64, drawn with correct pixel density, see the creative-only Dandelion and Acanthus flowers as examples (modders can test new flower textures in-game by replacing the dandelion and acanthus textures)
  • Tweak: two new DrawTypes which appropriate blocks can use for instanced rendering, for higher FPS: InstancedCross (used by tallgrass, flower-horsetail, and flower-edelweiss) and InstancedFlower (used by catmint, cow parsley, poppy, redtop grass, wild daisy and woad). Where InstancedFlower is used, petal and stem textures should be combined into one double-width .png file, see the texture files for those flowers for examples
  • Tweak: The Modmaker will now work on pre-releases of the game
  • Tweak: Rewrite head yaw/pitch handling, now part of EntityPos and synced.
  • Fixed: Cuboidf.RotatedCopy() not rotating hitboxes correctly
  • Fixed: Positioning issues in VTML/richtext
  • Fixed: Compatibility util did not work on first world load

References

  1. [https://www.vintagestory.at/blog.html/news/de-jank-and-game-juice-update-1170-pre1-r322/%7C"De-Jank and Game Juice Update (1.17.0-pre.1)"