<?xml version="1.0" encoding="UTF-8"?>

<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Veloren</title>
        <link>https://veloren.net</link>
        <description>Veloren is an open-source action RPG set in a fantasy world made of voxels.</description>
        <generator>Zola</generator>
        <language>en</language>
        <atom:link href="https://veloren.net/rss.xml" rel="self" type="application/rss+xml"></atom:link>
        <lastBuildDate>Fri, 21 Nov 2025 00:00:00 +0000</lastBuildDate>
        
        
          
        
        <item>
          <title>These weeks in Veloren 250</title>
          <pubDate>Fri, 21 Nov 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-250/</link>
          <guid>https://veloren.net/blog/devblog-250/</guid>
          <description>&lt;p&gt;Refresh your reflection, see what&#x27;s been making waves, and pay respects to the sites of old.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @isse, @unii, @UncomfySilence, @Gemu, @horblegorble, @floppy, @anyone, @Supa, @do-no-van, @Necti, @srpapinha, @Sam113, @xMACx94, @tibbon1, and @imbris.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate translators who contributed these last weeks:&lt;&#x2F;p&gt;
&lt;table aria-label=&quot;Table of translation contributors arranged by language&quot;
  style=&quot;border: 1px solid; margin-bottom: 1rem; margin-left: auto; margin-right: auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;border: 1px solid;&quot;&gt;
      &lt;th scope=&quot;col&quot; style=&quot;border-right: 1px solid; text-align:left; padding-left: 0.8em; padding-right: 0.8em; padding-top: 0.2em; padding-bottom: 0.2em;&quot;&gt;
        Language
      &lt;&#x2F;th&gt;
      &lt;th scope=&quot;colgroup&quot; style=&quot;text-align:left; padding-left: 0.8em;&quot;&gt;
        Translators
      &lt;&#x2F;th&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;thead&gt;
  &lt;tbody class=&quot;alternating-rows&quot;&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;English&lt;&#x2F;td&gt;
      &lt;td&gt;Harp | Axag | Limina&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;French&lt;&#x2F;td&gt;
      &lt;td&gt;Axag | Limina | Krafting | Marcoleric | TheCoolMan | jls | Nasleth | Nifou | sandraev&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Korean&lt;&#x2F;td&gt;
      &lt;td&gt;neighborsbear | share | sungbinma | Bandalbox | figma | Zerothas&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Polish&lt;&#x2F;td&gt;
      &lt;td&gt;maciej-klupp&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Russian&lt;&#x2F;td&gt;
      &lt;td&gt;NaStiluse | Trauvel | evgenkot&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
     &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Spanish (Latin America)&lt;&#x2F;td&gt;
      &lt;td&gt;guillermytho&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Swedish&lt;&#x2F;td&gt;
      &lt;td&gt;Positron832 | IsseW&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Ukrainian&lt;&#x2F;td&gt;
      &lt;td&gt;Harp | Witch&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h3 id=&quot;be-the-change-you-want-to-see-in-yourself&quot;&gt;Be the change you want to see in yourself&lt;&#x2F;h3&gt;
&lt;p&gt;The humble cauldron continues to amaze us with its ability to concoct a seemingly endless variety of beverages. Now, after brewing in the minds of @isse and @unii, a new recipe has bubbled up to the surface. It might push those simple vials to their limits, but you can distill the rejuvenating fire of a phoenix feather. So if you&#x27;ve got some spicy plumage to spare, and have been looking for a personal rebirth (without having to turn to ash first), go give it a whirl.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_be-the-change.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_be-the-change.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_be-the-change.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Not quite a Sailor Moon level transformation, but it does the job&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There&#x27;s often more to a name than meets the eye, but have you thought about its flavour in different tongues? Let&#x27;s hear from @Limina on what it takes to cook up a tasty translation:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Recently, the HRT (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Hastened_Reformation_Tincture&quot;&gt;Hastened Reformation Tincture&lt;&#x2F;a&gt;) potion was added, which lets us change body types! I&#x27;m a translator for French, and had worked voluntarily on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dauntless_(video_game)&quot;&gt;Dauntless&lt;&#x2F;a&gt; before, so believe me when I say one of the (many) challenges in translation is acronyms – often times, they have to either be changed to fit the target language, or have their meaning slightly altered. Retaining the original intent can be a REAL headache, and that&#x27;s what we try to stick closest to.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;As soon as I knew the existence of that potion, I &lt;strong&gt;knew&lt;&#x2F;strong&gt; I had to find it a fitting name. And here for once, it came to mind almost instantly: in French, we have a completely equivalent acronym for this type of gender affirming care:
THS, short for &quot;Traitement Hormonal de Substitution&quot;, a basically perfect 1:1 translation already. It naturally came to be the Tisane Hâtive de Subversion™ in French!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_unii--Limina_hastened-reformation-tincture.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=691
    height=337
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_unii--Limina_hastened-reformation-tincture.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Whether tea or tincture, it&amp;#x27;ll have your hormones down to a tee&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;If you&#x27;re proficient in at least one more language than English, give translation a go!
It&#x27;s a great way to get better in both English and the language you&#x27;re translating to (even if you&#x27;re a native speaker!), and brings accessibility to people that may otherwise not have had the chance to play the game.
And sometimes, you get to do silly things like naming a trans potion in your language. 💙🩷🤍&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;You can get started by reading the Veloren owner&#x27;s manual, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;game-translation.html&quot;&gt;right here&lt;&#x2F;a&gt;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;~ Cheers to all contributors to this amazing community. &amp;lt;3 &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4926&quot;&gt;!4926&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pick-out-a-new-look&quot;&gt;Pick out a new look&lt;&#x2F;h3&gt;
&lt;p&gt;@Gemu has been diligently threading voxels, and is taking a well-deserved stretch after looming over four new styles. For us, it&#x27;s time to clear out some wardrobe space and dust off those full-body mirrors for a fitting session. Newbies and smurfs alike can pick up something blue from their local trader, while those after a more rebellious aesthetic will have to steal their look. Just mind townsfolk getting tense from the latter fashion sense.&lt;&#x2F;p&gt;
&lt;p&gt;The logistics of going from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1168256242741936248&#x2F;1365645918157803560&quot;&gt;workshop&lt;&#x2F;a&gt; to wearables was managed by @UncomfySilence, who&#x27;s here to catwalk us through the latest outfits:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;The More Player-Facing Armor branch has finally been merged, and with it a few more low to mid-tier sets: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Adventurer_Armor&quot;&gt;Adventurer&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Pirate_Armor&quot;&gt;Pirate&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Buccaneer_Armor&quot;&gt;Buccaneer&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Witch_Armor&quot;&gt;Witch&lt;&#x2F;a&gt; (T1, T2, T3, and T4 respectively).&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_adventurer.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1084
    height=796
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_adventurer.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;A kit fit for adventure&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;More interestingly is the inclusion of previously NPC exclusive armor sets, like the Witch and Pirate armor. Given Veloren’s philosophy to minimize the differences between players and NPC, in attempt at grounding and immersing players into the world, we thought it’d be fitting to have some of the armor and items deliberately made for humanoids, yet unobtainable to players, finally be made obtainable!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_pirate-new.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1051
    height=796
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_pirate-new.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Scrappy rags of rank and file pirates&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_pirate-outfits.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1050
    height=1603
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_pirate-outfits.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Buck up for the big promotion&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_witch-outfits.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1050
    height=1603
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_witch-outfits.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Don&amp;#x27;t worry, it&amp;#x27;s still certified to cauldron safety standards&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;This is the first of several planned player-facing armor updates in which sets you see in your day to day Veloren life, and more, are made accessible.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Eventually we’d also like to expand on the acquisition of certain sets to make them more interesting. For instance, whilst the witch set is currently obtainable from locked chests in their huts, we’d like eventually move the witch armor pieces to that of the Witch Apprentices’ and True Witch&#x27;s inventories, with which you could trade them Ooky items they’d use for their dark magic rituals for a fancy, spooky witch set and learn to become a Witch Apprentice yourself!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Though, unlike a Gorgon&#x27;s petrifying gaze, things may not be entirely set in stone and are subject to change ;)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re gearing up to spook and plunder, you&#x27;ll need more than a toothpick to break those fabrics out of lockup. Hopefully you find enjoyment in one of the fiddlier jobs of a blacksmith, and don&#x27;t mind getting &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Lockpicks&quot;&gt;picky&lt;&#x2F;a&gt; between copper, iron, and cobalt.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_chests-and-picks.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1833
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_chests-and-picks.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;(➜) Pirate, Buccaneer, and Witch chests above common, iron, and cobalt lockpicks.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Savvy dungeoneers may notice that the common pirate has travelled a long way from the sea to nick their chests from some Adlets (presumably as bewildered as we are). However, it seems that in the heat of the heist, our swashbuckling crew broke the locks.&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and a heads up – those greedy miners got their hands on witchy lockcraft for their front door.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4921&quot;&gt;!4921&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;each-to-their-own&quot;&gt;Each to their own&lt;&#x2F;h3&gt;
&lt;p&gt;Fresh-faced items get to make their own entrance into the world as @horblegorble wins back their personal space in a change to auto-stacking. After all, don&#x27;t items deserve to be itemised? Well, not if they&#x27;ve been through your inventory it seems. The original purpose of the auto-stacker hasn&#x27;t went away.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1280
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_better-than-mergarine.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_better-than-mergarine.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_better-than-mergarine.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Not just a number&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4892&quot;&gt;!4892&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-tidings&quot;&gt;New tidings&lt;&#x2F;h3&gt;
&lt;p&gt;Across study halls and field sites, Veloren&#x27;s biologically inclined have been swept up in a wave of speculation. Hastily scribed opinion letters fill the academic record as everyone tries to stake their theory as the authoritative explanation for something truly unprecedented: evolution of life &lt;em&gt;away&lt;&#x2F;em&gt; from a crab. While classically-minded thinkers insist on holding out for more verified reports, it seems impossible to deny that the Tidal Warrior has shed its shell for scales, swapped out mandibles for a beastly jaw, and dropped its pincers for webbed digits. Dexterous enough now to wield a grand trident, sharpened well beyond ornamental purposes.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_new-tidings.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1836
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_new-tidings.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The old (left) getting flushed out by the new (right)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;One hypothesis gaining traction is that this is a delayed metamorphosis, triggered by submission to Karkatha as new &#x27;crankiest crab&#x27;. But not everyone is convinced, with some early-career scholars floating suspicions that something more fishy has went down. For them, the mutation of a Sahagin underling is decidedly more plausible. Though they do concede it&#x27;s an open question of how aquatic specialists beat out terrestrial competence. Whether by mutiny or abdication, this &#x27;identity theft&#x27; theory is still swimming upstream to establish legitimacy.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, many field biologists insist that it&#x27;s better to see things for yourself, instead of blowing bubbles back and forth. To this end, some have taken to donning homemade Sahagin disguises to make discreet observations and uncover the real truth of the matter. They say this &#x27;fins-on&#x27; approach to science is the only sure way forward – even if some of them don&#x27;t make it back to shore.&lt;&#x2F;p&gt;
&lt;p&gt;Here on the sidelines, we&#x27;ll be waiting to find out how well the Sahagin fortress can guard its secrets. For now, early studies suggest that this new Tidal Warrior belongs to the @Gemu genus, with behaviours that are notably @floppy-an.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4930&quot;&gt;!4930&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;plugging-the-memory-leak&quot;&gt;Plugging the memory leak&lt;&#x2F;h4&gt;
&lt;p&gt;After an upstream bug had people&#x27;s RAM spilling out of their paddocks, @anyone came to rescue with a workaround fix:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Hello! So I did some testing regarding the  crash. At first I could not reproduce any crashing, but I noticed steadily increasing memory usage when moving around the world. Also when loading different singleplayer worlds after each other or when generating a custom world I could get the memory usage up to about 26GB which finally made everything crash.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Using git bisect (as @nadja suggested) I arrived at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;tree&#x2F;d9291896ca8c07760cf0fee000208bf6f5ee7141&quot;&gt;d9291896&lt;&#x2F;a&gt; being the first commit that has the issue. Further I saw that &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;mimalloc&#x2F;latest&#x2F;mimalloc&#x2F;&quot;&gt;mimalloc&lt;&#x2F;a&gt; is only used on windows so I removed and downgraded mimalloc (and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;libmimalloc-sys&#x2F;latest&#x2F;libmimalloc_sys&#x2F;&quot;&gt;libmimalloc-sys&lt;&#x2F;a&gt;) which both seemed to fix the memory issue.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-11-18_horblegorble_slap-the-leak.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=960
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-11-18_horblegorble_slap-the-leak.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;ll stick, right?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4936&quot;&gt;!4936&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;safety-first&quot;&gt;Safety first&lt;&#x2F;h3&gt;
&lt;p&gt;Following numerous accounts of spontaneous disembarkment, the fleet managers at Airloren are hoping to kill the music on a bizarre dance trend that has had folks moonwalking off the back of airships. A safety review led by @Supa and @horblegorble has recommended the retro-fitting of fallback safety nets to keep our hands, feet, and selves onboard at all times. In simple terms: raising the railings on seating and observation decks. It will take more than a slippery boogie to slide over them now.&lt;&#x2F;p&gt;
&lt;p&gt;While early feedback from disco enthusiasts has been positive, some passengers more interested in sightseeing have lodged complaints about obstructed views of the landscape. When interviewed, one Airloren captain remarked &quot;Well, it&#x27;s better than a surprise close-up view.&quot; Hard to argue there.&lt;&#x2F;p&gt;
&lt;p&gt;So if you fancy throwing shapes high above the world, feel free to relax that glider instinct a little. Maybe shift focus to your oxygen levels instead.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=738
  height=774
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_safety-first.webp&quot;
  loop=&quot;true&quot;&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_safety-first.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_safety-first.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Will these be tall enough to keep up with the stack of incident reports?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4911&quot;&gt;!4911&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;c-c-c-combo&quot;&gt;C-c-c-combo!&lt;&#x2F;h3&gt;
&lt;p&gt;Break down the combo gates and go wild testing abilities, with a specialised buff courtesy of @do-no-van. Pop in a buildup rate and duration, then watch all your imaginary battles yield real attack tokens.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=668
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_c-c-c-combo.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_c-c-c-combo.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_c-c-c-combo.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Save your weapon&amp;#x27;s polish for the big hitters&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4901&quot;&gt;!4901&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gizmo-gadgets&quot;&gt;Gizmo gadgets&lt;&#x2F;h3&gt;
&lt;p&gt;The navigation engines of NPCs have had their hoods lifted by @isse, allowing us a close look at the machinery in action. Through wayfinding eyes, watch the turning of mental gears as future-looking threads are woven through the world. Now any admin can leverage &lt;code&gt;&#x2F;gizmos&lt;&#x2F;code&gt; to become a super solver for pathfinding bugs.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_walking-gizmos.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_walking-gizmos.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-12_horblegorble_walking-gizmos.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Connect the dots and solve routing mysteries. No corkboard required.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4939&quot;&gt;!4939&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;teaching-by-doing&quot;&gt;Teaching by doing&lt;&#x2F;h4&gt;
&lt;p&gt;@isse&#x27;s audience got a surprise treat when free tickets to her lesson on beginner Rust wisdoms turned out to also be front row seats to Veloren development. In and around plenty of Q&amp;amp;A, she added a &lt;code&gt;&#x2F;buff&lt;&#x2F;code&gt; option to clear all current effects, as well as a flag to &lt;code&gt;&#x2F;repair_equipment&lt;&#x2F;code&gt; for including inventory gear.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1280
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_watch-and-learn.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_watch-and-learn.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-16_horblegorble_watch-and-learn.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Watch and learn&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4895&quot;&gt;!4895&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4896&quot;&gt;!4896&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;out-of-site-out-of-mind&quot;&gt;Out of site, out of mind&lt;&#x2F;h3&gt;
&lt;p&gt;Another layer of git sediment was laid down into the archaeological record, marking the burial of ye old site code. Having been held in config stasis since version &lt;code&gt;0.11&lt;&#x2F;code&gt;, @isse arranged the funeral for its final rest. We look back now with fond memories of free-form architecture and sprawling farmlands.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_overview.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1900
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_overview.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren of yore&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_housing.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2202
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_housing.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Can these carpentry skills be re-learned someday?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_pillars.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1429
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_pillars.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Forget windows, it&amp;#x27;s all about getting a block or two above the neighbours&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_keep.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1117
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_keep.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Playing for keeps&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_giant-tree.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1534
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;ye-old-site&amp;#x2F;2025-09-23_horblegorble_giant-tree.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Alpine giants&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4908&quot;&gt;!4908&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;settled down hat model hiccups in voxel and manifest files - @Necti - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4918&quot;&gt;!4918&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;parry precision paired back to parity with backstabs - @srpapinha - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4917&quot;&gt;!4917&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;hanging sign sprites updated to @Sam113&#x27;s newly shaded model - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4905&quot;&gt;!4905&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;updates for crates - @xMACx94 - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4928&quot;&gt;!4928&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fix ups and touch ups for documentation comments  - @tibbon1 - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4054&quot;&gt;!4054&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;as part of Rust 2024 edition preparations (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4770&quot;&gt;!4770&lt;&#x2F;a&gt;), reduced unsafe scope in &lt;code&gt;EcsAccessManager&lt;&#x2F;code&gt; - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4780&quot;&gt;!4780&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;typo fix sent desert creatures back to their own biome - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4920&quot;&gt;!4920&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;merged non-starter lantern recipes into one and tweaked some pricing - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4731&quot;&gt;!4731&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;balanced fierce raze to be slower, with less poise damage - @unii - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4923&quot;&gt;!4923&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;changed campfire and bed interaction texts - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4929&quot;&gt;!4929&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fixed typo in name of punching bags spawned by &lt;code&gt;&#x2F;dummy&lt;&#x2F;code&gt; - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4934&quot;&gt;!4934&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;got a bigger ruler to measure distances in large worlds - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4943&quot;&gt;!4943&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;cleaned up old build artifacts and set an auto-expiry - @xMACx94 - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4945&quot;&gt;!4945&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;only one file used a header comment for credits, so removed them - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4937&quot;&gt;!4937&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;follow-the-crowd&quot;&gt;Follow the crowd&lt;&#x2F;h4&gt;
&lt;p&gt;Do current affairs keep hitting you with waves of fear and doubt? Well sit back and go with a different flow, riding the relaxing ripples of an oceanic music video.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1280
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_dances-with-fish.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_dances-with-fish.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-22_horblegorble_dances-with-fish.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🎶 &lt;i&gt;Simply boidiful. &amp;#x27;Drifting Along&amp;#x27; by DaforLynx&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is an extension of @do-no-van&#x27;s work on fishing, taking our scaly friends back to school to learn some &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Boids&quot;&gt;bird-oid (boid)&lt;&#x2F;a&gt; movement. The idea is that each fish tries to align with and move towards the centre of a group, while still giving space to their neighbours. In doing so, they shift the group&#x27;s centre and direction, and the process iterates to create the overall motion.&lt;&#x2F;p&gt;
&lt;p&gt;Getting this all to run smoothly wasn&#x27;t without its own turbulence. Clowning around with the underwater hustle and bustle led to some explosive growth in local fisheries.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-04-24_do-no-van_boid-fishing.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-04-24_do-no-van_boid-fishing.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-04-24_do-no-van_boid-fishing.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;@do-no-van&amp;#x27;s earlier efforts may have crashed the fish population&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;the-elephant-in-the-room&quot;&gt;The elephant in the room&lt;&#x2F;h4&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-14_horblegorble_the-elephant-in-the-room.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1454
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-14_horblegorble_the-elephant-in-the-room.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Now this we have to talk about&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;From @Gemu&#x27;s wild modelling studio, the mammoth&#x27;s much less hairy cousin is looking to migrate into Veloren. Once of course @do-no-van finishes clearing the path to give the final go-ahead toot. Hopefully we don&#x27;t get stuck compulsively thinking of them until they arrive. At least they&#x27;re not pink... Though there is one question worth pondering: will they be forever free spirits, or will especially intrepid trainers find a way to tame their hearts?&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=722
  height=518
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-28_do-no-van_stomping-around.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-28_do-no-van_stomping-around.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-28_do-no-van_stomping-around.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Stomping around — by @do-no-van&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4976&quot;&gt;!4976&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;concept-art&quot;&gt;Concept art&lt;&#x2F;h3&gt;
&lt;p&gt;First-hand accounts of various explorations in voxel space. A mix of things intended for use in-game, and more experimental ideations.&lt;&#x2F;p&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-25_horblegorble_could-you-coco-not_dark.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-25_horblegorble_could-you-coco-not_light.webp&quot; media=&quot;(prefers-color-scheme: light)&quot;&gt;
      &lt;source srcset=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-25_horblegorble_could-you-coco-not_dark.webp&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;
      &lt;img loading=&quot;lazy&quot;
      width=963
      height=1080
      
      
      src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-25_horblegorble_could-you-coco-not_dark.webp&quot;&gt;
    &lt;&#x2F;picture&gt;
  &lt;&#x2F;a&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Could you coco-not? — models by @unii + @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-09_unii_flower-power.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1406
    height=626
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-09_unii_flower-power.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flower power — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;legoom-lounge&quot;&gt;Legoom Lounge&lt;&#x2F;h3&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-04-15_unii_velegoom.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1060
    height=330
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-04-15_unii_velegoom.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Breaking containment — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-07_unii_petting-legoom.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1349
    height=800
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-07_unii_petting-legoom.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Requesting precisely one good scritch — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-05_Sam113_legoom-legend.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1057
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-05_Sam113_legoom-legend.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A bold alternative for Veloren&amp;#x27;s cover photo — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;bombs-away&quot;&gt;Bombs away&lt;&#x2F;h3&gt;
&lt;p&gt;After some avid dungeoneering left @And_i with a dangerously large stockpile of coco-nades, they decided to put Mindflayer on blast with an exorcism by explosion. Viewers be warned: this video contains unhealthy levels of potion sickness, burning rapidly through stackables, and an application of sword &amp;amp; axe buffs that may nauseate members of the balance team.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;yBVI8XjsndY&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Raincoats are advised for close-up views of splash damage&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;the-gigas-aquatic&quot;&gt;The Gigas Aquatic&lt;&#x2F;h3&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-02_horblegorble_bubble-gigas.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1244
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-05-02_horblegorble_bubble-gigas.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A bubble bonanza!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Veloren&#x27;s ecologists have another puzzle to contend with, as it turns out Frost Gigas are surprisingly amphibious for their mass. We have here observations recorded at Lake Hudar by @horblegorble, who couldn&#x27;t be reached for comment afterwards. Our supervisor kept citing the insurance costs of approaching someone hot-headed enough to use a firestaff for drying out their own equipment.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_the-gigas-aquatic.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;2025-09-15_horblegorble_the-gigas-aquatic.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;A different kind of combat music. &amp;#x27;Graceful Journey&amp;#x27; by Tobias Thy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;you-see-right-through-me&quot;&gt;You see right through me&lt;&#x2F;h3&gt;
&lt;p&gt;Veloren&#x27;s philosophy of transparent development may be being taken a bit too literally, as @Necti demonstrates how to spy out enemies and oddities. With these powers of x-ray vision, nothing is truly opaque.&lt;&#x2F;p&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-4.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-4.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-0.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-0.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-1.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-1.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-2.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-2.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-3.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-3.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-8.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;x-ray&amp;#x2F;2025-05-14_Necti_x-ray-and-chunks-8.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
  
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-gruff-and-the-graceful&quot;&gt;The gruff and the graceful&lt;&#x2F;h3&gt;
&lt;p&gt;With all the time spent by campfires, you&#x27;d think Veloren would have more stories to tell by now. Well, maybe it&#x27;s more a matter of putting them to paper. An effort that @c00k13777 has taken a stab at with their short story &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archiveofourown.org&#x2F;works&#x2F;65707366&quot;&gt;&#x27;Never the same again&#x27;&lt;&#x2F;a&gt;, which looks at life after caving incidents. Be sure to clear out any butterflies from your stomach before reading – things go from bloody beginnings to strange encounters, and surprise participation in &#x27;science&#x27;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pvp-playbacks&quot;&gt;PvP playbacks&lt;&#x2F;h3&gt;
&lt;p&gt;And now, a double treat for the armchair duelists among us. First off we&#x27;ve got sharp-stick showdowns from @unii, followed by @And_i&#x27;s more long term perspective on combat. Don&#x27;t forget to post a play-by-play analysis, and update your fantasy league PvP teams.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;dX3idy39KdQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;All sword, no play — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Mrh_ghzxFXk&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🎶 &lt;i&gt;Dancing with the stars — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;events&quot;&gt;Events&lt;&#x2F;h3&gt;
&lt;p&gt;Pre-planned events hosted on the official server (&lt;code&gt;server.veloren.net&lt;&#x2F;code&gt;). You can keep an eye out for future announcements on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;888424036143607809&quot;&gt;discord channel&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tournament-of-time&quot;&gt;Tournament of Time!&lt;&#x2F;h4&gt;
&lt;p&gt;Wind your clocks back to 2021... The hey-day of forgotten sites. Not an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Level_of_detail_(computer_graphics)&quot;&gt;LoD&lt;&#x2F;a&gt; model to be seen. When a great equality was the rule, whether it be dungeon themes or skill tree variety. Gnarlings, still a purple-boxed glimmer of an idea, had yet to cut down their first giant tree. This was the world of version &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download-other&#x2F;&quot;&gt;&lt;code&gt;0.10&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. Chosen as the battlefield to host a PvP tournament for the ages. Or at least, that was the idea.&lt;&#x2F;p&gt;
&lt;p&gt;Enter @Necti, our mastermind of party planning. She thought she had found the exemplar setting for a good old fashioned throw down: an island stranded from mainland abundances, a cultist armoury at the ready, and injury indemnity from @isse, mayor of the hosting server. But the key ingredient was lost in shipping – a hunger for winning. Instead of fighters, it was friends that arrived with an appetite to build, not brawl. So, paying little heed to best-laid plans, they worked from a different blueprint to construct just about everything &lt;i&gt;except&lt;&#x2F;i&gt; a finished arena.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Dan113_where-it-all-happened.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1268
    height=778
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Dan113_where-it-all-happened.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Where it all happened — photo by @Dan113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_unii_surveying-the-town.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_unii_surveying-the-town.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Welcome to Tourney Town — photo by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-19_Necti_my-house-is-my-castle.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1290
    height=977
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-19_Necti_my-house-is-my-castle.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;My castle is my home — photo by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Dan113_tree-houses.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1378
    height=740
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Dan113_tree-houses.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Leave all your worries at ground level — photos by @Dan113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Necti_balcony-view.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Necti_balcony-view.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Panoramic views — photo by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_unii_fun-in-the-sun.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_unii_fun-in-the-sun.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;All fun in the sun — photo by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-19_Dan113_Necti_the-jubilant-jackelope.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2003
    height=886
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-19_Dan113_Necti_the-jubilant-jackelope.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Stock up on potions at the Jubilant Jackelope — photos by @Dan113 | @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Dan113_frog-face.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1083
    height=884
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;tourney-town&amp;#x2F;2025-05-22_Dan113_frog-face.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Don&amp;#x27;t forget to say hi to Ribbit Rob — photo by @Dan113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Word is that a tournament was in fact held at some point in the midst of all this whimsy. Though there seems little doubt that the event will be remembered for its comradery, rather than its competition.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;hSswIoOfEXA&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;The final showdown — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;YpWoXID-F3o&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Building up and chilling out. Supposedly some PvP as well — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-19_Alley_Oop_the-hills-have-lights-2.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1693
    height=1610
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-19_Alley_Oop_the-hills-have-lights-2.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The hills have lights — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-25_merry_despair_a-quiet-little-spot.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1212
    height=790
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-25_merry_despair_a-quiet-little-spot.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A quiet corner for two passionate airships — by @merry_despair&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-24_olaf_ej_things-are-happening-in-the-bushes.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=889
    height=676
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-24_olaf_ej_things-are-happening-in-the-bushes.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Do you see them all, faces buried in the bushes? What are they up to? — by @olaf_ej&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-20_souffle_zebra-roofing.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1614
    height=761
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-20_souffle_zebra-roofing.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The side effects of using grass-green shingles — by @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-12_unii_chilling-out.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=950
    height=635
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-12_unii_chilling-out.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Keeping it chill — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-15_Hrom_lingering-light.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1019
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-15_Hrom_lingering-light.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lingering light, or a visitor of the Min Min variety? — by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-20_souffle_glowing-up.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1431
    height=803
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-20_souffle_glowing-up.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fresh from a glow up — by @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-19_Alley_Oop_island-of-blocks.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1890
    height=980
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-19_Alley_Oop_island-of-blocks.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;End of day, end of land — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-08_Hrom_sunrise-battles.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1080
    height=516
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-08_Hrom_sunrise-battles.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hammers strike at sunrise — by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-08_Necti_pvp-ers.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1080
    height=516
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-08_Necti_pvp-ers.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The PvP lineup — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-26_souffle_glider-eclipse.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1087
    height=867
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-26_souffle_glider-eclipse.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;One-man eclipse from a wannabe Icarus — by @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-11_Alley_Oop_freshwater-sahagin.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1736
    height=955
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-11_Alley_Oop_freshwater-sahagin.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Freshwater Sahagin — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-25_Alley_Oop_this-mountain-runs-on-arch-btw.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1490
    height=1416
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-25_Alley_Oop_this-mountain-runs-on-arch-btw.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This mountain runs on arch btw — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-15_Sam113_stink-hill.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=509
    height=492
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-15_Sam113_stink-hill.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Glorified landfill — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-15_Dan113_rock-wall-1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1545
    height=1057
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-15_Dan113_rock-wall-1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Not a gradient for novice rock climbers — by @Dan113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-24_Alley_Oop_giant-rock-lamp.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1017
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-24_Alley_Oop_giant-rock-lamp.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Charging up the rock lamp — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-11_Alley_Oop_boyeyoy.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=466
    height=386
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-11_Alley_Oop_boyeyoy.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Wahey&amp;#x27;s rural cousin — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-26_Necti_when-chaos-came-to-town.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1325
    height=780
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-26_Necti_when-chaos-came-to-town.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;When chaos came to town — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-0.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-0.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-1.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-1.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-2.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-2.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-3.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;explosive-crafting&amp;#x2F;2025-05-10_Hrom_explosive-crafting-3.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
  
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-07_Hrom_purple-no-particle.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1251
    height=632
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-07_Hrom_purple-no-particle.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;All the particles! And none at all. — by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-01_horblegorble_moonlit-hillside.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1801
    height=1149
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-01_horblegorble_moonlit-hillside.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Under the moonlight — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-06_horblegorble_light-shows.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1735
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-06_horblegorble_light-shows.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Twinkle and trickle — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-11_Alley_Oop_a-spork-in-the-road.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1575
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-11_Alley_Oop_a-spork-in-the-road.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A spork in the road — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-05_Kycyka_lava-shrooms-1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1343
    height=1027
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-05_Kycyka_lava-shrooms-1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Molten mycelium — by @Kycyka&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-24_Alley_Oop_vampiric-airspace.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=821
    height=826
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-24_Alley_Oop_vampiric-airspace.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Different ways to navigate vampiric airspace — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-04_Gemu_lovely-little-lake.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2272
    height=1320
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-04_Gemu_lovely-little-lake.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lovely little lake — @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-27_Vagabond_broken-hearted-boar-rider.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=278
    height=242
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;250&amp;#x2F;screenshots&amp;#x2F;2025-05-27_Vagabond_broken-hearted-boar-rider.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Take a moment of remembrance, and hear this broken hearted plea from @Vagabond.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;250&#x2F;screenshots&#x2F;2025-05-08_Hrom_sparks-fly.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 249</title>
          <pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-249/</link>
          <guid>https://veloren.net/blog/devblog-249/</guid>
          <description>&lt;p&gt;Cozy up by the campfire, enjoy some animated story telling, and wind down for a rejuvenating slumber. Then refresh at breakfast with plenty of greens on the menu.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @isse, @horblegorble, @drunicornthe1, @unii, @Supa, @Crabo, @hnrq, @DaforLynx, @imbris, @walpo, @do-no-van, @Caigh, @xMAC94x, @Owill0w, @MSGanesh23, @juliancoffee, @UncomfySilence, @Gemu, @Limina, @vickyfrenzy, @marcoleric, and @olaf_ej.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate translators who contributed these last weeks:&lt;&#x2F;p&gt;
&lt;table aria-label=&quot;Table of translation contributors arranged by language&quot;
  style=&quot;border: 1px solid; margin-bottom: 1rem; margin-left: auto; margin-right: auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;border: 1px solid;&quot;&gt;
      &lt;th scope=&quot;col&quot; style=&quot;border-right: 1px solid; text-align:left; padding-left: 0.8em; padding-right: 0.8em; padding-top: 0.2em; padding-bottom: 0.2em;&quot;&gt;
        Language
      &lt;&#x2F;th&gt;
      &lt;th scope=&quot;colgroup&quot; style=&quot;text-align:left; padding-left: 0.8em;&quot;&gt;
        Translators
      &lt;&#x2F;th&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;thead&gt;
  &lt;tbody class=&quot;alternating-rows&quot;&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Czech&lt;&#x2F;td&gt;
      &lt;td&gt;Janez&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;English&lt;&#x2F;td&gt;
      &lt;td&gt;evgenkot | Limina&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;French&lt;&#x2F;td&gt;
      &lt;td&gt;Limina | Marcoleric&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Korean&lt;&#x2F;td&gt;
      &lt;td&gt;neighborsbear | sungbinma | Zerothas | Bandalbox | l3nemy&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Russian&lt;&#x2F;td&gt;
      &lt;td&gt;evgenkot | Arriona | LevmurDev | Trauvel | VVolsha | caesarrxx | Arflee | MBKenny | lucius_pilgrim | sspring | NaStiluse | PepegaSandwich | nekoedges&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;take-a-seat-by-the-campfire&quot;&gt;Take a seat by the campfire&lt;&#x2F;h4&gt;
&lt;p&gt;Having smouldered on the suggestions backburner for long enough, your most requested change to campfires has finally flickered into life. Waypoints are now set by sitting down at a fire, rather than simply feeling its heat. So douse your navigational fears and get warm without worry, thanks to @isse&#x27;s firewood, with kindling from @horblegorble.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-06-30_horblegorble_campfire-seating.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-06-30_horblegorble_campfire-seating.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-06-30_horblegorble_campfire-seating.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Hassle-free use of the central crafting stations&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Along the way was a detour in short story interface design, which promised to dispel all confusions and ambiguities. Surprisingly, this wasn&#x27;t a smash hit in playtesting. Something about &quot;I can&#x27;t see a damn thing&quot; or somesuch minor detail.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-05-04_horblegorble_short-story-interfaces.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1060
    height=622
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-05-04_horblegorble_short-story-interfaces.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Stories told by the campfire&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4891&quot;&gt;!4891&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;get-better-with-bedrest&quot;&gt;Get better with bedrest&lt;&#x2F;h4&gt;
&lt;p&gt;That latest journey left you with an open gash? Simply lay down, tuck in, and let the comfort of a good mattress sort it all out. This might sound like some kind of nonsense or unicorn magic at first, but that&#x27;s Dr. Unicorn magic to you. In collaboration with @isse, here&#x27;s @drunicornthe1 with your prescription:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Merged in the ability to regen health while sleeping. This will also give the ability to have other blocks give effects while mounted. &lt;s&gt;Just don’t look at the buff icon yet it’s going to be reworked later&lt;&#x2F;s&gt;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-02_horblegorble_better-with-bedrest.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-02_horblegorble_better-with-bedrest.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-02_horblegorble_better-with-bedrest.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;The right pyjamas make all the difference&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Demand has been high for these marvellously mellow mattresses, so unfortunately deliveries have only been made to forest towns so far.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4838&quot;&gt;!4838&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;free-up-your-footwork&quot;&gt;Free up your footwork&lt;&#x2F;h4&gt;
&lt;p&gt;Save those ankle breaking flourishes for the dance floor, and bring the rest of your body into the swing of things. @unii made animation changes across many sword skills that bring some oomph to your strike, with no time to play footsies.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-08-21_horblegorble_swordplay-side-by-sides.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-08-21_horblegorble_swordplay-side-by-sides.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-08-21_horblegorble_swordplay-side-by-sides.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Before (left) and after (right) for riposte, heavy slam, and spiral slash&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4847&quot;&gt;!4847&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;a-farmer-s-life-for-me&quot;&gt;A farmer&#x27;s life for me&lt;&#x2F;h4&gt;
&lt;p&gt;Lettuce be glad for the work of @Supa and @drunicornthe1, who&#x27;ve yielded a bumper crop of leaf-wrapped presents for us to open (away from townsfolk eyes). Unlike sprites of old, these now have separate models for before and after states, as well as for the collected item. This MR also leaves behind some internal cabbage baggage.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_lettuce-picking.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=611
    height=352
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_lettuce-picking.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Time to get ahead (of lettuce)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-14_horblegorble_sprite-picking.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-14_horblegorble_sprite-picking.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-14_horblegorble_sprite-picking.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Picking vs. unwrapping&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now it&#x27;s not all about the harvest. @Supa has been thinking ahead, and took the chance to plant some voxel model seeds for future farm work.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_yard-tools.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=580
    height=473
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_yard-tools.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The right tool for the job&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_farm-gate.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=732
    height=288
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_farm-gate.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Crops need their gated communities&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_handrail-R2L.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=385
    height=562
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-19_Supa_handrail-R2L.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hand rails for the ranch&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4835&quot;&gt;!4835&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ui-gooey&quot;&gt;UI Gooey&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;throwing-shades-of-grey&quot;&gt;Throwing shades of grey&lt;&#x2F;h5&gt;
&lt;p&gt;Contrast is in the eye of the beholder, so go ahead and use @Crabo&#x27;s new opacity slider to tune things just right. And check out @Supa&#x27;s touch-ups to PvP icons while you&#x27;re there.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-26_horblegorble_row-opacity-slider.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=610
    height=904
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-26_horblegorble_row-opacity-slider.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=610
  height=904
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-26_horblegorble_row-opacity-demo.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-26_horblegorble_row-opacity-demo.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-26_horblegorble_row-opacity-demo.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;It&amp;#x27;s bring-your-own seizure warning if you wanna go real fast&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4842&quot;&gt;!4842&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4894&quot;&gt;!4894&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;the-way-back&quot;&gt;The way back&lt;&#x2F;h5&gt;
&lt;p&gt;Adventures in Veloren can take you many places, including a long way from your waypoint on a good day. Among all the sights and sounds of the world, it&#x27;s not always the easiest thing to recall. So @Crabo is here to help again, with an entry in the player menu (that&#x27;s what a diary is for, right?). Cheers as well to @hnrq for adding translation keys.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_character-waypoint.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1409
    height=619
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_character-waypoint.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;For when that campfire isn&amp;#x27;t quite burned into your memory&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4802&quot;&gt;!4802&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4909&quot;&gt;!4909&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;change-the-channel&quot;&gt;Change the channel&lt;&#x2F;h4&gt;
&lt;p&gt;Resident sound engineer @DaforLynx has been busy backstage at the studio, wrangling cables with minds of their own and keeping &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;kira&#x2F;latest&#x2F;kira&#x2F;&quot;&gt;kira&lt;&#x2F;a&gt; in check. After far too many sample rates and the odd expletive, we get to enjoy the tidy fruits of his messy labour:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I added a setting for how many audio channels are allocated for SFX. If you are experiencing lag in situations with a high amount of audio traffic, try setting this to medium or low.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_sfx-channels.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=868
    height=577
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_sfx-channels.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;How parallel can you run your hearing?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4743&quot;&gt;!4743&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4916&quot;&gt;!4916&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;get-your-fix&quot;&gt;Get your fix&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;no-more-ratatouille&quot;&gt;No more Ratatouille&lt;&#x2F;h5&gt;
&lt;p&gt;It&#x27;s not unusual for a summon to hop on a shoulder for a ride, where they can feel like they&#x27;re seeing the world through their boss&#x27;s eyes (this may be startling to a greenhorn adventurer, but rest assured it&#x27;s perfectly acceptable in dungeon culture). Now what is unusual was an upset in the hierarchy that had some upstart minions convinced they had been lifted above their station. No more taking orders - it was their turn to call the shots, and the big boss could take the back seat.&lt;&#x2F;p&gt;
&lt;p&gt;As to why their superiors were inclined to humour this apparent rebellion, some analysts suspect that it was the allure of guaranteed schadenfreude. For it wasn&#x27;t long at all before these ladder climbers made the humbling discovery that they had not read the manual on doing their boss&#x27;s job. And boy, was there a lot to know. With such big shoes to fill, all they could manage was some plodding around.&lt;&#x2F;p&gt;
&lt;p&gt;@isse had to climb up herself to cut the puppet strings and knock these over-influential shoulder parrots off their perch. Let&#x27;s see if the so-called bosses can keep things in order this time.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-08-26_horblegorble_shoulder-demon.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1053
    height=740
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-08-26_horblegorble_shoulder-demon.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Is that an angel or a demon on their shoulder?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4860&quot;&gt;!4860&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;life-and-death-logistics&quot;&gt;Life and death logistics&lt;&#x2F;h5&gt;
&lt;p&gt;Speaking of bosses, does anyone know who&#x27;s in charge of Veloren&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_rtsim&#x2F;index.html&quot;&gt;rtsim&lt;&#x2F;a&gt; afterlife and reincarnation? Seems they&#x27;d left it on auto-pilot in the basic mode of instant respawns at reliable locations. Guess it comes with the pre-alpha territory. Though not everyone was complaining, with some players making efficient use of the opportunity for goods that fell from the sky. It is suspected they were suffering from a bad case of loot fever.&lt;&#x2F;p&gt;
&lt;p&gt;Hopefully their temperatures start to come down with another fix from @isse, which introduces a mortality architect to ferry entities from one life to the next. That transition now takes some time, begging all sorts of metaphysical questions about life beyond the health bar.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4833&quot;&gt;!4833&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4906&quot;&gt;!4906&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;iconic-looks&quot;&gt;Iconic looks&lt;&#x2F;h4&gt;
&lt;p&gt;These clothes were made for working, and that&#x27;s just what @unii did. A crease here, a smudge there, and those clean overalls finally get their &#x27;well-loved&#x27; feel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-03-04_unii_the-worker-workover.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1280
    height=1064
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-03-04_unii_the-worker-workover.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The workwear workover&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Bringing this work ethic one dimension down, @unii also polished off some icons that had started out as part of a personalised aesthetic mod. Shading, dithering, and that personal touch all give them a tasty flavour.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-22_unii_icon-progression.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=640
    height=649
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-22_unii_icon-progression.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Left to right: original, draft, final | Top to bottom: info, artifact, mod&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4903&quot;&gt;!4903&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;voxel-housekeeping&quot;&gt;Voxel housekeeping&lt;&#x2F;h4&gt;
&lt;p&gt;Although they&#x27;re made of blocks, it isn&#x27;t hard for voxel models to become disorganised over time if you&#x27;re not careful how you stack them. Taking up the task of tidying up our boxes was @Supa and @imbris, who faced no shortage of paperwork in changing a slew of names and addresses in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;tree&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;voxel&quot;&gt;&lt;code&gt;assets&#x2F;voxygen&#x2F;voxel&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; directory. This primarily concerned the &lt;code&gt;item&#x2F;&lt;&#x2F;code&gt;, &lt;code&gt;object&#x2F;&lt;&#x2F;code&gt;, and &lt;code&gt;sprite&#x2F;&lt;&#x2F;code&gt; folders. So if you&#x27;re playtesting or debugging with &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;commands.html#server-commands&quot;&gt;&lt;code&gt;&#x2F;give_item&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and can&#x27;t find an item&#x27;s path, don&#x27;t forget what&#x27;s in your toolbox: tab completion from a hash (#) prefix and a search bar in the F7 menu (Admin Commands -&amp;gt; Give Items). For those in the modelling business, do check out the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;voxel&#x2F;README.md&quot;&gt;assets&#x2F;voxygen&#x2F;voxel&#x2F;README.md&lt;&#x2F;a&gt; file that has been provided as a guide on the intended arrangement going forward.&lt;&#x2F;p&gt;
&lt;p&gt;It wasn&#x27;t all a re-boxing match - other work included cleaning up rusty (the bad kind) code structures, as well as mediating disagreements between visuals and physics for some sprites. With all of the &lt;s&gt;voxel fort building&lt;&#x2F;s&gt; tactical logistics, it&#x27;s important not to risk getting buried under a tumble. So the original effort was split across 3 merge requests, with 2 extras from @horblegorble to settle some of the dust kicked up in cleaning.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4774&quot;&gt;!4774&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4826&quot;&gt;!4826&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4863&quot;&gt;!4863&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4864&quot;&gt;!4864&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4899&quot;&gt;!4899&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4913&quot;&gt;!4913&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;resolved security warnings and a vulnerability + updated &lt;code&gt;conrod_core&lt;&#x2F;code&gt; - @Crabo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4907&quot;&gt;!4907&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;updated badges and restored cover image in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;README.md&quot;&gt;&lt;code&gt;README.md&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - @walpo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4897&quot;&gt;!4897&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;miscellaneous fixes to changelog entries - @Crabo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4885&quot;&gt;!4885&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;synchronised battlemode state with existing character data - @do-no-van - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4902&quot;&gt;!4902&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;added and improved documentation for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;voxygen&#x2F;src&#x2F;cmd.rs&quot;&gt;&lt;code&gt;voxygen&#x2F;src&#x2F;cmd.rs&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - @Caigh - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4900&quot;&gt;!4900&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;more precise and well-formatted doc comments, plus some more descriptive variable names - @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4910&quot;&gt;!4910&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;decoupled stun duration from baked in attack speed modifier - @do-no-van - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4898&quot;&gt;!4898&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;price reduction for gold and silver ore to better match rarity - @Owill0w - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4922&quot;&gt;!4922&lt;&#x2F;a&gt; ✨&lt;&#x2F;li&gt;
&lt;li&gt;more badge updates in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;README.md&quot;&gt;&lt;code&gt;README.md&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - @MSGanesh23 - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4915&quot;&gt;!4915&lt;&#x2F;a&gt; ✨&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;gone-fishin&quot;&gt;Gone fishin&#x27;&lt;&#x2F;h4&gt;
&lt;p&gt;What&#x27;s that tugging on the line?&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s us, nibbling on the bait of @do-no-van&#x27;s splash into fishing mechanics. Over the horizon there&#x27;s the lure of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_rtsim&#x2F;index.html&quot;&gt;rtsim&lt;&#x2F;a&gt; fisheries, but for now the net is cast close to shore on basic functionalities.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1356
  height=674
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-25_do-no-van_gone-fishin.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-25_do-no-van_gone-fishin.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-25_do-no-van_gone-fishin.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Cast, bubble, reel. The classic gameplay loop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-20_do-no-van_now-this-is-a-fish.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=685
    height=577
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-20_do-no-van_now-this-is-a-fish.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Now this is a fish&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;discussions&quot;&gt;Discussions&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;pet-projects&quot;&gt;Pet projects&lt;&#x2F;h4&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-09-04_horblegorble_all-saddled-up.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1419
    height=1068
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-09-04_horblegorble_all-saddled-up.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;All saddled up for the road ahead&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;It started with a &lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-249&#x2F;(https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1361116169205190827)&quot;&gt;suggestion&lt;&#x2F;a&gt; on the discord for pets to have unique abilities, including (but hopefully not limited to) carrying backpacks. From there, folks were busting open their chalk packs for an assault on the brainstorming blackboard. Across the pastel spectrum, the final &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;795669289642360864&#x2F;1362185477763108916&quot;&gt;scrawlings&lt;&#x2F;a&gt; featured @juliancoffee, @Gemu, @UncomfySilence, and @isse. With honourable doodles from @Supa, @Alley_Oop, and @horblegorble. For those after the big picture, this discussion was later followed up with by a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;795669289642360864&#x2F;1409212400363765881&quot;&gt;summary&lt;&#x2F;a&gt; from @Gemu. But that&#x27;s enough preamble, let&#x27;s get into the (thematically embellished) details.&lt;&#x2F;p&gt;
&lt;p&gt;It was a memorable bass line that played throughout: creatures come as they are. Some leather strap wound through a hunk of metal isn&#x27;t going to transcend their existence into new realms of verticality. No, their trials shall be our triumphs. Their glories, our grit. Tracing the orbit of independent souls learning to turn together through the twists of fate.&lt;&#x2F;p&gt;
&lt;p&gt;Bound in life, but not in mind. A choice at first, tended with care to blossom in time.  The many finesses of cooperation weaving ever tighter the whats and whens of chosen tactics. With vigilance to crossed threads and slipped knots, dancing on to new patterns of harmony. Far and away from the discordant rhythms of summoner and thrall. Some world that is: command, control, expire.&lt;&#x2F;p&gt;
&lt;p&gt;So not with thoughts in sync, but still things shared. Such as the physicality of body. We know well our own adornments, of all manner of utility and aesthetic. Do we forget these material crafts are best shared? Be it buttressing headgear, flowing fabrics, or a double saddle for the burly hearted. Then coming full circle to personal gear that blends trade-offs between player and pal.&lt;&#x2F;p&gt;
&lt;p&gt;Now indeed, this light ahead may shine most brightly. But know well - it stands against the looming shadow of mortality. And from this darkness rise these spectres of doubt: Do all good pets go to heaven? Or do they share in our unyielding tethers to the world? What damages would be done to the relationship? Can such wounds be mended, or will things inevitably tear apart? Tough questions don&#x27;t always have sound answers, so for the moment we have some tonics that may ease a disquiet mind:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;waypoint respawning (straightforward, but not ideal)&lt;&#x2F;li&gt;
&lt;li&gt;more nuanced downed states and revival mechanisms&lt;&#x2F;li&gt;
&lt;li&gt;downgrading of player-creature bond (and associated skills&#x2F;controls)&lt;&#x2F;li&gt;
&lt;li&gt;soulstone item that needs transferring into a new creature of the same species&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So that&#x27;s what&#x27;s been sketched out. As you ponder these various hues of thought, consider a closing thought from @Alley_Oop, who said what we&#x27;ve all been thinking: &quot;giant bunny mounts when&quot;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;concept-art&quot;&gt;Concept art&lt;&#x2F;h3&gt;
&lt;p&gt;First-hand accounts of various explorations in voxel space. A mix of things intended for use in-game, and more experimental ideations.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sort-it-out&quot;&gt;Sort it out&lt;&#x2F;h4&gt;
&lt;p&gt;Inspired by inventory management in other games, @drunicornthe1 made an expedition into the world of sorting controls for Veloren. Here&#x27;s a demo of their &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;725508097233125407&#x2F;1362411406586020051&quot;&gt;findings&lt;&#x2F;a&gt; featuring a variety of modes with a single sorting button.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=424
  height=708
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_inventory-sorting.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_inventory-sorting.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-07-15_horblegorble_inventory-sorting.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Could sort by colour be next?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4807&quot;&gt;!4807&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;pirated-goods&quot;&gt;Pirated goods&lt;&#x2F;h4&gt;
&lt;p&gt;@Supa went off treasure hunting in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449660795857403905&quot;&gt;#aesthetics&lt;&#x2F;a&gt; upload &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;drive&#x2F;folders&#x2F;1jkn8v9I0fo1nJlM29YAI_wWb_V-w456q&quot;&gt;folder&lt;&#x2F;a&gt; to dig up some swashbuckling goodies. A quick dust off, some colour touch-ups, and they&#x27;re as good as new.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-26_Egzekutor_x_Supa_glider-pirate.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1495
    height=634
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-26_Egzekutor_x_Supa_glider-pirate.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Catch the wind in your sails — original by @Weightierharpy3 (2022)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-26_Weightierharpy3_x_Supa_pirate-hat.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1422
    height=618
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-26_Weightierharpy3_x_Supa_pirate-hat.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Aye aye, cap&amp;#x27;n — original by @Egzekutor (2020)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;legends-of-vintiry&quot;&gt;Legends of Vintiry&lt;&#x2F;h3&gt;
&lt;p&gt;Forget orichalcum and sunsilk, we&#x27;ve got a legendary tier video trailer to feast our senses on. Whether French speech is close in reach, or only close in spirit, this server event will be the place to follow in this party&#x27;s questing footsteps. Will their bonds of friendship stay warm through the icy chill of mountainous foes? Watch on, and heed the call of @marcoleric:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I can now spill the beans. We cooked a little server for an event and we&#x27;ve been working on a logo + trailer for it&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;XIbClY4IiJw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Cry over artful cinematography, not spilled beans&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Credits go to @Limina for camera control and @vickyfrenzy for weather wrangling by, all to realise the screenplay of @marcoleric. Scored with music by &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jonathanyoungmusic.com&#x2F;&quot;&gt;jonathanymusic&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lost-in-transit&quot;&gt;Lost in transit&lt;&#x2F;h3&gt;
&lt;p&gt;Fellow public transport enthusiasts can enjoy a game of connect-the-dots when planning their next trip, thanks to the regular geometry of maps and tables &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449602562165833760&#x2F;1364337042888200263&quot;&gt;shared&lt;&#x2F;a&gt; by @olaf_ej.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-23_olaf_ej_transport-network.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3649
    height=3169
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;2025-04-23_olaf_ej_transport-network.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The Airloren travel network&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;beat-the-heat&quot;&gt;Beat the heat&lt;&#x2F;h3&gt;
&lt;p&gt;Leaving all your armour behind is one way to stay cool under fire. But if it helps you feel the rhythm of combat, we can&#x27;t argue with results. So get ready for some roly-poly tactics here from @unii.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;mIHllkiB1ZA&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Your flight has been grounded&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-17_And_i_fungal-foliage.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1662
    height=1024
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-17_And_i_fungal-foliage.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fungal foliage — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;
2025-04-18_Necti_gonna-need-a-bigger-chimney.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=717
    height=826
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;
2025-04-18_Necti_gonna-need-a-bigger-chimney.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A wild warmth looking for its hearth — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-19_And_i_peak-views.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-19_And_i_peak-views.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Peak views — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-19_Sam113_farmlandia.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1072
    height=773
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-19_Sam113_farmlandia.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Farmlandia — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-23_Necti_flying-brooms.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1291
    height=886
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-23_Necti_flying-brooms.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying brooms, minus the witchcraft — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-25_Avex_matching-blues.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=879
    height=686
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-25_Avex_matching-blues.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bandits in blue — by Avex&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1280
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-26_horblegorble_splosions-in-sporia.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-26_horblegorble_splosions-in-sporia.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-26_horblegorble_splosions-in-sporia.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;&amp;#x27;splosions in Sporia — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-27_Necti_stuck-in-the-mud.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1143
    height=819
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-27_Necti_stuck-in-the-mud.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Stuck in the mud — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-30_purpur_getting-a-bit-overexcited-about-flowers.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=696
    height=621
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-30_purpur_getting-a-bit-overexcited-about-flowers.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Blowing up in wait for blossoms — by @purpur&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-05-01_Synis_triathlon-gliding.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1222
    height=908
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-05-01_Synis_triathlon-gliding.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Triathlon gliding course — by @Synis&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-22_Crabo_backseat-driving.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=960
    height=540
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;249&amp;#x2F;screenshots&amp;#x2F;2025-04-22_Crabo_backseat-driving.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Crabo plays backseat pilot. Will the captain&amp;#x27;s patience last till the next flight? :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;249&#x2F;screenshots&#x2F;2025-04-23_Gemu_mentor-and-pupil.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 248</title>
          <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-248/</link>
          <guid>https://veloren.net/blog/devblog-248/</guid>
          <description>&lt;p&gt;Let&#x27;s hop back on the blog-wagon, loaded up with fixes, kits, and seasonal fun. Hopefully not too much luggage for catching the i18n train.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @drunicornthe1, @Crabo, @unii, @juliancoffee, @isse, @horblegorble, @do-no-van, @walpo, @xMAC94X, @Knightress_Paladin, @coffee-compiler, @Caigh, @imbris, @floppy, and @srpapinha.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate translators who contributed these last weeks:&lt;&#x2F;p&gt;
&lt;table aria-label=&quot;Table of translation contributors arranged by language&quot;
  style=&quot;border: 1px solid; margin-bottom: 1rem; margin-left: auto; margin-right: auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;border: 1px solid;&quot;&gt;
      &lt;th scope=&quot;col&quot; style=&quot;border-right: 1px solid; text-align:left; padding-left: 0.8em; padding-right: 0.8em; padding-top: 0.2em; padding-bottom: 0.2em;&quot;&gt;
        Language
      &lt;&#x2F;th&gt;
      &lt;th scope=&quot;colgroup&quot; style=&quot;text-align:left; padding-left: 0.8em;&quot;&gt;
        Translators
      &lt;&#x2F;th&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;thead&gt;
  &lt;tbody class=&quot;alternating-rows&quot;&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Czech&lt;&#x2F;td&gt;
      &lt;td&gt;Janez&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;English&lt;&#x2F;td&gt;
      &lt;td&gt;evgenkot | Arriona&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;French&lt;&#x2F;td&gt;
      &lt;td&gt;Limina&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;German&lt;&#x2F;td&gt;
      &lt;td&gt;coffee-compiler&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Korean&lt;&#x2F;td&gt;
      &lt;td&gt;juliancoffee&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Russian&lt;&#x2F;td&gt;
      &lt;td&gt;evgenkot | caesarrxx | LevmurDev | MBKenny | Arriona | Trauvel | Manifure | LuckyCoin | Carrotism | lucius_pilgrim | VVolsha&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Ukrainian&lt;&#x2F;td&gt;
      &lt;td&gt;juliancoffee | Akumo33 | ministergoose | Sinari | Iced | lomkada | Karaya | DDmytroO&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;chatty-changes&quot;&gt;Chatty changes&lt;&#x2F;h4&gt;
&lt;p&gt;Are you a chatterbox that loves to have a bunch of conversations going at once, but the friction of switching gears is slowing you down? @drunicornthe1 knows the feeling - and what to do about it. For their first merge request, they got their hands into the grime of the gearbox to tune up the mode swap transmission. Now it feels like driving a race car, with spacebar as the snappy paddle shifter.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=568
  height=264
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_mode-switching.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_mode-switching.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_mode-switching.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Clear up the clutter and stay on message&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4849&quot;&gt;!4849&lt;&#x2F;a&gt;
✨&lt;&#x2F;p&gt;
&lt;br&gt;
&lt;p&gt;@Crabo has opened up the chat window for us to jump straight into Veloren&#x27;s wiki:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I added the &lt;code&gt;&#x2F;wiki&lt;&#x2F;code&gt; command. The idea came from a GitLab &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;779&quot;&gt;issue&lt;&#x2F;a&gt; created in September of 2020. It was easy to do because it uses REST to delegate the searching and redirecting to the wiki itself. I&#x27;m starting to see more people use it to point newcomers to the right wiki pages. I tell people to type &quot;&#x2F;wiki recipes&quot; and &quot;&#x2F;wiki weapons&quot; all the time.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_wiki-link-out.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1917
    height=1133
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_wiki-link-out.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Answers at your fingertips&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Do keep in mind that the wiki is community driven, and doesn&#x27;t always keep up with the traffic of development.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4823&quot;&gt;!4823&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;axe-juggling&quot;&gt;Axe juggling&lt;&#x2F;h4&gt;
&lt;p&gt;A recalibration may be in order for your knife-on-a-stick playstyle, with lower combo for several abilities and changes to fierce raze.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-14_horblegorble_axe-juggling.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=542
    height=840
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-14_horblegorble_axe-juggling.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pulling off another balancing act&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Let&#x27;s spell out the details of @unii&#x27;s tweaks:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;combo reductions: bulkhead, capsize, execute, maelstrom, riptide&lt;&#x2F;li&gt;
&lt;li&gt;one-hand fierce raze: reduced damage&lt;&#x2F;li&gt;
&lt;li&gt;two-hand fierce raze: increased damage, reduced range, increased energy cost&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Combo-related ability descriptions have also been updated to have their numerical values separate from i18n files. That&#x27;s one less ball in the air for future jugglers.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4850&quot;&gt;!4850&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;fixing-up-fonts&quot;&gt;Fixing up fonts&lt;&#x2F;h4&gt;
&lt;p&gt;If it felt like the voxel style of Veloren was being taken a bit too far with some languages, @juliancoffee would agree. The sight of all these blocks activated his mining instinct, and he swung the coding pickaxe to reveal their true forms:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;We&#x27;ve tweaked our fonts a bit.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;TL;DR: Complicated Latin languages like Norwegian or Czech can now be rendered properly.
Arabic can be rendered now.
You can&#x27;t use &lt;code&gt;convert_utf8_to_ascii&lt;&#x2F;code&gt; anymore, because we&#x27;ve removed it.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_fancy-fonts.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1700
    height=991
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_fancy-fonts.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;High fidelity pickaxe sculpting&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;As for a more in-depth explanation, each language had 5 fonts attached:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;code&gt;Alkhemikal&lt;&#x2F;code&gt;, super fancy font.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;&lt;code&gt;OpenSans&lt;&#x2F;code&gt;, super generic font.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;&lt;code&gt;Cyri&lt;&#x2F;code&gt;, which I believe stands for Cyrillic, is used as a regular font for most text you see on the screen.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;&lt;code&gt;Wizard&lt;&#x2F;code&gt;, unused.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;&lt;code&gt;Metamorph&lt;&#x2F;code&gt;, unused.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;i&gt;We&#x27;ve removed the unused &lt;code&gt;Wizard&lt;&#x2F;code&gt; and &lt;code&gt;Metamorph&lt;&#x2F;code&gt; fonts, and we&#x27;ve replaced &lt;code&gt;OpenSans&lt;&#x2F;code&gt; with &lt;code&gt;GoNotoCurrent.ttf&lt;&#x2F;code&gt;.
The point of &lt;code&gt;OpenSans&lt;&#x2F;code&gt; is to be a universal font for formal information where we want the most complete coverage, for example, in chat.
Except it didn&#x27;t cover a lot of languages, so we&#x27;ve replaced it with another font that now covers almost everything, except Korean.
And, because this is the font that should be the same for all languages, it&#x27;s added by default, you don&#x27;t need to specify it in the language&#x27;s manifest.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Additionally, we&#x27;ve added &lt;code&gt;EnterCommand&lt;&#x2F;code&gt; from Font End Dev, which is a bit different, but supports more Latin characters, so I take it as a win.
Oh, and we set &lt;code&gt;GoNotoCurrent&lt;&#x2F;code&gt; font as regular font for Arabic. How good is support for RTL languages is to be seen, I know it&#x27;s not ideal, but at least we can render it now.
Oh, and I&#x27;ve added ґ Ґ characters to our &lt;code&gt;Cyri&lt;&#x2F;code&gt; font, I&#x27;m an artist now &lt;&#x2F;i&gt;👀&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4875&quot;&gt;!4875&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;no-need-to-shout&quot;&gt;No need to shout&lt;&#x2F;h4&gt;
&lt;p&gt;@isse has been a busy bee, patching up all kinds of quirks in the codebase.&lt;&#x2F;p&gt;
&lt;p&gt;Town NPCs can save their voice with much more reasonable interaction distances.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_save-your-voice.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1433
    height=629
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_save-your-voice.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Boombox -&amp;gt; voicebox&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Airships return to their normal docking positions, taking the pressure off of player&#x27;s knees.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-13_horblegorble_airship-docking.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1671
    height=720
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-13_horblegorble_airship-docking.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;No more spring-loaded boarding process&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Caving is back to being a subterranean adventure, as their markers come out of hiding on the map.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-13_horblegorble_cave-markers.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1284
    height=572
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-13_horblegorble_cave-markers.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Let&amp;#x27;s call it early practice for discoverable maps&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;But wait, there&#x27;s more!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;throwable items get a pickup sound&lt;&#x2F;li&gt;
&lt;li&gt;desert town NPCs can direct you to crafting workshops&lt;&#x2F;li&gt;
&lt;li&gt;waterlogged cave entrances are less likely to be marked on the map&lt;&#x2F;li&gt;
&lt;li&gt;using interpolated character positions make it easier to perform interactions at high speed, e.g. with sprites on airships&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4851&quot;&gt;!4851&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4854&quot;&gt;!4854&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;kitting-out&quot;&gt;Kitting out&lt;&#x2F;h4&gt;
&lt;p&gt;If you&#x27;re allergic to Nth-wall breaking narrations, turn back now. It&#x27;s @horblegorble with the lowdown on loadouts:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;The &lt;code&gt;&#x2F;kit&lt;&#x2F;code&gt; emporium has expanded its catalogue of adventuring supplies to include a variety of new bits and bobs, outfits and bombs. Some are new to the store, while others are more bespoke bundles of existing products. As always, simply flash your admin badge at the door to unlock the unlimited shopping experience! New customers may wish to pickup an &quot;Admin&#x27;s Black Hole&quot; bag before getting lost in the aisles. A complimentary one is included in the &lt;code&gt;&#x2F;kit debug&lt;&#x2F;code&gt; package.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_booty-a-plenty.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1093
    height=755
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_booty-a-plenty.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Booty a-plenty&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;For those curious about details further up the supply chain, here&#x27;s a look at the adjustments to the specification and generation of modular weapons for kit and loadout configs.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;&lt;code&gt;KitSpec::ModularWeapon&lt;&#x2F;code&gt; got split by suffix into &lt;code&gt;Set&lt;&#x2F;code&gt; and &lt;code&gt;Random&lt;&#x2F;code&gt; variants that generate (respectively) a full set of compatible weapons, or a single one chosen at random. The handling of handedness was adjusted to properly enforce the optional &lt;code&gt;hands&lt;&#x2F;code&gt; argument across all primary and secondary component combinations. With these two changes, &lt;code&gt;&#x2F;kit pirate&lt;&#x2F;code&gt; could be set up to give two randomly selected one-handed swords. The hand compatibility also applied to &lt;code&gt;ItemSpec::ModularWeapon&lt;&#x2F;code&gt; for loadouts, which got Grim Salvagers to stick to their spec of two-handed hammers. No more smuggling in a close enough one-hander and calling it a day.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Cheers to @juliancoffee for advice on the coding process, as well as @Tarhun and @Sam for review feedback.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;On a housekeeping note (and where this merge request started off), the new multi-model metal armour sets now have consistent names and ordering in their &lt;code&gt;.vox&lt;&#x2F;code&gt; files. This tidied up the &lt;code&gt;.ron&lt;&#x2F;code&gt; manifests, and hopefully mitigates the re-occurrence of some index mixups that arose from copy-paste modifications.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4798&quot;&gt;!4798&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;better-beams&quot;&gt;Better beams&lt;&#x2F;h4&gt;
&lt;p&gt;@do-no-van had always heard it was advantageous to have a well-rounded skillset, but found that beam attacks were taking this advice a bit far. Specifically, it got funky when their radius was being added onto their nominal range. After a small trim, things lined up much neater.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1280
  height=720
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_better-beams.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_better-beams.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-11_horblegorble_better-beams.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Mind the gap&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4869&quot;&gt;!4869&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;one-iter-to-rule-them-all&quot;&gt;One iter to rule them all&lt;&#x2F;h4&gt;
&lt;p&gt;It began with the forging of the Great Data Structures. Fields were given to the Structs; immortal, simplest and pointiest of all beings. Variants to the Enum Lords, great matchers and unionisers of the double colon halls. And traits... Traits were gifted to the Race of Types, who above all else desire strictness.&lt;&#x2F;p&gt;
&lt;p&gt;For within these structures was bound the memory addresses and assembly to govern each abstraction. But they were all of them deceived, for another abstraction was made. In the land of Ukraine, in the fires of Neovim, the Dark Lord @juliancoffee forged, in secret, declarative macros to enumerate all others. And into these macros he poured all his caffeination, his rust-fu and his will to iterate all variants:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Ok, this is a super technical thing, but hey, it&#x27;s a dev blog.
Let me introduce you to a few macros I&#x27;ve been working on, with @imbris&#x27;s help.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Well, you &lt;&#x2F;i&gt;[may]&lt;i&gt; know you can define &lt;code&gt;enum&lt;&#x2F;code&gt; in Rust:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;enum Dir {
&lt;&#x2F;span&gt;&lt;span&gt;   Up,
&lt;&#x2F;span&gt;&lt;span&gt;   Down,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;Let&#x27;s say you have some function that takes &lt;code&gt;Dir&lt;&#x2F;code&gt; as output, so it&#x27;d be cool to automatically test it on all &lt;code&gt;Dirs&lt;&#x2F;code&gt; and check that it doesn&#x27;t throws errors or something like that. Except, you can&#x27;t get all &lt;code&gt;Dirs&lt;&#x2F;code&gt;, Rust doesn&#x27;t provide such functionality...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Except, you can write such functionality yourself with a bit of dark magic by rewriting Rust code at compile time. One such magical rewriter is the &lt;code&gt;strum&lt;&#x2F;code&gt; crate, which we are using, which will generate a method &lt;code&gt;iter()&lt;&#x2F;code&gt; that will do just that. Unfortunately, &lt;code&gt;strum&lt;&#x2F;code&gt; can&#x27;t handle anything more complex.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Let&#x27;s say you want to nest these enums:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;enum Boost {
&lt;&#x2F;span&gt;&lt;span&gt;   Health,
&lt;&#x2F;span&gt;&lt;span&gt;   Gravity(Dir),
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;You&#x27;d expect to get &lt;code&gt;Boost::Health&lt;&#x2F;code&gt;, &lt;code&gt;Boost::Gravity(Dir::Up)&lt;&#x2F;code&gt;, &lt;code&gt;Boost::Gravity(Dir::Down)&lt;&#x2F;code&gt;, but &lt;code&gt;strum&lt;&#x2F;code&gt; won&#x27;t generate them, because ... it won&#x27;t.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;So I made a macro that would generate them. And that&#x27;s not all. What if you don&#x27;t have just &lt;code&gt;enum&lt;&#x2F;code&gt;? What if you have some &lt;code&gt;struct&lt;&#x2F;code&gt; you want to iterate over?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;enum Species { Butterfly, Bird }
&lt;&#x2F;span&gt;&lt;span&gt;enum BodyType { Male, Female }
&lt;&#x2F;span&gt;&lt;span&gt;struct Body {
&lt;&#x2F;span&gt;&lt;span&gt;   species: Species,
&lt;&#x2F;span&gt;&lt;span&gt;   body_type: BodyType,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;Well, that&#x27;s another macro I&#x27;ve added which generates you all possible combinations of these &lt;code&gt;Bodies&lt;&#x2F;code&gt;, which would contain male and female versions for &lt;code&gt;Butterflies&lt;&#x2F;code&gt; and &lt;code&gt;Birds&lt;&#x2F;code&gt;. And if we already have that, why don&#x27;t we apply that to exactly such an enum in our codebase: &lt;code&gt;Body&lt;&#x2F;code&gt;, which defines every possible &quot;entity&quot; we can have. &lt;b&gt;By entity, I mean something abstract, but it includes everything from humanoids to rabbits, to even items and objects and airships. Not campfires though, which are entities as well, but well, special.&lt;&#x2F;b&gt;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;So this MR adds &lt;code&gt;Body::iter&lt;&#x2F;code&gt; function, which gives you a list of all possible entities. As a nice bonus, it will also generate some constants for you, like the number of kinds an enum has or if you ask it nicely, it will also give you all variants it can get. Unfortunately, the latter doesn&#x27;t work with nested enums.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;enum_iter! {
&lt;&#x2F;span&gt;&lt;span&gt;    ~const_array(ALL)
&lt;&#x2F;span&gt;&lt;span&gt;    #[derive(Eq, PartialEq, Debug)]
&lt;&#x2F;span&gt;&lt;span&gt;    enum Shade {
&lt;&#x2F;span&gt;&lt;span&gt;        Good,
&lt;&#x2F;span&gt;&lt;span&gt;        Meh,
&lt;&#x2F;span&gt;&lt;span&gt;        Bad,
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;&#x2F; it is, in fact, three kinds, as you can see
&lt;&#x2F;span&gt;&lt;span&gt;assert_eq!(Shade::NUM_KINDS, 3);
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;&#x2F; and these shades are really what you&amp;#39;d expect
&lt;&#x2F;span&gt;&lt;span&gt;const ALL_SHADES: [Shade; Shade::NUM_KINDS] = Shade::ALL;
&lt;&#x2F;span&gt;&lt;span&gt;assert_eq!(ALL_SHADES, [Shade::Good, Shade::Meh, Shade::Bad]);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;This is all done using so-called declarative macros or macros-by-example, which are powerful enough to achieve what I just showed you, but still not as convenient to write (or use) compared to more powerful kinds of macros: procedural macros.
These ones don&#x27;t just rewrite your code, they let you write the code to write new code.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;In the future, we plan to come up with alternative versions of these using procedural macros, and I&#x27;d personally want to release them to the general Rust ecosystem.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4843&quot;&gt;!4843&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;making-mug-shots&quot;&gt;Making mug shots&lt;&#x2F;h4&gt;
&lt;p&gt;Whether you want to create wanted posters, a future bestiary, or establish the database for a surveillance dystopia - @isse&#x27;s expansion of &lt;code&gt;img_export&lt;&#x2F;code&gt; to NPCs has got you covered.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-05_isse_mug-shots-w-legooms.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=640
    height=407
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-05_isse_mug-shots-w-legooms.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pick your fighter&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here&#x27;s a simple example that&#x27;ll give you everything at once:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;cargo run --bin img_export -- --all-npcs
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And another one with some of the bells and whistles:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;cargo run --bin img_export -- --all-npcs --filter traveler --seed 0 20
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will give you an image for all NPC paths that contain &#x27;traveler&#x27;, with a &lt;code&gt;seed&lt;&#x2F;code&gt; value to control randomised characteristics. Note that the final positional &lt;code&gt;scale&lt;&#x2F;code&gt; argument is applied to a 10x10 image, so the default of 20 gives 200x200 output. The command can be run from the top &lt;code&gt;veloren&lt;&#x2F;code&gt; directory of a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;working-with-git.html&quot;&gt;git repository&lt;&#x2F;a&gt;, with output saved in a &lt;code&gt;img-export&lt;&#x2F;code&gt; folder.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re looking for pixel-perfect results, be aware there&#x27;s still some &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;467073814208053248&#x2F;1358092772539891862&quot;&gt;minor glitches&lt;&#x2F;a&gt; in the rendering at lower resolutions.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4871&quot;&gt;!4871&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;don-t-git-confused&quot;&gt;Don&#x27;t git confused&lt;&#x2F;h4&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-15_horblegorble_sayori-git-meme.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=724
    height=720
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-15_horblegorble_sayori-git-meme.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Know your repo&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Mirror, mirror, in the cloud; why are my changes not allowed?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Famed is thy git commit;&lt;&#x2F;p&gt;
&lt;p&gt;but hold, this kitty is not it.&lt;&#x2F;p&gt;
&lt;p&gt;Ears cannot hide the tentacle.&lt;&#x2F;p&gt;
&lt;p&gt;Alas, vulpes vulpes is where you fit.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A lash for thee, that heed not @walpo&#x27;s note:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Due to user feedback, @walpo and @xMAC94x have updated the mirror repositories on GitHub in order to mitigate confusion with real repositories. The changes are:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;New pull requests are automatically closed.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Some features of those repositories have been disabled to make them look &quot;less real&quot;.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;i&gt;Remember folks, development takes place on GitLab, and not GitHub!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4853&quot;&gt;!4853&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4857&quot;&gt;!4857&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4859&quot;&gt;!4859&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4868&quot;&gt;!4868&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4870&quot;&gt;!4870&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ui-gooey&quot;&gt;UI gooey&lt;&#x2F;h4&gt;
&lt;p&gt;With a light makeover from @Crabo, crafting scrollbars are feeling much more confident in standing out to their mouse crush. This also inspired the footer section to give up their barefoot phase and slip on a &#x27;boot bar&#x27; for some tidy delineation of their own.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-21_horblegorble_crafting-window.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1226
    height=820
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-21_horblegorble_crafting-window.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A bit of brightening up around the edges&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4801&quot;&gt;!4801&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;all-aboard-the-i18n-train&quot;&gt;All aboard the i18n train&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;dodging-the-bus-factor&quot;&gt;Dodging the bus factor&lt;&#x2F;h5&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-16_horblegorble_dodging-the-bus-factor.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1169
    height=964
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-16_horblegorble_dodging-the-bus-factor.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Based on a true story&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Headlight eyes cut through the night. A low roar rumbles up through radiator jaws. All barrelling down at you with 7 tonnes of fury. The star of the show is ready, but @juliancoffee wants out of this road-rage thriller:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;So there was a problem of bus-factor with our i18n system, in that, frankly, I was probably the only person who fully understood how it works and how to interact with it, so well, I decided to fix this problem.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;developers-guide.html&quot;&gt;This guide&lt;&#x2F;a&gt; covers:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;all the i18n crates (or well, ones that do matter, I&#x27;m pretending that i18n-helpers doesn&#x27;t exist, because)&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;best practices and how to properly make UIs localizable&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;a few simple examples&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;i&gt;(Oh, and btw, I&#x27;ve added a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;weblate-admin.html#about-the-manifest-file&quot;&gt;section about fonts&lt;&#x2F;a&gt; to &quot;Managing Weblate&#x27;&quot;, which is inspired by the post above.)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;book&#x2F;-&#x2F;merge_requests&#x2F;211&quot;&gt;!211&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;what-shall-i-call-thee&quot;&gt;What shall I call thee?&lt;&#x2F;h5&gt;
&lt;p&gt;They have went by many names, floating between anonymities as boss after boss has called them to arms. After all these years of thankless, nameless service, @juliancoffee finally gives them something they can identify with.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_a-history-of-summons.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2523
    height=663
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_a-history-of-summons.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A history of summons&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4883&quot;&gt;!4883&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;back-in-the-bottle&quot;&gt;Back in the bottle&lt;&#x2F;h5&gt;
&lt;p&gt;Some buffing items were overflowing with power, eager to info-dump into your inventory. Keeping them in line was @Knightress_Paladin, by removing a doubled up concatenation and separating out duration information. At least this work was easier than putting toothpaste back in its tube.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_overflowing-potions-2.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=518
    height=500
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_overflowing-potions-2.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Don&amp;#x27;t cry over spilled potion&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4873&quot;&gt;!4873&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4877&quot;&gt;!4877&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;all-the-other-carriages&quot;&gt;All the other carriages&lt;&#x2F;h5&gt;
&lt;ul&gt;
&lt;li&gt;localised some trade messages - @coffee-compiler &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4862&quot;&gt;!4862&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;changed &quot;gigas frost&quot; to &quot;frost gigas&quot; in English i18n - @Crabo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4865&quot;&gt;!4865&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;consolidated HUD &lt;code&gt;.ftl&lt;&#x2F;code&gt; files that aren&#x27;t yet components in weblate - @coffee-compiler - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4820&quot;&gt;!4820&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;localised player names in the trade interface - @Caigh - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4880&quot;&gt;!4880&lt;&#x2F;a&gt; ✨&lt;&#x2F;li&gt;
&lt;li&gt;localised &lt;code&gt;&#x2F;players&lt;&#x2F;code&gt; command - @Caigh - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4882&quot;&gt;!4882&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;merged weblate translations - @juliancoffee - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4884&quot;&gt;!4884&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;localised &lt;code&gt;CommandResult&lt;&#x2F;code&gt; in voxygen - @Caigh + @juliancoffee &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4893&quot;&gt;!4893&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;new-names-old-stories&quot;&gt;New names, old stories&lt;&#x2F;h4&gt;
&lt;p&gt;Grab your marshmallows and settle in by the campfire. @juliancoffee has a yarn to spin:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Ok, I don&#x27;t even know where to start with this.&lt;&#x2F;p&gt;
&lt;p&gt;We can now translate NPC names!&lt;&#x2F;i&gt; 🥳&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_multilingual-guard.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1880
    height=1009
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-12_horblegorble_multilingual-guard.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;The shortcut to getting a &amp;#x27;new&amp;#x27; job title&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;TL;DR&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;For devs:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;in &lt;code&gt;assets&#x2F;common&#x2F;npc_names.ron&lt;&#x2F;code&gt; the &lt;code&gt;generic&lt;&#x2F;code&gt; field had been changed to represent an i18n key&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;in &lt;code&gt;assets&#x2F;common&#x2F;entity&lt;&#x2F;code&gt; configs, the name now uses &lt;code&gt;Translate&lt;&#x2F;code&gt; with an i18n key&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;i&gt;For devs and translators:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;animals are now translated like this:&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;ftl&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-ftl &quot;&gt;&lt;code class=&quot;language-ftl&quot; data-lang=&quot;ftl&quot;&gt;&lt;span&gt;name-body-quadruped_medium-lion =
&lt;&#x2F;span&gt;&lt;span&gt;    .fem = Lioness
&lt;&#x2F;span&gt;&lt;span&gt;    .masc = Lion
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;profession names and such are translated in an identical way:&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;ftl&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-ftl &quot;&gt;&lt;code class=&quot;language-ftl&quot; data-lang=&quot;ftl&quot;&gt;&lt;span&gt;name-custom-village-hunter =
&lt;&#x2F;span&gt;&lt;span&gt;    .fem = Huntress
&lt;&#x2F;span&gt;&lt;span&gt;    .masc = Hunter
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;objects don&#x27;t have any gendering information, so they only request one attribute: &lt;code&gt;neut&lt;&#x2F;code&gt;&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;ftl&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-ftl &quot;&gt;&lt;code class=&quot;language-ftl&quot; data-lang=&quot;ftl&quot;&gt;&lt;span&gt;name-custom-dungeon-cultist-turret =
&lt;&#x2F;span&gt;&lt;span&gt;    .neut = Possessed Turret
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;And frankly, it was an MR &lt;&#x2F;i&gt;[Merge Request]&lt;i&gt; with a fairly small diff, only 1977 lines added and 665 removed. The internalization system saw bigger ones.&lt;&#x2F;p&gt;
&lt;p&gt;But it&#x27;s the one that brings me &lt;em&gt;a lot&lt;&#x2F;em&gt; of joy, because in some way, it is the last internationalization MR.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;b&gt;A&lt;&#x2F;b&gt; last internationalization MR. We&#x27;ve come a long way.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;a-beginning&quot;&gt;&lt;i&gt;A beginning&lt;&#x2F;i&gt;&lt;&#x2F;h5&gt;
&lt;p&gt;&lt;i&gt;When I joined the project around April 2021, a fair amount of work was poured into Veloren&#x27;s translation, and most of the user interface could be translated via our in-house system of &lt;code&gt;.ron&lt;&#x2F;code&gt; files (&lt;code&gt;json&lt;&#x2F;code&gt;-like config files for Rust ). We even supported fallbacks if your current language didn&#x27;t have all its strings translated (thanks to &lt;code&gt;@Christof&lt;&#x2F;code&gt;).
It worked fine, but obviously it had its limitations; after all, it&#x27;s just a key-value store.
You ask for translated &quot;yes&quot; and receive &quot;Yes&quot; in return.
Or &quot;Oui&quot;, or &quot;Ja&quot;, or &quot;Так&quot;, or &quot;はい&quot;. You get the point.
It becomes complicated when you want to pass some values or, even act slightly differently depending on these values, for example, you don&#x27;t want to end up in a situation where an item costs &quot;one coins&quot;.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;So, in early August 2022, we fixed it. We adopted a new format: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;projectfluent.org&#x2F;&quot;&gt;Fluent&lt;&#x2F;a&gt;, created by Mozilla.
It was similar enough in its flow to our existing system, but at the same time, it&#x27;s super expressive, probably the most expressive format at that point and even today.
You can read about it more in a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-186&quot;&gt;blog post&lt;&#x2F;a&gt; about all that or in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;juliancoffee&#x2F;kotygoroshko&#x2F;-&#x2F;blob&#x2F;veloren-rfc&#x2F;RFC.md&quot;&gt;RFC document&lt;&#x2F;a&gt;, which quickly describes how it all works. (I think that RFC is the cooler one, but you can decide for yourself &lt;&#x2F;i&gt; 😉&lt;i&gt;)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Fluent is a cool format, and it&#x27;s enough of a reason to adopt it, but there was more to it.
First of all, there was an issue with the translation experience itself.
At the time, if you wanted to add localization to your language, you had to go through the same procedure all developers use, create a Gitlab account, learn how to work with Git, create a Merge Request, potentially manage your branch in case it needed updating... it wasn&#x27;t easy.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;So yeah, to solve that problem, we picked &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;weblate.org&#x2F;&quot;&gt;Weblate&lt;&#x2F;a&gt;.
It&#x27;s a web service that provides a more human-oriented interface and an improved management system.
It took us some time to migrate, and I must thank &lt;code&gt;@walpo&lt;&#x2F;code&gt; and &lt;code&gt;@fnetx&lt;&#x2F;code&gt; for pushing through it; it wasn&#x27;t easy.
As well as the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;about&quot;&gt;Codeberg&lt;&#x2F;a&gt; project for hosting.
Right now, we&#x27;re using it for all translations.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;the-tale-of-two-worlds&quot;&gt;&lt;i&gt;The tale of two worlds&lt;&#x2F;i&gt;&lt;&#x2F;h5&gt;
&lt;p&gt;&lt;i&gt;We were working on creating and improving the internal framework for localization, but I must mention a significant limitation of said framework.
You can only translate a message into a language, if you know what language to translate to.
And while it would be possible to thread this information from the client you&#x27;re using (and today, we do that to display server rules), it wouldn&#x27;t be as convenient as you&#x27;d need to pretty much create two localization systems.
Instead, we come up with the idea of delayed evaluation of messages. I could claim the idea here, but credit goes to &lt;code&gt;@zesterer&lt;&#x2F;code&gt; when he implemented the &lt;code&gt;Content&lt;&#x2F;code&gt; type while working on NPC messages.
The process is simple: instead of giving the client the final string, we give it a key for a string and the required context to evaluate this key.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;What this meant is that now you can translate not only the user interface.
Now you can translate everything.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;We started with translations for NPC messages, continued with server commands, items and finally, NPC professions and animal names.
And at this point, we&#x27;ve translated pretty much all there is.
Of course, there is stuff we forgot here and there, but it&#x27;s a matter of someone going through beginner issues and implementing left-out pieces.
You, dear reader, can &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;?label_name%5B%5D=wg%3A%3Atranslation&quot;&gt;do it as well&lt;&#x2F;a&gt;.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Hit me up at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&quot;&gt;Discord&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;#narrow&#x2F;channel&#x2F;482740-wg-translation&quot;&gt;Zulip&lt;&#x2F;a&gt;, I&#x27;ll probably be able to guide you.
And if you&#x27;re a translator and notice that something is missing from the game and there are no issues for that, feel free to create one (don&#x27;t forget to add &lt;code&gt;wg:translation&lt;&#x2F;code&gt; label).&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;h5 id=&quot;the-future&quot;&gt;&lt;i&gt;The future&lt;&#x2F;i&gt;&lt;&#x2F;h5&gt;
&lt;p&gt;&lt;i&gt;So what would be the next chapter for Veloren internationalization? With our near complete coverage, we need to fill small holes, probably also implement i18n for plugins, and focus on QoL improvements. Maybe even contribute to Weblate, who knows?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;But if I&#x27;d draw a big theme, I would say one word: Gender.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;It&#x27;s a complicated topic, but that makes it even more exciting. And I think I&#x27;ll share some thoughts on it with you all.
To begin, we already have a (bit shaky) foundation to build on.
Check out &lt;code&gt;assets&#x2F;voxygen&#x2F;i18n&#x2F;it&#x2F;hud&#x2F;chat.ftl&lt;&#x2F;code&gt;:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ftl&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-ftl &quot;&gt;&lt;code class=&quot;language-ftl&quot; data-lang=&quot;ftl&quot;&gt;&lt;span&gt;hud-chat-connection_lost =
&lt;&#x2F;span&gt;&lt;span&gt;    { $user_gender -&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        [she] Connessione persa. Verrai scollegata tra { $time } secondi.
&lt;&#x2F;span&gt;&lt;span&gt;       *[he] Connessione persa. Verrai scollegato tra { $time } secondi.
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;I don&#x27;t read Italian, but I bet you&#x27;d have an even harder time with the Ukrainian example, so bear with me.
You can see the power of &lt;code&gt;Fluent&lt;&#x2F;code&gt; here, every message can not just splice passed arguments to it, it can act on them. Which is especially useful for numbers, as Fluent supports the whole &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.unicode.org&#x2F;cldr&#x2F;cldr-aux&#x2F;charts&#x2F;30&#x2F;supplemental&#x2F;language_plural_rules.html&quot;&gt;Unicode standard&lt;&#x2F;a&gt; for them, but it can be used for other stuff as well.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Almost all strings in chat have one or multiple arguments which specify the gender attribute of an actor in context.
In this case, we check if the user&#x27;s gender is masculine - we use one form, if the user&#x27;s gender is feminine - we use another. (&lt;code&gt;scollegata&lt;&#x2F;code&gt; vs &lt;code&gt;scollegato&lt;&#x2F;code&gt;). (If we don&#x27;t know, we default to masculine in this case, that is what &lt;code&gt;*&lt;&#x2F;code&gt; is for)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;And if you go to the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;i18n&#x2F;it&#x2F;hud&#x2F;chat.ftl#L14&quot;&gt;beginning&lt;&#x2F;a&gt; of that file, NPC names follow a similar pattern, except here we employ a different tactic.
The reason is that in both cases we &#x27;match&#x27; on gender, but it&#x27;s not the same &lt;em&gt;kind&lt;&#x2F;em&gt; of gender.
There is more than one gender; in fact, there are more than two.
As you can guess, &lt;code&gt;hud-chat-connection_lost&lt;&#x2F;code&gt; in English has no matches.
That&#x27;s because English lacks the concept of &lt;em&gt;grammatical&lt;&#x2F;em&gt; genders almost completely.
It has the concept of sex, and it has the concept of gender. After all, we have all the pronouns.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Yet the word &quot;left&quot; is the same whether it&#x27;s &quot;she&quot; who left, or &quot;he&quot;, or &quot;they&quot; or even &quot;it&quot;. There&#x27;s no &quot;scollegata&quot; and &quot;scollegato&quot;. And most importantly, while most languages have a similar concept of sex and gender, because it&#x27;s not really a linguistic thing, the concept of grammatical genders can be wildly different, so we couldn&#x27;t just expose one attribute to handle everything.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;By the way, if you&#x27;re still wondering, what I mean by grammatical gender, let me very quickly explain it. In some languages, &lt;em&gt;every&lt;&#x2F;em&gt; word has a gender. In most European languages, it influences the article and the word&#x27;s ending.
So &quot;cat&quot; in German would be &quot;die Katze&quot;, which declares cats are inherently feminine.
In Spanish, &quot;the red cat&quot; would be &quot;el gato rojo&quot; while &quot;the red flower&quot; would be &quot;la flor roja&quot;.
And so on. Read the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Grammatical_gender&quot;&gt;Wikipedia page&lt;&#x2F;a&gt; on it, if you want to know more.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;With all that, I define three concepts we need to consider.
Sex, social gender, and grammatical gender.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;These are linked, and we&#x27;re most interested in social (for names and such) and grammatical gender (for everything else).
Unfortunately, at this point, we only have one: sex, which we in our codebase call the &lt;code&gt;BodyType&lt;&#x2F;code&gt;, a binary enumeration for Male and Female.
We need to extend this system, create the concept of social gender for players and NPCs and then figure out a way to infer or define grammatical gender.
The challenge lies in the fact that grammatical gender rules are kinda totally different for every language, so it will be &lt;em&gt;fun&lt;&#x2F;em&gt;.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I&#x27;ll end it there. Feel free to jump to our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;#narrow&#x2F;channel&#x2F;482740-wg-translation&quot;&gt;Zulip&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;2078&quot;&gt;Gitlab issues&lt;&#x2F;a&gt; if you have some ideas.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4829&quot;&gt;!4829&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Zulip: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;#narrow&#x2F;channel&#x2F;482740-wg-translation&#x2F;topic&#x2F;.E2.9C.94.20.5Breview.5D.20Name.20i18n.20!4829&#x2F;with&#x2F;517278837&quot;&gt;[review] Name i18n !4829&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;updated sponsorship link on github - @walpo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4852&quot;&gt;!4852&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;re-oriented Level of Detail (LoD) model for Haniwa Catacombs - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4844&quot;&gt;!4844&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;solidified a floor of the Myrmidon dungeon - @floppy - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4855&quot;&gt;!4855&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;updated item quality ratings for recipes, bombs, and medium potions - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4867&quot;&gt;!4867&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;the re-orient express chugged along with modifiers for ranged attacks - @srpapinha - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4861&quot;&gt;!4861&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;reverted some duplicate commits for a cleaner history - @juliancoffee - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4876&quot;&gt;!4876&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fixed armour manifest entry for dwarven guard hands - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4878&quot;&gt;!4878&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;limited &lt;code&gt;git lfs&lt;&#x2F;code&gt; checks to correct use of pointers - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4879&quot;&gt;!4879&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;replaced string arrays with enums for diary sections and skill trees - @coffee-compiler - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4888&quot;&gt;!4888&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;rotated totems summoned by Gnarling Chieftain to face their target - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4887&quot;&gt;!4887&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;re-trial-by-fire&quot;&gt;(Re)trial by fire&lt;&#x2F;h4&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-04_Necti_supercritical-steam-engine.gif&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=498
    height=281
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-04_Necti_supercritical-steam-engine.gif&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The hypercritical steam engine — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@do-no-van&#x27;s coding and @Necti&#x27;s balancing was put through the crucible of combat in round 2 of Spicy Gigas playtesting. The big fella faced up against players and NPCs alike; thankfully all the commotion didn&#x27;t cook @isse&#x27;s server.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-06_horblegorble_pyretic-pillars.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1714
    height=961
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-06_horblegorble_pyretic-pillars.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pyretic pillars — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-06_horblegorble_gangup-on-gigas.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1811
    height=1078
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-06_horblegorble_gangup-on-gigas.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Travellers gang up on Gigas — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;discussions&quot;&gt;Discussions&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;begun-the-storage-wars-have&quot;&gt;Begun, the storage wars have&lt;&#x2F;h4&gt;
&lt;p&gt;@Knightress_Paladin has penned the &lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-248&#x2F;(https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;merge_requests&#x2F;50)&quot;&gt;latest chapter&lt;&#x2F;a&gt; in the Veloren RFC anthology, with an ode to bags, banks, and boxes. Given the different roads to travel, they&#x27;ve charted and articulated a course to travel, along with hazards of the terrain. All to reach one destination: a place for all things, be they necessity or novelty.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s take a look inside:&lt;&#x2F;p&gt;
&lt;ul style=&quot;padding-bottom:0;&quot;&gt;
  &lt;li&gt;Per player, town based persistent storage at &#x27;bank&#x27; structures&lt;&#x2F;li&gt;
    &lt;ul&gt;
      &lt;li&gt;Can transfer between characters via stashes&lt;&#x2F;li&gt;
      &lt;li&gt;Map UI toggle to show active stashes&lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
  &lt;li&gt;Motivations
    &lt;ul&gt;
      &lt;li&gt;Can dedicate your inventory to a particular outing, freeing space to grab shiny new things&lt;&#x2F;li&gt;
      &lt;li&gt;Dethrones inventory bag size from being the top stat&lt;&#x2F;li&gt;
      &lt;li&gt;Developers get some freedom to add items without encumbering players&lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
  &lt;li&gt;Site shuffles automatically transfer stashes to their nearest town
    &lt;ul&gt;
      &lt;li&gt;Done at time of player login, to avoid drifting over multiple shuffles&lt;&#x2F;li&gt;
      &lt;li&gt;Possible courier system to alleviate work of relocating items after site shuffle&lt;&#x2F;li&gt;
      &lt;li&gt;Differentiating between underground and above-ground settlements in the future&lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
  &lt;li&gt;Open questions
    &lt;ul&gt;
      &lt;li&gt;How to decide which towns have storage? e.g. requires an airship dock&lt;&#x2F;li&gt;
      &lt;li&gt;How do NPCs interact with the storage system?&lt;&#x2F;li&gt;
      &lt;li&gt;Should there be theft from storage and couriers?&lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
  &lt;li style=&quot;padding-bottom:0;&quot;&gt;Future possibilities
    &lt;ul&gt;
      &lt;li style=&quot;padding-bottom:0;&quot;&gt;Upgrades of storage at each town (capacity, security?)
        &lt;ul&gt;
          &lt;li style=&quot;padding-bottom:0;&quot;&gt;Could range from one-time fee(s) to embedding with a quest system&lt;&#x2F;li&gt;
        &lt;&#x2F;ul&gt;
      &lt;&#x2F;li&gt;
      &lt;li style=&quot;padding-top:0;&quot;&gt;Faction &#x2F; sentiment influences
        &lt;ul&gt;
          &lt;li&gt;Out of scope for the moment, but likely to influence things in the future&lt;&#x2F;li&gt;
          &lt;li&gt;Alignments between towns could scale courier costs&lt;&#x2F;li&gt;
          &lt;li&gt;Various settlements could have their own pricing systems and rates&lt;&#x2F;li&gt;
          &lt;li&gt;Non-friendly alignment might mean upfront&#x2F;time-based costs for storage&lt;&#x2F;li&gt;
          &lt;li style=&quot;padding-bottom:0;&quot;&gt;Hostile settlement should not receive items after a site shuffle&lt;&#x2F;li&gt;
        &lt;&#x2F;ul&gt;
      &lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Although landing a persistent storage feature would provide the staging area for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;merge_requests&#x2F;44&quot;&gt;weight based inventories&lt;&#x2F;a&gt; (or other inventory nerfs), it is not desired for these to take place before matters of storage are properly unboxed. Wouldn&#x27;t want to end up with the worst of both worlds.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;counting-critters&quot;&gt;Counting critters&lt;&#x2F;h4&gt;
&lt;p&gt;The open sky breaks through the canopy&#x27;s shade as you step into the open glade. Before you now, a sight to perplex the ecological mind: half a dozen wolves, packed up against a flock of sheep. Neither with a care in the world for the other. As it has always been, but maybe not in futures yet to be seen.&lt;&#x2F;p&gt;
&lt;p&gt;Rather than wildlife as islands unto themselves, what other geographies might be possible? A grand &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_rtsim&#x2F;index.html&quot;&gt;RTSIM&lt;&#x2F;a&gt; archipelago would be the straight road guess, but could make quite a mess of the tracking budget. So instead of a world-scale game of &quot;this little piggy&quot;, taking a more zoomed out view could avoid slimming down the CPU&#x27;s piggy bank.&lt;&#x2F;p&gt;
&lt;p&gt;The Pangea Project is leading an expedition into this game design space, with a recent &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;523568428905398283&#x2F;1354528867104063761&quot;&gt;brainstorming session&lt;&#x2F;a&gt; on linking up regionally tracked populations. In attendance amongst the crowd of khaki was @Neura, @zesterer, @isse, @juliancoffee, @Gemu, and @Knightress_Paladin. Here are their ideas so far:&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;Wildlife spawns based on population counts that are tracked by region&#x2F;chunk
    &lt;ul&gt;
      &lt;li&gt;Terrain permitting, these populations diffuse and spread between adjacent regions&lt;&#x2F;li&gt;
      &lt;li&gt;Entity interactions lead to a kill, death, or retreat that is tallied up against the population&lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
  &lt;li style=&quot;padding-top:0;&quot;&gt;Dynamic predator&#x2F;prey modelling (&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lotka%E2%80%93Volterra_equations&quot;&gt;simple&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Generalized_Lotka%E2%80%93Volterra_equation&quot;&gt;complex&lt;&#x2F;a&gt;) running alongside gameplay interactions
    &lt;ul&gt;
      &lt;li&gt;With enough fudge in the numbers (sounds yummy!), this should lead to stable systems&lt;&#x2F;li&gt;
    &lt;li style=&quot;padding-bottom:0;&quot;&gt;There&#x27;s a few different ways to split up wildlife categories for tracking
      &lt;ul&gt;
        &lt;li style=&quot;padding-bottom:0;&quot;&gt;Species, body kind, ecosystem role (prey, (apex) predator)&lt;&#x2F;li&gt;
      &lt;&#x2F;ul&gt;
    &lt;li style=&quot;padding-top:0; padding-bottom: 0;&quot;&gt;Clamping effects and repopulation mechanics may be necessary to avoid global extinctions
      &lt;ul&gt;
        &lt;li style=&quot;padding-bottom:0;&quot;&gt;e.g. a local extinction may trigger the re-seeding of the population elsewhere&lt;&#x2F;li&gt;
      &lt;&#x2F;ul&gt;
    &lt;&#x2F;li&gt;
    &lt;li style=&quot;padding-top:0;&quot;&gt;Since post-apocalyptic settings are all the rage, could always let players roam free and annihilate everything - we love seeing that our actions have consequences, right?&lt;&#x2F;li&gt;
    &lt;&#x2F;ul&gt;
  &lt;&#x2F;li&gt;
  &lt;li style=&quot;padding-top:0;&quot;&gt;A &lt;a href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1230311096880070776&#x2F;1358950683235320040&quot;&gt;follow up point&lt;&#x2F;a&gt;: NPCs could maintain sentiments towards particular species of wildlife (rather than individuals), communicating this to other NPCs and feeding into a quest generating system.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;a-questing-checklist&quot;&gt;A questing checklist&lt;&#x2F;h3&gt;
&lt;p&gt;You there, traveller! Fetch me 10 randomly dropped Gnarling bracelets and I shall grant you full gameplay immersion. That sounds realistic, right? @isse begs to differ, and reckons the recipe for quests is gonna be more than some microwave meal:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Just to name a few properties we want of the top of my head:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;It has to be implemented in &lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-248&#x2F;(https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_rtsim&#x2F;index.html)&quot;&gt;rtsim&lt;&#x2F;a&gt;, our world simulation, and have effects on that.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Quests should be based on actual needs the npc&#x2F;faction has. If there has been a cyclops attacking recently they could generate a quest to slay that. (We lack a lot of simulation for the needs of more interesting quests though).&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;We want a global tracker for quests, but each quest should have an actor&#x2F;faction that gave the quest to also return to to complete it. And an actor&#x2F;faction that received the quest.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Since quests are based on needs, that means they&#x27;re also somewhat time based as needs can be fulfilled. Someone else could kill the cyclops, or the quest taker took to long so the npc decided to do it themselves etc. And the quest system should be able to handle this, in some way.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Not needed for first iteration, but quests should be able to handle cases where the original npc that gave the quest died. And migrate the quest to potentially another npc that npc knew.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Also not needed for first iterations, but since a huge majority of a veloren world&#x27;s population are npcs, they should be able to take on quests too.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;concept-art&quot;&gt;Concept art&lt;&#x2F;h3&gt;
&lt;p&gt;First-hand accounts of various explorations in voxel space. A mix of things intended for use in-game, and more experimental ideations.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-04_GoodMan29_go-go-slimer-rangers.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=960
    height=472
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-04_GoodMan29_go-go-slimer-rangers.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Go, go, slimer rangers! — by @GoodMan29&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-08_Supa_aviator-cap.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=643
    height=582
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-08_Supa_aviator-cap.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;High altitude headgear — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-x_Supa_Dan113_pipe-dreams.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=783
    height=369
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-x_Supa_Dan113_pipe-dreams.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pipe dreams — by @Supa + a recolouring by @Dan113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;this-is-the-way&quot;&gt;This is the way&lt;&#x2F;h3&gt;
&lt;p&gt;Airships are great for travelling fast, but a good map is what you want to travel smart. To help us plan out our commutes, @Limina swapped hats from translator to tool builder, taking a blog driven development approach to the task:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;After seeing the full map of airship routes by @Froggy in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-245&quot;&gt;devblog 245&lt;&#x2F;a&gt;, I took it upon myself to fulfil the comment under it: &quot;Now we just need a trip planner app.&quot;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-30_horblegorble_personally-cutout.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1544
    height=873
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-05-30_horblegorble_personally-cutout.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;Ask and ye shall receive!
The Veloren Trip Planner for Veloren&#x27;s official server is available at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;limina-wayfarer.itch.io&#x2F;veloren-trip-planner&quot;&gt;itch.io&lt;&#x2F;a&gt;, all on the web - no download required!
Code is over at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;LiminaWayfarer&#x2F;Veloren-Trip-Planner&quot;&gt;github&lt;&#x2F;a&gt;, under the GPLv3 license.
I&#x27;ll update any incorrect paths I come across - feel free to let me know if there are any I missed!
For those that want more details, read on - else, you can just skip to the next section. I won&#x27;t judge (much).&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=986
  height=718
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-09_Limina_trip-planner.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-09_Limina_trip-planner.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-09_Limina_trip-planner.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;The tool was made with &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;godotengine.org&#x2F;&quot;&gt;Godot&lt;&#x2F;a&gt; 4.1.1, as it&#x27;s my preferred engine to work with (and it&#x27;s open source, too!).
It uses &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;A*_search_algorithm&quot;&gt;A* pathfinding&lt;&#x2F;a&gt; to figure out the shortest path between cities - paths are hardcoded, since we know all of them. They&#x27;re easy enough to swap out though: each &quot;town&quot; is a node that hold a list of every other city it&#x27;s connected to. That came especially in handy when I noticed some of the paths had changed since @Froggy&#x27;s map was made!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Currently, it recreates paths every time we ask it for one - admittedly, I could skip that step and just generate it once, but it doesn&#x27;t matter much given the amount of paths is quite low. That would also allow for dynamically ignoring cities or even adding&#x2F;deleting them at runtime if we want to - although that&#x27;s not a thing yet. :P
Once we know the starting and ending cities, we can just use the paths that are created with the A* algorithm, and voila, we have a path!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I don&#x27;t really have a to-do list, so any suggestions are welcome - or even pull requests if you so wish~&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;weave-got-a-new-challenger&quot;&gt;Weave got a new challenger&lt;&#x2F;h3&gt;
&lt;p&gt;Looming over the competition is a new entry from @Moaaswell to the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-246&quot;&gt;previously featured&lt;&#x2F;a&gt; carpet challenge. Taking us beyond the simple square, will this stretch the fabric of the contest?&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-08_Moaaswell_carpet-challenge.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=614
    height=513
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-08_Moaaswell_carpet-challenge.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Think outside the box. Be an even bigger box!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;explosive-new-meta&quot;&gt;Explosive new meta&lt;&#x2F;h3&gt;
&lt;p&gt;Get ready to have your mind blown by @Necti&#x27;s feature of the throwable bomb meta that is blasting away all other playstyles. Learn about shockwave proofing your loadout, dig into make-your-own trench warfare, and stick around for some charming tips on dealing even more damage.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;NOygN3SQrmM&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Not hard to imagine an aerial bombardment support role&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Veloren&#x27;s coconut farmers are greedily rubbing their palms together in anticipation of increased demand. But time will tell if player&#x27;s appetities are lasting, and whether these would-be profiteers will survive the fallout.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;phoenix-fireworks&quot;&gt;Phoenix fireworks&lt;&#x2F;h3&gt;
&lt;p&gt;After converting their inventories into dedicated bomb factories, the players of Sporia faced a shortage of velorite and coconuts that threatened to derail their regularly scheluded fireworks display. To fill in for the local pyrotechnics shortfall, some resourceful individuals decided to import a brand new light show.&lt;&#x2F;p&gt;
&lt;p&gt;@horblegorble brings us a photographic account of the family un-friendly event that followed. Identities and profanities have been redacted to protect the (not so) innocent.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_0-reeling-er-in.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1016
    height=881
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_0-reeling-er-in.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Reel &amp;#x27;er in&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_1-main-street.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2559
    height=1065
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_1-main-street.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lighting up main street&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_2-spicy-crafting.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2560
    height=1440
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_2-spicy-crafting.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Recipes for disaster&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_3-waned-enthusiasm.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1066
    height=794
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_3-waned-enthusiasm.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Waned enthusiasm&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_4-raining-down.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2560
    height=1440
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_4-raining-down.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Here comes the rain&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_5-a-new-sun.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1791
    height=1440
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_5-a-new-sun.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A new sun rises&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_6-upstaged.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1162
    height=1440
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_6-upstaged.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Getting upstaged&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_7-bullet-time.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=792
    height=679
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_7-bullet-time.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Arrow time&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_8-birds-eye-view.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1857
    height=1358
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_8-birds-eye-view.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bird&amp;#x27;s eye view&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_9-aftermath.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2391
    height=1912
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;phoenix-fireworks&amp;#x2F;2025-04-07_horblegorble_9-aftermath.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A crispy aftermath&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;events&quot;&gt;Events&lt;&#x2F;h3&gt;
&lt;p&gt;&#x27;twas the season of springtime sillyness in Veloren, when familiar tricksters and treasure eggs popped into play. But this year also threw an unexpected curlball into the mix.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;april-fools&quot;&gt;April fools&lt;&#x2F;h4&gt;
&lt;p&gt;We&#x27;ll let @Necti do the grand reveal, with this inside scoop on Veloren&#x27;s newest celebrity.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;x0_H0go2iDA&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Pay no heed to false leads — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;details style=&quot;padding-bottom:1em; padding-top:1em;&quot;&gt;
&lt;summary style=&quot;font-size: 1.5em;&quot;&gt;The master has arrived&lt;&#x2F;summary&gt;
&lt;br&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Pigmaster&quot;&gt;Pigmaster&lt;&#x2F;a&gt; is a swine to swoon over - at least, that&#x27;s what their possy of rats will tell you if you ask them about forming this leaning tower of trouble. Finish off the smolest one (without losing track of it) for a chance at getting a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Rat_Tail&quot;&gt;Rat Tail&lt;&#x2F;a&gt; of your own.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_x_pigmaster.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=950
    height=394
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_x_pigmaster.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Master, rat, small, tiny, mini, smol — @horblegorble | @Alley_Oop | @Crabo&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This stack of suprises was &lt;s&gt;smuggled&lt;&#x2F;s&gt; bundled into a package of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4828&quot;&gt;&#x27;small changes&#x27;&lt;&#x2F;a&gt; by @isse, along with collaborators unknown.&lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;
&lt;p&gt;Exciting as it all was, the new buzz didn&#x27;t steal the whole show. Folks got up to a lot of the usual unusual &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Events#April_Fools&quot;&gt;April Fools&lt;&#x2F;a&gt; fun.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-04_Supa_tripping-over-tricksters-to-the-concert.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2144
    height=1114
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-04_Supa_tripping-over-tricksters-to-the-concert.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hop, skip, and a roll to get to the concert on time — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_souffle_tricks-all-round.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1159
    height=1892
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_souffle_tricks-all-round.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An annual tradition — by @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_x_tricky-spots.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1706
    height=1706
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_x_tricky-spots.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;They get themselves into all sorts of tricky spots — by (➜) @souffle | @horblegorble x3&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_blazing-trails-1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2431
    height=1104
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_blazing-trails-1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Blazing trails — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_necti-leads-the-band.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2837
    height=1697
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_necti-leads-the-band.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Necti blends in to lead the band — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_tables-turned.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=629
    height=599
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_tables-turned.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A curious potion turns the tables on @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_rooftop-rats.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2572
    height=1830
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_horblegorble_rooftop-rats.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rooftop rats — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h4 id=&quot;easter&quot;&gt;Easter&lt;&#x2F;h4&gt;
&lt;p&gt;Although slightly overshadowed by the fresh excitement of foolish festivities, players were still keen to hop into the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Events#Easter&quot;&gt;Easter&lt;&#x2F;a&gt; event. After all, you don&#x27;t get to throw around surprise eggs for the rest of the year without stocking up first.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_x_turn-up-the-volume.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1110
    height=611
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_x_turn-up-the-volume.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Ear ye, ear ye! — by @souffle | @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_souffle_easter-tooth-fairy.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1234
    height=806
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;2025-04-01_souffle_easter-tooth-fairy.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@souffle woke up to find out the tooth fairy was helping with Easter deliveries this year&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;in-the-wild&quot;&gt;In the wild&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;there-and-back-again&quot;&gt;There and back again&lt;&#x2F;h4&gt;
&lt;p&gt;Let yourself be carried away by the narration of @Gbone, as they regale us a tale of marvel and mishap. Will this band of adventurers conquer all, or will the world conquer them? See them face up against wolves, caves, dungeons, and even airships and town NPCs - as well as unintentional levels of friendly fire. All in good fun as they find their way back home.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;LO19crdBaVU&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Fame, fortune, glory, and tomato salad! — @Gbone&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-06_isse_townland.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1637
    height=1066
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-06_isse_townland.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;We&amp;#x27;ve only got the one bridge, so it better be sturdy — by @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-07_Alley_Oop_small-world-big-festival.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1672
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-07_Alley_Oop_small-world-big-festival.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Small worlds make for big parties — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-08_unii_flexible-neck.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=877
    height=853
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-08_unii_flexible-neck.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Demonstrating the value of all those neck stretches — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-06_isse_inviting-aroma.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=850
    height=799
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-06_isse_inviting-aroma.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Inviting aromas — by @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-x_x_snagged-airship.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1327
    height=1323
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-x_x_snagged-airship.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Catching a ride — by (➜) @Val | @Limina | @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-02_horblegorble_flying-into-the-new-day.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-02_horblegorble_flying-into-the-new-day.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying into fresh dawns — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-05_Alley_Oop_volcanaurora.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1847
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-05_Alley_Oop_volcanaurora.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Volcanaurora — @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-01_horblegorble_aurora-valley.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-01_horblegorble_aurora-valley.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Valley of light — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-04_horblegorble_honeyroot-0.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3084
    height=2057
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-04_horblegorble_honeyroot-0.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Foraging for honey-root — @horblegorble &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Trentus_boing-boing-boing.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2014
    height=1368
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Trentus_boing-boing-boing.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Boing boing boing... — @Trentus&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1392
  height=680
  
  poster=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-14_Limina_vibing.webp&quot;
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-14_Limina_vibing.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-14_Limina_vibing.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Vibing — @Limina&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-06_isse_did-i-find-atlantis.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1681
    height=1179
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-06_isse_did-i-find-atlantis.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Did I find Atlantis? — @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Alley_Oop_haniwa-island.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1818
    height=1201
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Alley_Oop_haniwa-island.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sahagin envy — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Sam113_foggy-humps.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1760
    height=886
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Sam113_foggy-humps.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Foggy humps — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-03_term_junkie_gnarly-tree-0.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1650
    height=877
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-03_term_junkie_gnarly-tree-0.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Living the well-shaded life — by @term_junkie&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-07_horblegorble_pinelands.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-07_horblegorble_pinelands.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pining for a new day — @horblegorble &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Sam113_beach-legoom.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1702
    height=600
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Sam113_beach-legoom.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Late nights on the beachfront — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Sam113_peninsula-tower-0.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1157
    height=929
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Sam113_peninsula-tower-0.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pointed reflections — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-15_Alley_Oop_highrise-district.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1852
    height=1338
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-15_Alley_Oop_highrise-district.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Highrise district — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;details style=&quot;padding-bottom:1em;&quot;&gt;
&lt;summary style=&quot;font-size: 1.3em;&quot;&gt;Heard you like silly scribbles&lt;&#x2F;summary&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-05-07_horblegorble_highrise-scribbles.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=423
    height=662
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-05-07_horblegorble_highrise-scribbles.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Surprised tower-chu face&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;&#x2F;details&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Supa_bigflyingrock-dubbed-by-Sam113-1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2021
    height=1379
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-10_Supa_bigflyingrock-dubbed-by-Sam113-1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;&amp;#x27;bigflyingrock&amp;#x27; — by @Supa, named by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-14_horblegorble_floating-grave.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-14_horblegorble_floating-grave.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Grave of the flying hero — @horblegorble, found by @Alley_Oop &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-08_DaforLynx_definitely-some-kind-of-cave-entrance.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1349
    height=874
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-08_DaforLynx_definitely-some-kind-of-cave-entrance.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Definitely some kind of cave entrance — @DaforLynx &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-11_Alley_Oop_spicy-mushrooms.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1852
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-11_Alley_Oop_spicy-mushrooms.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Extra spicy shrooms — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_And_i_liminal-lines.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_And_i_liminal-lines.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Liminal lines — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_And_i_sparkle-sparkle.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1416
    height=1035
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_And_i_sparkle-sparkle.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sparkling spelunking (say that five times fast) — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_Limina_icy-waters-0.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3440
    height=1440
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_Limina_icy-waters-0.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chillwater cliffs — by @Limina&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_Alley_Oop_leggom-contemplates-a-darker-path.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1179
    
    fetchpriority=&quot;low&quot;
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;248&amp;#x2F;screenshots&amp;#x2F;2025-04-16_Alley_Oop_leggom-contemplates-a-darker-path.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The lost legoom contemplates a darker path. Let&amp;#x27;s hope they find their way back to us :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;248&#x2F;screenshots&#x2F;2025-04-16_Limina_icy-waters-2.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 247</title>
          <pubDate>Fri, 02 May 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-247/</link>
          <guid>https://veloren.net/blog/devblog-247/</guid>
          <description>&lt;p&gt;You may experience some slight turbulence as a volley of new throwables, tunes, and banter fill the air. Here we go!&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;announcement&quot;&gt;Announcement&lt;&#x2F;h2&gt;
&lt;p&gt;Whether you&#x27;re a casual snapper or full-on shutterbug, we want you to take a shot at this photo contest being organised by @walpo:&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;veloren_old-gitlab-banner.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1216
    height=684
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;veloren_old-gitlab-banner.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Veloren of yore&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;We are looking for a new cover image for the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&quot;&gt;README file&lt;&#x2F;a&gt; of Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;If you think you have a cool picture to share with the community, feel free to post it in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1366507117892341780&quot;&gt;Discord&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;#narrow&#x2F;channel&#x2F;482720-General&#x2F;topic&#x2F;README.20Image.20Submissions&quot;&gt;Zulip&lt;&#x2F;a&gt; submission threads!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Rules:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Submissions are open from now until Thursday, June 12 at 21:00 UTC (about 1 month and a half). Any content submitted later will not be included.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;You are free to use our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;site&#x2F;-&#x2F;blob&#x2F;ce41729da6294c1fab7f49c1864abc43861b7720&#x2F;static&#x2F;logo.png&quot;&gt;current (textual) Veloren logo&lt;&#x2F;a&gt; on your submitted images, but it is not mandatory.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Your submitted images must have a minimum height of 600 pixels and have a 16:9 aspect ratio.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Each participant can submit up to three images. If a participant has submitted more than three images by the time the submission window is closed, we will ask them privately which images to include in the voting phase. If the participant does not reply in a timely manner, we reserve the right to choose the three most recent images by default.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;After the time window for submissions is closed, we will decide on a voting system for our community to pick their favorite. Emoji reactions on Discord do not count towards the vote.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;You must be the copyright owner of the submitted image. This implies you cannot use generative artificial intelligence (GenAI) to create part or the whole image (currently, a legal grey area).&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;You agree to share your submissions under an open licence. For example, some licences in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;share-your-work&#x2F;cclicenses&#x2F;&quot;&gt;Creative Commons suite&lt;&#x2F;a&gt;.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;If your image wins the contest, our team will contact you to discuss what licence you want to share your work with and how to handle attribution.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @do-no-van, @Supa, @Gemu, @floppy, @Joe_Cool, @Crabo, @isse, @juliancoffee, @Synis, @srpapinha, @zesterer, @souffle, @unii, @imbris, @Tarhun, @UncomfySilence, @Nikophos, and @violetwillow.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate translators who contributed these last weeks:&lt;&#x2F;p&gt;
&lt;table aria-label=&quot;Table of translation contributors arranged by language&quot;
  style=&quot;border: 1px solid; margin-bottom: 1rem; margin-left: auto; margin-right: auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;border: 1px solid;&quot;&gt;
      &lt;th scope=&quot;col&quot; style=&quot;border-right: 1px solid; text-align:left; padding-left: 0.8em; padding-right: 0.8em; padding-top: 0.2em; padding-bottom: 0.2em;&quot;&gt;
        Language
      &lt;&#x2F;th&gt;
      &lt;th scope=&quot;colgroup&quot; style=&quot;text-align:left; padding-left: 0.8em;&quot;&gt;
        Translators
      &lt;&#x2F;th&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;thead&gt;
  &lt;tbody class=&quot;alternating-rows&quot;&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Czech&lt;&#x2F;td&gt;
      &lt;td&gt;Janez&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;English&lt;&#x2F;td&gt;
      &lt;td&gt;Janez | EatherBone | ministergoose&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;French&lt;&#x2F;td&gt;
      &lt;td&gt;Limina | sandraev&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;German&lt;&#x2F;td&gt;
      &lt;td&gt;coffee-compiler | CodeVlogs | Benny | Virtex | fnetX&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Polish&lt;&#x2F;td&gt;
      &lt;td&gt;K0RR&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Russian&lt;&#x2F;td&gt;
      &lt;td&gt;EatherBone | aleeo | lucius_pilgrim&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Swedish&lt;&#x2F;td&gt;
      &lt;td&gt;IsseW&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Ukrainian&lt;&#x2F;td&gt;
      &lt;td&gt;ministergoose&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;sparkling-action-at-a-distance&quot;&gt;Sparkling action at a distance&lt;&#x2F;h4&gt;
&lt;p&gt;Unable to wait for the bow rework, @do-no-van took projectiles into their own hands with a hefty refactoring. Best have your eye protection ready as sparks fly across town.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-21_horblegorble_all-kinds-of-light-shows.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-21_horblegorble_all-kinds-of-light-shows.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;All kinds of light shows. Music by @Crow&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And hope that nothing ominous has been waiting for &lt;i&gt;&quot;the day that dummies fly&quot;&lt;&#x2F;i&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4593&quot;&gt;!4593&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;oud-and-a-lute&quot;&gt;Oud and a lute&lt;&#x2F;h4&gt;
&lt;p&gt;What started out as a remodelled &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Lute&quot;&gt;Lute&lt;&#x2F;a&gt; in @Joe_Cool&#x27;s first foray with MagicaVoxel, became a catalyst for the arrival of the new &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Oud&quot;&gt;Oud&lt;&#x2F;a&gt; instrument. @Supa was the supervising chemist for this reaction, mixing together voxels from @Gemu and audio from @floppy. You can hit up the crafting bench to enjoy the silver linings in these new notes.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-20_horblegorble_oud-and-lute.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=671
    height=636
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-20_horblegorble_oud-and-lute.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The newcomer (left) and their restyled cousin (right)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=706
  height=606
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-20_horblegorble_oud-mood.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-20_horblegorble_oud-mood.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;New strings attached&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;With his lab coat still on, @Supa continued with some instrumental tinkering:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;The icy talharpa instrument now faces the correct way in the inventory&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Sprite image sizes for instruments are changed to be consistent with each other&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Small recipe tweaks for banjo and kora&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4778&quot;&gt;!4778&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;friend-or-foe&quot;&gt;Friend or foe&lt;&#x2F;h4&gt;
&lt;p&gt;Whether you&#x27;re looking to pick a fight, or keep the peace, @Crabo&#x27;s changes to the player list take the guesswork out of battlemode negotiations and moderator status. Sword icons were supplied by a secretive arms dealer that looked an awful lot like @Supa.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-28_horblegorble_crabo-social-menu.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=620
    height=920
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-28_horblegorble_crabo-social-menu.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Your duelling career is but a click away&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4790&quot;&gt;!4790&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mise-en-place&quot;&gt;Mise en place&lt;&#x2F;h4&gt;
&lt;p&gt;With the prep-work done on tile-able sprites, @isse got to cooking up a system for piecing together furniture mosaics:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;The way we place composable sprites in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_world&#x2F;site2&#x2F;index.html&quot;&gt;&lt;code&gt;site2&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; is an extension trait for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_world&#x2F;site2&#x2F;struct.Painter.html&quot;&gt;&lt;code&gt;Painter&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, which is what we use to define how blocks are placed for &lt;code&gt;site2&lt;&#x2F;code&gt;, and as sprites are blocks it includes those.&lt;&#x2F;p&gt;
&lt;p&gt;On this I have created both helper methods for placing generic tiled sprites and functions that directly refer to some configuration of sprites creating a bigger thing, like a bed.&lt;&#x2F;p&gt;
&lt;p&gt;There are different kinds of generic helper methods. Right now I have a one dimensional and a two dimensional. The 1D one, which is called &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_world&#x2F;site2&#x2F;util&#x2F;sprites&#x2F;trait.PainterSpriteExt.html#tymethod.tileable1&quot;&gt;&lt;code&gt;tileable1&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; takes a side sprite and a middle sprite, it also takes parameters for position, facing direction, and width. This assumes that the sprite with the maximum position has to be mirrored.&lt;&#x2F;p&gt;
&lt;p&gt;Some ASCII+ to demonstrate this:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;width: 4 blocks    &amp;lt; □ □ &amp;gt;    center sprite: □
&lt;&#x2F;span&gt;&lt;span&gt;       2 blocks      &amp;lt; &amp;gt;      side sprite: &amp;lt;
&lt;&#x2F;span&gt;&lt;span&gt;                                mirrored: &amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;The 2D one is called &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_world&#x2F;site2&#x2F;util&#x2F;sprites&#x2F;trait.PainterSpriteExt.html#tymethod.tileable2&quot;&gt;&lt;code&gt;tileable2&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. This needed a bit more arguments so it takes a struct &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_world&#x2F;site2&#x2F;util&#x2F;sprites&#x2F;struct.Tileable2.html&quot;&gt;&lt;code&gt;Tileable2&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; to define it. Which stores a rectangle and an altitude to define position. A center sprite, side sprite and a corner sprite. Both the side and corner sprites can vary by which side&#x2F;corner they&#x27;re placed on. It also has it&#x27;s own direction to rotate the whole construct.
For a table where all corners and sides are the same this looks like:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;text&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-text &quot;&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&lt;span&gt;+y                   size: 5x3 blocks (x by y)
&lt;&#x2F;span&gt;&lt;span&gt; ⭡                   center sprite: □
&lt;&#x2F;span&gt;&lt;span&gt; ╵  ┌ ∧ ∧ ┐          side sprite: &amp;lt;
&lt;&#x2F;span&gt;&lt;span&gt; ╵  &amp;lt; □ □ &amp;gt;            rotated&#x2F;mirrored: &amp;gt;  ∧  ∨
&lt;&#x2F;span&gt;&lt;span&gt; ╵  └ ∨ ∨ ┘          corner sprite: └
&lt;&#x2F;span&gt;&lt;span&gt; └ ─ ─ ─ ─ ─ ⭢ +x      rotated&#x2F;mirrored: ┘  ┌  ┐
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;For a bed it looks like:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;text&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-text &quot;&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&lt;span&gt;+y                 size: 3x2 blocks (x by y)
&lt;&#x2F;span&gt;&lt;span&gt; ⭡                 side sprite: ∧ | ∨
&lt;&#x2F;span&gt;&lt;span&gt; ╵  ╔ ∧ ┐          (-x) corner sprite: ╚ | ╔
&lt;&#x2F;span&gt;&lt;span&gt; ╵  ╚ ∨ ┘          (+x) corner sprite: ┘ | ┐
&lt;&#x2F;span&gt;&lt;span&gt; └ ─ ─ ─ ⭢ +x    
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;Because there are different corner sprites used for the diagonals that face &lt;code&gt;-x&lt;&#x2F;code&gt; and &lt;code&gt;+x&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are also helper methods like &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_world&#x2F;site2&#x2F;struct.Painter.html#method.chairs_around&quot;&gt;&lt;code&gt;chairs_around&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; which places sprites around a specific bounds. And specific ones for sprites that don&#x27;t fit any generic pattern we have, for example &lt;code&gt;lanternpost_wood&lt;&#x2F;code&gt;. When there are more sprites that need that specific pattern more generic methods will be created.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_tiled-tileables.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1080
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_tiled-tileables.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;A tiling of tile-ables&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4799&quot;&gt;!4799&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;turn-down-the-heat&quot;&gt;Turn down the heat&lt;&#x2F;h4&gt;
&lt;p&gt;@juliancoffee understands that, like a good vegemite sandwich, you only want a bit of spread. So now when you&#x27;re campfire moshing with mates, the chance of lighting each other up scales with time and buff strength of the source. And when the heat does catch on, it&#x27;ll only be the world to blame. A relief to town guards that&#x27;ve been busy dousing feuds between hot-headed neighbours.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_pyrotricknics.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_pyrotricknics.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Their new release is a real slow burner&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4832&quot;&gt;!4832&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-vertical-progression&quot;&gt;More vertical progression&lt;&#x2F;h4&gt;
&lt;p&gt;No, not that kind. The other one. Yeah, climbing.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, @Synis has heard the feedback on their recent changes, and put together the next shift-to-release-candidate version. This lets you overcome fear to drop straight out of climbing, and also features the return of uphill bounding. Other changes include a persistence of wielding state, as well as fixes to energy cost calculations and infinite wall jumping.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=780
  height=596
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_climbing-on-up.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_climbing-on-up.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Sliding down and scooting up&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4811&quot;&gt;!4811&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;war-of-the-names&quot;&gt;War of the names&lt;&#x2F;h4&gt;
&lt;p&gt;And on the seventh day, the user made a typo in naming their new world. Luckily, @juliancoffee let them rewrite history:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;You can now change the world &lt;&#x2F;i&gt;🏔️&lt;i&gt; name even after it is generated &lt;&#x2F;i&gt;✍️&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=1280
  height=546
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-21_horblegorble_war-of-the-names.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-21_horblegorble_war-of-the-names.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;Somebody once told me&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4830&quot;&gt;!4830&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;worldly-estimates&quot;&gt;Worldly estimates&lt;&#x2F;h4&gt;
&lt;p&gt;Watching water boil, grass grow, paint dry, or waiting for the next tick in the erosion process for a new world. These are universal expressions for wearing down the soul. But there is now relief for the latter, with updates from @isse to put your mind at ease:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Added some additional info when generating worlds, it now shows more fine grained progress and a time estimate for how long erosion will take&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-26_isse_worldly-estimates.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=565
    height=189
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-26_isse_worldly-estimates.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Might be able to sync up with a New Year&amp;#x27;s countdown&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4834&quot;&gt;!4834&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;jungle-jumble&quot;&gt;Jungle jumble&lt;&#x2F;h4&gt;
&lt;p&gt;@juliancoffee went around the colour wheel to spin up a remix of our tropical ambience:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Jungles look a bit more like jungles now. I in collaboration with @Gemu changed their colour scheme to make their bark darker and more recognisable.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-21_horblegorble_jungle-jumble.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1627
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-21_horblegorble_jungle-jumble.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Rainforest Red -&amp;gt; Botanical Brown&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4831&quot;&gt;!4831&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;all-spin-and-no-swing-make-jack-a-dizzy-boy&quot;&gt;All spin and no swing make Jack a dizzy boy&lt;&#x2F;h4&gt;
&lt;p&gt;After some coaching sessions with @srpapinha, your not-so-friendly dance partners have learned to get some step in their rhythm. A broad set of melee orientation modifiers have retired their aim-botting &#x27;robot&#x27; routines.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-26_horblegorble_running-circles.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;2025-04-26_horblegorble_running-circles.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🌪️ 🤢 &lt;i&gt;Round and round we go&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4803&quot;&gt;!4803&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;same-sprite-different-loot&quot;&gt;Same sprite, different loot&lt;&#x2F;h4&gt;
&lt;p&gt;No doubt we&#x27;ve all heard the expression &lt;i&gt;&quot;You shouldn&#x27;t judge a sprite by its voxels.&quot;&lt;&#x2F;i&gt; It&#x27;s a sound bit of wisdom that @juliancoffee has put it into practice for wordgen:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Ok, it finally happened.
We merged an MR that allows you to override the default loot for sprites when you place them.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Currently, the way containers&#x2F;pickables work is via &lt;code&gt;SpriteKind::default_loot_spec()&lt;&#x2F;code&gt; method (previously known as &lt;code&gt;SpriteKind::collectible_id&lt;&#x2F;code&gt;), which is a big list of sprites and their corresponding loot tables.
That&#x27;s fine and even desirable for 70% of sprites.
When you pick up an Apple, you don&#x27;t want anything else.
And chests in boss rooms in our new breathtaking dungeons greatly benefit from stylistic conformance with the environment.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;But we have a lot of generic containers like crates and barrels in towns and caves and, most importantly, spots, which inevitably forced to have the same boring loot tables.
Well, not anymore!
Look at the spot config for the Saurok altar:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#![&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;enable&lt;&#x2F;span&gt;&lt;span&gt;(implicit_some)]
&lt;&#x2F;span&gt;&lt;span&gt;#![&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;enable&lt;&#x2F;span&gt;&lt;span&gt;(unwrap_newtypes)]
&lt;&#x2F;span&gt;&lt;span&gt;[
&lt;&#x2F;span&gt;&lt;span&gt;    (
&lt;&#x2F;span&gt;&lt;span&gt;        specifier: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;world.structure.spots.saurok-altar&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        center: (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;13&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;        custom_indices: {
&lt;&#x2F;span&gt;&lt;span&gt;+            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;: SpriteWithCfg(DungeonChest0, (
&lt;&#x2F;span&gt;&lt;span&gt;+                loot_table: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.loot_tables.spot.saurok_altar&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;+            )),
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;105&lt;&#x2F;span&gt;&lt;span&gt;: Filled(GlowingRock, (r: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;161&lt;&#x2F;span&gt;&lt;span&gt;, g: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;, b: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;133&lt;&#x2F;span&gt;&lt;span&gt;)),
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;113&lt;&#x2F;span&gt;&lt;span&gt;: Filled(GlowingRock, (r: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;139&lt;&#x2F;span&gt;&lt;span&gt;, g: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;245&lt;&#x2F;span&gt;&lt;span&gt;, b: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;104&lt;&#x2F;span&gt;&lt;span&gt;)),
&lt;&#x2F;span&gt;&lt;span&gt;        },
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;i&gt;This line allows us to override the default chest with &lt;code&gt;DungeonChest0&lt;&#x2F;code&gt; and its own loot table!
For those who are new to the spot system, spots are usually small pre-made models that have specific blocks which we re-interpret using custom indices from MagicaVoxel palette.
0-16 are pre-defined, and 11 stands for the default chest, but you can override those.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;And you can do that in virtually every situation if you can place a sprite along with &lt;code&gt;SpriteConfig&lt;&#x2F;code&gt;, which includes caves, towns, procedurally generated spots, dungeons, et cetera.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;At the moment, the MR only enables such functionality and we need balance people and testers to make the world truly alive using this system&lt;&#x2F;i&gt; 🙂&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_sites-to-visit.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1010
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_sites-to-visit.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Ground zero, one, and two for the new loot setup&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4354&quot;&gt;!4354&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mark-my-words&quot;&gt;Mark my words&lt;&#x2F;h4&gt;
&lt;p&gt;They say locals always know the best place in town, but they&#x27;ve been tight-lipped on sharing tips. @zesterer has loosened their tongues enough to at least point out the local landmarks. If we keep playing our cards right, they may yet tell us where to get the best sunflower ice tea.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-23_horblegorble_directed-by-fros.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;2472025-04-23_horblegorble_directed-by-fros.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Can&amp;#x27;t always navigate the skyline at ground level&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4750&quot;&gt;!4750&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;busy-with-battles-and-barter&quot;&gt;Busy with battles and barter&lt;&#x2F;h4&gt;
&lt;p&gt;Rather than see everything in life through a trading window, @souffle has given merchants some clarity in expressing their preoccupations.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-24_horblegorble_live-to-trade-another-day.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1476
    height=652
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-24_horblegorble_live-to-trade-another-day.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Trading hits vs trading bits&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4814&quot;&gt;!4814&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;you-know-a-good-spot&quot;&gt;You know a good spot?&lt;&#x2F;h4&gt;
&lt;p&gt;What do cleaning products and Veloren have in common?&lt;&#x2F;p&gt;
&lt;p&gt;Spot testing is good practice. And even easier now with some polish from @juliancoffee:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Oh, and I also extended &lt;code&gt;&#x2F;spot&lt;&#x2F;code&gt; command to work with all spots (these mini-sites, like gnarling totem).
&lt;code&gt;&#x2F;spot&lt;&#x2F;code&gt; command was originally created by @isse , but worked only for spots defined in &lt;code&gt;.ron&lt;&#x2F;code&gt; files. Most older spots aren&#x27;t defined in &lt;code&gt;.ron&lt;&#x2F;code&gt; files, so we needed to fix it.
Bonus point: now it teleports you 100 blocks above the spot, so get your glider ready and fly!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-23_horblegorble_spot-the-difference.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-23_horblegorble_spot-the-difference.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;Just dropping by&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4836&quot;&gt;!4836&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4839&quot;&gt;!4839&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;big-cow-evicts-old-milk&quot;&gt;Big cow evicts old milk&lt;&#x2F;h4&gt;
&lt;p&gt;Cheese merchants have been setting up shop in Minotaur&#x27;s colosseum, and that bull is no fan of dairy degenerates. But he felt trapped in the ring as a mere franchise manager, having butted heads with Myrmopolis™ management before. This behooved the great Minotaur to enlist the representation of @unii, who was well received by corporate. @floppy was dispatched to patch things up, with their testing sidekick @Supa helping to iron out some of the repositioning kinks.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-24_horblegorble_mino-cheesin.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;2025-04-24_horblegorble_mino-cheesin.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Cheese on a platter, not by the player&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4783&quot;&gt;!4783&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;throwing-their-weight-around&quot;&gt;Throwing their weight around&lt;&#x2F;h4&gt;
&lt;p&gt;From bovine negotiations to safety inspections, @unii swapped hats to remind us of the gravitational hazards involved in setting entity mass:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I&#x27;ve reduced the mass of Frost Gigas&#x27;s summons (Boreal Warriors), so that they&#x27;re less vulnerable to collision&#x2F;fall damage as a result. This mostly impacts the encounters where elevation differences come into play.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_weighty-warriors.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-04-22_horblegorble_weighty-warriors.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;Gonna need a lot more snow to break that fall&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4827&quot;&gt;!4827&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;addressed a TODO fix in hostile npc feeling speech - @souffle - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4813&quot;&gt;!4813&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;damage tweaks to left mouse attacks for sword and axe - @unii - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4806&quot;&gt;!4806&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;buff icons for skills swapped to the respective skill where possible - @Supa - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4821&quot;&gt;!4821&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;window size saving logic was moved - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4819&quot;&gt;!4819&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;window saving was disabled if it is zero size in any direction - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4825&quot;&gt;!4825&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;added detection for stuck airships along with remedial actions - @Tarhun - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4822&quot;&gt;!4822&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;removed old mining tool check for directly lootable sprites - @juliancoffee - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4837&quot;&gt;!4837&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;switched to fluent upstream - @juliancoffee - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4840&quot;&gt;!4840&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&#x27;PlotKindMeta&#x27; used instead of just &#x27;PotKind&#x27; for npc directions - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4848&quot;&gt;!4848&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;small fixes, definitely nothing serious - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4828&quot;&gt;!4828&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;this-gigas-on-fire&quot;&gt;This Gigas on fire&lt;&#x2F;h4&gt;
&lt;p&gt;Now might be the time to refamiliarise yourself with local wildfire response plans. What was dismissed as a drifting haze has become distant but visible flames. The molten menace is preparing to erupt.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s take a look through the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1304024660458864640&quot;&gt;geological record&lt;&#x2F;a&gt; to see where it all began.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2024-11-18_Gemu_attack-sketches.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2271
    height=1690
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2024-11-18_Gemu_attack-sketches.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Plans of attack — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2024-11-18_Gemu_flame-sketches.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1401
    height=620
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2024-11-18_Gemu_flame-sketches.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This is no spectator sport — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=642
  height=514
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_do-no-van_lava-to-stone.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_do-no-van_lava-to-stone.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Roleplaying as a very hot potato — by @do-no-van&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=932
  height=652
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_do-no-van_ring-of-fire.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_do-no-van_ring-of-fire.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;♪ I fell into a burning ring of fire ♪ — by @do-no-van&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;{{ imgzoom(width=718, height=689, caption=&quot;Assembling the ashen arsenal — by @Gemu&quot;, src=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;247&#x2F;2024-12-02_Gemu_ashen-warrior.webp&quot;, ) }}&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=804
  height=642
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_do-no-van_summon-shockwaves.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_do-no-van_summon-shockwaves.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Today&amp;#x27;s forecast: rolling heatwaves — by @do-no-van&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;live&amp;#x2F;eYpYRarukDE&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center; cursor: pointer;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1280
    height=720
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_Necti_fire-gigas-thumbnail.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The streaming hot playtest debut — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_And_i_fire-gigas-craters.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=969
    height=401
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-17_And_i_fire-gigas-craters.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fiery fallout — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4638&quot;&gt;!4638&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;throw-all-the-things&quot;&gt;Throw ALL the things!&lt;&#x2F;h4&gt;
&lt;p&gt;Ballistic bottles and flying flasks were on the radar of @UncomfySilence&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4846&quot;&gt;prototyping efforts&lt;&#x2F;a&gt; to extend the range of the throwables refactor. But why stop at potions? These hands were made for hurling, so let&#x27;s get things airborne!&lt;&#x2F;p&gt;
&lt;p&gt;Alas, the existing controls and item definitions aren&#x27;t quite as dextrous for the task at hand. So &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1355470600843296860&quot;&gt;conversation&lt;&#x2F;a&gt; turned to juggling the dynamics at play: equipping, throwing, consuming, and whacking. From hotbar slots and special inventories, to utility belts and radial menus; there were a lot of ideas in flight. Eventually air traffic control was called in to setup a dedicated airspace within a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;merge_requests&#x2F;49&quot;&gt;Request for Comment (RFC)&lt;&#x2F;a&gt;. The lofty goals remain for just about every item to be something you can pickup, throw, and swing around.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-05-01_horblegorble_dont-catch-a-cold.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1499
    height=1036
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-05-01_horblegorble_dont-catch-a-cold.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Don&amp;#x27;t catch a cold&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4846&quot;&gt;!4846&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;discussions&quot;&gt;Discussions&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;who-s-next&quot;&gt;Who&#x27;s next?&lt;&#x2F;h4&gt;
&lt;p&gt;Clowns to left of me, jokers to the right - who do I punch first? We know that NPCs aren&#x27;t the ones to ask; they love to play trivial pursuit in a game of whack-a-mole. But if we took off the blinders and cleared their minds, could we teach these old dogs some new tricks? When @James put this question on the table, he was painting a bulls-eye for brain cannons on himself. It wasn&#x27;t long before the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1230311096880070776&#x2F;1354888825041719488&quot;&gt;discussion&lt;&#x2F;a&gt; was firing off on a few trajectories:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A threat&#x2F;aggro index for each target entity could be used to make prioritised decisions. Some fuzzy logic and coarse-grained updates might keep it from thrashing or getting too expensive.&lt;&#x2F;li&gt;
&lt;li&gt;Should the personality and saviness of an entity have an influence on how they choose their battles, get into position, or pick their loadout? Perhaps they&#x27;ve a logistical mind to notice and take out players that give buffs and support.&lt;&#x2F;li&gt;
&lt;li&gt;Sprinkling in some unpredictability may be helpful to feel like we&#x27;re fighting beings of awareness, rather than walking algorithms. The experienced among them could even have the agency to mix together their own combat ingredients.&lt;&#x2F;li&gt;
&lt;li&gt;Can all this be pulled off in a system that allows for varying depths of complexity? From Gnarlings to Gigas, and solo fighters to team players.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-05-01_horblegorble_whos-next.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1843
    height=1078
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-05-01_horblegorble_whos-next.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Target acquired&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;brewing-up-a-storm&quot;&gt;Brewing up a storm&lt;&#x2F;h3&gt;
&lt;p&gt;After the ideation concoctions of @Nikophos overflowed the cooking pot and town cauldron, he went for a short stay retreat at a (conveniently vacant) witch hut. Free to steep in the potent, unventilated ambience of basement broths and cauldron fumes, the real distillation could begin. What &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449667182683619339&#x2F;1343748247440855101&quot;&gt;bubbled up&lt;&#x2F;a&gt; to the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449667182683619339&#x2F;1344028655583629466&quot;&gt;surface&lt;&#x2F;a&gt; was an &#x27;essence&#x27; based system for crafting potions.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_Nikophos_essences.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=830
    height=358
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_Nikophos_essences.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Cause and effect — by @Nikophos&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_Nikophos_item-examples.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=868
    height=774
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_Nikophos_item-examples.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The essential ingredients — by @Nikophos&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_Nikophos_potion-examples.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1499
    height=640
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-02-26_Nikophos_potion-examples.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A mixologist&amp;#x27;s cheat sheet — by @Nikophos&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-16_Nikophos_alchemical-essences.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1035
    height=803
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-16_Nikophos_alchemical-essences.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Alchemical alternatives — by @Nikophos + @violetwillow&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@violetwillow, the partner in slime, arrived after these brainstorming batches to help infuse fresh thoughts into an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449667182683619339&#x2F;1350600997759877221&quot;&gt;octagonal blender concept&lt;&#x2F;a&gt;. Various quantities of ingredients would take you around the segments to create different potions. A rarer cocktail might have a narrow target to hit, while the region for a more common potion might span across several segments.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-16_Nikophos_octagon-cauldron.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=272
    height=276
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-16_Nikophos_octagon-cauldron.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Will it blend? — by @Nikophos&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;out-goes-the-tide&quot;&gt;Out goes the tide&lt;&#x2F;h3&gt;
&lt;p&gt;Knowing the Sahagin warrior isn&#x27;t much for words, @unii devised a shell-breaker activity for them to open up to.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;IuYHYi7sS_A&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Beware the hidden fees on charges&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;doom-loren&quot;&gt;Doom-loren&lt;&#x2F;h3&gt;
&lt;p&gt;@horblegorble drilled down past the lava biomes of their screenshot folders to fire up just the right mood with @souffle&#x27;s logo design.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-31_horblegorble_helloren-poster.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-31_horblegorble_helloren-poster.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Is this the future of an unstoppable Gigas?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;mastering-the-forge&quot;&gt;Mastering the forge&lt;&#x2F;h3&gt;
&lt;p&gt;With the right moves and a steady rhythm, who even needs armour? Certainly not @And_i.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;YceX4siScxc&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Hot temper meets cool tempo&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;picnic-at-goblet-rock&quot;&gt;Picnic at goblet rock&lt;&#x2F;h3&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-24_Supa_goblet-rock.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2560
    height=1440
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-24_Supa_goblet-rock.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The postcard that started it all — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The story began like any other in Veloren. Your standard affair of airships, dungeons, and general gallivanting about. It was when our band of misfits got wind of a unique rock formation that things went off script into some voxelated production of the Motley Crew and the Holy Goblet. Rumours spiralled and reason was lost - it was said that drinking of its snowmelt would let you &lt;i&gt;see&lt;&#x2F;i&gt; the worldgen seed.&lt;&#x2F;p&gt;
&lt;p&gt;Whatever the soundness of their minds at this point, the mission was clear. How to climb the darn thing was a bit more clouded. Yet altitude sickness and buffeting winds were just extra spice for the ascent, and a mutual mix of encouragement and slander got the whole party to the top. Now at last atop Goblet Rock, they found fantastic views, outstanding acoustics, and joyous jubilation. But no matter how much snow they ate, the great wisdoms were not granted to them. Perhaps the real treasure was indeed the friends made along the way.&lt;&#x2F;p&gt;
&lt;p&gt;After recovering from their over-eager hydration, the gang decided to embark on vampire ventures at the nearby Zaluj Keep. What lay inside were trials of teamwork, much spilled blood, and quite a lot of nonsense. Many shenanigans and one viola later, a very unrelated discovery was made: their coconut cavalry could be converted into holy hand grenades. It was promptly agreed that Zaluj was no Camelot, and the town below of Ochreseaux was where they could get up to rather silly things. Most records of what happened next were turned to ash, and what survived was badly singed. Though much evidence was destroyed, it was no mystery who the chief troublemaker was.&lt;&#x2F;p&gt;
&lt;p&gt;Here is the adventure album from @horblegorble.&lt;&#x2F;p&gt;
&lt;details style=&quot;padding-bottom:1em;&quot;&gt;
&lt;summary style=&quot;font-size: 1.5em;&quot;&gt;Do you like silly scribbles?&lt;&#x2F;summary&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-24_Supa_horblegorble_goblet-scribbles.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1233
    height=1323
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-24_Supa_horblegorble_goblet-scribbles.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Visitors tolerated&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;&#x2F;details&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-0_misty-morning.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-0_misty-morning.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-1_light-turbulence.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-1_light-turbulence.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-2_cozy-couching.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-2_cozy-couching.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-3_under-darkness.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-3_under-darkness.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-4_climbing-the-goblet.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-4_climbing-the-goblet.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-4a_filling-the-cup.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-4a_filling-the-cup.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-6_cheese-and-bombs.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1617
    height=1185
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-6_cheese-and-bombs.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-7_goblet-shenanigans.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3316
    height=1608
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-7_goblet-shenanigans.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-5a_dungeon-at-dusk.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-5a_dungeon-at-dusk.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-8_airborne-approach.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-8_airborne-approach.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=720
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-19_dropdown-dramas.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-19_drpdown-dramas.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Dropdown drama&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-9_queuing-up.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-9_queuing-up.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-10_multi-story-mayhem.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-10_multi-story-mayhem.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-11_mob-the-boss.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-11_mob-the-boss.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-11a_serving-up-the-blood.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-11a_serving-up-the-blood.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-12_clear-the-air.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2916
    height=1553
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-12_clear-the-air.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=720
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-22_bloodmoon-battle.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-22_bloodmoon-battle.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Bloodmoon battle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-13_viola-victory.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2253
    height=1339
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-13_viola-victory.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-14_conch-and-climbing.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-14_conch-and-climbing.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-15_sparkling-lineup.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-15_sparkling-lineup.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-16_reset-regroup.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1880
    height=1092
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-16_reset-regroup.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-17_round-2-rollout.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3270
    height=1179
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-17_round-2-rollout.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=720
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-21_snail-raiding.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-21_snail-raiding.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Snail squadron&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-18_insert-yakety-sax.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-18_insert-yakety-sax.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-20_in-we-go.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-20_in-we-go.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-24_moving-on.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-24_moving-on.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-25_public-transport-never-stops.webp&quot;
        
          style=&quot;width: 45%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-25_public-transport-never-stops.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=720
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-26_nefarious-necti.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;goblet-rock&amp;#x2F;2025-03-28_horblegorble_goblet-rock-26_nefarious-necti.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Nefarious Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;gigas-gladiatoris&quot;&gt;Gigas gladiatoris&lt;&#x2F;h3&gt;
&lt;p&gt;A colossal crab pot.&lt;&#x2F;p&gt;
&lt;p&gt;Becomes an ice rink.&lt;&#x2F;p&gt;
&lt;p&gt;Catching frosty prey.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-31_horblegorble_gigas-gladiatoris.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2506
    height=2128
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-31_horblegorble_gigas-gladiatoris.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Now playing: The Real Stadium Blues&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  width=960
  height=720
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-31_horblegorble_gigas-gladiatoris.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;2025-03-31_horblegorble_gigas-gladiatoris.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Front row seats at the gig&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-20_Indragedall_shimmerring-waters.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1600
    height=900
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-20_Indragedall_shimmerring-waters.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Vibrant sky, shimmering waters — by @Indragedall&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_Retromaster_something-special.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_Retromaster_something-special.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Something special — @Retromaster&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_horblegorble_speck-in-the-sky.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_horblegorble_speck-in-the-sky.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A mote of stardust — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-18_Supa_spores-under-sporia.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1167
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-18_Supa_spores-under-sporia.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Spores under Sporia — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-18_isse_buoyant-farming.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1321
    height=940
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-18_isse_buoyant-farming.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some very buoyant crops — by @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-16_horblegorble_airflow-arrangements.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2909
    height=1636
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-16_horblegorble_airflow-arrangements.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Airflow arrangements — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-20_Sam113_icy-echoes.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1697
    height=1014
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-20_Sam113_icy-echoes.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Do these echoes make my voice sound cold? — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-23_Supa_clearing-the-air.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2638
    height=1109
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-23_Supa_clearing-the-air.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Don&amp;#x27;t forget to check the forecast — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-26_juliancoffee_day-is-ruined.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=2577
    height=1570
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-26_juliancoffee_day-is-ruined.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Torrential temples — by @juliancoffee&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_Sam113_wet-weather-flying.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_Sam113_wet-weather-flying.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;♪ I&amp;#x27;m flyyying in the rain, oh flyyying in the rain ♪ — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-20_Sam113_rainy-days.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-20_Sam113_rainy-days.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Under the weather — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-04-19_Crabo_Supa_strangers-v-squad.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1814
    height=762
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-04-19_Crabo_Supa_strangers-v-squad.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tolerating strangers vs riding with the squad — by @Crabo + @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-23_Muerto_very-deep-waters.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1637
    height=575
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-23_Muerto_very-deep-waters.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Diving for the deepest blacks — by @Muerto&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-28_And_i_ravine.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1231
    height=1078
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-28_And_i_ravine.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Screaming into the void, staring into the abyss - where do ravines fit in? — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-29_Sam113_many-more-mushrooms.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1592
    height=916
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-29_Sam113_many-more-mushrooms.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Moving on from mushrooms — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-27_juliancoffee_face-off.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1257
    height=1181
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-27_juliancoffee_face-off.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Not so tall now, are we? — by @juliancoffee&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-29_horblegorble_airshippin.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3840
    height=2160
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-29_horblegorble_airshippin.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Airshippin&amp;#x27; around — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_Sam113_rising-up.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1920
    height=1080
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-31_Sam113_rising-up.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The beginnings of a smog problem? — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-30_horblegorble_sounds-of-dawn.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=3006
    height=1359
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-30_horblegorble_sounds-of-dawn.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Melodies of dawn, ft. The Songbirds — @horblegorble &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-30_Supa_airship-queues.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    width=1882
    height=1297
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;247&amp;#x2F;screenshots&amp;#x2F;2025-03-30_Supa_airship-queues.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Supa and friends queueing up for their favourite ride. Don&amp;#x27;t miss the next flight :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;247&#x2F;screenshots&#x2F;2025-03-26_unii_sunrise-spectacular.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 246</title>
          <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-246/</link>
          <guid>https://veloren.net/blog/devblog-246/</guid>
          <description>&lt;p&gt;Hold onto your hats for this leg of our journey through time, as we experience the highs and lows of airship travel, race for mushrooms, and step into the mirror-verse.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @isse, @Supa, @Tarhun, @Gemu, @UncomfySilence, @unii, @juliancoffee, @souffle, @JimmyDdotEXE, @xMAC94x, @imbris, @floppy, @DaforLynx, @FERIIXU, @horblegorble, @alerty264, @pat36, @GeekyGami, @hnrq, @Crabo, @fnetx, @NeuralModder, and @MStarK3002.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate translators who contributed these last weeks: alxr1795, Axag, Benny, Carrotism, celestineprower, Daxik2x, Diamons, Dinariossa, DiXiao, EatherBone, Endoril, evgenkot, fnetX, Furrior, jls, LagerJack, lucius_pilgrim, marcelodemonn, MaxSoniX, ministergoose, muhaaliss, nekoedges, Paw, pivoezhka, Positron832, RuGod, Schmarotzer, tdehtyar, Virtex, and andVladisSlave.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;eyes-on-the-flightpath&quot;&gt;Eyes on the flightpath&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;i&gt;It has been brought to the attention of Airloren management that some of our captains have, at times, been somewhat distractable from their piloting duties. We understand that reports have been made of impulsive steering, anger management issues, and an outsized fear of fireballs. While these claims are likely to be exaggerations of hesitant flyers, this is a good time to remind our passengers of Airloren&#x27;s total commitment to flight safety. To ensure that any extent of un-captainly conduct remains grounded, we engaged the services of behaviour expert @isse to resolve these matters. Our patrons can rest assured that Airloren remains the safest cross-map transit system in all of Veloren. Any rumours of crashed airships have no documented connection to the Airloren fleet.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_two-very-different-flights.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_two-very-different-flights.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Two very different (alleged) flights&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-0x_x_airship-escapades.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-0x_x_airship-escapades.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;When lofty freedoms met untethered guidance — by (left to right) @Supa, @Froggy, @horblegorble, @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Alongside her consulting services to Airloren, @isse also delivered some updates to the moral and monetary navigation systems of other NPCs:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Saving a downed NPC will improve their sentiment towards you, but they won&#x27;t tell other NPCs about it (perhaps out of embarrassment or bruised honour).&lt;&#x2F;li&gt;
&lt;li&gt;New pricing formulae for traveller hiring, where &lt;code&gt;adventurer level&lt;&#x2F;code&gt; goes from zero (greenhorn) to three (experienced):
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;day = 60 * 2 ^ (adventurer level)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;week = 300 * 2 ^ (adventurer level)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4760&quot;&gt;!4760&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sky-bound-sprites&quot;&gt;Sky-bound sprites&lt;&#x2F;h4&gt;
&lt;p&gt;Those long airship cruises are now a lot easier on the eyes and bum, with comfy new sprites from @Supa. For the utility-minded amongst you, there&#x27;s also a helm and rope for all your aeronautical needs.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_Supa_modular-ariship-lounge.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_Supa_modular-ariship-lounge.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Do you dare to find out what lies under public transport seating?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-20_Supa_helm-and-coil.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-20_Supa_helm-and-coil.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;If the captain is getting weary, be ready to tie them to the wheel&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_Supa_airship-lanterns.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_Supa_airship-lanterns.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lantern lighting to get hooked on&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4762&quot;&gt;!4762&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4812&quot;&gt;!4812&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;deck-the-hulls&quot;&gt;Deck the hulls&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;i&gt;Pre-dawn light is only just beginning to colour the shapes of the town below. Your scrunched eyes make out the form of some busy-body scurrying about the street as they make an overly enthused start to their day. Perhaps they find a special joy in filling the void of these early morning hours. You do not.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;But, there are some thing that promise chase of a different joy - a Frost Gigas sighting just outside a city some leagues away. Only a couple of weeks ago this would have meant an even earlier rise, and a relentless pace through all manner of terrain to arrive with some degree of timeliness. So, while cold, your feet are thankful they only have to stand at the docking port of an airship tower. Their gratitude does not hold up against a chilling fog that rolls in, and you shuffle back to the meagre shelter of some stacked crates, peeking over to watch for your ship&#x27;s arrival.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;At very long last it comes into view and settles in to dock. You jog a little on the spot to shake off the morning thaw, and head over to jump onto the wing. You begin with the awkward clamber and claw up to the rear deck, followed by a stub of the toe as you try to find a seat in the poor lighting. At least now you can rest and maybe catch a nap, in the comfort of a narrow wooden chair that tilts ever so slightly to the left—wait, isn&#x27;t this the one you were losing cards in at the tavern last week?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;Halfway into the flight, the captain yells out a sighting of a cult-ish looking person down below, who was probably-definitely the one that killed their uncle&#x27;s sister&#x27;s niece&#x27;s dog. Your chair goes from slight tilt to forward lurch as the ship pitches down into a nosedive. You do not reach the Frost Gigas fight.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well friends, you can breathe a sigh of relief as this harrowing tale retires into memory with the completed renovations of the entire airship fleet. Their updated design is sporting all kinds of nifty features:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Direct wing-to-hull boarding, prototyped by @Tarhun and refined by @Gemu&lt;&#x2F;li&gt;
&lt;li&gt;Rear viewing platform to take in all the scenery, courtesy of @Gemu&lt;&#x2F;li&gt;
&lt;li&gt;Warm and cozy seats and lights, jointly installed by @Tarhun, @Supa, @isse, and @Gemu&lt;&#x2F;li&gt;
&lt;li&gt;Brand new decking to give that bit of character, laid down by @Gemu&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To maximise passenger comfort, @Tarhun also made some bespoke cruising speed adjustments to match your most pleasant gliding experiences.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_deck-the-hulls.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_deck-the-hulls.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Step by step, the sun sets on the old&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;A spokesperson for Airloren denied rumours that the remodelling of its fleet is part of any re-branding efforts, and is unrelated to recent media reports of captain misconduct.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4775&quot;&gt;!4775&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4794&quot;&gt;!4794&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;metallic-makeovers&quot;&gt;Metallic makeovers&lt;&#x2F;h4&gt;
&lt;p&gt;Forging new fashions, the one-man armoury that is @Gemu has pumped the bellows to bring in a complete refresh of the metal lineage of armours. The trend-setting orichalcum set also gets some shiny new embroidery in its cape. So get your head in the game, with helmets now available across the board. And don&#x27;t worry, this gear can tank the barrage of admiring looks you&#x27;re sure to get.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_bronze-set.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_bronze-set.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Heavy and dull, but it can take a punch.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_iron-set.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_iron-set.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sturdy and unyielding, across ages of war.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_steel-set.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_steel-set.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The metal alloy plates provide better protection and comfort.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_cobalt-set.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_cobalt-set.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Ornamental and impenetrable, the metal will never dull.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_bloodsteel-set.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_bloodsteel-set.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Forged to preserve life, at the cost of another.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_orichalcum-set.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_orichalcum-set.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An ancient alloy. Myths remain of heroes who wore this metal.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Lugging around all these voxels was more than an all-the-grocery-bags-at-once scenario. Shipping and handling was sorted out by @UncomfySilence, with @unii providing stat redistributions and @juliancoffee advising on localisation.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4765&quot;&gt;!4765&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4786&quot;&gt;!4786&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mirror-mirror-in-the-code&quot;&gt;Mirror, mirror, in the code&lt;&#x2F;h4&gt;
&lt;p&gt;A sprite is just implemented as a special kind of block, right? Well, some of them have been yearning to live outside the box. In a case of breaking up to break free, woodland town furnishings went under the knife of surgeon @Supa to prepare for a more composable future. You may have seen the corner cases of this operation while the stitches were assembled to bring them back together. Here are @isse&#x27;s reflections on developing the mirrored modularity for that recovery:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;In preparation for more tile-able sprites I added an attribute for sprites to be able to mirror them.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;At first I had an issue with the sprites turning inside out when mirrored.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-22_isse_mirroring-stations.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-22_isse_mirroring-stations.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;But got it working with some &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;shaders&#x2F;sprite-vert.glsl?ref_type=heads#L98&quot;&gt;clever shader code&lt;&#x2F;a&gt;.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-08_horblegorble_clever-girl.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    alt=&quot;An excerpt of @isse&amp;#x27;s shader code, with an image below of the &amp;#x27;clever girl&amp;#x27; meme from the movie &amp;#x27;Jurassic Park&amp;#x27;&quot;
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-08_horblegorble_clever-girl.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Clever girl&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;If you played the game this last month you might&#x27;ve noticed that chairs were rotated wrong, beds and tables were just one corner... That&#x27;s because we updated most of the town sprites to be tile-able, but hadn&#x27;t updated the code yet. Which was the next thing I started working on, expanding our system to generate composed sprites from when I added the lanterns earlier. I added some methods for placing both one, and two dimensional tile-able sprites. Examples of one dimensional are benches, wardrobes and bookshelves. And two dimensional are tables and beds.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-23_isse_1d-mirroring.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-23_isse_1d-mirroring.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;I got some interesting beds while coding this.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-26_isse_funny-beds.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-26_isse_funny-beds.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;But got it working eventually. So try our new beds with a &quot;roommate&quot;!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-23_isse_working-mirroring.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-23_isse_working-mirroring.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4758&quot;&gt;!4758&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4768&quot;&gt;!4768&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;bed-and-bookfest&quot;&gt;Bed and bookfest&lt;&#x2F;h4&gt;
&lt;p&gt;Books and bodies can rest easy with new furniture models from @unii. In light of the sprite mirroring changes, they have all been sliced and diced into tiled pieces. See if you can spot the seams.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_unii_beds-beds-beds.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_unii_beds-beds-beds.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hard, soft, wood, stone. Could start counting choices to fall asleep&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_unii_bookcase-and-ladder.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-24_unii_bookcase-and-ladder.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bookshelves: where they go to sleep between being read&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4764&quot;&gt;!4764&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;instrumentally-my-dear-watson&quot;&gt;Instrumentally, my dear Watson&lt;&#x2F;h4&gt;
&lt;p&gt;New sounds of triumph have been filling the chambers of demoted bosses, and joining in the concerts and parades of victory back in town. Meet the latest additions to your boastful ensemble:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Starlight_Conch&quot;&gt;Starlight Conch&lt;&#x2F;a&gt;: a honking great idea from @floppy, with @Gemu&#x27;s model touch ups&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Viola_Pizzicato&quot;&gt;Viola Pizzicato&lt;&#x2F;a&gt;: hand plucked by @DaforLynx, modelled by @floppy and recoloured for a blood-red vibe by @Supa&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Timbrel_of_Chaos&quot;&gt;Timbrel of Chaos&lt;&#x2F;a&gt;: what began as a tambourine by @floppy, @Gemu transformed into the Mindflayer&#x27;s instrument of pain&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Rhythmo&quot;&gt;Rhythmo&lt;&#x2F;a&gt;: keys, lights, and banger boops by @floppy - do you reckon it could run DOOM?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_more-instruments-wide.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_more-instruments-wide.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Beat-ing bosses&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4772&quot;&gt;!4772&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4816&quot;&gt;!4816&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;paving-the-way&quot;&gt;Paving the way&lt;&#x2F;h4&gt;
&lt;p&gt;@isse had always heard plenty of advice about watching where you step, but nothing on what to do when you don&#x27;t like what you see. So she took her own ideas to the town planning hall for a much prettier outcome. Plazas and paths play by the new rules in all towns, though mesa&#x2F;cliff ones are skipped in these photos for brevity.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_woodland-paving.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_woodland-paving.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some will miss the impromptu mud baths on a rainy day&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_desert-paving.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_desert-paving.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Much easier to sweep away the latest sandstorm&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_savannah-paving.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_savannah-paving.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;If the earth is good enough for building, it&amp;#x27;s good enough for walking&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4749&quot;&gt;!4749&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;change-what-you-can-control&quot;&gt;Change what you can control&lt;&#x2F;h4&gt;
&lt;p&gt;Though Veloren has been developed with keyboard and mouse front of mind for the most part, we hold no grudge against our gamepad compatriots. @JimmyDdotEXE opens that door a little further by making their controls easier to navigate.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_gamepad-controls.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_gamepad-controls.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;No illusions of control here&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4436&quot;&gt;!4436&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;you-asked-they-answered&quot;&gt;You asked, they answered&lt;&#x2F;h4&gt;
&lt;p&gt;Cracking into the archives, @xMAC94x went digging for questions asked of the Tutorial bot on the official server in days gone by. These forgotten lessons have been passed on to a new generation of &#x27;proper&#x27; NPCs. See if you can catch them in a chatty mood.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-13_horblegorble_tutorial-chatter.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-13_horblegorble_tutorial-chatter.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Wisdoms of the crowd&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4771&quot;&gt;!4771&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;going-places&quot;&gt;Going places&lt;&#x2F;h4&gt;
&lt;p&gt;Ever catch the travel bug, but the thought of all that planning just makes you feel sick? Don&#x27;t worry, @souffle has got a solution for your impulsive fancies:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;There now exists a &lt;code&gt;&#x2F;goto_rand&lt;&#x2F;code&gt; command available to admins to teleport to a random position.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_goto-rand.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-09_horblegorble_goto-rand.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;Mind the terrain&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4698&quot;&gt;!4698&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;getting-the-message&quot;&gt;Getting the message&lt;&#x2F;h4&gt;
&lt;p&gt;Say no to character screen FOMO, with a message queue implemented by @imbris that will catch those previously fugitive chat entries.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-13_horblegorble_chat-haiku.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-13_horblegorble_chat-haiku.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Finishing each other&amp;#x27;s haiku&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This was created as one part of the arsenal deployed in a manhunt for an elusive &lt;code&gt;&#x2F;tell&lt;&#x2F;code&gt; notification that was never quite sure who wanted to talk to who. A search party of additional logging eventually tracked down the filtering accomplices, who gave up the notification to be humanely &#x27;removed&#x27; from the codebase. Whispers of fear have become audible in the open issue list as marshal @imbris counts up yet another successful pursuit.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4777&quot;&gt;!4777&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;keeping-the-flames-in-check&quot;&gt;Keeping the flames in check&lt;&#x2F;h4&gt;
&lt;p&gt;Any experienced Veloren player will know that the dramatic effect power (secret stat) of a shockwave is all in the timing, so @Supa was surprised to see that two of the heavy hitters in the Dwarven Mines were jumping the gun. After taking them back through drama class lessons, they were quick to catch on (but not too quick now).&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_keeping-the-flames.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_keeping-the-flames.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Before (left) and after (right) for Flamekeeper (top) and Forgemaster (bottom)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4805&quot;&gt;!4805&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;zoomies-chill-out&quot;&gt;Zoomies, chill out&lt;&#x2F;h4&gt;
&lt;p&gt;@FERIIXU arrived with their first MR✨ to fix an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;2042&quot;&gt;issue&lt;&#x2F;a&gt; raised in mid-January by @imbris. While either on-screen buttons or the &lt;code&gt;+&lt;&#x2F;code&gt; and &lt;code&gt;-&lt;&#x2F;code&gt; keys do the job of mini-map zooming, the latter would show up with much more enthusiasm to the job.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_minimap-zoom.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-11_horblegorble_minimap-zoom.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Well behaved click buttons, and their (previously) cheeky keyboard cousins&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The behaviours of both methods are now aligned with the more well-behaved approach, along with clamping guard rails. Improved logging and some comments for future developers also leave behind some tasty breadcrumbs.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4761&quot;&gt;!4761&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;orientation and movement modifiers added to each stage of melee abilities, for future balancing - @srpapinha - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4753&quot;&gt;!4753&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;readability improvements were (carefully) made to physics code -  @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4763&quot;&gt;!4763&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;sword&#x27;s bloody gash ability no longer gives energy regen  - @unii - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4745&quot;&gt;!4745&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;soldier crabs scuttled out from under the sahagin dungeon floor - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4729&quot;&gt;!4729&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fixed game crash caused by slicing multi-byte characters in non-English languages - @alerty264 - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4755&quot;&gt;!4755&lt;&#x2F;a&gt;✨&lt;&#x2F;li&gt;
&lt;li&gt;broken matrix user count badge removed from readme - @JimmyDdotEXE - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4623&quot;&gt;!4623&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;typo fix in economy testing code - @pat36 + @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4766&quot;&gt;!4766&lt;&#x2F;a&gt;✨&lt;&#x2F;li&gt;
&lt;li&gt;lints can now be configured across the entire cargo workspace - @imbris  - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4769&quot;&gt;!4769&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;credits and licensing added for @GeekyGami&#x27;s music tracks - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4767&quot;&gt;!4767&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;removed old &lt;code&gt;toggle_keybinding_mode&lt;&#x2F;code&gt; from voxygen - @hnrq - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4773&quot;&gt;!4773&lt;&#x2F;a&gt;✨&lt;&#x2F;li&gt;
&lt;li&gt;large horn added to NPC trading stocks - @Crabo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4754&quot;&gt;!4754&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;improvements for new inventory methods - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4757&quot;&gt;!4757&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fixed &quot;Uid was not mapped to any entity&quot; client error; included airships in rtsim ID map - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4776&quot;&gt;!4776&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;added &lt;code&gt;find_unused&lt;&#x2F;code&gt; binary to check for unusable loot tables, loadouts, items, or recipes - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4779&quot;&gt;!4779&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;applied most compatibility lints in preparation for moving to rust 2024 edition - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4770&quot;&gt;!4770&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fixed up syntax changes that could have caused server crash, with new tests added - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4785&quot;&gt;!4785&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;various improvements to the sever event system - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4782&quot;&gt;!4782&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;de-aliased a conflict in NPC translations - @fnetx - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4788&quot;&gt;!4788&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fix for &lt;code&gt;Cargo.lock&lt;&#x2F;code&gt; - @NeuralModder - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4800&quot;&gt;!4800&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;fixed hot reloading warnings caused by rust 2024 edition changes - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4791&quot;&gt;!4791&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;added check for git LFS pointers in CI job to resolve recurring issue - @MStarK3002 + @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4797&quot;&gt;!4797&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;window size update limited to window resize event - @isse - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4810&quot;&gt;!4810&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;well-fed bear config moved: &lt;code&gt;common.entity.wild.peaceful.bear&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;common.entity.spot.bear&lt;&#x2F;code&gt; - @souffle - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4809&quot;&gt;!4809&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;wolves got faster and tougher - @Supa - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4804&quot;&gt;!4804&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;new message-of-the-day variations for singleplayer worlds - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4815&quot;&gt;!4815&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;fresh-shoots-on-the-bow-skill-tree&quot;&gt;Fresh shoots on the bow skill tree&lt;&#x2F;h4&gt;
&lt;p&gt;Spring is beginning to arrive for the bow as its skill tree starts to leaf out in full colour. The new season brings on-the-fly arrow modifications and a variety of formations to draw from. You can look back at where the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;sxLfuSElSJujHZt2_cRSWA&quot;&gt;discussion started&lt;&#x2F;a&gt;, then checkout the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;dev&#x2F;veloren&#x2F;-&#x2F;tree&#x2F;bow&quot;&gt;Gitlab &lt;code&gt;bow&lt;&#x2F;code&gt; branch&lt;&#x2F;a&gt; to see what @Sam has honed in on. We look forward to the final fletching.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-08_horblegorble_bow-and-tell.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-08_horblegorble_bow-and-tell.mp4&quot; type=&quot;video&amp;#x2F;wmp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Bow and tell with neighbourhood &amp;#x27;volunteers&amp;#x27;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;202x_Sam_bow-mood-board.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;202x_Sam_bow-mood-board.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Notching up a mood board&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is the fourth of the weapon skill tree reworks, and the first of the ranged weapons.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;translation-migration&quot;&gt;Translation migration&lt;&#x2F;h3&gt;
&lt;p&gt;Winds of a different kind of season change have been blowing across the Discord plains as of late. Getting ahead of the weather, the translation working group has moved its operations over to Veloren&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;&quot;&gt;Zulip server&lt;&#x2F;a&gt;, specifically the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;#narrow&#x2F;channel&#x2F;482740-wg-translation&quot;&gt;&lt;code&gt;#wg-translation&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; channel. If you&#x27;re new in town, feel free to drop into this &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.zulipchat.com&#x2F;#narrow&#x2F;channel&#x2F;482725-New-contributors&#x2F;topic&#x2F;Coming.20from.20discord&#x2F;with&#x2F;511730311&quot;&gt;&lt;code&gt;#New contributors&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; thread first. And for folks hesitant to try out Zulip, the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&quot;&gt;&lt;code&gt;#new-contributors&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; channel of our discord is still a good runway for your translation take-off.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;airship-evolutions&quot;&gt;Airship evolutions&lt;&#x2F;h3&gt;
&lt;p&gt;A new RFC has &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;merge_requests&#x2F;48&quot;&gt;docked at our Gitlab&lt;&#x2F;a&gt;, ready to load up on your well-considered feedback. @Tarhun lays out the charts for all things airships:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Docking infrastructure and local destination maps&lt;&#x2F;li&gt;
&lt;li&gt;Destination and route distributions, to meet the needs of a public transportation network&lt;&#x2F;li&gt;
&lt;li&gt;Finding the right fleet numbers, including multiple ships on extra long routes&lt;&#x2F;li&gt;
&lt;li&gt;Resolving matters of turbulence and friction to make it safe to move about in-flight&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-27_Tarhun_airship-evolutions.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-27_Tarhun_airship-evolutions.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Notable offsets relative to the captain&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As mentioned in an earlier section, progress has already been made on matters of boarding and airspeed. You can also join in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;797421546871324712&#x2F;1344471654130253906&quot;&gt;discussion&lt;&#x2F;a&gt; on Discord, which has so far covered air resistance and player vs airship interpolation.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;locking-on-to-what-matters&quot;&gt;Locking on to what matters&lt;&#x2F;h3&gt;
&lt;p&gt;@GeekyGami prompted a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450065020878061600&#x2F;1345195188041285633&quot;&gt;discussion&lt;&#x2F;a&gt; on having lock-on mechanics, which brought in @Sam to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450065020878061600&#x2F;1346638782287446149&quot;&gt;spell out&lt;&#x2F;a&gt; some of the core &#x27;tenets&#x27; of combat in Veloren. Here&#x27;s the short and sweet:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Preparation is key: scouting the layout, enemies, and hazards of an area, then picking the right gear and strategy to go with&lt;&#x2F;li&gt;
&lt;li&gt;Players are not special from other humanoid NPCs: capabilities, strengths, and weakness are shared by all&lt;&#x2F;li&gt;
&lt;li&gt;The power gap between early-game and &#x27;end-game&#x27; characters is not very large&lt;&#x2F;li&gt;
&lt;li&gt;Most combat choices have some inherent trade-offs: a benefit has a downside, or takes from a fixed budget&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;concept-art&quot;&gt;Concept art&lt;&#x2F;h3&gt;
&lt;p&gt;First-hand accounts of various explorations in voxel space. A mix of things intended for use in-game, and more experimental ideations.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-28_Gemu_sandshark-update.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-28_Gemu_sandshark-update.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Not a child-friendly sand pit — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-28_SrKStarK_iron-chakram.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-28_SrKStarK_iron-chakram.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A high-res iron chakram — by @SrKStarK&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-25_Gemu_jungle-tree-wip-or-dead.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-25_Gemu_jungle-tree-wip-or-dead.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Arboreal artistry — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;202x_unii_evolution-of-beer.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;202x_unii_evolution-of-beer.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Of brew and bottle — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;carpet-challenge&quot;&gt;Carpet challenge&lt;&#x2F;h3&gt;
&lt;p&gt;Calling all rugged adventures! Sheath your sword, grab a cuppa, and take a seat at the voxel loom - @Supa has an artistic call to arms for you to meet. Flex your skills of symmetry by weaving together colours for a tiling carpet design. You can download this &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;246&#x2F;2025-02-25_Supa_carpet-challenge.vox&quot;&gt;&lt;code&gt;.vox&lt;&#x2F;code&gt; file&lt;&#x2F;a&gt; as a reference, but don&#x27;t feel it has to constrain your aesthetic ambitions. Here is the display room so far:&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-06_Sam113_carpet-challenge-entry.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-06_Sam113_carpet-challenge-entry.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Target practice for a sleepy head — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025_0x_Joe_Cool_carpet-challenge.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025_0x_Joe_Cool_carpet-challenge.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New crosshair designs perhaps? — by @Joe_Cool&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_jachobi-carpet-recreation.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-12_horblegorble_jachobi-carpet-recreation.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fractal form over function — by @Jachobi ✨&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;having-some-fun&quot;&gt;Having some fun&lt;&#x2F;h3&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-06_souffle_helloren-logo.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-06_souffle_helloren-logo.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Doom and gloom — by @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-27_unii_legoom-fashion.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-02-27_unii_legoom-fashion.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The latest in legoom fashions — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-0x_Dan113_baby-danari-in-a-mech-suit.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-0x_Dan113_baby-danari-in-a-mech-suit.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Intellectual property infringement, or baby Danari in a mech suit? — by @Dan113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;events&quot;&gt;Events&lt;&#x2F;h3&gt;
&lt;p&gt;Pre-planned events hosted on the official server (&lt;code&gt;server.veloren.net&lt;&#x2F;code&gt;). You can keep an eye out for future announcements on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;888424036143607809&quot;&gt;discord channel&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;shroom-cup-2&quot;&gt;Shroom Cup 2&lt;&#x2F;h4&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-02_Hrom_cart-poster.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-02_Hrom_cart-poster.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mush! Mush! — by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Spores of racing fever were in the air as the day warmed up for the 2nd Shroom Cup. A downhill slope from Primore took drivers through treacherous mesa terrain before levelling out to a stretch of undulating dunes to reach the finish line at the Bridge of Blodelic. Competitive spirits were fired up with passengers free to use any weapon against opposing vehicles (or terrain). To keep things from getting into too much truffle, the races were officiated by @Gemu as the overhead umpire, who was piloting the aptly named &#x27;Flying Dutchman&#x27;.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_horblegorble_pre-dawn-lineup.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_horblegorble_pre-dawn-lineup.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Morning shadows kept shifting the starting line — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-4.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-4.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;In the heat of the moment — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-5.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-5.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;View from the referee&amp;#x27;s sky cam — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-3.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-3.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Now that&amp;#x27;s pile driving — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-8.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-03-03_Gemu_shrrom-cup-8.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The much calmer, post-racing lineup — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;To let off pre-sprint steam, some drivers took turns behind the wheel of a &#x27;safety&#x27; cart, putting its all-terrain features to the test across desert dunes and mesa cliffs. A few brave riders clung on behind in the &#x27;very-much-not-safety&#x27; trailer. The many twists and twangs of the tether eventually came to a rest at the foot of what seemed to be a regular old savannah tree. But history will remember it well as the birthplace of Veloren&#x27;s space program. Some have raised doubts about the capabilities of a supercharged trailer-trampoline to achieve orbital velocity, while proponents claim that further cheese and player testing will prove out the technology.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-17_horblegorble_trampoline-space-program.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;2025-04-17_horblegorble_trampoline-space-program.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bounce for the stars! — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-03_Iskava_primore-before-shroomcup.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-03_Iskava_primore-before-shroomcup.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Before the shroom cup, Primore&amp;#x27;s peaceful panorama — by @Iskava&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-01_Gemu_gigas-battle.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-01_Gemu_gigas-battle.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;No time to chill out — by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-04_horblegorble_almost-a-whole-tree.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-04_horblegorble_almost-a-whole-tree.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Almost a whole tree — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-04_EatherBone_waoubi-optics.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-04_EatherBone_waoubi-optics.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;On the wing to Waoubi — by @EatherBone&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-04_horblegorble_looking-in-on-tavern-tales.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-04_horblegorble_looking-in-on-tavern-tales.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Looking in on tavern tales — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-08_souffle_lighting-up-venton.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-08_souffle_lighting-up-venton.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The night lines of Venton — by @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-10_horblegorble_the-incompetent_cube.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-10_horblegorble_the-incompetent_cube.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some honest branding — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-14_Alley_Oop_the-call-of-the-void.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-14_Alley_Oop_the-call-of-the-void.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fall before the throne — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-15_Supa_dusk-at-askajan.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-15_Supa_dusk-at-askajan.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sun-rise living — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-01_Crabo_well-fed-crabo.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;246&amp;#x2F;screenshots&amp;#x2F;2025-03-01_Crabo_well-fed-crabo.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A very well fed @Crabo. Stay hungry for the next one :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;246&#x2F;screenshots&#x2F;2025-03-04_EatherBone_en-gard.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 245</title>
          <pubDate>Thu, 03 Apr 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-245/</link>
          <guid>https://veloren.net/blog/devblog-245/</guid>
          <description>&lt;p&gt;The time warp continues, as we look back on the arrival of some of the most anticipated updates to Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @steanne, @DaforLynx, @NeuralModder, @phoenix13032005, @GeekyGami, @unii, @UncomfySilence, @do-no-van, @horblegorble, @Tarhun, @zesterer, @xMAC94x, @isse, @floppy, @Synis, and @Supa.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;airships-are-go-for-launch&quot;&gt;Airships are go for launch!&lt;&#x2F;h4&gt;
&lt;p&gt;Having taken off back in December of last year, @Tarhun&#x27;s uplifting changes finally make their landing:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;The age of Airship travel has arrived!&lt;&#x2F;p&gt;
&lt;p&gt;For more than a few weeks, I&#x27;ve been working, diligently but mostly slowly due to inexperience with the game design and the language, to automate Airship movement and travel between Sites with docks.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to @zesterer for guidance and the many code reviews. Thanks to @isse for assistance and to everyone else that offered encouragement.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-31_horblegorble_mesa-airships.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-31_horblegorble_mesa-airships.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;Airships now travel a network of routes between dock sites. Every Site with an Airship Dock now has two to four routes connected to the same number of other sites. Airships stop at the dock for about 90 seconds, then lift off and fly to the destination site while following the terrain.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s still work to be done on smoothing out the ride, so it&#x27;s best for now to jump on and take a seat, then zoom out and look around.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorbe_transit-timelapse-glorious.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorbe_transit-timelapse-glorious.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 ⏩ The world suddenly feels a whole lot smaller. Music by @Zakru&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;To not spoil the fun of exploring the Airship route network, I&#x27;ll just say that the destination site from any particular docking position is always the same. The rest is up to you!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4671&quot;&gt;!4671&lt;&#x2F;a&gt;
-&amp;gt; &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4709&quot;&gt;!4709&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4738&quot;&gt;!4738&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;now-we-re-talking&quot;&gt;Now we&#x27;re talking&lt;&#x2F;h4&gt;
&lt;p&gt;@zesterer gives NPCs the gift of the gab, unlocking big ambitions down the road:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;For the past few weeks I&#x27;ve been slowly working on a much-awaited feature: two-way dialogue!&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s in the early stages, but you can already use it to ask NPCs how they feel about you, who they are, where you are, and even temporarily hiring NPCs (if you&#x27;re playing singleplayer, this might be useful!).&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to @Pfau for his work on the UI: although it&#x27;s still a work in progress, it&#x27;s already looking great.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-17_zesterer_two-way-dialogue.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-17_zesterer_two-way-dialogue.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;A name destined to wear the chef hat&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;Dialogue is passed all the way through to rtsim, allowing for dialogue sequences as part of long-running behaviours. The most exciting part, for me, is that this feature unblocks work on a lot of future things such as:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Questing&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Factions &amp;amp; politics&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Story-telling and exposition&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;NPC hiring and groups&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_npc-dialogue.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_npc-dialogue.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 Talk is cheap, so keep some coins on hand to be persuasive&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4686&quot;&gt;!4686&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4739&quot;&gt;!4739&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4747&quot;&gt;!4747&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;towns-and-dungeons-play-musical-chairs&quot;&gt;Towns and dungeons play musical chairs&lt;&#x2F;h4&gt;
&lt;p&gt;The tunes are a changing, with three new soundtrack additions and a reshuffle of dungeon music. First up is a delicate dance through snowland choreographed by @phoenix13032005.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-30_horblegorble_snowland.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-30_horblegorble_snowland.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-04_phoenix13032005_where-frost-played.ogg&quot; type=&quot;audio&amp;#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;🔊 &lt;i&gt;Where Frost Played — @phoenix13032005&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Striking a more jubilant tone, @phoenix13032005 also gives fresh energy to the sunshine of coastal and savannah towns.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-30_horblegorble_coastal.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-30_horblegorble_coastal.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-04_phoenix13032005_fill-the-mugs.ogg&quot; type=&quot;audio&amp;#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;🔊 &lt;i&gt;Fill The Mugs — @phoenix13032005&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;And for the bloodthirsty adventurer, a much more sinister vibe from @GeekyGami will echo through the halls of vampire castles.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-30_horblegorble_vampire.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-30_horblegorble_vampire.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-04_GeekyGami_still-hearts-coffin.ogg&quot; type=&quot;audio&amp;#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;🔊 &lt;i&gt;Still Heart&amp;#x27;s Coffin — @GeekyGami&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@phoenix13032005 also played umpire for a dungeon themed round of musical chairs. When the beat stopped, here&#x27;s where the sounds landed:&lt;&#x2F;p&gt;
&lt;table aria-label=&quot;Table of updated music tracks for each dungeon&quot;
  style=&quot;border: 1px solid; margin-bottom: 1rem; margin-left: auto; margin-right: auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;border: 1px solid;&quot;&gt;
      &lt;th scope=&quot;col&quot; style=&quot;border-right: 1px solid; text-align:left; padding-left: 1.5em; padding-top: 0.2em; padding-bottom: 0.2em;&quot;&gt;
        Dungeon
      &lt;&#x2F;th&gt;
      &lt;th scope=&quot;colgroup&quot; colspan=2 style=&quot;text-align:left; padding-left: 1.5em;&quot;&gt;
        Tracks
      &lt;&#x2F;th&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;thead&gt;
  &lt;tbody class=&quot;alternating-rows&quot;&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Gnarling Fort&lt;&#x2F;td&gt;
      &lt;td&gt;Jungle Ambient&lt;&#x2F;td&gt;
      &lt;td&gt;The Undergrowth&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Adlet Stronghold&lt;&#x2F;td&gt;
      &lt;td&gt;Mysty Temple&lt;&#x2F;td&gt;
      &lt;td&gt;A Heart&#x27;s Ice-Cold Protection&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Sahagin Island&lt;&#x2F;td&gt;
      &lt;td&gt;Sacred Temple&lt;&#x2F;td&gt;
      &lt;td&gt;Thrumming Waters&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Haniwa Catacombs&lt;&#x2F;td&gt;
      &lt;td colspan=2&gt;Cobbled Halls&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Vampire Castle&lt;&#x2F;td&gt;
      &lt;td&gt;Vast Onslaught&lt;&#x2F;td&gt;
      &lt;td&gt;Still Heart&#x27;s Coffin&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Sea Chapel&lt;&#x2F;td&gt;
      &lt;td&gt;Mysty Temple&lt;&#x2F;td&gt;
      &lt;td&gt;Ruination&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Myrmidon Dungeon&lt;&#x2F;td&gt;
      &lt;td&gt;Sacred Temple&lt;&#x2F;td&gt;
      &lt;td&gt;Vast Onslaught&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Cultist Dungeon&lt;&#x2F;td&gt;
      &lt;td&gt;Sacred Temple&lt;&#x2F;td&gt;
      &lt;td&gt;Ruination&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Terracotta Ruins&lt;&#x2F;td&gt;
      &lt;td colspan=2&gt;Jungle Ambient&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border-right: 1px solid;&quot;&gt;Dwarven Mines&lt;&#x2F;td&gt;
      &lt;td&gt;Dank Dungeon&lt;&#x2F;td&gt;
      &lt;td&gt;Cobbled Halls&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4712&quot;&gt;!4712&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;bouncing-off-the-walls&quot;&gt;Bouncing off the walls&lt;&#x2F;h4&gt;
&lt;p&gt;Obstacle course architects will have to rethink their designs in light of new climbing mechanics from @Synis. Make sure your climbing boots and chalk are in good nick.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_parkour-pete.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_parkour-pete.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Parkour Pete gives us some demos of new techniques&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4734&quot;&gt;!4734&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;towning-around&quot;&gt;Towning around&lt;&#x2F;h4&gt;
&lt;p&gt;That bumpy, unlit road in town now gives a smooth, lantern adorned ride all the way to the remodelled tavern. Courtesy of @isse:&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-26_isse_0-pretty-plaza-picture.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-26_isse_0-pretty-plaza-picture.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;Lately I&#x27;ve been working a bit on our towns, both just generation wise, and adding sprites (blocks with extra details, beds, chairs etc.) from @Supa  and @unii .&lt;&#x2F;p&gt;
&lt;p&gt;With these changes we&#x27;ve also started using a lot more &quot;tiled&quot; sprites. Which are sprites that take up many blocks to have better colliders, and we can do some composition with the different tiles without needing to create voxel models for each variation.&lt;&#x2F;p&gt;
&lt;p&gt;The first example of these were the lantern sprites. These are built from three parts, a base, a top and the lantern. And if you look closely you can see where the separation is because the light level is different if the lantern is lit.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_isse_1-lantern-light-composition.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_isse_1-lantern-light-composition.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Example of how it can be composed, with some issues still in the model&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;Also added a basement to tavern buildings and changed their generation a bit.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_2-tavern-inside-and-out.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_2-tavern-inside-and-out.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;Our roads between towns didn&#x27;t play well with our site rendering code, so I updated that.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-18_isse_3-paths-before-and-after.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-18_isse_3-paths-before-and-after.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;Previous (left) and new (right)&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;i&gt;In earlier versions we&#x27;ve had some issues with plazas and roads ending up underwater, and houses being a whole lot higher up. This is because when placing the house we use an approximated altitude that&#x27;s based on a per chunk altitude value. And when placing the plaza we used a method to replace the top most blocks of the loaded terrain. I changed plazas and roads to instead behave more like other plots (building generators). And if any corner of the plaza would end up under water I instead place a wood platform at an appropriate altitude.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-21_isse_5-rising-tides.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-21_isse_5-rising-tides.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4748&quot;&gt;!4748&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;hammer-tweaks-that-haft-to-happen&quot;&gt;Hammer tweaks that haft to happen&lt;&#x2F;h4&gt;
&lt;p&gt;@UncomfySilence has brought the balance hammer down across the skill tree, with changes to damage, timing, energy, and more. If you&#x27;ve been getting into the swing of things, you may need to switch up your tactics.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_balancing-render.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_balancing-render.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An artist rendition of the balancing process&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4721&quot;&gt;!4721&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;holding-on-to-let-go&quot;&gt;Holding on to let go&lt;&#x2F;h4&gt;
&lt;p&gt;While the misadventurous among us have appreciated the second chance of recovering from a downed state, there were an unfortunate few that &#x27;jumped&#x27; to an early conclusion. But fret not, for @isse has heard your feedback, and she is giving our trigger fingers some breathing room.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-31_horblegorble_hold-to-give-up.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-31_horblegorble_hold-to-give-up.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;How much do you really miss your campfire?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4759&quot;&gt;!4759&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-or-less&quot;&gt;More or less&lt;&#x2F;h4&gt;
&lt;p&gt;For those that can&#x27;t wait till New Years for a good countdown, @do-no-van gives you the chance to experience the suspense of a boss fight in full. A new checkbox toggles the abbreviation of health points to the thousands. Have to wonder if we&#x27;ll get imperial values some day...&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-31_horblegorble_health-si-prefix.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-03-31_horblegorble_health-si-prefix.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;What a unit&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4736&quot;&gt;!4736&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;upgrading-kira&quot;&gt;Upgrading Kira&lt;&#x2F;h4&gt;
&lt;p&gt;Marking another notch on the dependency doorway, @DaforLynx and @NeuralModder help Kira grow up:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;We upgraded the version of Kira (the new audio framework) to 0.10. This may help with performance in some cases, thanks to newly using sample buffers, but let us know if you experience performance problems that were not present in the past month.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4727&quot;&gt;!4727&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4740&quot;&gt;!4740&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;paint-the-town-in-sprites&quot;&gt;Paint the town in sprites&lt;&#x2F;h4&gt;
&lt;p&gt;@Supa has been crafting up some more additions to our palette of town sprites.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_up-on-the-wall.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_up-on-the-wall.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Look into the mirror to complete the headshot hat-trick&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_baskets.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_baskets.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Small, medium, and large. The lesser known Three Basketeers&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_wooden-chest.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_wooden-chest.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It was an open and shut chest&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_tavern-table.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_tavern-table.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Plenty of seats at the table&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_bucket-sack-jug.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Supa_bucket-sack-jug.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;They can all hold water, one just not as long&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-18_Supa_bonfire-ingame.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-18_Supa_bonfire-ingame.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Supa stays warm by the bonfire&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4751&quot;&gt;!4751&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;digging-up-the-past&quot;&gt;Digging up the past&lt;&#x2F;h4&gt;
&lt;p&gt;@Synis has completed the excavation of code for the old cave system. To remember times gone by, we go on a nostalgic delve through a cave in the old eastern forests, known as &#x27;Miist Tunnel&#x27;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_1-miist-tunnel.webp&quot;
        
          style=&quot;width: 42%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_1-miist-tunnel.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_2-miist-tunnel.webp&quot;
        
          style=&quot;width: 42%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_2-miist-tunnel.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_3-miist-tunnel.webp&quot;
        
          style=&quot;width: 42%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_3-miist-tunnel.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_4-miist-tunnel.webp&quot;
        
          style=&quot;width: 42%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_4-miist-tunnel.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_5-miist-tunnel.webp&quot;
        
          style=&quot;width: 42%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_5-miist-tunnel.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_6-miist-tunnel.webp&quot;
        
          style=&quot;width: 42%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_6-miist-tunnel.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
    &lt;figcaption class=&quot;tight&quot;&gt;
      &lt;p&gt;&lt;i&gt;In and out, with a whole lotta mobs in-between&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_dig-dig.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_dig-dig.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Green is good&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_dances-with-giants.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-02_horblegorble_dances-with-giants.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Dances with giants&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The adventurous reader can explore the old world at commit &lt;code&gt;61573a7800&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4742&quot;&gt;!4742&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;capitalised sentence beginning for directional hint from NPC - @steanne - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4724&quot;&gt;!4724&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;minor potion, velorite fragment, plain cloth glider, and black lantern all moved to default recipes - @unii - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4720&quot;&gt;!4720&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;plugging up a drip in the security pipeline - @NeuralModder - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4726&quot;&gt;!4726&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;stun resilience&#x2F;resistance info in UI updated to use entity stats - @do-no-van - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4725&quot;&gt;!4725&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;terracotta statue&#x27;s blast attack made more manageable - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4728&quot;&gt;!4728&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;poise bar is now shown by default - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4732&quot;&gt;!4732&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;bloodmoon relic rotation fixed to face forward - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4733&quot;&gt;!4733&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;purple geode returns to the loot tables, now from basilisks - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4730&quot;&gt;!4730&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;toolchain update (happy valentine&#x27;s day edition) - @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4737&quot;&gt;!4737&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;a series of fixes for airship dock signs - @isse + @floppy + @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4663&quot;&gt;!4663&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;matching up &lt;code&gt;pub const DIAGONALS&lt;&#x2F;code&gt; ordering with similar enums - @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4741&quot;&gt;!4741&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;subtraction overflow fixed in network code - @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4746&quot;&gt;!4746&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;velorite and velorite fragment models updated to match multi-hit mining - @Supa + @horblegorble - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4735&quot;&gt;!4735&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;standalone code for researching better movement algorithms - @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4756&quot;&gt;!4756&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;blood-steeling-a-look-at-armour-models&quot;&gt;(Blood)steeling a look at armour models&lt;&#x2F;h4&gt;
&lt;p&gt;The crackling whoosh of a bellow-fed flame, heavy clangs of a striking hammer, and what witnesses swear were intermittent screams of agony. These were the sounds of @Gemu&#x27;s voxel armoury as he forged the first of a new set of metal armours.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_bloodsteel-backdate.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_bloodsteel-backdate.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Forged to preserve life, at the cost of another.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;fire-it-up&quot;&gt;Fire it up!&lt;&#x2F;h3&gt;
&lt;p&gt;Time to rekindle those brainstorming circuits - @Sam has put out the call to share your burning desires:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;With bow soon approaching completion, we can begin thinking about the fire staff rework.
Fire staffs are intended to be themed around fire (obviously), heat, smoke, and other related things. It&#x27;s primary niche will be a weapon with medium range that has high burst potential, though potentially with some consequences from extended use.
The rework of fire staff will also come with the introduction of a temperature system, where higher temperatures (and lower temperatures, though fire staff won&#x27;t help you get there) will have various effects on you.
Suggestions for fire staff abilities can be made in the form &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;e&#x2F;1FAIpQLScLIaAzI2WGynu3L9ofPe1mXx8uQTfWQiTpJRWfz6jSZnL2jQ&#x2F;viewform?usp=dialog&quot;&gt;here&lt;&#x2F;a&gt;:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;docs.google.com&amp;#x2F;forms&amp;#x2F;d&amp;#x2F;e&amp;#x2F;1FAIpQLScLIaAzI2WGynu3L9ofPe1mXx8uQTfWQiTpJRWfz6jSZnL2jQ&amp;#x2F;viewform?usp=dialog&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center; cursor: pointer;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-03_horblegorble_form-by-sam.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Once your own fire is burning, you can check out some of the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450065020878061600&#x2F;1347030264290873395&quot;&gt;discussion so far&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;quest-objective-speak-to-the-manager&quot;&gt;Quest objective: speak to the manager&lt;&#x2F;h3&gt;
&lt;p&gt;@zesterer and @Pfau have been &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1081973376198901850&#x2F;1341526475387568158&quot;&gt;mulling over&lt;&#x2F;a&gt; the concept of an &#x27;architect&#x27; that handles the surfacing, progression, and completion of quests. Rather than a classic mix of static roles and objectives, these quests would emerge from ongoing dynamics between entities and their alliances in the game world. This would build upon the RTSim (real-time simulation) system&#x27;s ability to handle a lot of moving pieces, to being able to move the big picture as well. The devil will be in the details of course, particularly with avoiding loose ends being scattered about.&lt;&#x2F;p&gt;
&lt;p&gt;As done before, many ideas here are gratefully borrowed from work done on Dwarf Fortress.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;4-7TtPX5uhg&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A casual talk on emergent narrative dynamics in a game world&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;it-s-all-in-the-grip&quot;&gt;It&#x27;s all in the grip&lt;&#x2F;h3&gt;
&lt;p&gt;Jack of all trades. Counter attack specialist. Mobility maximiser. What do you see as the role of the versatile sword in Veloren&#x27;s combat? @UncomfySilence &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450065020878061600&#x2F;1341770970926419980&quot;&gt;spelled out&lt;&#x2F;a&gt; some of their thoughts in a discussion with @Gemu, wondering how to have all the ingredients of its skill tree work better together. Complicating factors included dual-wielding, finding the right place alongside axe and hammer, and the differences between PvP and PvE. An important point was made that the sword was first of the melee weapons to be reworked, during a time of multiple significant changes to rolling mechanics.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;veloren-s-first-public-transport-map&quot;&gt;Veloren&#x27;s first public transport map&lt;&#x2F;h3&gt;
&lt;p&gt;Taking @Tarhun up on their invitation, @Froggy ferried himself all over the world to map out the new airship routes on the official server. To save himself some jet lag, a few of the routes were taken by other players that phoned in their findings. Getting the route colours to behave themselves was another matter.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-23_Froggy_flight-paths.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-23_Froggy_flight-paths.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Now we just need a trip planner app —  by @Froggy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-veloren-daily&quot;&gt;The Veloren Daily&lt;&#x2F;h3&gt;
&lt;p&gt;The printing press winds down as @phoenix13032005 sends out the last issue of The Veloren Daily for this season. We wish them all the best on their journeys, and hope to read more headlines about their own endeavours in the future.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-13_phoenix13032005_veloren-daily.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-13_phoenix13032005_veloren-daily.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A farewell concert and underground marvels&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;there-s-waldo-merchant&quot;&gt;There&#x27;s Waldo (Merchant)&lt;&#x2F;h3&gt;
&lt;p&gt;As promised, here we deliver the solutions to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-244&quot;&gt;last issue&#x27;s&lt;&#x2F;a&gt; search party. If you didn&#x27;t find all these characters, feel free to have another crack at it before uncovering them. Don&#x27;t forget about Waldo the merchant.&lt;&#x2F;p&gt;
&lt;details style=&quot;padding-bottom:1em;&quot;&gt;
&lt;summary style=&quot;font-size: 1.5em;&quot;&gt;Click to see original puzzles&lt;&#x2F;summary&gt;
&lt;p style=&quot;padding-top: 1em;&quot;&gt;You can click on each image to view it in full.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-savannah.png&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-savannah.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Savannah swim day&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-desert.png&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-desert.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Desert denizens&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;details&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_meet-the-waldos.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_meet-the-waldos.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Waldo reunion&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;details&gt;
&lt;summary style=&quot;font-size: 1.5em;&quot;&gt;Click to reveal solutions for Savannah Swim Day&lt;&#x2F;summary&gt;
&lt;p style=&quot;padding-top: 1em;&quot;&gt;You can click on the image to view it in full.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-18_horblegorble_theres-waldo-savannah-swim-day_v2.png&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-18_horblegorble_theres-waldo-savannah-swim-day_v2.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Savannah swim day secrets surfaced&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;&#x2F;details&gt;
&lt;br&gt;
&lt;details&gt;
&lt;summary style=&quot;font-size: 1.5em;&quot;&gt;Click to reveal solutions for Desert Denizens&lt;&#x2F;summary&gt;
&lt;p style=&quot;padding-top: 1em;&quot;&gt;You can click on the image to view it in full.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-18_horblegorble_theres-waldo-desert-denizens_v2.png&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-04-18_horblegorble_theres-waldo-desert-denizens_v2.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Desert denizens discovered&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;&#x2F;details&gt;
&lt;h3 id=&quot;concept-art&quot;&gt;Concept art&lt;&#x2F;h3&gt;
&lt;p&gt;First-hand accounts of various explorations in voxel space. A mix of things intended for use in-game, and more experimental ideations.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-14_Supa_lilypads-assembled.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-14_Supa_lilypads-assembled.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lovely lily pads in bloom, grown by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-1x_unii_planting-ideas.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-1x_unii_planting-ideas.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A few species of ideas were planted by @unii: (left to right) | Rafflesia | Passiflora | Jungle reeds | Modular moss&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-17_FBI873_orange-leafy-plants.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-17_FBI873_orange-leafy-plants.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Orange leafy plants from @FBI873, to sprout in the jungle sprite overhaul&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-18_Sam113_bookshelf-and-sign.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-18_Sam113_bookshelf-and-sign.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Sam113 got into the woodworks, with a new bookcase and updated shading for hanging signs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Hrom_unii_mahjong.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-02-19_Hrom_unii_mahjong.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mahjong fans @Hrom and @unii prepare a sales pitch for tavern owners&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-01-31_unii_maid-modelling.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;2025-01-31_unii_maid-modelling.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren&amp;#x27;s armoury didn&amp;#x27;t have quite the right aesthetic, so @unii maid his own&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-14_necti_red-lights.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-14_necti_red-lights.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Not that kind of red light district — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-14_unii_seeing-red.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-14_unii_seeing-red.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Myrmidons amidst mist — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-15_horblegorble_scuba-stag.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-15_horblegorble_scuba-stag.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A &amp;#x27;scuba stag&amp;#x27; waits for an unsuspecting traveller — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-15_James_canyon-cut.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-15_James_canyon-cut.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The many colours of erosion — by @James&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-17_Alley_Oop_icy-attitudes.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-17_Alley_Oop_icy-attitudes.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Playing it cool — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-16_unii_the-noise-upstairs.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-16_unii_the-noise-upstairs.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A rowdy upstairs housemate — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-17_horblegorble_goblin-in-the-light.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-17_horblegorble_goblin-in-the-light.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The chosen goblin — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-17_FBI873_crystalised-caving.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-17_FBI873_crystalised-caving.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Roleplaying as a crystal — by @FBI873&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-20_DaforLynx_an-inclination-for-faming.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-20_DaforLynx_an-inclination-for-faming.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;They always were inclined towards farming — by @DaforLynx&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-21_isse_we-have-an-opening.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-21_isse_we-have-an-opening.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Yes, we have an opening for you — by @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-21_Sam113_get-the-cultist.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-21_Sam113_get-the-cultist.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;They say holding grudges will bring you down — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-22_Alley_Oop_brain-freeze.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-22_Alley_Oop_brain-freeze.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Brain freeze — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-23_isse_airship-attitude.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-23_isse_airship-attitude.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Now this is a captain with an upwards attitude — by @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-22_Gemu_the-lost-legoom.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;245&amp;#x2F;screenshots&amp;#x2F;2025-02-22_Gemu_the-lost-legoom.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Gemu came across a very lost legoom. Maybe they&amp;#x27;ll find us in the next devblog :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;245&#x2F;screenshots&#x2F;2025-02-23_Sam113_eerie-outpost.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 244</title>
          <pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-244/</link>
          <guid>https://veloren.net/blog/devblog-244/</guid>
          <description>&lt;p&gt;In this second flashback episode of TWiV, we look at combat&#x27;s rolling remixes, shiny new goodies, plus some puzzles and newspapers.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @isse, @crab, @NeuralModder, @xMAC94x, @Gemu, @Necti, @Supa, @unii, @do-no-van, @floppy, @UncomfySilence, @phoenix13032005, @fnetx, @Imbris, @souffle, @Crabo, @srpapinha, @Nikophos, and @Hrom.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate contributors who contributed these last weeks: alextecplayz, almostabsent, Axag, bov, brucekomike, Diamons, Endoril, fnetX, iming_forge, ioutora, Janez, jls, K0RR, and raresmac.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;roll-cancelling-gets-un-cancelled&quot;&gt;Roll cancelling gets un-cancelled&lt;&#x2F;h4&gt;
&lt;p&gt;From the mind of @Necti and the coding hands of @do-no-van, roll cancelling makes a comeback to your combat repertoire.&lt;&#x2F;p&gt;
&lt;p&gt;Before this change, the remainder of an attack&#x27;s duration was added to the warmup section of a roll, leaving you &#x27;stalled&#x27; and vulnerable. Now, rolling during an attack will almost immediately put you into the roll, but with a much higher energy cost. To signal this difference during gameplay, @floppy cooked up a new sound effect.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks as well to those that tested and gave feedback to get this changed tuned in.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-22_horblegorble_old-rolls.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-22_horblegorble_old-rolls.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Stalled rolls with regular sound effect&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;2025-03-22_horblegorble_new-rolls.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-22_horblegorble_new-rolls.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🔊 &lt;i&gt;Attack-cancelling rolls with new sound effect&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4683&quot;&gt;!4683&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;bloodmoon-lighting-and-smoke-on-the-horizon&quot;&gt;Bloodmoon lighting, and smoke on the horizon&lt;&#x2F;h4&gt;
&lt;p&gt;Sink your fangs into a new lantern and get that blood-red glow. See your local Bloodmoon Heiress for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Bloodmoon_Relic&quot;&gt;details&lt;&#x2F;a&gt;, but don&#x27;t expect a warranty for belt stains.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-27_necti_bloodmoon-lighting.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-27_necti_bloodmoon-lighting.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Voxel models and @Necti modelled voxels &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Embers carried on the wind herald the approach of the Fire Gigas to Veloren. In preparation, @Gemu brings us next season&#x27;s smoking hot fashion.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-20_horblegorble_ashen-armour.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-20_horblegorble_ashen-armour.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Start practicing your smouldering gaze.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Frost Gigas and Fire Gigas. Polaris and Crux. Veloren&#x27;s future is full of symmetries.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-20_horblegorble_waiting-for-gigas.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-20_horblegorble_waiting-for-gigas.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;When will the Fire Gigas emerge from its molten slumber? &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There&#x27;s a few pieces in the puzzle of adding new items like this into the game, and it often takes a team to bring it all together:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;voxel modelling - @Gemu&lt;&#x2F;li&gt;
&lt;li&gt;armour stats - @Necti, with input from @UncomfySilence and @unii&lt;&#x2F;li&gt;
&lt;li&gt;in-game positioning - @Necti&lt;&#x2F;li&gt;
&lt;li&gt;flavour texts - @UncomfySilence&lt;&#x2F;li&gt;
&lt;li&gt;bookkeeping - @Necti + @floppy&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4705&quot;&gt;!4705&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4707&quot;&gt;!4707&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sheeny-shiny-ingots&quot;&gt;Sheeny shiny ingots&lt;&#x2F;h4&gt;
&lt;p&gt;@Supa has been throwing the best kind of shade at ingot models to give them a polished look:&lt;&#x2F;p&gt;
&lt;p&gt;Ingot sprites have been redone to reflect subtle colours, and now look much cleaner up-close. Next step is to use them as decoration or as lootables in the world.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-20_horblegorble_sheeny-shiny.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-20_horblegorble_sheeny-shiny.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;🗘 &lt;i&gt;Before and after, before and after, yada yada&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;While jealous at first, wooden logs also got a share of the spotlight.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4702&quot;&gt;!4702&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;training-for-dummies&quot;&gt;Training for dummies&lt;&#x2F;h4&gt;
&lt;p&gt;After deciding that it was tired of its old build, the training dummy entered into the tutelage of @do-no-van to pursue a re-spec into vitality. Despite losing some of its debuff immunities, it now feels ready to face the world head on, with an orientation fix to its voxel model.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-22_horblegorble_better-dummy.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-03-22_horblegorble_better-dummy.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Two very different &amp;#x27;face-first&amp;#x27; mugshots&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4703&quot;&gt;!4703&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;striking-the-balance&quot;&gt;Striking the balance&lt;&#x2F;h4&gt;
&lt;p&gt;Cleavers and cripplers may need to adjust their footing with some balancing changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;slight damage reduction for sword M1 and axe cleave - @unii - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4701&quot;&gt;!4701&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4711&quot;&gt;!4711&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;halved duration for crippling debuff - @srpapinha - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4704&quot;&gt;!4704&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;significantly reduced multipliers for crippling debuffs - @do-no-van - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4722&quot;&gt;!4722&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;woodn-t-you-know-it-more-sprites&quot;&gt;Woodn&#x27;t you know it? More sprites!&lt;&#x2F;h4&gt;
&lt;p&gt;Loading the barrels of future town updates, @Supa brushed up on his carpentry skills to fashion a suite of workshop sprites. But don&#x27;t sweat getting them all around town - @unii rolled in with a hand-drawn cart.&lt;&#x2F;p&gt;
&lt;p&gt;We thank the trees that made all this possible.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_carpentry-workshop.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_carpentry-workshop.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;You did your safety induction, right?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_unii_hand-cart.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_unii_hand-cart.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;We all love a good box. But what if, they had wheels?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_more-sprites.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_more-sprites.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;For all your stacking, barrelling, and bellowing needs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Lit up by some wikipedia &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lamplighter&quot;&gt;inspiration&lt;&#x2F;a&gt;, @Supa also assembled a couple of modular street lanterns.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_modular-lanterns.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_modular-lanterns.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Don&amp;#x27;t lose the instruction manual&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4718&quot;&gt;!4718&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sprite-asset-semi-automator-spreadsheet&quot;&gt;Sprite asset semi-automator spreadsheet&lt;&#x2F;h4&gt;
&lt;p&gt;While building, colouring, and shading models is most of the process, Veloren doesn&#x27;t wander around finding wild voxels to gobble up. To get them into the game, they need to be plated up with some configuration garnishes. Thankfully, chef @Supa is willing to share some of his cooking tips with us, in the form of a semi-automator spreadsheet that guides you through adding a sprite model into the game files. You can download it as a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;244&#x2F;2025-03-21_Supa_asset-semi-automator.xlsx&quot;&gt;.xlsx&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;244&#x2F;2025-03-21_Supa_asset-semi-automator.ods&quot;&gt;.ods&lt;&#x2F;a&gt; file.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_sprite-sheet.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_Supa_sprite-sheet.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Time to cook up your own spread of tasty sprites!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;a-different-kind-of-compiling&quot;&gt;A different kind of compiling&lt;&#x2F;h4&gt;
&lt;p&gt;The ambitious ideas and broad contributor base of Veloren mean that its future is chock-a-block full of things to juggle. It can be a lot to keep all in mind, so why not write some of it down? @Gemu and @phoenix13032005 have done the work of compiling todo lists to help coordinate efforts on models and sounds.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_Gemu_jungle-sprites.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_Gemu_jungle-sprites.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sprite modelling for a jungle biome overhaul, compiled by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_phoenix13032005_entity-sfx.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_phoenix13032005_entity-sfx.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Various sound effects for categorised entities, compiled by @phoenix13032005&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;rust toolchain update - @isse + @crab &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4694&quot;&gt;!4694&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;update continuous integration cache image - @crab - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4700&quot;&gt;!4700&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;dependency updates - @NeuralModder - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4699&quot;&gt;!4699&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;cargo package updates - @xMAC94x - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4708&quot;&gt;!4708&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;hotfix for release build - @NeuralModder - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4710&quot;&gt;!4710&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;parsed and localised text is converted to ascii to fix a parsing failure - @imbris - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4714&quot;&gt;!4714&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;kelpies now swim faster in water - @souffle - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4717&quot;&gt;!4717&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;straw hats are now sellable and stocked by merchants - @unii - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4716&quot;&gt;!4716&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;dwarven cheese added to greedy miner loot table - @Crabo - &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4719&quot;&gt;!4719&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;beware-the-bonk&quot;&gt;Beware the bonk&lt;&#x2F;h4&gt;
&lt;p&gt;On reflection, perhaps it does seem odd that a few voxels of steel can negate the impact of a giant&#x27;s crushing blow. To bring some extra challenge to your David vs Goliath combat, @do-no-van is experimenting with unblockable attacks.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-28_do-no-van_gigas-bonk.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-28_do-no-van_gigas-bonk.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;You&amp;#x27;re gonna need a bigger shield&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4706&quot;&gt;!4706&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;getting-comfortable&quot;&gt;Getting comfortable&lt;&#x2F;h4&gt;
&lt;p&gt;After a long adventure of beast hunts and dungeon raids, your weary legs finally bring you back to town. They carry you through the doors of &#x27;The Cheeky Legoom&#x27;, where all your senses are welcomed into its cozy atmosphere. The soft crackle of a simmering fire, dancing shadows of candlelight, and boisterous conversations carried in the air - all under the gaze of the courteous but discerning barkeep.&lt;&#x2F;p&gt;
&lt;p&gt;@Supa sets the scene for a space to socialise and recharge, with a tavern&#x27;s worth of sprites in the works.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Supa_Tavern-0.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Supa_Tavern-0.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Supa_Tavern-1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Supa_Tavern-1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;you-ve-thread-all-this-before&quot;&gt;You&#x27;ve thread all this before&lt;&#x2F;h3&gt;
&lt;p&gt;Sailing through the brainstorms that happen across our discord channels can put ones navigation skills to the test, so it&#x27;s always appreciated when things get brought into calmer waters.&lt;&#x2F;p&gt;
&lt;p&gt;@Nikophos collated &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1337420659860574321&quot;&gt;various potion ideas&lt;&#x2F;a&gt;✨, ranging form buoyancy and bottle wind, to homesickness and gender change.&lt;&#x2F;p&gt;
&lt;p&gt;Food and alchemy were on @Supa&#x27;s mind, as he placed some old ideas into &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;646401404419833866&#x2F;1338207398971838647&quot;&gt;new threads&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338207874073100338&quot;&gt;Food: Should there be a hunger system?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338208327192285204&quot;&gt;Food: What stats should food give?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338209911351279839&quot;&gt;Food: How to add more nuance to cooking?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338213180840869959&quot;&gt;Food: What food-related items should be added&#x2F;adjusted?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338213393667985482&quot;&gt;Alchemy: What stats should potions give?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338213644445421568&quot;&gt;Alchemy: How to add nuance to potion-making?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1338213836372578437&quot;&gt;Alchemy: Should the potion vial return to the inventory after use?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;playing-your-part&quot;&gt;Playing your part&lt;&#x2F;h3&gt;
&lt;p&gt;The players. They jostle, quarrel, and bicker. A shared consternation of unmet contestation. Looking for a banner to rally them. Yearning for more than &lt;code&gt;&#x2F;join_faction&lt;&#x2F;code&gt;. It&#x27;s time to take matters into their own hands.&lt;&#x2F;p&gt;
&lt;p&gt;Kicked off by @Hrom, there was a wide ranging discussion on faction role-playing as a gameplay element layered on top of Veloren&#x27;s out-of-the-box experience. Ideas included factional quests amongst players and PvP skirmishes at towns to determine territory control, all overseen by guilds with leaders, treasurers, and regular members. A summary of the proposed ideas was &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;244&#x2F;2025-02-04_phoenix13032005_Veloren-Faction-Roleplay-Proposal.pdf&quot;&gt;written up&lt;&#x2F;a&gt; by @phoenix13032005.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-02_Hrom_veloren-factions.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-02_Hrom_veloren-factions.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Thinking of a world divided — by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Although the war room deliberations didn&#x27;t arrive at a concrete plan of attack, there&#x27;s plenty of material up on the drawing board to revisit another time.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;where-s-waldo-veloren-edition&quot;&gt;Where&#x27;s Waldo, Veloren edition&lt;&#x2F;h3&gt;
&lt;p&gt;The famous puzzle book makes an unlicensed expansion into the world of Veloren, with two sunny scenes each hiding Waldo (Merchant) and six other sneaky stars. Directed by @Hrom.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-savannah.png&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-savannah.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Savannah swim day&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_meet-the-waldos.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_meet-the-waldos.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Meet the Waldos&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-desert.png&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-09_Hrom_wheres-waldo-desert.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Desert denizens&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Solutions will be posted in the next edition of TWiV.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;extra-extra-read-all-about-it&quot;&gt;Extra! Extra! Read all about it!&lt;&#x2F;h3&gt;
&lt;p&gt;Armed with their keen senses and a trusty notepad, @phoenix13032005 was on assignment these weeks to document the various dramas unfolding on Veloren&#x27;s official server. These are the stories told so far, in The Veloren Daily.&lt;&#x2F;p&gt;
&lt;figure class=&quot;gallery&quot;&gt;
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-30_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-30_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-31_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-31_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-01_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-01_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-02_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-02_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_phoenix13032005_veloren-daily-p1.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_phoenix13032005_veloren-daily-p1.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_phoenix13032005_veloren-daily-p2.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_phoenix13032005_veloren-daily-p2.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-04_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-04_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-06_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-06_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-07_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-07_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-08_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-10_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-10_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
    
    
      &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_phoenix13032005_veloren-daily.webp&quot;
        
          style=&quot;width: 30%;&quot;
        
        target=&quot;_blank&quot;&gt;
      &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_phoenix13032005_veloren-daily.webp&quot;
        loading=&quot;lazy&quot;
        style=&quot;cursor: zoom-in;&quot;&gt;
      &lt;&#x2F;a&gt;
    
  
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;events&quot;&gt;Events&lt;&#x2F;h3&gt;
&lt;p&gt;Pre-planned events hosted on the official server (&lt;code&gt;server.veloren.net&lt;&#x2F;code&gt;). You can keep an eye out for future announcements on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;888424036143607809&quot;&gt;discord channel&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;pvp-war&quot;&gt;PvP war&lt;&#x2F;h4&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Vagabond_the-usual-suspects.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Vagabond_the-usual-suspects.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The usual suspects, extended line up — by @Vagabond&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Lakeside residents of Sporia were recently witness to a kind of reverse-Atlantis event, when a mini-city island rose up from the waters. Deserted but intact, with an architecture unknown to modern Veloreans, it holds untold promise for historical study. What better to do with this archaeological miracle than wage all-out PvP warfare.&lt;&#x2F;p&gt;
&lt;p&gt;So now, Battlemode Productions™ brings you another combat extravaganza! This time in a geared up, strat maxed, team based format. Big cheers to @unii for besting Poseidon to raise their arena from the lakebed, @Necti for promoting the event, and @Hrom for putting the teams together.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Necti_arena-image.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Necti_arena-image.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Warmup lighting — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_phoenix13032005_veloren-daily-p1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_phoenix13032005_veloren-daily-p1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A front page, bruised-eye witness account from @phoenix13032005&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Necti was back in the hot seat with in-the-action commentary and comms.  It&#x27;s subtle, but she might be a fan of the new rolls.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;juCnmk6r_X8&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Mind the puddle of leaked meta&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Sam113_tournament-migration.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Sam113_tournament-migration.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A conga line from @Sam113 turned bizarre attempt to measure the arena in &amp;#x27;body count&amp;#x27;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-06_unii_shades-of-grey.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-06_unii_shades-of-grey.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Who knows what lurks between the shades of grey? — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-25_Supa_twin-towers.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-25_Supa_twin-towers.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Casual Friday attire looks very different in these neighbouring towers — by @Supa&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-31_And_i_tribute-to-bremen.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-31_And_i_tribute-to-bremen.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A tribute to the Town Musicians of Bremen — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-25_Alley_Oop_bends-in-the-road.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-25_Alley_Oop_bends-in-the-road.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;All about the journey, not the destination — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-07_game_r-dev_end-of-day.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-07_game_r-dev_end-of-day.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Could almost imagine your own sunset in a lantern — by @game_r&amp;#x2F;dev&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Alley_Oop_floating-finish.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-03_Alley_Oop_floating-finish.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;To pack: 🗹 glider ☐ life jacket — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-30_necti_light-up-the-sky.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-30_necti_light-up-the-sky.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Last moments of an unburned retina — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-31_cookiengineer_gigas-remodel.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-01-31_cookiengineer_gigas-remodel.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Frost Gigas tries their hand at some urban (re)planning — by @cookiengineer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-02_Alley_Oop_warm-adlets.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-02_Alley_Oop_warm-adlets.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;These Adlets are digging their heels in against climate change — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-06_unii_biome-mixins.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-06_unii_biome-mixins.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A melting pot of cave flavours — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_Froggy_heatwave.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;244&amp;#x2F;2025-02-11_Froggy_heatwave.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Froggy was tempted to ride this heatwave. Catch you on the next one :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;244&#x2F;2025-02-01_ITCH_chill.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 243</title>
          <pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-243/</link>
          <guid>https://veloren.net/blog/devblog-243/</guid>
          <description>&lt;p&gt;Step into the time machine, as we begin a series of catch up posts to bring ourselves up to speed with what&#x27;s been happening in Veloren. It&#x27;s been a relatively busy few months to start the year, with contributors new and old bringing their energy to the project. Some longer running works have also been making their debuts. Today&#x27;s menu includes new mounting possibilities, pixel and voxel art updates, as well as screenshots galore.&lt;&#x2F;p&gt;
&lt;p&gt;- horblegorble, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks:
@xMAC94x, @unii, @IBotDEU, @DungeonLord, @fnetx, @zesterer, @isse, @Hrom, @horblegorble, @allucaneat, @Froggy, @Anawan, @srpapinha, @crab, and @Crabo.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate contributors who contributed these last weeks: ArDu, Bandalbox, bov, fnetX, Jungso, l3nemy, NeoSlugman, Paw, Raskm, sungbinma, Tibo-Mouss, and Zerothas.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;release-the-party&quot;&gt;Release... the party!&lt;&#x2F;h3&gt;
&lt;p&gt;Before we see what&#x27;s arrived with the new year, let&#x27;s look back at how we closed out the last one.&lt;&#x2F;p&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-29_horblegorble_shenanigans.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-29_horblegorble_shenanigans.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Much of the usual shenanigans, with some new faces — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-29_horblegorble_zen-concert-1.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-29_horblegorble_zen-concert-1.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;All together now! — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-29_X_migration.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-29_X_migration.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;In true zen fashion: a snail&amp;#x27;s pace migration — by @Hgrebnewdnav, @Necti, @unii, @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-02_souffle_party-boating.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-02_souffle_party-boating.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An after-party boat ride — by captain @souffle&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Veloren &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4674&#x2F;diffs&quot;&gt;officially&lt;&#x2F;a&gt; turned 0.17 on Dec 28th, 2024. You can check out the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=kgK58NuBrXc&quot;&gt;live stream&lt;&#x2F;a&gt; of the release party, which was again hosted at @Hannibal&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=weIK41W3tX0&quot;&gt;zen island&lt;&#x2F;a&gt; that debuted at the 0.15 release party.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;iconic-hammer-skills&quot;&gt;Iconic Hammer skills&lt;&#x2F;h4&gt;
&lt;p&gt;Placeholder icons by @Sam finally get the bonk as new ones swing into action.
Heavy lifting was done by @allucaneat, with touch ups from @Froggy to bring things over the line.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-18_horblegorble_hammer-icons.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-18_horblegorble_hammer-icons.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The hammer skill tree, now in its full pixelated glory&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4450&quot;&gt;!4450&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;to-mount-or-not-to-mount&quot;&gt;To mount or not to mount&lt;&#x2F;h4&gt;
&lt;p&gt;Get yer collars and cowboy hats ready folks! @isse just rode in from a multi-merge-request code rodeo. Let&#x27;s see what she&#x27;s wrangled for us.&lt;&#x2F;p&gt;
&lt;p&gt;Riding capabilities are now determined mostly by mass, shepherding in a wider variety of mounts for players. However, dreams of Hirdrasil riding remain fanciful, as a few exceptions remain. Something without exception is the results of an intense game of offset catchup, with every entity getting a tailored mount point. A local tavern owner spectating @isse&#x27;s performance reckons they&#x27;d be a champion at the local pin-the-tail-on-the-donkey tournament.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-19_Dan113_treant-mount.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    alt=&quot;&amp;lt;alt&amp;gt;&quot;
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-19_Dan113_treant-mount.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Dan113 always wanted to level up from tree-hugger to tree-rider.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As is to be expected when striking out a new path in the world, it wasn&#x27;t all smooth ground to cover. Things caught a spooky snag in the form of a kind of &#x27;ghost of merge request past&#x27;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-19_Sam113_ghost-rider.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-19_Sam113_ghost-rider.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A short-lived Veloren reboot of Ghost Rider, starring @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now don&#x27;t think playing ghostbuster was the only fix at work here:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;voxygen updates mount animations first to prevent the rider lagging behind&lt;&#x2F;li&gt;
&lt;li&gt;squished a bug with mounting in water that kept playing swimming animations and water noises&lt;&#x2F;li&gt;
&lt;li&gt;other animations now work better in combination with mount movements.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Phew! What a mountain of mounting changes.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-14_isse_riding-zebras.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-14_isse_riding-zebras.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Some fun along the way, as @isse takes a fresh approach to rebuilding the Tower of Babel&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Though maybe the real changes were the command line fixes made along the way:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;crustacean&lt;&#x2F;code&gt; added to entity list for &lt;code&gt;&#x2F;body&lt;&#x2F;code&gt; and &lt;code&gt;&#x2F;spawn&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;tab completion fixed for sub-commands&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;&#x2F;outcome&lt;&#x2F;code&gt; get parsing for its options&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4689&quot;&gt;!4689&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4695&quot;&gt;!4695&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4691&quot;&gt;!4691&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;it-s-a-whole-new-default-world&quot;&gt;It&#x27;s a whole new (default) world&lt;&#x2F;h4&gt;
&lt;p&gt;Our map seed hunters have returned from another expedition, so that Veloren&#x27;s default worlds may be reborn. Cooking up the final touches, from their kitchen was heard a grand chorus of excited back and forths, terrain and biome seed blending, and what this observer could only discern as a demand for pirate icebergs. The final dish was served fresh so as to bypass the small matter of voting from before.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-14_horblegorble_new-maps.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-14_horblegorble_new-maps.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;new singleplayer (left) and multiplayer (right) default maps&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4679&quot;&gt;!4679&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;control-and-interaction-ui-updates&quot;&gt;Control and interaction UI updates&lt;&#x2F;h4&gt;
&lt;p&gt;Sometimes it feels like everyone wants to know &quot;where is my bag?&quot; but no one is asking &quot;why is my bag?&quot;. @Anawan brings us an answer to this age old question with a name change for controls from &#x27;Bag&#x27; to &#x27;Inventory&#x27;. Accordingly, the default keybind has been updated from [B] to [I].&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-17_horblegorble_bag-to-inventory.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-17_horblegorble_bag-to-inventory.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Time to relearn some muscle memory... (or maybe go and change the keybind)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4692&quot;&gt;!4692&lt;&#x2F;a&gt;
✨&lt;&#x2F;p&gt;
&lt;p&gt;Ever find yourself adjusting the floor lighting while your valuable loot lies not more than a step away? Or does your mount insist on your attention when you&#x27;re trying to pick it some apples? Never* fear facing these frictions again, with @crab&#x27;s new patented* Interact-O-Matic system!
Now featuring:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;multiple interaction targets, with each control resolved amongst them&lt;&#x2F;li&gt;
&lt;li&gt;prioritisation of interactions, e.g. item pickup before entity petting&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-17_horblegorble_crab-interactions.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-17_horblegorble_crab-interactions.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Perhaps time to retire our keyboard wrestling belts&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;* statements pending approval from our legoom legal team.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4693&quot;&gt;!4693&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;admin-glider-goes-vroom&quot;&gt;Admin glider goes vroom!&lt;&#x2F;h4&gt;
&lt;p&gt;@zesterer lives up to his name by bringing some extra flavours to the vroom glider. These visual and acoustic updates are perfect for giving that extra bit of flare to your squadron&#x27;s next airshow.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-13_zesterer_admin-glider.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-13_zesterer_admin-glider.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The night becomes his canvas&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-19_horblegorble_admin-glider.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-19_horblegorble_admin-glider.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;🔊 A combination light show&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4685&quot;&gt;!4685&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;balancing-acts-for-sword-and-axe&quot;&gt;Balancing acts for sword and axe&lt;&#x2F;h4&gt;
&lt;p&gt;Sword and axe went up on @unii&#x27;s scales of balance:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;I&#x27;ve rebalanced most sword and axe skills, with supervision&#x2F;feedback from @Necti and a few other players. The general changes can be summarized into:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;M1 skills for both sword and axe had their damage significantly increased.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Fine-tuning the damage of most sword&#x27;s adaptable skills for more consistency among them.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Many sword finishers have a lower combo requirement, with some tweaks (mostly nerfs) to their effectiveness to compensate for this fact.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Pommel Strike now deals additional poise damage if the target is blocking.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Most self-buffs received a nerf to their potency. In addition to this, the axe ones have received an increase in their duration.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;A couple of axe skills that granted additional combo per hit (namely, Plunder and Rising Tide), now (partly) do so if they meet certain conditions.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Defiance&#x27;s strength was reduced, with Hammer&#x27;s Tenacity receiving a similar nerf to not overshadow the former for the time being.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Fracture&#x27;s debuff strength was halved.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Axe finishers have received a slight increase to their damage output.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;i&gt;Cleave grants 1 less combo per fully-charged hit, but charges up slightly more quickly in compensation.&lt;&#x2F;i&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4673&quot;&gt;!4673&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4682&quot;&gt;!4682&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;shield-and-sword-go-see-the-animation-doctor&quot;&gt;Shield and sword go see the animation doctor&lt;&#x2F;h4&gt;
&lt;p&gt;Your character&#x27;s wrists can breathe a little easier after animation treatments from @srpapinha.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-13_horblegorble_shield.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-13_horblegorble_shield.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Front over flank, is what my trainer always said&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-13_horblegorble_earthsplitter.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-13_horblegorble_earthsplitter.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Guess it was possible to over-stick a landing&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-13_horblegorble_whirlwind.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-13_horblegorble_whirlwind.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Sharp toward enemy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4688&quot;&gt;!4688&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;a-few-more-sprites-get-freshened-up&quot;&gt;A few more sprites get freshened up&lt;&#x2F;h4&gt;
&lt;p&gt;Hot on his own heels from the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-242&quot;&gt;last devblog&lt;&#x2F;a&gt;, @unii brings us fresh updates to the airship sign, cauldron, and forest house windows.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-03_unii_fresh-sprites.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-03_unii_fresh-sprites.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Don&amp;#x27;t make any sudden movements...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4675&quot;&gt;!4675&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Size and maximisation state of game window now gets saved, by @IBotDEU &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4097&quot;&gt;!4097&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Language-specific &lt;code&gt;fluent&lt;&#x2F;code&gt; terms removed from translations, by @fnetx &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4677&quot;&gt;!4677&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-242&quot;&gt;Previously featured&lt;&#x2F;a&gt; work on barns at the outskirts of towns got merged, by @DungeonLord &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4672&quot;&gt;!4672&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Realignment of tree and entrance for Haniwa Catacomb sites, by @horblegorble &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4681&quot;&gt;!4681&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Vampire castle chests now have the same loot as in Haniwa Catacombs, by @Crabo &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4696&quot;&gt;!4696&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Updated description for hammer&#x27;s pommel strike, by @unii &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4697&quot;&gt;!4697&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;talk-of-the-town&quot;&gt;Talk of the town&lt;&#x2F;h4&gt;
&lt;p&gt;The future is looking much more talkative, with an in-progress branch by @zesterer that lets NPCs explore their more conversational side.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-18_horblegorble_npc-dialogue.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-03-18_horblegorble_npc-dialogue.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;With this newfound voice, travelers may well be looking to put their combat skills to work&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4686&quot;&gt;!4686&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;heightened-alert&quot;&gt;Heightened alert&lt;&#x2F;h4&gt;
&lt;p&gt;After hearing one too many reports of trolls and ogres &#x27;sneaking up&#x27; on townsfolk, @James has been constructing watch towers to give guards a better view.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-12_James_guard-towers-0.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-12_James_guard-towers-0.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Will this put the town at ease?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;community-showcase&quot;&gt;Community showcase&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;frost-gigas-sightings&quot;&gt;Frost Gigas sightings&lt;&#x2F;h3&gt;
&lt;p&gt;Seasoned Gigas hunter @Hrom has compiled a heatmap of 96 sightings on the official server&#x27;s previous map.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-21_Hrom_gigas-heatmap.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-21_Hrom_gigas-heatmap.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A heatmap that&amp;#x27;s cool to the touch&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;concept-art&quot;&gt;Concept art&lt;&#x2F;h3&gt;
&lt;p&gt;First-hand accounts of various explorations in voxel space. A mix of things intended for use in-game, and more experimental ideations.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-XX_hulusi_terracotta-lamp_ice-staff_coin-stacks.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-XX_hulusi_terracotta-lamp_ice-staff_coin-stacks.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;(left to right) | hulusi instrument concept by @Sinari | terracotta lamp by @Supa | ice staff concept by @phoenix13032005 | coin stacks concept by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;events&quot;&gt;Events&lt;&#x2F;h3&gt;
&lt;p&gt;Pre-planned events hosted on the official server (server.veloren.net). You can keep an eye out for future announcements on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;888424036143607809&quot;&gt;discord channel&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;geared-pvp-tournament&quot;&gt;Geared PvP tournament&lt;&#x2F;h4&gt;
&lt;p&gt;Duelists of Veloren pulled out all the stops in a full-gear, (almost) no holds barred 1v1 double elimination tournament. The action took place in a hand-crafted arena from @unii, featuring castle towers and a fighting moat. @Necti handled marketing and event streaming, and in the end emerged as the tournament champion. Speaking after the fighting, with an opponent&#x27;s blood still fresh on her face, @Necti announced a swap from melee to mic for the next PvP event. Here&#x27;s to a captivating career in commentary as Veloren&#x27;s &#x27;Fighting Voice&#x27;.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-06_Iskava_tournament.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-06_Iskava_tournament.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Spectators watch on under vibrant lighting — by @Iskava&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-17_unii_pre-fight-checklist.webm&quot; type=&quot;video&amp;#x2F;webm&quot;&gt;
    
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2024-12-17_unii_pre-fight-checklist.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;@unii runs through the pre-fight checklist&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;4G24ykWvXRY&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;2 hours of PvP action&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Word is @unii has been cooking up his next tournament map, so stay tuned.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-26_Hrom_valley-vista.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-26_Hrom_valley-vista.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A valley vista catches the sun&amp;#x27;s last rays — by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-07_Alley_Oop_bull-island.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-07_Alley_Oop_bull-island.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Could this be Veloren&amp;#x27;s first ocean megafauna? — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-13_horblegorble_rainy-town.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-13_horblegorble_rainy-town.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Nestled at the foot of a mountain, this woodland town endures the rain — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-29_Sam113_scenic-savannah.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-29_Sam113_scenic-savannah.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A soft breeze carries savannah air into the jungle — by @Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-14_Alley_Oop_gnarlings-missed-a-tree.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-14_Alley_Oop_gnarlings-missed-a-tree.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Gnarling&amp;#x27;s called a truce with this giant tree — by @Alley_Oop&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-27_VorTechnix_sunset-gliding.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-27_VorTechnix_sunset-gliding.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Who knew gliders made such good picture frames? — by @VorTechnix&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-02-22_necti_steep-road.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-02-22_necti_steep-road.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Site generation delivers us an ambitious skate ramp — by @Necti&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-17_horblegorble_tavern-views.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-17_horblegorble_tavern-views.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tavern views in evening lighting — @horblegorble&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-30_And_i_merry-moongazing.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2024-12-30_And_i_merry-moongazing.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Last year&amp;#x27;s merry moon gazing — by @And_i&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;







&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-21_unii_sporia-band.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;screenshots&amp;#x2F;2025-01-21_unii_sporia-band.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Another impromptu band takes the stage in Sporia — by @unii&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-21_Defo_character-art.webp&quot;
  target=&quot;_blank&quot;
  style=&quot;text-align: center;&quot;&gt;
    &lt;img loading=&quot;lazy&quot;
    
    
    
    
    src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;243&amp;#x2F;2025-01-21_Defo_character-art.webp&quot;&gt;
  &lt;&#x2F;a&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;
An artistic sendoff from @Defo&amp;#x27;s elven character. Stay jolly out there :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;243&#x2F;2025-01-14_unii_serene-crossing.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 242</title>
          <pubDate>Wed, 25 Dec 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-242/</link>
          <guid>https://veloren.net/blog/devblog-242/</guid>
          <description>&lt;p&gt;The last few weeks we&#x27;ve been busy preparing for the release party, so here&#x27;s a recap with everything that&#x27;s happened in veloren during this time.&lt;&#x2F;p&gt;
&lt;p&gt;- Crab, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed to veloren these last weeks: @miocore, @DaforLynx, @Vaga, @do-no-van, @Necti, @uniior, @Hrom, @DungeonLord, @floppy, @isse, @crab, @Tarhun, @NeuralModder, @Hgrebnednav and @horblegorble.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the weblate contributors who contributed these last weeks: @Alerty, @ArDu, @Blesk, @bov, @crab, @fnetX, @Janez, @jecasadiego, @Jungso, @l3nemy, @loglizzy, @NeonLife, @Positron832, @spartan195, @StartaBafras, @sungbinma, @ttanesque, and @Zerotha.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;downed-state-by-isse&quot;&gt;Downed State, by @isse&lt;&#x2F;h4&gt;
&lt;p&gt;As preparations for the ongoing respawn rework RFC (linked &lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-242&#x2F;#rfc-discussions&quot;&gt;here&lt;&#x2F;a&gt;), humanoids will now enter a &#x27;downed&#x27; state instead of being killed. In this downed state, entities are still vulnerable and can only move slowly while being unable to attack, interact, or make any inventory modifications. Nearby NPCs or players can help downed entities out of this state again.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;downed_state.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4656&quot;&gt;!4656&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;snow-sprite-variations-by-green12-hrom-and-do-no-van&quot;&gt;Snow Sprite variations, by @Green12 @Hrom and @do-no-van&lt;&#x2F;h4&gt;
&lt;p&gt;@Green12 made a set of snowy sprite variations, which @Hrom created a MR for and @do-no-van added an attribute to the existing sprites to define whether to use the snowy or non-snowy variant.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;snow_sprites.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The snowy sprites rendered in MagicaVoxel. Note: The hanging tree leave sprites couldn&amp;#x27;t be implemented yet.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4605&quot;&gt;!4605&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;attack-timing-balance-and-frost-gigas-summon-rework-by-necti&quot;&gt;Attack timing balance and Frost Gigas summon rework, by @Necti&lt;&#x2F;h4&gt;
&lt;p&gt;The Frost Gigas will now spawn 2 (larger) summons instead of a bunch, which got a reworked skill set and attack AI. This MR also slowed down the attack recovery duration for most entities, which should make it easier to land more hits between dodging and blocking incoming attacks.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4666&quot;&gt;!4666&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sprite-model-updates-by-uniior&quot;&gt;Sprite model updates, by @uniior&lt;&#x2F;h4&gt;
&lt;p&gt;Another nice set of updated sprites:&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;crate.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The updated crate model rendered in MagicaVoxel&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;anvil.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The updated anvil model, the easter egg is still present ;)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;crafting_bench.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4665&quot;&gt;!4665&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4660&quot;&gt;!4660&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;adding-a-sprite-attribute-to-determine-fence-adjacency-by-dungeonlord&quot;&gt;Adding a sprite attribute to determine fence adjacency, by @DungeonLord&lt;&#x2F;h4&gt;
&lt;p&gt;Instead of there being one separate sprite for each possible fence adjacency, there is now only one fence sprite with an adjacency attribute defining which model to use. This should make it easier to add more sprite style variants in the future too.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4661&quot;&gt;!4661&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;banjo-instrument-by-floppy-and-sinari&quot;&gt;Banjo instrument, by @floppy and @Sinari&lt;&#x2F;h4&gt;
&lt;p&gt;A new crafted instrument, model by @Sinari and the audio by @floppy:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;banjo-23.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4658&quot;&gt;!4658&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;make-empty-town-generation-less-likely-by-tarhun&quot;&gt;Make empty town generation less likely, by @Tarhun&lt;&#x2F;h4&gt;
&lt;p&gt;Most towns will now generate an initial plaza, which should remove many cases where towns don&#x27;t generate with any buildings at all. There are still a few edge cases but we are working on getting rid of those too 🛠️.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4646&quot;&gt;!4646&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;add-an-indicator-on-learned-recipe-items-by-hgrebnednav&quot;&gt;Add an indicator on learned recipe items, by @Hgrebnednav&lt;&#x2F;h4&gt;
&lt;p&gt;To no longer accidentally trade a recipe you already know from a merchant or player, recipes will now indicate if you have or haven&#x27;t learned a recipe yet in the item hover tooltip:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;learned_indicator.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4652&quot;&gt;!4652&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;upgrading-iced-and-other-dependencies-in-airshipper-by-neuralmodder&quot;&gt;Upgrading &lt;code&gt;iced&lt;&#x2F;code&gt; and other dependencies in Airshipper, by @NeuralModder&lt;&#x2F;h4&gt;
&lt;p&gt;Airshipper received many dependency updates, including &lt;code&gt;iced&lt;&#x2F;code&gt;, which should fix a few graphics issues some people were having with the launcher. In addition the caching system now automatically removes images which are no longer needed to save disk space.&lt;&#x2F;p&gt;
&lt;p&gt;Note that these changes haven&#x27;t been included in an Airshipper release yet, but they will hopefully soon be.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;airshipper&#x2F;-&#x2F;merge_requests&#x2F;164&quot;&gt;airshipper!164&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;fix-being-unable-to-cast-abilities-when-wallrunning-by-miocore&quot;&gt;Fix being unable to cast abilities when wallrunning, by @miocore&lt;&#x2F;h4&gt;
&lt;p&gt;Instead of getting stuck in an equip-unequip cycle when trying to use abilities while wallrunning, you can once again use abilities as one would expect.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4662&quot;&gt;!4662&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;item-price-and-availability-balance-by-uniior&quot;&gt;Item price and availability balance, by @uniior&lt;&#x2F;h4&gt;
&lt;p&gt;Merchants will no longer sell late-game materials such as sunsilk, diamonds and other high tier gems. In addition the price of other materials has been rebalanced to better fit the recent loot changes.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4657&quot;&gt;!4657&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;more-changes&quot;&gt;More changes:&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Fixing a typo and the flurry ability icon not showing when not in agility stance, by @Vaga &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4670&quot;&gt;!4670&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Legoom sounds, by @GeekyGami and @DaforLynx &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4655&quot;&gt;!4655&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fixing the hammer&#x2F;axe block animation, by @miocore &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4669&quot;&gt;!4669&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Updating &lt;code&gt;rustls&lt;&#x2F;code&gt; and &lt;code&gt;idna&lt;&#x2F;code&gt; to address RUSTSEC advisories, by @crab &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4668&quot;&gt;!4668&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Updating dependencies, by @NeuralModder &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4653&quot;&gt;!4653&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fix RTsim NPCs dying permanently, by @crab &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4650&quot;&gt;!4650&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;p&gt;@DungeonLord is working on a new Barn structure:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;barns_1.webp&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;The inside of a barn with cattles&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;barns_2.webp&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;Barns generating in a coastal town&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Tarhun is making airships actually &lt;em&gt;dock&lt;&#x2F;em&gt; at docks:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;airship_docking.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@uniior is working on balancing Axe ⚖️&lt;&#x2F;p&gt;
&lt;p&gt;@do-no-van is working on a fishing mechanic. Still awaiting some #game-design discussion, but here&#x27;s an early preview:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;fishing.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rfc-discussions&quot;&gt;RFC discussions&lt;&#x2F;h3&gt;
&lt;p&gt;As a result of a few cyclic arguments in the game design chat, we&#x27;re trying to move most game desing discussions off to RFCs. Here are the ones which were discussed this month (more to be opened soon):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Respawn rework, by @isse &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;merge_requests&#x2F;46&quot;&gt;rfcs!46&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DRAFT&lt;&#x2F;strong&gt;: Removing&#x2F;Deprecating the general combat skill tree, by @DaforLynx &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;merge_requests&#x2F;45&quot;&gt;rfcs!45&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;events&quot;&gt;Events&lt;&#x2F;h2&gt;
&lt;p&gt;@Necti hosted a sword PvP tournament on the official server in an arena made by @uniior.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;sword_pvp_1.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The beautiful arena made by @uniior&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;sword_pvp_2.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;And the winner was 🥁 Necti, who would&amp;#x27;ve thought...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;More events will follow up soon ;)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;cacti.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Cheap rng creating some patterns again...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;image.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Distant town LoD&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;snow_lake.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;2024-12-16_11-26-36.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;screenshot_1733405638337.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;meow :3&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;screenshot_1733913176914.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;screenshot_1734657767920.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An adlet hideout in the wild&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;screenshot_1734966787003.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;242&amp;#x2F;screenshots&amp;#x2F;christmas_event.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The christmas event started again! See you in the next post :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;242&#x2F;banner.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.17 Release</title>
          <pubDate>Wed, 25 Dec 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-17/</link>
          <guid>https://veloren.net/blog/release-0-17/</guid>
          <description>&lt;h2 id=&quot;0-17-release&quot;&gt;0.17 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is finally releasing 0.17! It has been 9 months since 0.16 was released so there has been a lot of work put into this version.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;b&gt;18:00 GMT on December 28th&lt;&#x2F;b&gt;, make sure to join the release party.
On the side, you can also watch the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=kgK58NuBrXc&quot;&gt;release party dev stream&lt;&#x2F;a&gt;, where we&#x27;ll be chatting with devs about what went into this version.&lt;&#x2F;p&gt;
&lt;p&gt;To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an account&lt;&#x2F;a&gt;,
then launch the game and hop on the default server. See you there!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-in-this-release&quot;&gt;New in this release&lt;&#x2F;h3&gt;
&lt;p&gt;Here are some of the changes in this release:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Hammer skill tree rework.&lt;&#x2F;li&gt;
&lt;li&gt;Recipe system.&lt;&#x2F;li&gt;
&lt;li&gt;New enemies: Hydra, Karkatha, Cactids, Goblins and Legooms.&lt;&#x2F;li&gt;
&lt;li&gt;Dungeon reworks completed: Cultist, Myrmidon, Sahagin.&lt;&#x2F;li&gt;
&lt;li&gt;New worldgen structures: Terracotta, Dwarven Mines and Vampire Castle dungeons; farm plots, more airship docks, glider courses.&lt;&#x2F;li&gt;
&lt;li&gt;Plugins can now define NPCs.&lt;&#x2F;li&gt;
&lt;li&gt;Airshipper will now display the player counts on the server browser.&lt;&#x2F;li&gt;
&lt;li&gt;Switched audio framework to Kira.&lt;&#x2F;li&gt;
&lt;li&gt;Many balance improvements.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;As always, there are always more changes than we can add to a single post!
You can check out the full changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#0170-2024-12-28&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this versions contributors (in random order):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;HEIEnthusiast, Hrom, Benoît du Garreau, Christof Petig, Tomodachi94, uniior, floppy, daniel, walpo, Uniior, xmac, NeuralModder, Skygrango, Sam, Vaga, Isse, Matthew Searle, crab, Kira Lu, ryan necti, fnetX, Thibagon, Gemu, DungeonLord, Jungso, Treeco, James Melkonian, DaforLynx, crab, Dmitry Kashitsyn, Imbris, coffee-compiler, Necti, zesterer, Aidar Shaikhiev, LunarEclipse, Tarhun, Hgrebnednav, do-no-van, Papinha, miocore, Thomas S, ArDu, horblegorble, Janez, Sylv and fotkurz.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Thanks as well to all the weblate contributors who contributed to this release (in random order):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;fnetX, nwildner, Kretka, walpo, zerocraft, Janez, Blesk, polauf, Positron832, Karaya, GGTheTranslator, bov, Jungso, Tibo-Mouss, NeoSlugman, ArDu, LS-Localicows, ttanesque, perospirone, nokoe, coffee-compiler, metamuffin, CodeVlogs, hurzelchen, Enlive, 2b33rs, fvasco, Zughy, kanym, l3nemy, Zerothas, sungbinma, kurtinge, loglizzy, Thiagod86, dyegomb, PurpleDev, FelipePardim, arthuradolfo, rmorettibr, RyanOrigins, evgenkot, lucius_pilgrim, masta0f1eave, emberman, MaxSoniX, Furrior, Daxik2x, Paw, Sovenok-Hacker, LagerJack, NeonLife, Alerty, Alderador, spartan195, crab, jecasadiego, guillermytho, vilmasvensson, StartaBafras, Sinari, Akumo33 and Witch.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one for this
release!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;release-0-17&#x2F;banner.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These weeks in Veloren 241</title>
          <pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-241/</link>
          <guid>https://veloren.net/blog/devblog-241/</guid>
          <description>&lt;p&gt;There have been many changes this month, most notably: Switching audio frameworks, myrmidon rework, procedural glider courses, water splashes, farms, cactids, legooms ... yeah this is getting a bit long, just read the blog :P&lt;&#x2F;p&gt;
&lt;p&gt;- Crab, TWiV contributor (and since recently a Core Developer too 🦀)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed this month: @daniel, @Sam, @uniior, @isse, @imbris, @zesterer, @horblegorble, @DungeonLord, @necti, @crab, @floppy, @do-no-van, @DaforLynx, @James, @Hgrebnednav and @fotkurz.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to all translators who contributed to weblate this month: @StartaBafras, @Positron832, @Zerothas, @l3nemy, @bov, @Janez, @Thiagod86 and @Vilma !&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;new-themed-airship-dock-variants-by-floppy&quot;&gt;New themed airship dock variants, by @floppy&lt;&#x2F;h4&gt;
&lt;p&gt;Towns other than the default settlements now have their own airship dock variants too. As airship captains haven&#x27;t learned to actually land on them yet, the docks have temporary &#x27;Service Interrupted!&#x27; signs.&lt;&#x2F;p&gt;
&lt;p&gt;A few sample screenshots:&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;airship_dock_1.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A desert airship dock&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;airship_dock_2.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A clifftown airship dock&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4643&quot;&gt;!4643&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;procedural-glider-courses-by-james&quot;&gt;Procedural glider courses, by @James&lt;&#x2F;h4&gt;
&lt;p&gt;After a long wait in the review queue, the glider courses have finally been merged! Initially part of a manually placed release party event, glider courses will now generate procedurally near mountain peaks and are a fun gliding challenge :)&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;glider_course.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4568&quot;&gt;!4568&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;swapping-audio-frameworks-by-daforlynx&quot;&gt;Swapping Audio Frameworks, by @DaforLynx&lt;&#x2F;h4&gt;
&lt;p&gt;In the past week or two I&#x27;ve been working on porting the audio framework Veloren uses from Rodio to Kira. There are a few reasons for doing this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rodio has a few bugs, like spatial sound glitching out&lt;&#x2F;li&gt;
&lt;li&gt;Rodio is not built explicitly for games, meaning we have to build a lot of systems in our own janky way&lt;&#x2F;li&gt;
&lt;li&gt;Rodio is incapable of handling DSP effects in a dynamic way&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Kira has turned out to be very good as a game audio framework, chiefly because that&#x27;s what it was built to be.&lt;&#x2F;p&gt;
&lt;p&gt;At first, when I decided on doing this a year ago, this endeavor was going to be a simple port - wherever Rodio calls are made, replace them with Kira calls, that sort of thing. However, after experimenting with Kira on my own, I quickly found out that it would not be so simple.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;rodio-vs-kira&quot;&gt;Rodio vs Kira&lt;&#x2F;h5&gt;
&lt;p&gt;Rodio is very simple, at least from my reading. You read sound data, perform alterations such as effects, and append them to a sink&#x27;s queue. Each sink has a separate queue with its own volume and state. Each sink feeds into a single stream which is then output through cpal.&lt;&#x2F;p&gt;
&lt;p&gt;Kira is markedly different. Cpal is still used as a backend, but the framework around it is more complex. It&#x27;s sort of component-based. A manager is responsible for playing sounds through either a track or an emitter. Tracks can be routed to other tracks, but all tracks and emitters are eventually routed to one main track. A single track can output multiple sounds at a time, but has effectively no control over each sound.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, sounds are routed to a destination per sound. Additional data can be held by an individual sound, including its amplitude and looping parameters. Every component - sound, emitter, track, manager, and more - should be tracked by Voxygen&#x27;s systems.&lt;&#x2F;p&gt;
&lt;p&gt;Nearly every function in Kira uses a tween. This allows the audio to be shaped over time, instead of instantly. For example, when you &lt;code&gt;stop()&lt;&#x2F;code&gt; a sound, you can have it happen instantly, or fade it out over a duration. Tweens make things much easier and simpler, but their lack of transparency can lead to problems.&lt;&#x2F;p&gt;
&lt;h6 id=&quot;kira-requires-some-rewriting&quot;&gt;Kira requires some rewriting&lt;&#x2F;h6&gt;
&lt;p&gt;These features, and many more, mean the entire audio system has to be pretty much rewritten if I want to take advantage of them. All the handles for things like tracks, sounds, effects, etc. must be tracked. Our current &quot;channel&quot; structure is actually perfect for this - they are abstract structures which the engine uses to allocate sounds. I have each channel &quot;hold&quot; a track (they only really store the handles; the actual data is held by Kira&#x27;s manager) routed to the main track, as well as all the needed handles. I have to construct sounds in a way that allows them to be &lt;code&gt;play&lt;&#x2F;code&gt;ed by the manager, instead of the channel, as well as potentially be altered while playing. Therefore, I make it so, as with the current system, each channel can have one sound at a time routed to its track, and holds the handle to its sound.&lt;&#x2F;p&gt;
&lt;p&gt;Instead of our bespoke &lt;code&gt;Fader&lt;&#x2F;code&gt; system, I can simply use adjustable tweens to smoothly control volume. Sounds cannot be easily appended to each other any more, so I have to rewrite our looping and transition systems. Luckily, Kira has yet more features to replace these. You see the picture forming?&lt;&#x2F;p&gt;
&lt;p&gt;The scope of the experiment has ballooned from simply making things play through Kira, instead of Rodio, to rewriting the audio system to take advantage of Kira&#x27;s game-focused features. This means my dream of making Voxygen&#x27;s audio system completely framework-agnostic is trashed, but I think that&#x27;s a worthy sacrifice for cleaner and more performant audio code. In any case, the audio module as a whole can still be completely swapped out for a new one if a developer chooses.&lt;&#x2F;p&gt;
&lt;p&gt;Among the rewrites, I updated the way some Voxygen features work:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Ambience does not have to be just looping audio. This means the thunder sounds that correspond to lightning are now controlled by the ambience volume slider, instead of the UI volume slider. Yes, thunder was technically a UI sound before.&lt;&#x2F;li&gt;
&lt;li&gt;Instead of performing DSP on sounds before they are played, I route their outputs to a track with dynamic effects. This means ambience is now affected by the filter as well, and longer sound effects can be filtered while playing. In the future, there is great potential to have spatial reverb (courtesy of Kira) based on the camera&#x27;s position (this is probably what I&#x27;m most excited to implement).&lt;&#x2F;li&gt;
&lt;li&gt;Looping audio such as ambience is handled entirely by Kira, meaning no more awkward split-second gaps between the sound ending and beginning.&lt;&#x2F;li&gt;
&lt;li&gt;Instead of the length of the gap between music tracks being decided when a track is played, it is now decided when a track ends. The entire music transition system was rewritten, and as such it doesn&#x27;t really...work that well. I plan on fully rewriting it soon. So as of now combat music is disabled (not that it would play anywhere as of recently when all the legacy dungeons were removed).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;On that note, here are some of my plans for features coming soon™:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Redo the river ambience system to be less bad, mainly by making it ambience instead of spatial sfx.&lt;&#x2F;li&gt;
&lt;li&gt;Redo the music system so 1) it actually works as intended and 2) combat music is less scuffed. After that I can work in music layering for the full combat music system.&lt;&#x2F;li&gt;
&lt;li&gt;Also, dynamic music. Things like pausing&#x2F;fading down when diegetic music is playing, stopping and starting new tracks in certain situations, maybe even changing entirely how music is categorized.&lt;&#x2F;li&gt;
&lt;li&gt;Listener-based reverb and occlusion. I&#x27;ve been researching modern methods of doing this sort of thing, but it&#x27;ll be difficult implementing it for a non-static procedural game such as Veloren. The current methods are for games with set level design with defined room volumes...never mind. But the possibility exists now!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;But you can expect these to be implemented in anywhere from two months to four years.&lt;&#x2F;p&gt;
&lt;p&gt;Huge kudos to @crab for implementing sound streaming and @isse for refactoring and fixing my code.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4627&quot;&gt;!4627&lt;&#x2F;a&gt;
(fixes and follow-ups: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4649&quot;&gt;!4649&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4641&quot;&gt;!4641&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4639&quot;&gt;!4639&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;h4 id=&quot;stealing-items-owned-by-villagers-by-isse&quot;&gt;Stealing items owned by villagers, by @isse&lt;&#x2F;h4&gt;
&lt;p&gt;Taking resources from the village inhabitants who worked relentlessly to obtain them (&lt;del&gt;no they didn&#x27;t, lazy bunch of rtsim npcs&lt;&#x2F;del&gt;) will now get mad at you for committing thief.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;angydontsteal.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4637&quot;&gt;!4637&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4642&quot;&gt;!4642&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;water-splashes-and-river-particles-by-isse&quot;&gt;Water splashes and river particles, by @isse&lt;&#x2F;h4&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;splishsplosh.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Splish splosh!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4640&quot;&gt;!4640&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;toggle-to-show-all-recipes-in-the-crafting-menu-by-sam-and-isse&quot;&gt;Toggle to show all recipes in the crafting menu, by @Sam and @isse&lt;&#x2F;h4&gt;
&lt;p&gt;A common problem with recipes was new players no longer being able to decide whether an item was worth keeping by checking which other items could be crafted with it by searching &lt;code&gt;input:item name&lt;&#x2F;code&gt; in the crafting menu, if not all recipes have been obtained yet. The newly added toggle allows using this feature without limitations again.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4601&quot;&gt;!4601&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;myrmidon-rework-by-floppy&quot;&gt;Myrmidon rework, by @floppy&lt;&#x2F;h4&gt;
&lt;p&gt;And with that, the last old style dungeon has been removed from the map 🎉 Unlike other reworked dungeons, this one went with more of an open design, which created some beautiful results :)&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;myrmidon.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;myrmidon_maze.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The underground maze of the myrmidon dungeon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4606&quot;&gt;!4606&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;enabling-cactids-by-floppy&quot;&gt;Enabling cactids, by @floppy&lt;&#x2F;h4&gt;
&lt;p&gt;Cactids have been present in the codebase for a long time it seems, but they weren&#x27;t set to spawn in the world. Thanks @floppy for finishing- and giving them a loot table ♥️&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;cactid.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The cactid model&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4631&quot;&gt;!4631&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;farm-plots-by-dungeonlord-and-zesterer&quot;&gt;Farm plots, by @DungeonLord and @zesterer&lt;&#x2F;h4&gt;
&lt;p&gt;A plot we missed a lot from &lt;code&gt;site1&lt;&#x2F;code&gt;, farms are back once again!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;farm_legoom.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A legoom at a sunflower farm :legoom:&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4567&quot;&gt;!4567&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;legooms-and-goblins-by-gemu-and-floppy&quot;&gt;Legooms and Goblins, by @Gemu and @floppy&lt;&#x2F;h4&gt;
&lt;p&gt;To balance out the large pool of late game enemies in the game, @Gemu and @floppy have been working on adding various smaller opponents more balanced for new players, here being some of the latest examples:&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;goblin.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Goblins can be found in caves and plains&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;legoom_red.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Legooms spawn in newbie areas such as temperate woods, plains and rainforests&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4622&quot;&gt;!4622&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4626&quot;&gt;!4626&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;overhaul-stat-scaling-of-armor-by-uniior&quot;&gt;Overhaul stat scaling of armor, by @uniior&lt;&#x2F;h4&gt;
&lt;p&gt;Player armor stats were rebalanced to closer match the recent balance changes done to weapons.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4494&quot;&gt;!4494&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4648&quot;&gt;!4648&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tracking-health-of-entities-in-rtsim-by-isse&quot;&gt;Tracking health of entities in RTSim, by @isse&lt;&#x2F;h4&gt;
&lt;p&gt;RTSim entities now remain at the same health percentage when loaded&#x2F;unloaded, this was done in preparations for reworking our spawn system (still under discussion).&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4644&quot;&gt;!4644&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;halloween-event-tweaks-by-crab&quot;&gt;Halloween event tweaks, by @crab&lt;&#x2F;h4&gt;
&lt;p&gt;I introduced a new event item for halloween, Scarlet Spectacles, which turn your eyes into a red glow for a bit of extra precision power:&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;scarlet_spectacles.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Scarlet Spectacles&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;halloween.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This change also made Bloodservants and Strigoi from the Vampire Castle spawn in the wild during the event, which I thought would be quite fitting :)&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4614&quot;&gt;!4614&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;changes-made-due-to-recent-moderation-incidents-by-crab&quot;&gt;Changes made due to recent moderation incidents, by @crab&lt;&#x2F;h4&gt;
&lt;p&gt;This month hasn&#x27;t been short on &lt;em&gt;✨interesting and new✨&lt;&#x2F;em&gt; moderation incidents, most notably: We got hit by an automated spam attack on the official server.&lt;&#x2F;p&gt;
&lt;p&gt;To counter this, the 2 year old IP banning MR &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;3363&quot;&gt;!3363&lt;&#x2F;a&gt; a combined effort by @zesterer, @imbris, @isse and @crab) was rebased, the remaining comments addressed and merged, finally! More mitigations against future spam attacks are also on the way (see &#x27;email verification&#x27; in &lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-241&#x2F;#ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;A few other changes that were implemented to mitigate and help moderate client-authoritative physics abuse:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to the client-side physics anticheat &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4611&quot;&gt;!4611&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Silent spectator mode for moderators &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4608&quot;&gt;!4608&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
Allows moderators to log on silently without emitting any login&#x2F;logout messages or appearing on the player list. If you moderate any server and want to make use this, add the following environment variable in Airshipper &lt;code&gt;VELOREN_CLIENT_TYPE=silent_spectator&lt;&#x2F;code&gt;, don&#x27;t forget to undo this when you want to play normally again!&lt;&#x2F;li&gt;
&lt;li&gt;Persisting server authoritative physics &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4211&quot;&gt;!4211&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Expose the duration of bans to clients &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4616&quot;&gt;!4616&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;mindflayer-fight-rework-by-floppy&quot;&gt;Mindflayer fight rework, by @floppy&lt;&#x2F;h4&gt;
&lt;p&gt;After being moved into the new dungeon, the old mindflayer attack patterns were not very fitting anymore. With testing help from @necti a new strategy was created which was better adapted to the new environment.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;The video for this one was lost, sorry :(&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4625&quot;&gt;!4625&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;More changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to sprite models, by @uniior and @Supa &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4635&quot;&gt;!4635&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Ensuring every house has a bed, by @fotkurz &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4609&quot;&gt;!4609&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Riposte and defensive stance balance, by @necti &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4634&quot;&gt;!4634&lt;&#x2F;a&gt; and @do-no-van &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4526&quot;&gt;!4526&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Making sceptres use the default equip&#x2F;unequip SFX, by @horblegorble &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4628&quot;&gt;!4628&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Make Iron Tempest (Hammer ability) multi-target, by @necti &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4633&quot;&gt;!4633&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Adding missing changelog entries, by @horblegorble &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4624&quot;&gt;!4624&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4615&quot;&gt;!4615&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Various cheesing fixes, by @floppy &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4621&quot;&gt;!4621&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4620&quot;&gt;!4620&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Adding a deletion timeout for all sprite summon abilities, by @horblegorble &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4630&quot;&gt;!4630&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fixing the mod badge location in group and faction chats, by @Hgrebnednav &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4636&quot;&gt;!4636&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Removing the code used to render old dungeons, by @floppy &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4613&quot;&gt;!4613&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work&lt;&#x2F;h3&gt;
&lt;p&gt;@floppy is working on a Fire Gigas.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;fire_gigas.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Tarhun is working on reducing the chance for towns to generate without any plots. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4646&quot;&gt;!4646&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;@uniior is working on an updated fence (gate) sprite.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;fence_gate.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@crab Is working on adding email verification to authentication servers.&lt;br &#x2F;&gt;
This has been long overdue, but comes with a few challenges such as requiring a captcha for account creation. On the bright side, once this is implemented, password resetting can be implemented too!&lt;&#x2F;p&gt;
&lt;p&gt;@floppy, @Supa and @Gemu have been working on creating a consistent set of themed sprite variants for all town kinds.&lt;&#x2F;p&gt;
&lt;p&gt;@GeekyGami is working on custom SFX for legooms.&lt;&#x2F;p&gt;
&lt;p&gt;@Supa is working o updating the pumpkin sprites.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;pumkins.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;pvp-event-on-the-official-server&quot;&gt;PvP event on the official server&lt;&#x2F;h3&gt;
&lt;p&gt;@necti will be hosting a Bow PvP event on the official server at 19:00 GMT this Sunday (2024-11-17) in a custom arena. For more info check the discord &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;888424036143607809&quot;&gt;announcement&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;bow_pvp_map.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;cave_mushroom.webp&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;A large glowing mushroom inside a cave&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;coastal_town_tower.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new coastal town airship docks&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1727806169833.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1729640037874.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A neat bridge found on the official server&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1729909110274.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1729990125676.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1730322979507.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Radio voice: Heavy rainfalls have caused floodings in the nearby Myrmidon site, please ensure you are carrying appropriate equipment before entering the facility...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1730389073984.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1731099564461.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;These NPC dialogues sure sound menacing...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1731191078298.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;meow :3&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;screenshot_1731214640956.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Scary fish in veloren seas&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;241&amp;#x2F;screenshots&amp;#x2F;pool_party.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pool party at the main town. See you in the next one!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;241&#x2F;banner.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>These Weeks in Veloren 240</title>
          <pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-240/</link>
          <guid>https://veloren.net/blog/devblog-240/</guid>
          <description>&lt;p&gt;This month has been very active with many contributions from many contributors! The blog post is being published a bit delayed but hopefully you still enjoy reading the recap :)&lt;&#x2F;p&gt;
&lt;p&gt;- Crab, another TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to everyone who contributed this month: @uniior, @isse, @skygrango, @Gemu, @Supa, @isse, @fnetX, @floppy, @horblegorble, @Papinha, @imbris, @xMAC, @crab, @do-no-van, @Christof and @Thibagon !&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to all translators who contributed on weblate this month: @fnetX, @Janez, @polauf, @bov, @Jungso, @nokoe, @metamuffin, @CodeVlogs, @Enlive, @coffee-compiler, @2b33rs, @Zughy, @kanym, @evgenkot, @lucius_pilgrim, @Paw, @guillermytho, @Positron832, @Sinari and @Akumo33.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merged-work&quot;&gt;Merged work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;vampire-castles-by-floppy&quot;&gt;Vampire Castles, by @floppy&lt;&#x2F;h4&gt;
&lt;p&gt;A new vampire-themed T4 dungeon, the worldgen is impressive as always :D&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;vampire_castle_1.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;vampire_castle_2.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4473&quot;&gt;!4473&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;transform-on-death-effect-by-crab&quot;&gt;Transform on death effect, by @crab&lt;&#x2F;h4&gt;
&lt;p&gt;NPCs can now be configured to transform into another entity on death, the vampire castle boss and fake terracotta cursekeepers are already making use of this for multi-stage bosses!&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4581&quot;&gt;!4581&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;lod-object-rotations-by-isse&quot;&gt;LoD object rotations, by @isse&lt;&#x2F;h4&gt;
&lt;p&gt;Originally intended to be used for procedural glider course LoD models, this allows rotating LoD models in steps of 90 degrees. Currently only trees are randomly rotated, but we also want to make other plot LoD models rotate correctly in future, such as the Haniwa dungeon wich is one of the most notable ones.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4589&quot;&gt;!4589&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;jet-engine-model-by-horblegorble&quot;&gt;Jet engine model, by @horblegorble&lt;&#x2F;h4&gt;
&lt;p&gt;The &lt;em&gt;Vroom&lt;&#x2F;em&gt; admin glider added by @juliancoffee finally has it&#x27;s own model now!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;vroom_glider.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4452&quot;&gt;!4452&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;spot-command-by-isse&quot;&gt;&lt;code&gt;&#x2F;spot&lt;&#x2F;code&gt; command, by @isse&lt;&#x2F;h4&gt;
&lt;p&gt;Another command making testing changes easier 🎉. It works similar to the &lt;code&gt;&#x2F;site&lt;&#x2F;code&gt; command, but as spots are not named this command takes a spot kind instead and teleports you to the nearest one.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4597&quot;&gt;!4597&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;hardcore-characters-by-do-no-van&quot;&gt;Hardcore characters, by @do-no-van&lt;&#x2F;h4&gt;
&lt;p&gt;Think veloren is too easy and want something more challenging? This is for you! Players can now choose to make new characters hardcore, dying now means loosing your character.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4571&quot;&gt;!4571&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;kora-instrument-by-floppy-and-supa&quot;&gt;Kora instrument, by @floppy and @Supa&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;kora.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Model of the new Kora instrument&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4585&quot;&gt;!4585&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;kit-recipes-command-by-uniior&quot;&gt;&lt;code&gt;&#x2F;kit recipes&lt;&#x2F;code&gt; command, by @uniior&lt;&#x2F;h4&gt;
&lt;p&gt;This command mostly helps with testing, but if you&#x27;re playing on singleplayer and aren&#x27;t satisfied with the recipe system you can use it there too. Other ways of obtaining recipes that don&#x27;t require grinding dungeons are also being discussed :)&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4598&quot;&gt;!4598&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;karkatha-by-floppy-and-gemu&quot;&gt;Karkatha, by @floppy and @Gemu&lt;&#x2F;h4&gt;
&lt;p&gt;The Sahagin dungeon got a new boss, Karkatha 🦀. Tidal Warrior was moved one floor below and is now a miniboss with a reworked skill set.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;karkatha.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Karkatha waiting for its prey in the sahagin dungeon boss room&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;karkatha_summon.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Karkatha&amp;#x27;s summons, Soldier crabs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;tidal_warrior.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tidal Warrior got downgraded to a miniboss :&amp;#x2F;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4590&quot;&gt;!4590&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;player-counts-in-airshipper-by-crab&quot;&gt;Player counts in Airshipper, by @crab&lt;&#x2F;h4&gt;
&lt;p&gt;As announced in &lt;a href=&quot;&#x2F;blog&#x2F;query-serverbrowser-announce&#x2F;&quot;&gt;an earlier blog posts&lt;&#x2F;a&gt;, Airshipper has now released player counts in the server browser! This should make it easier to find a server geographically near you with active players.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s still a handful of server which haven&#x27;t activated the new query system on their servers yet, if you&#x27;re a server owner on the server browser list reading this, please check out the blog linked above.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;airshipper&#x2F;-&#x2F;merge_requests&#x2F;160&quot;&gt;airshipper!160&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;overriding-game-assets-from-airshipper-by-juliancoffee&quot;&gt;Overriding game assets from Airshipper, by @juliancoffee&lt;&#x2F;h4&gt;
&lt;p&gt;I&#x27;ve added a special field in Airshipper settings that allows you to set VELOREN_ASSETS_OVERRIDE (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;env-vars.html#veloren_assets_override&quot;&gt;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;env-vars.html#veloren_assets_override&lt;&#x2F;a&gt;) to make it more visible and hence useful to more people.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, you can now click on a little book icon near this text and environment variables field to go to the link I put above.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;airshipper&#x2F;-&#x2F;merge_requests&#x2F;162&quot;&gt;airshipper!162&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;beam-collisions-by-papinha&quot;&gt;Beam collisions, by @Papinha&lt;&#x2F;h4&gt;
&lt;p&gt;A neat trick to make it appear as if particles collide with terrain, only enabled for beam particles for now due to the cost of having to do one raycast per-particle.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;particle_collisions.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4562&quot;&gt;!4562&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;entity-balance-by-necti&quot;&gt;Entity balance, by @necti&lt;&#x2F;h4&gt;
&lt;p&gt;Improved the balance of most dungeon entities, as well as sword, axe and hammer abilities.&lt;&#x2F;p&gt;
&lt;p&gt;Welcome @necti as our new Balance Lead 🎉&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4586&quot;&gt;!4586&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;golemite-armor-set-and-loot-table-balancing-by-necti&quot;&gt;Golemite armor set and loot table balancing, by @necti&lt;&#x2F;h4&gt;
&lt;p&gt;A new armor set was added, crafted with items dropped from Terracotta and Haniwa enemies. Loot tables were also rebalanced to no longer allow easily skipping progression.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;golemite.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new golemite armor set, shown with the weapon of a terracotta enemy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4600&quot;&gt;!4600&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;npcs-in-plugins-by-christof&quot;&gt;NPCs in plugins, by @Christof&lt;&#x2F;h4&gt;
&lt;p&gt;Another great addition from @Christof to make plugins more useful! Entities, their models and animations can now be defined in plugins. Here&#x27;s an example plugin making use of this: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;tree&#x2F;13074f6e12fafec523fbd9ddc443b82736f3578c&#x2F;plugin&#x2F;examples&#x2F;anim&quot;&gt;plugin&#x2F;examples&#x2F;anim&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4351&quot;&gt;!4351&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;require-multiple-hits-to-mine-gems-and-ores-by-crab&quot;&gt;Require multiple hits to mine gems and ores, by @crab&lt;&#x2F;h4&gt;
&lt;p&gt;This was already announced a while ago, and has finally been merged. Thanks a ton to @Gemu and @Supa for the models, and to @floppy for creating the new pickaxe SFX!&lt;&#x2F;p&gt;
&lt;p&gt;Every ore&#x2F;gem now has a specific number of hits it can take before breaking, every one or two hits (depending on the quality of the ore) the sprite will go into a next &#x27;stage&#x27;, changing the model and having a chance to drop an extra item (increased by the corresponding mining skill).&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;mining.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GitLab:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4266&quot;&gt;!4266&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;More changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Adding missing changelog entries, by @horblegorble&lt;&#x2F;li&gt;
&lt;li&gt;Cheesing fixes for the Vampire castle, by @floppy &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4588&quot;&gt;!4588&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Dependency upgrades, by @xMAC &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4580&quot;&gt;!4580&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4582&quot;&gt;!4582&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Taiwanese translation work, by @skygrango &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4592&quot;&gt;!4592&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fixing errors in translation files, by @Thibagon and @fnetX &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4528&quot;&gt;!4528&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4576&quot;&gt;!4576&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fixing server crashes caused by the &lt;code&gt;&#x2F;buff&lt;&#x2F;code&gt; command, by @crab &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4594&quot;&gt;!4594&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Updating tracy-client to the latest version, by @imbris &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4578&quot;&gt;!4578&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fixing how buff strength is displayed, by @horblegorble &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4574&quot;&gt;!4574&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Updating the contribution guidelines, by @isse &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4529&quot;&gt;!4529&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Improvements to the sprite manifest, by @imbris &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4577&quot;&gt;!4577&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;WGPU fixes and re-enabling shaderc optimizations, by @imbris &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4579&quot;&gt;!4579&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
Fixes an issue on some windows systems with AMD graphics using the Vulkan backend, if this caused any regressions please open an issue on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;new&quot;&gt;GitLab&lt;&#x2F;a&gt; or report it in the discord.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ongoing-unmerged-work&quot;&gt;Ongoing unmerged work:&lt;&#x2F;h3&gt;
&lt;p&gt;The myrmidon dungeon is getting a rework:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;myrmidon_rework_1.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Reworked myrmidon dungeon, by @floppy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@juliancoffee is working on adding &lt;code&gt;LootSpec&lt;&#x2F;code&gt; to &lt;code&gt;SpriteCfg&lt;&#x2F;code&gt;. This will allow specifying separate loot tables for the same sprite kind in worldgen, making it easier to handle keys or other special drops in dungeons without creating more sprites &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4354&quot;&gt;!4354&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;@do-no-van is reworking throwables, they can now be equipped and used like other weapons! &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4593&quot;&gt;!4593&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;throw.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Hromina is working on adding @Green12&#x27;s snow sprites into the game&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;snowsprites.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;cinema.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Gliding at the release party map. Speaking of, when release party?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;gradientsobel.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Someone&amp;#x27;s having fun playing around with experimental shaders!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;large_arrows.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An animation bug creating very large floating arrows&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;nice_bridge.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A very nice bridge found by @isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;messy_bridges.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The architects clearly weren&amp;#x27;t very experienced when they built these...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;screenshot_1727095943937.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;Screenshot_From_2024-10-10_17-49-04.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;screenshot_1727380510816.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bloodmoon bat in the Vampire castle, the form of the first boss stage&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;Screenshot_from_2024-10-02_09-11-35.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Jamming at the central town&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;, where game contributors are always invited to communicate their updates or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;240&amp;#x2F;screenshots&amp;#x2F;stage.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The stage is back, see you in the next one!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;240&#x2F;banner.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Preparing to release server queries in Airshipper</title>
          <pubDate>Mon, 07 Oct 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/query-serverbrowser-announce/</link>
          <guid>https://veloren.net/blog/query-serverbrowser-announce/</guid>
          <description>&lt;p&gt;&lt;strong&gt;Read this if you own a server on the servebrowser list!&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Player counts have been a long-requested feature for the server browser in Airshipper, and we&#x27;re finally close to releasing them!&lt;&#x2F;p&gt;
&lt;p&gt;The query server, which allows for clients to query status information about a server, was already merged 5 months ago. Soon, Airshipper will also make use of it do display more accurate ping information, player counts, version information and the global battlemode.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;query-server-post&amp;#x2F;airshipper_screenshot.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Player counts, server version and battlemode displayed for the servers which already have queries enabled&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;important-info-for-server-owners&quot;&gt;Important info for server owners&lt;&#x2F;h2&gt;
&lt;p&gt;While this feature is enabled by default for new servers, it requires a bit of manual work for existing servers.&lt;&#x2F;p&gt;
&lt;p&gt;If you own a server on the serverbrowser list, please read the following issue on gitlab for more information: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;serverbrowser&#x2F;-&#x2F;issues&#x2F;103&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;serverbrowser&#x2F;-&#x2F;issues&#x2F;103&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You will find a short guide explaining how to enable the query server, please add your comment once it is enabled!&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;- Crab.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;query-server-post&#x2F;crab.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 239</title>
          <pubDate>Sun, 15 Sep 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-239/</link>
          <guid>https://veloren.net/blog/devblog-239/</guid>
          <description>&lt;p&gt;These weeks, we share beautiful monster photos.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @coffee-compiler, @xMAC94x, and @a1phyr, @james, @isse, @do-no-van, @horblegorble, .&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes marking &lt;code&gt;Plain&lt;&#x2F;code&gt; messages explicitly,
renaming &lt;code&gt;spellbook&lt;&#x2F;code&gt; to &lt;code&gt;diary&lt;&#x2F;code&gt;, proper &lt;code&gt;ring&lt;&#x2F;code&gt; initialization and
an assets manager update, a bag vs exit dialog fix, a critical quinn update,
better recipe tooltips, Hydra 🐲🐲🐲, permadeath character option,
more detailed potion descriptions, and translation updates.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;f3662e6a920eb6f1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on figures in plugins, bow rework,
stopping beams at terrain, moon phases, farming,
entity to terrain tethers (grappling hook), gamepad bindings,
a sewer styled dungeon, glider loops, improved climbing, hired NPCs in groups
and vampire castle.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4575&quot;&gt;MR 4575&lt;&#x2F;a&gt;:
@coffee-compiler, @evgenkot, @fnetX, @Furrior, @GGTheTranslator, @hurzelchen, @Javier Pérez,
@Jungso, @Karaya, @LagerJack, @lucius_pilgrim, @Paw, @perospirone, @polauf, @Sinari,
@Sovenok-Hacker, and @2b33rs.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators, as well as to @fnetX for again compiling this lists of contributors.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;@James created more informative tooltips on recipes: 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;2024-09-08-151226_273x236_scrot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Also @James uploaded a nice video of flying a glider course
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;course2_compressed.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;There is ongoing discussion in admin channels on how to cut down the number of trading bots spamming the chat. The motivation is to
avoid the impression to newly joining players that NPCs in the world act weird.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1680631188979.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@DungeonLord &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&#x2F;1279524018478907463&quot;&gt;revived the farming land around towns&lt;&#x2F;a&gt;. See some nice pictures:&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;farms.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;farms2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;farms3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;farms4.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;End of August the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1279422925988036638&#x2F;1279422931801210973&quot;&gt;new airshipper deleted screen shots&lt;&#x2F;a&gt; at start and upgrade, as these images were
stored in the game folder. This is now fixed again.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1685318683383.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Synis is continuing the work on a sewer themed dungeon. @khannibal already created some prototypes
thirty months ago:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;snap2022-02-04-23-31-39.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;snap2022-02-05-17-27-38.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@unii found that sword animations &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450065020878061600&#x2F;1280655735033954346&quot;&gt;get more complex when combined with moving&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;moon2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Supa and @khannibal talked &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450039871650660374&#x2F;1283971671447044117&quot;&gt;barns and cathedral design&lt;&#x2F;a&gt; and shared interesting concepts.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1703553023085.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@xMAX94x found an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;523568428905398283&#x2F;1284956906544300032&quot;&gt;old Veloren 0.1 binary&lt;&#x2F;a&gt; which is still operational:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;m4WBgz9.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Last but not least we got plenty of Hydra star photos:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;hydra1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;hydra2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;in-the-wild.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;hydra4.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;airshipper-call-for-testing&quot;&gt;Airshipper call for testing&lt;&#x2F;h2&gt;
&lt;p&gt;Announced on Sep 10th by @xMAC94x:&lt;&#x2F;p&gt;
&lt;p&gt;Hey folks, anyone here that wants to test the new windows-&quot;an update is available from gitlab&quot;-feature ?&lt;&#x2F;p&gt;
&lt;p&gt;Steps:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Download &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;airshipper&#x2F;-&#x2F;jobs&#x2F;7786807218&#x2F;artifacts&#x2F;browse&quot;&gt;airshipper.exe&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;This airshipper.exe when started should detect that there is a new update available.&lt;&#x2F;li&gt;
&lt;li&gt;If you click install you should be able to successfully install airshipper 0.13.0.&lt;&#x2F;li&gt;
&lt;li&gt;Next time you start (the system installed) airshipper, the 0.13.0 should run.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1726001128599.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Note:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Windows only (Linux and MacOS dont have this feature, don&#x27;t need tests)&lt;&#x2F;li&gt;
&lt;li&gt;The provided download ALWAYS thinks there is a new update, that&#x27;s not a bug, it&#x27;s a feature to test this (the final version will not have this behavior and only update when there is a newer version).&lt;&#x2F;li&gt;
&lt;li&gt;It might make sense to install an older Airshipper from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;veloren&#x2F;Airshipper&#x2F;releases&quot;&gt;github&lt;&#x2F;a&gt; to verify that the install update, really installs 0.13.0&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1726001279315.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1725315027242.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1724597078009.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;239&amp;#x2F;screenshot_1725415251910.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Riders on the storm. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;239&#x2F;screenshot_1726004111794.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 238</title>
          <pubDate>Sat, 24 Aug 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-238/</link>
          <guid>https://veloren.net/blog/devblog-238/</guid>
          <description>&lt;p&gt;These weeks, we learn about upcoming art events and a complex airshipper failure.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @srpapinha, the very prolific @coffee-compiler, @uniior, @crab,
Weblate users, @matsuuii, and @isse.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes freezing potion and effect cancelling, repair button activeness,
chat clear command, remove help window, trade request limitations, updated sword animations,
trading fixes, a translation update, &lt;code&gt;cmd_doc_gen&lt;&#x2F;code&gt; update, command description translation,
chat message length limits, control window translation, case-sensitive admin commands,
more server command translations, &lt;code&gt;test-voxygen&lt;&#x2F;code&gt; build fixes and translating map shapes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on a &lt;code&gt;winit&lt;&#x2F;code&gt; update, glider parcours, melee combo recovery fixes,
a moderation database, adding beds to houses, gamepad bindings, Hydra, nebulas, constellations and moon phases.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4552&quot;&gt;MR 4552&lt;&#x2F;a&gt;:
@CodeVlogs, @coffee-compiler, @dyegomb, @emberman, @evgenkot, @fnetX, @GGTheTranslator, @Jungso,
@l3nemy, @loglizzy, @lucius_pilgrim, @masta0f1eave, @perospirone, @polauf, @Positron832, @Thiagod86,
@Vilma Svensson, and @zerocraft.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators, as well as to @fnetX for compiling this lists of contributors.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;@Synis worked on an updated sewer like dungeon:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1724194684651.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1724254323069.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Gemu posted some inspirational pictures for sewer content &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450064928720814081&#x2F;1274445022292480040&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@And_i posted a dwarven mine video &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;WDgXCqnpauM&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;@Papinha created a video of stopping particles at terrain blocks:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;2024-08-19_19-16-44.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Isse worked on a reworked night sky:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;pretty_night.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@unii created a set of single-handed stone starter weapons:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;starter_weapons.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art-events-and-new-self-subscription-role-by-khannibal&quot;&gt;Art events and new self-subscription role by @khannibal&lt;&#x2F;h2&gt;
&lt;p&gt;Hello Velorians,&lt;&#x2F;p&gt;
&lt;p&gt;We are happy to announce the creation of a new role on our discord: @MeetingPingSquad. It will be used for the announcement of events and gatherings to avoid tagging everyone. In order to receive the role, go into ⁠&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449650270096588810&#x2F;1017410570040905819&quot;&gt;#rules-and-info&lt;&#x2F;a&gt; on our discord and react to the user role message with the corresponding emoji (🧑‍🤝‍🧑 ).&lt;&#x2F;p&gt;
&lt;p&gt;A bimonthly art event will be announced soon after the release of this blog, so make sure to check it out on discord by selecting the @MeetingPingSquad! Participants of all skills are welcome, this will not be a contest, it will be a social event centered around voxel&#x2F;pixel art! The goal is to help creativity by providing helpful feedback to our artists! Keep an eye for announcements!&lt;&#x2F;p&gt;
&lt;p&gt;Cheers!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1724367729569.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;airshipper-bug-analysis-by-xmac94x&quot;&gt;Airshipper Bug analysis by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449650240350453760&#x2F;1276206795643420753&quot;&gt;We had a sequence of issues:&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;The update was timed right before the weekly build, which was in theory perfect. However I messed up the Port (it changed from 8000 -&amp;gt; 8080). I fixed that quick and dirty by adjusting the deployment.&lt;&#x2F;li&gt;
&lt;li&gt;The Webhook from gitlab ran, however our prune job deleted ALL but 1 ID, (we wanted all but 1 GROUP BY arch,os,channel ). Due to that people couldn&#x27;t download the latest version. (there were around 10 people online at that time).&lt;&#x2F;li&gt;
&lt;li&gt;I corrected the Port in the meantime by adjusting the helm chart.&lt;&#x2F;li&gt;
&lt;li&gt;I retried the Webhook from gitlab&#x27;s side, however there was a WARN without any further details that gitlab gave us an invalid json.&lt;&#x2F;li&gt;
&lt;li&gt;After enhancing the logs I could see that the message 401ed, as our token was invalid. I figured out that our token should be something different but didn&#x27;t know why it was broken. I fixed that by manually setting the gitlab token. Now the code ran again, and I could trigger the webhook again.&lt;&#x2F;li&gt;
&lt;li&gt;I figured out the reason for the wrong token, a job in infrastructure repo is failing which caused &lt;code&gt;prod&lt;&#x2F;code&gt; to be not what &lt;code&gt;master&lt;&#x2F;code&gt; is. I manually overwrote that. I am going to check now if there is some token that needs to be rotated&lt;&#x2F;li&gt;
&lt;li&gt;Seemed a token got invalid which caused &lt;code&gt;prod&lt;&#x2F;code&gt; to not update to &lt;code&gt;master&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;assorted-screen-shots-from-the-game&quot;&gt;Assorted screen shots from the game&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723266089148.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723266223601.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723264395805.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723080392575.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723266470462.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723082134287.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723292332509.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723369464676.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723698998890.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1723357456536.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1724373609968.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;screenshot_1724297325710.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;238&amp;#x2F;meeting.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Gathering with friends. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;238&#x2F;screenshot_1723222835702.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 237</title>
          <pubDate>Sat, 03 Aug 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-237/</link>
          <guid>https://veloren.net/blog/devblog-237/</guid>
          <description>&lt;p&gt;These weeks, we look at partial downloads in Airshipper.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @coffee-compiler (most of these merge requests), @Sam, @muphblu,
@Tomodachi94 and @xMAC94x.&lt;&#x2F;p&gt;
&lt;p&gt;Special thanks to @xMAC94x for reviewing and merging most of these patches!🏆&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes to recommend openGL instead of DX11 in panic message,
arthropod animation restructuring,
unification of module and binary file names, translation script fixes, localize item amount,
single player server name and invites, fix modular weapons crafting instructions text flow,
localize skill window texts, fixing black minimap, localization of pseudo recipes,
fix UI flickering in crafting, a translatable message on give_item,
fixing a crash on server list removal, a repair UI rework, fix wrong button highlight in
interface settings, preventing empty server list entries, removal of unused translation keys,
correcting the NixOS Wiki link and partial archive upgrades in airshipper.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on new sword animations, potion rework,
glider courses, a winit update, repair UI overhaul, a chat clear command,
new translations, gamepad bindings, updated contribution guidelines,
riposte, hydra, and mud&#x2F;swamp.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;No translations have been merged in these weeks.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;@Isse is working on Hydra and @unii created a video &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;237&amp;#x2F;2024-07-17_14-55-06.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@unii &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;523568428905398283&#x2F;1262487151413694504&quot;&gt;posted&lt;&#x2F;a&gt; interesting
videos of how to combat a mindflayer more safely with a shield.&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer found procedural running on YouTube and is tempted to implement this in Veloren &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;r70xJytj0sw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;airshipper-partial-download-by-xmac94x&quot;&gt;Airshipper Partial Download by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;Ever wondered why Steam updates are so fast and Airshipper requires you to redownload 390MB each week?
That&#x27;s because Steam has differential updates, they know what files don&#x27;t need to change and only update what is necessary.
Veloren on the other hand didn&#x27;t have this feature, our updates were meant to re-download the complete game and replace the old folder with the new one.&lt;&#x2F;p&gt;
&lt;p&gt;This will change with the next Airshipper version 0.12.
We will enable differential updates by default with a fallback to full updates.
This will increase download speed, and also enable us to validate game files for corruption.
The following article will deep dive into what improvements we can expect and how the new differential updates work.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;improvements&quot;&gt;Improvements&lt;&#x2F;h3&gt;
&lt;p&gt;Veloren&#x27;s differential updates, work on a file-by-file basis, which means that if a file changes (either slightly, or completely) it needs to be re-downloaded.
To understand the benefits, we need to understand Veloren&#x27;s files and how they change.
Inside our Veloren installs folder, you will find 2 executables: &lt;code&gt;veloren-server-cli.exe&lt;&#x2F;code&gt; and &lt;code&gt;veloren-voxygen.exe&lt;&#x2F;code&gt;. Being ca, 180MB and 250MB in size.
Compared to other games, in Veloren everything is compiled into a single executable, so we don&#x27;t have any &lt;code&gt;.dll&lt;&#x2F;code&gt; files at all.
That means, each week, those files will be updated, and thus, will require a re-download.&lt;&#x2F;p&gt;
&lt;p&gt;But wait, 180MB and 250MB is already bigger than the 390MB, how does that work?
During download, the files are ZIP compressed, and luckily our binaries can be compressed down to around 100MB in ZIP.&lt;&#x2F;p&gt;
&lt;p&gt;So what are the other 290MB? ASSETS!
In fact, 250MB out of it are audio files, because audio is already encoded space-efficient, it cannot be further compressed by ZIP.
This is where differential updates shine, as most of the large assets, will rarely change, we can keep them, and only download the files that change.
So you can expect updates in the future to be much smaller, around ~150MB instead of 390MB!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-does-it-work&quot;&gt;How does it work?&lt;&#x2F;h3&gt;
&lt;p&gt;The old download method had a local config file where it stored the local version, it did a lookup to Veloren&#x27;s servers and compared both versions. When there was a diff, it downloaded a single ZIP file (with all of Veloren&#x27;s content) unzipped that and updated the local config.
The new algorithm does the differential updates on the same ZIP, but instead of downloading the complete zip, it only downloads part of the Zip file. We make use of 3 technologies here:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Zip files store a List of all contained files at the end, so we can peek into it, without downloading the whole file&lt;&#x2F;li&gt;
&lt;li&gt;Within Zip, each file is compressed separately, which means, we can extract a single file, without reading other files&lt;&#x2F;li&gt;
&lt;li&gt;HTTP allows using the RANGE header, which will instruct a server only to send a partial file&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Our new algorithm does a lot of work now:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It peeks into the Veloren Update Zip, and tries to get a list of all files, there is a checksum for each file.&lt;&#x2F;li&gt;
&lt;li&gt;It verifies the checksum of those files locally and generates a list of updated files&lt;&#x2F;li&gt;
&lt;li&gt;It only downloads those files, with the help of RANGE requests&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There is a drawback with this method, we need to do multiple HTTP calls, and many small calls take longer than a single large call. That&#x27;s why there exists some fallback logic, in case too many files change at once, Airshipper will fall back and re-download the whole zip.
Another drawback is that we need to read all local files to get their CRC checksum, however, with modern SSDs, this is quite fast (~2s) and gives us free, integrity checks.&lt;&#x2F;p&gt;
&lt;p&gt;So when Airshipper v0.12 will be released? Unfortunately, it will still take a few weeks to prepare everything, but we hope to bring this awesome feature to you, to save you a few GB of monthly downloads :)&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;237&amp;#x2F;screenshot_1722448603547.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Do you also see the monster with the yellow eyes over there? See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;237&#x2F;screenshot_1722447451333.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 236</title>
          <pubDate>Sat, 13 Jul 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-236/</link>
          <guid>https://veloren.net/blog/devblog-236/</guid>
          <description>&lt;p&gt;These weeks, we look at photos and videos.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @uniior, @neura, @horblegorble, @james, @sam, and @xMAC94x.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes armor pricing, updated dependencies,
new noise patterns, recipe pricing, charm recipes in crafting,
display learned recipes, a toolchain update, new sword animations,
harvester, wood golem and chieftain rework, and windows build fixes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;screenshot_1712723035321.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on vampire castle,
NPC animation in plugins, NPCs going to bed at night, fixing a black
minimap, armor scaling, updating winit, new potions, and gamepad bindings.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;@necti created a guide for mindflayer solo combat: &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;TkSj9zjyeBs&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;and @unii provided this alternative strategy: &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;9Gdrp0_r8kA&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;@uniior reworked the sword animations. You can watch a lot of videos of these animations in
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;467861553178345502&#x2F;1254296471831052458&quot;&gt;#veloren-art&lt;&#x2F;a&gt;.
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;2024-07-08_15-40-31.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@necti combined Veloren and Minecraft





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;velorencraft.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;velorencraft2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;velorencraft3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@kHannibal created this centaur





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;snap2024-07-05-10-34-26.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@supa biker created &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450039871650660374&#x2F;1260423092669255730&quot;&gt;bounty posters&lt;&#x2F;a&gt; for the city centre





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;wanted.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Stefan created many of the screen shots in this issue. Thank you!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;airship.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;screenshot_1719554742264.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;screenshot_1720110179111.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;screenshot_1712725391843.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;colortrees.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;screenshot_1712809142688.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;greencave.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;spiralcave.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;more_mushrooms.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;bluecave.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;lavacave.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;236&amp;#x2F;glider.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Drifting away, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;236&#x2F;mushrooms.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 235</title>
          <pubDate>Sat, 22 Jun 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-235/</link>
          <guid>https://veloren.net/blog/devblog-235/</guid>
          <description>&lt;p&gt;These weeks, we muse about conflict resolution.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @Sam, @floppy, Codeberg translators, @uniior, @muphblue,
and @James.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes poise fixes, large bird route fixes, animation restructuring,
wood log price fixes, item image export fixes, animation fixes, and a vertical scaling crash fix.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on glider courses, charm crafting category, item reorganization,
more instruments, vampire castle, admin glider, mage towers, a PvP button, social name display,
the new voxygen UI, and TLS fixes for srv.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4503&quot;&gt;MR 4503&lt;&#x2F;a&gt;:
@CodeVlogs, @evgenkot, @fnetX, @Karaya, @karinator, @loglizzy, @lucius_pilgrim, @Positron832,
@PurpleDev, and @Thiagod86.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators, as well as to @fnetX for compiling this lists of contributors.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;There seems to be some unfortunate TLS QUIC interaction reported by
@HostEZ.io, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1248917700776820827&#x2F;1248917706149728296&quot;&gt;this thread&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;p&gt;The learnable recipes now have a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Recipes&quot;&gt;Wiki page&lt;&#x2F;a&gt; detailing what each scroll unlocks and where to obtain it.&lt;&#x2F;p&gt;
&lt;p&gt;@xMAC94x resumed the work on partial downloads, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1249833646303612948&#x2F;1249835413972193423&quot;&gt;this thread&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;956026926936490014&#x2F;956644870607495228&quot;&gt;this older thread&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;p&gt;@James is working on glider courses:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;glider-fun.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;glider_ring_numerals.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@And_i found Veloren on a banner ad in Minetest, among other open source games:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;minetest.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;disagreement-and-conflict-resolution&quot;&gt;Disagreement and conflict resolution&lt;&#x2F;h2&gt;
&lt;p&gt;Several long term developers got into an argument with each other in a discussion about instruments and sounds.
This spiraled into misunderstanding, misattribution and hurt feelings.&lt;&#x2F;p&gt;
&lt;p&gt;The repercussions of this conflict lead to some soul-searching among the developers and moderators. During this
many day process the following statements were created to summarize the consensus reached:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;screenshot_1717975972303.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;helpful-tips-and-things-to-know-for-contributors&quot;&gt;Helpful tips and things to know for contributors&lt;&#x2F;h3&gt;
&lt;p&gt;① Team leads have veto power. Typically, we work so all contributions can be merged in some state if the original contributor is willing to work
with team leads and other contributors. Don&#x27;t take it personally if a team lead vetos your idea. If you are willing to compromise, open a dialogue
and work together towards a better Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;➁ Some community members have a tendency to comment on anything and everything without context or investigation.
This isn&#x27;t helpful and generates lots of less than useful feedback. Often this is paired with strong opinions that could use some softening.
It is important to remember that not all feedback needs to be acted on. However, it is also important not to completely ignore people,
especially when they are trying to be helpful.&lt;&#x2F;p&gt;
&lt;p&gt;➂ The existence of community feedback and the behavior mentioned in ➁ requires contributors to be able to sift through feedback for
what may actually be helpful and ignore the rest. This requires being able to tolerate some degree of unhelpful feedback.&lt;&#x2F;p&gt;
&lt;p&gt;➃ Veloren is a community project open to all kinds of people. This practically guarantees that some people will not act how any given individual wants them to.
As a contributor one has to learn how to resolve conflicts. It is one of the many challenges expected when working with a diverse, global team.
We believe the benefits of working together far outweigh the challenges.&lt;&#x2F;p&gt;
&lt;p&gt;➄ If someone in the community has a problem with specific actions from specific individuals, they need to report it.
It is unfair to the admin and moderation team to expect grievances to be addressed if they are never described and reported.
That said, we always strive to keep people invested in our community and would rather use teachable moments to better all of our interactions than ban people.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;screenshot_1718537207657.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;Screenshot_2024-06-18_172551.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Gliding in up-draft by @Oguz:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;Screen_Recording_2024-06-13_at_01.57.19_1.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;235&amp;#x2F;screenshot_1718773652329.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Brighter days exist, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;235&#x2F;screenshot_1718904115353.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 234</title>
          <pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-234/</link>
          <guid>https://veloren.net/blog/devblog-234/</guid>
          <description>&lt;p&gt;These weeks, we get a preview of vampire castle.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @Neura, @xMAC94x, @ResidentFurryArchUser, @NeutralModder,
@SrPapinha, @floppy, @Sam, @crab, @uniior, Codeberg translators, @James, and @horblegorble.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes cultist dungeon loot balancing, macOS fixes,
internationalization of prompt dialogs, changelog corrections, parried debuff rework,
Dagon AI corrections, finisher combo fixes, the new Sahagin dungeon,
overflow fixes during pick-up, projectile code rework, a RusTLS update,
debuff balancing, modifier stat splitting, new chest models,
Gnarling attack speed corrections, updated translations, more macOS fixes,
world boss AI fixes, kiddo dependency update, learnable recipes📜, hammer balancing,
hyper dependency update, a fix for the give command, and two DB migration fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on armor balancing, web tokens, new myrmidion dungeon, and
menacing AI.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4487&quot;&gt;MR 4487&lt;&#x2F;a&gt;:
(estimated credits, there might be an overlap with the adjacent MRs)
@Positron832, @Karaya, @bov, @fnetX, @CodeVlogs, @karinator, @Thiagod86,
@PurpleDev, @loglizzy, @evgenkot, @lucius_pilgrim, @MaxSoniX, @Furrior,
@Daxik2x, @masta0fleave, and @Kretka.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;The new trailer was a bit hidden between other updates in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-232&quot;&gt;number 232&lt;&#x2F;a&gt;, so if you haven&#x27;t
watched it, it well is worth it. Make sure to turn on the sound as the video
is aligned with the rhythm of the music. Also seeing this large host of
players roam the world communicates the team spirit of Veloren exploration.&lt;&#x2F;p&gt;
&lt;p&gt;Well done, @Necti!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;velorentrailer.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the same issue we mentioned that @zesterer is porting Super Mario 64 to the gameboy advance, here is a status update
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Ndo21b2FZYU&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;@floppy shared screen shots from the vampire castle:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-10-37.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-12-52.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-16-49.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-18-32.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-20-06.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-22-27.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-23-46.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-26-03.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-29-58.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;Screenshot_from_2024-06-08_23-35-28.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;A new CI image was installed, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449650240350453760&#x2F;1245808946409902172&quot;&gt;this thread&lt;&#x2F;a&gt; for details.&lt;&#x2F;p&gt;
&lt;p&gt;@Fotkurz plans to add NPC sleeping habits and filed &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1987&quot;&gt;unreachable houses&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;574.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;577.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;screenshot_1710634014854.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;desert.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;234&amp;#x2F;screenshot_1716702531278.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;There is a fish in the tree! See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;234&#x2F;Screenshot_from_2024-05-31_17-39-04.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 233</title>
          <pubDate>Sun, 26 May 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-233/</link>
          <guid>https://veloren.net/blog/devblog-233/</guid>
          <description>&lt;p&gt;These weeks, we look at the new Sahagin dungeon and hammer animations.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @James, @TheBest and @Neura, @xMAC94x, @fotkurz, @Christof.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes new Rock Snapper attacks, making curious potion naming consistent,
fixes for newer toolchains, plugin load optimization, switch to Rust nightly 2024-05-14,
and many dependency updates.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on figures in plugins, cultist dungeon tweaks, a new Sahagin dungeon,
parrying, the mage tower and more.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;No updated tranlations were merged these weeks.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;@ResidentFurryArchUser created support for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Gamemode&quot;&gt;Feral GameMode&lt;&#x2F;a&gt;
and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;MangoHud&quot;&gt;MangoHUD&lt;&#x2F;a&gt; into airshipper (the game launcher).
The implementation was discussed and is still unmerged as of today.&lt;&#x2F;p&gt;
&lt;p&gt;@horblegorble reworked the admin glider to look like an accelerating glider type:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;vroom-vroom-vroom-vroom.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;glowy-vrooms.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@kHannibal created another impressive voxel model:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;snap2024-05-06-19-17-16.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Gemu created a castle miniboss, the strigoi





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;strigoi.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@VGrunner created a video showing the new hammer animations:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;Hammer_skill_showcases.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;00:00.00 solid smash
&lt;&#x2F;span&gt;&lt;span&gt;00:04.03 wide wallop
&lt;&#x2F;span&gt;&lt;span&gt;00:08.70 scornful swipe
&lt;&#x2F;span&gt;&lt;span&gt;00:11.35 tremor
&lt;&#x2F;span&gt;&lt;span&gt;00:14.00 vigorous bash
&lt;&#x2F;span&gt;&lt;span&gt;00:23.88 spine cracker
&lt;&#x2F;span&gt;&lt;span&gt;00:25.79 breach
&lt;&#x2F;span&gt;&lt;span&gt;00:28.81 thunderclap
&lt;&#x2F;span&gt;&lt;span&gt;00:30.82 seismic shock
&lt;&#x2F;span&gt;&lt;span&gt;00:35.53 iron tempest
&lt;&#x2F;span&gt;&lt;span&gt;00:39.42 upheaval
&lt;&#x2F;span&gt;&lt;span&gt;00:41.76 heavy whirl
&lt;&#x2F;span&gt;&lt;span&gt;00:43.40 intercept
&lt;&#x2F;span&gt;&lt;span&gt;00:45.39 pile driver
&lt;&#x2F;span&gt;&lt;span&gt;00:46.39 lung pummel
&lt;&#x2F;span&gt;&lt;span&gt;00:47.69 tenacity
&lt;&#x2F;span&gt;&lt;span&gt;00:49.87 helm crusher
&lt;&#x2F;span&gt;&lt;span&gt;00:50.88 rampart
&lt;&#x2F;span&gt;&lt;span&gt;00:55.39 judgment
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Earth shaker
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;Earth_Shaker_showcase.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;and retaliate
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;retaliate_show_case.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;You can also see these on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.veloren.net&#x2F;wiki&#x2F;Hammers&quot;&gt;Wiki&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;@Green12 refined the ice covered vegetation





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;fr0sty.sn4pshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@floppy created the new Sahagin dungeon and provided some screen shots, more &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1241630713199988776&#x2F;1241642741645971466&quot;&gt;here&lt;&#x2F;a&gt;.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;Screenshot_from_2024-05-18_15-14-38.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;Screenshot_from_2024-05-12_21-27-56.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;Screenshot_from_2024-05-12_21-16-23.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;Screenshot_from_2024-05-18_14-59-19.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;night.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;233&amp;#x2F;water578.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A magical night, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;233&#x2F;golden.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 232</title>
          <pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-232/</link>
          <guid>https://veloren.net/blog/devblog-232/</guid>
          <description>&lt;p&gt;These weeks, we can&#x27;t stop watching the new trailer.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @necti, @Isse, @horblegorble, @Gemu, @crab,
@floppy, @fnetX and many Weblate contributors, @allucaneat, @xMAC94x,
and @uniior.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes orichalcum recipe tweaks, tree crowding fixes, change log fixes,
forgemaster room fixes, server player stats, a fix for orichalcum helmet with orcs,
translation updates, new mesa city furniture, server info examples,
hit point balancing, and a new cultist dungeon look.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on the new voxygen UI,
rock snapper attacks, the admin glider, civilization simulation,
a toolchain upgrade, parrying, mage tower, UPnP registering,
new hammer skill icons, vampire castle, figure animation in a plugin, gamepad binding UI,
and moving moderation info into a database.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4453&quot;&gt;MR 4453&lt;&#x2F;a&gt;:
bov, CodeVlogs, Daxik2x, evgenkot, fnetX, Furrior, hurzelchen,
karinator, Kretka, lucius_pilgrim, masta0f1eave, MaxSoniX and Positron832.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators, as well as to @fnetX for compiling this lists of contributors.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;There is ongoing discussion about how to properly implement jumping in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1234198290774491177&#x2F;1234198295857991823&quot;&gt;this thread&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You can follow @DungeonLord&#x27;s path to implement (corn) fields &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&#x2F;1235305693196845066&quot;&gt;in this thread&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&#x2F;1235288492771377162&quot;&gt;this thread&lt;&#x2F;a&gt; for a preview of @allucaneat&#x27;s new hammer icons.&lt;&#x2F;p&gt;
&lt;p&gt;@Isse is working on a new UI, here you can see a hierarchical radial menu:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;2024-05-03_13-07-24.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Green12 worked on frost covered vegetation:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;snap2024-05-01-14-47-37.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Treeco reworked tree generation again:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1714436994292.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile @zesterer started writing &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;social.coop&#x2F;@jsbarretto&#x2F;112362579231077206&quot;&gt;another game in Rust&lt;&#x2F;a&gt; - Super Mario 64 for the GBA.&lt;&#x2F;p&gt;
&lt;p&gt;@allucaneat completed the hammer skill icons





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;SPOILER_Screenshot_2024-05-03_135000.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@khannibal created a ghost ship model





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1714871382130.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@James created a new AoE attack for the rock snapper
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;rocksnapper.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@allucaneat finished new furniture for mesa located buildings





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-04_14-50-16.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-04_14-55-50.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;New buff and debuff icons by @LoxSmithEhsan





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;BuffIcons.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-videos-by-necti&quot;&gt;New videos by @Necti&lt;&#x2F;h2&gt;
&lt;p&gt;A Guide to the dwarven mines:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;EDKZ2-Nl3fg&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;and a new Veloren trailer created for RustNL:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;velorentrailer.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;studies-on-the-new-cultist-dungeon-look&quot;&gt;Studies on the new cultist dungeon look&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-01_17-26-54.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-01_17-30-24.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-01_17-33-17.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-01_17-39-07.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;Screenshot_from_2024-05-01_17-43-50.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;desertcity.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1714869949525.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1714953276041.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1652378227716.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1658486679522.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1714236361927.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;232&amp;#x2F;screenshot_1715263416509.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Even rainy days look good in Veloren, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;232&#x2F;SPOILER_forgemaster.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 231</title>
          <pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-231/</link>
          <guid>https://veloren.net/blog/devblog-231/</guid>
          <description>&lt;p&gt;These weeks, we learn about tree and furniture development.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @necti, @Isse, @crabman, Codeberg users, @Treeco, @miocore,
@floppy, @Sam.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes abyssal rings, sprite offset fixes,
model changing attributes, a skating fix, trading fixes,
translation updates, redwood and oak tree tweaks, controls setting via mouse keys, loot protection fixes,
test server fixes, dwarven mine, hammer skills and crafting search in multiple languages.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on ore damage, event server tweaks, rock snapper animation, torvus,
balancing, fighting AI, gamepad bindings, vampire castle, learnable recipes, removing outdated items,
jumping for non-humanoids, network improvements, the new UI, and effective hit-point balancing.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;@Treeco used &lt;code&gt;tree_density&lt;&#x2F;code&gt; to make standalone trees more bushy and dense trees more straight.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1713483599985.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1714172728087.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Later @Treeco created more complex fir tree code.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1714223502928.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@floppy, @Gemu and @crabman have continued the work on the dwarven mine. They created new models and reworked
the code. @UncomfySilence reported problems found in testing. And … it was merged.&lt;&#x2F;p&gt;
&lt;p&gt;Multi-hit mining example by @crabman
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;mining.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;New models by @khannibal: Hanging gardens





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;snap2024-04-20-18-50-01.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;and a pyramid





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;snap2024-04-20-18-50-49.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449660795857403905&#x2F;1230274950087184394&quot;&gt;this thread&lt;&#x2F;a&gt; for discussions about temperature effects.&lt;&#x2F;p&gt;
&lt;p&gt;Kitchen furniture by @allucaneat





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;Screenshot_2024-04-21_011134.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;Screenshot_2024-04-21_213956.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Magic candles by @allucaneat





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1713813092349.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Orichalcum helmet and shield





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;ori_helmet_shield.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;and a newer, less bulky, version





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;ori_new.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@crab upgraded iced to 0.12 for airshipper, this should fix issues on Wayland and Windows. See &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1233792145450733610&#x2F;1233792151180021930&quot;&gt;this thread&lt;&#x2F;a&gt; for details.&lt;&#x2F;p&gt;
&lt;p&gt;@Sam wrote a good &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1087980971917316206&#x2F;1233583297968341052&quot;&gt;explanation&lt;&#x2F;a&gt; of recipes: &quot;This branch introduces learnable recipes to veloren. Starting off, new characters will not know how to craft most items and will need to learn them by finding recipe scrolls through adventuring, trading, or exploration. Scrolls will usually contain knowledge on multiple crafting recipes, and using the scroll will cause it to crumble to dust as its knowledge is learned.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;@Gemu and @Purple worked on a ferret model





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;ferret.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@crab was able to compile airshipper with a stable toolchain, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1233422553608093776&#x2F;1233422559551164417&quot;&gt;MR-122&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@Isse continued their work on a new UI, see here for an update:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;2024-05-02_02-44-40.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@crab added a way to query the number of active players for servers, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1233096449466695731&#x2F;1233096458320875580&quot;&gt;this thread&lt;&#x2F;a&gt; for details.&lt;&#x2F;p&gt;
&lt;p&gt;@uniior continued his work on hit point balancing: &quot;Experimented with a generalized (approx.) +100% HP increase on T3Bs, +60% on T3As, +20% on T2s and +10% on the T1s with higher values, though I&#x27;ll get around to test these changes once I finish my break from the game. Keep in mind that the new EHP values should still be considerably lower than the ones on master as a result of the overall nerf to NPC armor items.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;@allucaneat created more elaborate icons for the hammer skills. See all of them &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&#x2F;1233470897893937294&quot;&gt;here&lt;&#x2F;a&gt;.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;SPOILER_Screenshot_2024-04-26_193027.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Sam started reworking jumps in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1234198290774491177&#x2F;1234198295857991823&quot;&gt;MR-4441&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@Treeco looked into colored stars for constellations





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1713824008155.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sam-asks-for-bow-skill-ideas&quot;&gt;@Sam asks for bow skill ideas&lt;&#x2F;h3&gt;
&lt;p&gt;With hammer rapidly approaching completion, it is time to begin thinking about what the bow rework will entail.&lt;&#x2F;p&gt;
&lt;p&gt;The bow is intended to provide a more skirmisher oriented playstyle ensuring you have ways to keep some
distance between yourself and your enemies. You will also be able to coat your arrows with some items if you
have them in your inventory, which will provide some extra effects to your arrows.&lt;&#x2F;p&gt;
&lt;p&gt;Suggestions for bow abilities can be made in the
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;e&#x2F;1FAIpQLSe_pHEP2OPKWG8CHw9q0fhZC0BfgywxiGGiM8kFthe5-PDwog&#x2F;viewform&quot;&gt;form here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1713382948250.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;feature-list-for-moderation-tool-by-crab&quot;&gt;Feature list for moderation tool by @crab&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ll just put up a list of &lt;strong&gt;required&lt;&#x2F;strong&gt; features for the moderation panel in case anyone is very urged about us stopping to log messages to eViL Discord and is willing to do a bit of coding (I&#x27;m aware some of these are already (partially) implemented, ty xmac):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Chat-like scrolling through global and regional messages (with features such as scrolling to the last read message).&lt;&#x2F;li&gt;
&lt;li&gt;Filtering messages by channel (&#x2F;world, &#x2F;say, &#x2F;region) and players (I&#x27;m deliberately not saying username, as those can be changed now).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Permanently&lt;&#x2F;em&gt; (not just 30 days or for whatever duration messages are kept currently) linking to a message and all it&#x27;s surrounding context.&lt;&#x2F;li&gt;
&lt;li&gt;Some way to moderate usernames, by either display all new unseen ones or showing a list of the most recent ones (replaces &lt;code&gt;&#x2F;players&lt;&#x2F;code&gt; on torvus)&lt;&#x2F;li&gt;
&lt;li&gt;Good UX please&lt;&#x2F;li&gt;
&lt;li&gt;Ask all other currently active moderators (ie. @necti @UncomfySilence @isse @C ᪲ ) if they have something to add to this list.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1713547029750.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Apart from the moderation panel:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A history-less bridge for normal player usage (and moderators, to ie. calm down chat or give warnings).
Even after this is done, anyone could be running a torvus-like bridge (which requires no special permissions whatsoever) without someone knowing, pushing all messages sent in global chat to some online service. Global chat is in fact, &#x27;global&#x27;, and you should expect anyone with an internet connection to have access to it.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;See the full discussion &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1167762757815390258&#x2F;1231309425734586409&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;screenshot_1713632118159.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4434&quot;&gt;MR 4434&lt;&#x2F;a&gt;:
@arthuradolfo, @bov, @dyegomb, @evgenkot, @FelipePardim, @fnetX, @Furrior, @GGTheTranslator, @Kretka,
@loglizzy, @LS-Localicows, @nwildner, @Positron832, @RyanOrigins, @Sovenok-Hacker, @Thiagod86&lt;&#x2F;p&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4439&quot;&gt;MR 4439&lt;&#x2F;a&gt;:
Daxik2x, @dyegomb, @evgenkot, @fnetX, @Furrior, @hurzelchen, @loglizzy, @lucius_pilgrim, @MaxSoniX,
@nwildner, @Positron832, @rmorettibr, @Sovenok-Hacker, @Thiagod86&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators, as well as to @fnetX for compiling these lists of contributors.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;231&amp;#x2F;Mine.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fiery encounter in the depth of the mine, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;231&#x2F;screenshot_1713630656735.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 230</title>
          <pubDate>Sat, 13 Apr 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-230/</link>
          <guid>https://veloren.net/blog/devblog-230/</guid>
          <description>&lt;p&gt;These weeks, we learn about tags for code documentation and many ongoing development activities.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @gamer-kold, @ThomasS, @crabman, @Dmitry, @zesterer, @horblegorble,
@srpapinha, @newclarityex, @Treeco, @necti, @walpo, @lunareclipse and @uniior.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes a Rodio (audio crate) update, sign and lantern translation enabling, a rope panic fix,
Easter egg and April fool&#x27;s calendar items, NPC movement planning, miscellaneous post-party cleanup,
more ambient light in at dawn and dusk, bombs and fireworks in higher level chests, translation updates, lower parrying costs,
petting animals, a Rodio panic fix, Brinestone armor repair costs, Tursus and Wendigo balancing, Troll armor,
Code ownership documentation, material price corrections, NPC walking path computation fixes, amd more furniture sprites.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1711838317576.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on Dwarven Mine, calendar selected shaders, Hammer skills, moving moderation info to a database,
friend groups, documentation cleanup, separate character behavior and posting state updates, Mage Tower,
worldgen outside the map, trading fixes, a pet rework, hit point rebalancing, entity to terrain tethers,
code documentation tags, merging the book into the main repository, merging Torvus into the main repo,
better parrying, and translations.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-discussions&quot;&gt;Development discussions&lt;&#x2F;h2&gt;
&lt;p&gt;If you want to read into the pathfinding bug hunt and solution genesis take a look into &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449650240350453760&#x2F;1223551335887278122&quot;&gt;#programmers&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Entity to terrain tethering by @crab features promising previews: &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;hook.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer started a discussion on a much improved level of detail implementation in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450064928720814081&#x2F;1223351936028250154&quot;&gt;#worldgen&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The discussion about quests really took off in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1970&quot;&gt;MR-1970&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You can follow the discussion about the petting animals in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;795669289642360864&#x2F;1226268170659041432&quot;&gt;#pets-and-mounts&lt;&#x2F;a&gt;, here is a video &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;petting_veloren.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Similarly for blocking in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1226112002015891476&#x2F;1226583079964115075&quot;&gt;#combat&#x2F;V4416&lt;&#x2F;a&gt; &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;2024-04-07_12-40-34_-_Trim0.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Gemu is currently designing a low level foe





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;goblin.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@uniior is designing new furniture for Veloren, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;467861553178345502&#x2F;1226364790524608572&quot;&gt;#veloren-art&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712935679064.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@Treeco and @xMAC94x work on upgrading to a newer Rust tool chain, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;614532051739082788&#x2F;1228299982625443870&quot;&gt;#meta&lt;&#x2F;a&gt; for problems and their potential solutions.&lt;&#x2F;p&gt;
&lt;p&gt;@xMAC94x and @crablet discuss torvus and future moderation tools in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1167762757815390258&#x2F;1228271184680976446&quot;&gt;#V4159 &quot;Merge torvus&quot;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@horblegorble plotted the health and armor of overworld entities, as a tool for future balancing work
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1226958465780416553&#x2F;1227549290856185856&quot;&gt;V4422 &quot;Various tweaks to entiti…&quot;&lt;&#x2F;a&gt;, e.g. 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;hp_armor_graph.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
 and (effective hit points vs damage per second inflicted by player over progression) 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;ehp_dps.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Hammer skill progress in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450065020878061600&#x2F;1223449473464668210&quot;&gt;#combat&lt;&#x2F;a&gt;:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;HammerSkillTree.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;HammerSkillExplained.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;code-documentation-tags-by-zesterer&quot;&gt;Code documentation tags by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4423&quot;&gt;MR-4423&lt;&#x2F;a&gt; explains the new code documentation tags, this is still work in progress:&lt;&#x2F;p&gt;
&lt;p&gt;So I&#x27;ve got an idea for a docs thing that I want to try implementing and I&#x27;d like some feedback to those that feel like they&#x27;re still relatively new to the codebase (or, at least, feel like there are large areas that are still a bit of a mystery to them).&lt;&#x2F;p&gt;
&lt;p&gt;The name I&#x27;m giving it is the &#x27;tag system&#x27;.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;d introduce a little macro, like the following:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;Rust&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-Rust &quot;&gt;&lt;code class=&quot;language-Rust&quot; data-lang=&quot;Rust&quot;&gt;&lt;span&gt;tag!(my_tag_name)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;What this does is associate the location it&#x27;s used in with some higher level docs about a particular concept. For example, you might tag code that handles entity &lt;code&gt;Alignment&lt;&#x2F;code&gt; and damage calculations with a section of the docs that explains how all of those pieces fit together like &lt;code&gt;tag!(alignment)&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Tags would need to be declared up-front in a common place (mostly to aid casual discoverability and reduce the chance of two tags accidentally being created for the same concept).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712269334359.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The goal is twofold:&lt;&#x2F;p&gt;
&lt;p&gt;Firstly, the tag name is easy to search throughout the codebase.&lt;&#x2F;p&gt;
&lt;p&gt;Secondly, the macro will - internally - create a unique type associated with that tag so you should be able to right click on it and use your editor&#x27;s built-in &#x27;find references&#x27; or &#x27;go to implementation&#x27;  feature to navigate through associated parts of the codebase (I need to first double-check that this actually does work through a macro,  but I think it should).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Hover over tags to get documentation, works&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Find other uses of the same tag by &#x27;Find references&#x27;, works&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
Actually write the tags and use them in appropriate places, not done yet&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The tag macro can now be invoke like this: &lt;code&gt;tag!(@tag1, @tag2, ...)&lt;&#x2F;code&gt;, the reason I decided to add a &lt;code&gt;@&lt;&#x2F;code&gt; before each tag is to make them grep-friendly, as tags are usually very common words.&lt;&#x2F;p&gt;
&lt;p&gt;Tags are defined as modules in &lt;code&gt;common&#x2F;src&#x2F;documentation&#x2F;tags&#x2F;&lt;&#x2F;code&gt;, the module-level documentation is what will show up when hovering over a tag.&lt;&#x2F;p&gt;
&lt;p&gt;This unintentionally allows for subtags too, which can simply be defined as submodules of tags and referenced with &lt;code&gt;tag!(@tag1::submodule::subsubmodule)&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This MR also contains videos showing code navigation using Helix &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;gitlab.com&amp;#x2F;veloren&amp;#x2F;veloren&amp;#x2F;uploads&amp;#x2F;78382205988ccb73b47eef7c2070667d&amp;#x2F;2024-04-09_19-35-19.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
 and VSCode &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;gitlab.com&amp;#x2F;veloren&amp;#x2F;veloren&amp;#x2F;uploads&amp;#x2F;57ab198d6bae6985e81ff486a2e383e2&amp;#x2F;2024-04-09_17-48-34.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;design-document-links&quot;&gt;Design document links&lt;&#x2F;h2&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;646401404419833866&quot;&gt;#game-design channel&lt;&#x2F;a&gt; contains several pinned messages which link to design documents.
As @DaForLynx just pointed to one of them, here are some links to interesting Google-docs (incomplete list):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;17wXlQwq7uCuiafaTZgS6RQ1jFxHo5RR0mMiRg9FCHrM&#x2F;edit?usp=drive_link&quot;&gt;Veloren High Level Design Plan&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1oh5wJsx_IhPwIPzJRaEL60lDqsO2K7lWUYyYmiF1aSE&#x2F;edit&quot;&gt;Material Progression&#x2F;Soft natural biome progression&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;drive&#x2F;folders&#x2F;1lOZnZY8BXCcGDSWRcXi2FCGuC7Tp0gp2&quot;&gt;The folder containing these&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;drive&#x2F;folders&#x2F;1jkn8v9I0fo1nJlM29YAI_wWb_V-w456q&quot;&gt;Related: Voxel Model folder&lt;&#x2F;a&gt; posted in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450698799384363028&quot;&gt;#groups-and-links&lt;&#x2F;a&gt; (Archive)&lt;&#x2F;li&gt;
&lt;li&gt;There is also the newer &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;roadmap.html&quot;&gt;gitlab based roadmap&lt;&#x2F;a&gt; in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&quot;&gt;The Book&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712609540529.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712657159164.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712740609379.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712805151086.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1712834424875.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4411&quot;&gt;MR 4411&lt;&#x2F;a&gt;:
@aleeo, @Caddis, @Dinariossa, @DiXiao, @evgenkot, @fnetX, @fvasco, @GeroinEX, @GGTheTranslator, @Ixniyevonn,
@karinator, @Kretka, @kurtinge, @leca, @loglizzy, @LS-Localicows, @mapemka, @Paw, @Positron832, @Sinari,
@Sovenok-Hacker, @tdehtyar, @TheESN, @Thiagod86, @walpo&lt;&#x2F;p&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4427&quot;&gt;MR 4427&lt;&#x2F;a&gt;:
@bov, @FelipePardim, @fnetX, @GGTheTranslator, @Kretka, @kurtinge, @loglizzy, @LS-Localicows, @nwildner, @Positron832, @Sinari, @Thiagod86, @Witch&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the translators, as well as to @fnetX for compiling these lists of contributors.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;230&amp;#x2F;screenshot_1703295635280.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hi(gh)jacking a ship, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;230&#x2F;screenshot_1712561682462.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 229</title>
          <pubDate>Sat, 30 Mar 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-229/</link>
          <guid>https://veloren.net/blog/devblog-229/</guid>
          <description>&lt;p&gt;These weeks, we show visual improvements and the new Web UI.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @fnetX and @juliancoffee, @gamer-kold, @fvasco, @xvar, @ThomasS, @Isse and @Christof, @uniior, @Hrom and @crabman,
@xMAC94x, @walpo, @zesterer, @Synis, @Treeco, and @KayHemme.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes many updated translations, an updated Nix flake, a database index optimization, more specific NPC dialogs,
loading plugins from the server, spots in plugins, removing pillars from Sahagin and Myrmidon dungeons, loot table balancing,
a web UI for the server, ChangeLog spelling fixes, revised cacti, roll balancing, dependency updates, revised general skills, CI caching,
shader improvements (cloud, horizon, LoD), cave biome updates, many new LoD models, friendly fire and PvP auras in desert city arenas,
label adjustments in trade dialog, a new single-player world, and finally the 0.16 release.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on terracotta boss tweaks, NPCs in plugins, test server fixes, sprite attributes, friend lists, loot exporting,
fluid dynamics, ore damage counting, durability tweaks, attack AI fixes, a Rodio update, more efficient network encoding, a new Veloren logo,
a new UI technology, and spawning voxel models.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;&#x2F;h2&gt;
&lt;p&gt;@juliancoffee and @crab are working on sprites which change appearance based on their state (lantern on or off and growing plants, or later open and closed chests) &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4359&quot;&gt;MR 4359&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Debug Window update: The new UI developed in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1047541214104256572&quot;&gt;this thread&lt;&#x2F;a&gt; really generates interesting proof of concept images: 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;NewUI.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Server Web UI: &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;gitlab.com&amp;#x2F;veloren&amp;#x2F;veloren&amp;#x2F;uploads&amp;#x2F;c6ed57265929686c081c222af71c22c1&amp;#x2F;2024-03-13_11-18-20.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@juliancoffee: &quot;We rolled out some buffs. Now all characters start with maxed HP, energy, and roll skills. Additionally, roll energy penalties during interrupts don&#x27;t apply anymore, instead remaining recovery jumps to roll buildups, and iframes only apply during movement stage.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;@Treeco: &quot;I made some improvements to LOD objects which hopefully will be merging before freeze&quot; (Update: They were merged in time)&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1707326617448.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711137878013.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711138120012.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711542238045.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screenshots&quot;&gt;More Screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;island.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711138137761.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711138741314.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711621787474.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711622101070.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711738932935.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-work&quot;&gt;Translation work&lt;&#x2F;h2&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4376&quot;&gt;MR 4376&lt;&#x2F;a&gt;:
@bov, @fnetX, @FruityHarriott, @karinator, @loglizzy, @Positron832, @Sinari, @walpo&lt;&#x2F;p&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4386&quot;&gt;MR 4386&lt;&#x2F;a&gt;:
@bov, @dyegomb, @fnetX, @FruityHarriott, @fvasco, @juliancoffee, @karinator, @Positron832,
@Sinari, @valebest26, @walpo, @Witch&lt;&#x2F;p&gt;
&lt;p&gt;Translators included in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4397&quot;&gt;MR 4397&lt;&#x2F;a&gt;:
@aleeo, @bov, @Caddis, @Dinariossa, @DiXiao, @evgenkot, @fnetX, @FruityHarriott, @fvasco,
@GeroinEX, @GGTheTranslator, @Ixniyevonn, @karinator, @leca, @mapemka, @Paw, @Positron832,
@Quini98, @Sovenok-Hacker, @tdehtyar, @thatevilman, @TheESN, @walpo&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711626449372.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;and-by-language&quot;&gt;And by Language&lt;&#x2F;h3&gt;
&lt;p&gt;Contributions since &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-227&quot;&gt;February 19th, DevBlog 227&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Dutch: Quini98 (13), FruityHarriott (5), thatevilman (2)&lt;&#x2F;li&gt;
&lt;li&gt;English: fnetX (63), walpo (60), GGTheTranslator (2), Positron832 (1)&lt;&#x2F;li&gt;
&lt;li&gt;French: fnetX (132), bov (126), Dutchy5 (101), GGTheTranslator (42), Nylux (8), Nifou (5), thomas-babord (2), AldanTanneo (1), Vallley (1)&lt;&#x2F;li&gt;
&lt;li&gt;German: fnetX (771), karinator (53), Jasmia (1)&lt;&#x2F;li&gt;
&lt;li&gt;Italian: fvasco (110), valebest26 (2)&lt;&#x2F;li&gt;
&lt;li&gt;Portuguese: loglizzy (6)&lt;&#x2F;li&gt;
&lt;li&gt;Portuguese (Brazil): Thiagod86 (2), dyegomb (2)&lt;&#x2F;li&gt;
&lt;li&gt;Russian: evgenkot (257), Paw (36), aleeo (20), Sovenok-Hacker (19), DiXiao (13), Ixniyevonn (8), tdehtyar (4), GeroinEX (2), TheESN (2), Caddis (1), mapemka (1), leca (1), Dinariossa (1)&lt;&#x2F;li&gt;
&lt;li&gt;Spanish: walpo (2116), juliancoffee (4), Vybearz (2)&lt;&#x2F;li&gt;
&lt;li&gt;Swedish: Positron832 (854)&lt;&#x2F;li&gt;
&lt;li&gt;Ukrainian: Sinari (118), Witch (52)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A Big Thank you!!! from all the players playing Veloren in a non-English setting.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;0-16-release&quot;&gt;0.16 Release&lt;&#x2F;h2&gt;
&lt;p&gt;On March 30th the 0.16 release party took place, see the release stream at
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;BEcqoXXzDK4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711823014660.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711825822062.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;229&amp;#x2F;screenshot_1711719683696.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sandy dune vibes, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;229&#x2F;screenshot_1711649903952.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.16 Release</title>
          <pubDate>Mon, 25 Mar 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-16/</link>
          <guid>https://veloren.net/blog/release-0-16/</guid>
          <description>&lt;h2 id=&quot;0-16-release&quot;&gt;0.16 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is finally releasing 0.16! It has been 9 months since 0.15 was released so there has been a lot of work put into this version.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;b&gt;18:00 GMT on March 30th&lt;&#x2F;b&gt;, make sure to join the release party.
On the side, you can also watch the
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BEcqoXXzDK4&quot;&gt;release party dev stream&lt;&#x2F;a&gt;,
where we&#x27;ll be chatting with devs about what went into this version.&lt;&#x2F;p&gt;
&lt;p&gt;To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an account&lt;&#x2F;a&gt;,
then launch the game and hop on the default server. See you there!&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ll also be having a vote on Discord for the new map to use for the official
server in the coming days. Be sure to check that out!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-in-this-release&quot;&gt;New in this release&lt;&#x2F;h3&gt;
&lt;p&gt;Here are some of the changes in this release:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;New axe skill tree.&lt;&#x2F;li&gt;
&lt;li&gt;Two new dungeons, haniwa catacombs and terracotta ruins.&lt;&#x2F;li&gt;
&lt;li&gt;Some new structures: airship docs, taverns and desert arenas.&lt;&#x2F;li&gt;
&lt;li&gt;We got a cool new mesa biome, where the mountain towns are built now.&lt;&#x2F;li&gt;
&lt;li&gt;Caves got a really cool update, with new cave biomes, be sure to check them out!&lt;&#x2F;li&gt;
&lt;li&gt;We are finally using a new wgpu version which allows people to run the game using OpenGL.&lt;&#x2F;li&gt;
&lt;li&gt;Plugins have gotten updates and it&#x27;s now supported for servers to have plugins which are shared with the client when joining.&lt;&#x2F;li&gt;
&lt;li&gt;Map generation UI for singleplayer in voxygen.&lt;&#x2F;li&gt;
&lt;li&gt;Many balancing changes.&lt;&#x2F;li&gt;
&lt;li&gt;New models and shader changes so the low level of detail terrain will look a lot better.&lt;&#x2F;li&gt;
&lt;li&gt;While gliding you can now encounter updrafts.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;As always, there are always more changes than we can add to a single post!
You can check out the full changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#0160-2024-03-30&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this versions contributors (in random order):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Laura, Monty Marz, Yusuf Bera Ertan, Animoe, Gemu Peachems, Talha Qamar, BigKhan, Xiretza, Keegan-JW, Marcel Märtens, Tim Vincent, Woeful_Wolf, Youssef Fahmy, Pybit, Uniior, Haijo7, TelepathicWalrus, Treeco, JimmyDdotEXE, Benoît du Garreau, Dmytro Kovalchuk, Froggy, Hugo Famechon, Neras, Illia Denysenko, HEIEnthusiast, Joshua Barretto, Javier Pérez, Sorann753, JCoxeye, David Fisher, danielkenji83, Syniis, crabman, Igigog, Jaroslav Lichtblau, Francesco Vasco, Darren Salt, Otto Richter, Py bit, Thomas S, flo666, Justin Shipsey, Dominik Broński, Marcel, Avi Weinstock, Ben Wallis, Raul Wagner Costa, Stefan Glorch, Nadja von Reitzenstein Čerpnjak, Isse, Gaxrodi, walpo, Sam, Joaquin Tornello, Christof Petig, PopeRigby, nectical, RunRobDog, jshipsey, juliancoffee, Hrom, tygyh, Samuel Keiffer, Youser Nayme, Michal Sroczynski, Evgen Kot, UncomfySilence, 心慌慌脸红红, Brandon Dyer, uniior, James Hiew, laundmo, Sanctorum Thomas, do-no-van, Imbris, evgenkot, Scott Bronson, flo, João Capucho, DaforLynx, Jeffrey Cox, James Melkonian, Michał&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Since the last release we have started using Weblate for translation contributions.
Those contributors are listed here (in random order):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;tidare, Vuizur, juliancoffee, AldanTanneo, guillermytho, Paw, marcelodemonn, Nylux, Vybearz, 5Litt, DiXiao, ezamux, Jasmia, Timm, thomas-babord, zoli111, leca, Renkal, macintosh, zerocraft, GeroinEX, RyanOrigins, Vallley, mapemka, tdehtyar, alextecplayz, Nifou, Axegaik, jadedctrl, loglizzy, Sinari, Dutchy5, aleeo, DominicF96, FruityHarriott, evgenkot, Witch, alexjhr, valebest26, fvasco, karinator, walpo, bov, jiangyi, Sovenok-Hacker, thatevilman, fnetX, SomeTr, Ixniyevonn, mozz, Positron832, dyegomb&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one for this
release!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;release-0-16&#x2F;screenshot_1711305682956.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 228</title>
          <pubDate>Sat, 09 Mar 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-228/</link>
          <guid>https://veloren.net/blog/devblog-228/</guid>
          <description>&lt;p&gt;These weeks, we learn about glider physics, Weblate preference and plugin architecture.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @uniior and @crabman, @imbris, @danielkenji83, @floppy,
@necti, @do-no-van, @fvasco, @Synis, @juliancoffee, @otto.splvs, @walpo, @neras.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes more beginner balancing, shaderc optimization fixes, attack blocking,
terracotta tweaks, glider buffs, sword vs speed buff balancing, more sword balancing,
translation updates, cave updates 💎, more flexible asset autocompletion,
a bunch of Weblate translations, generating worlds from the command line, body transformation,
translation fixes, enemy balancing in terracotta ruins, lots of translation enhancements,
chat window updates, glider fixes, gliding travelers, admin broom improvements,
beam aiming fixes, dependency vulnerability fixes, loot table simplifications,
dropped item merge, better character loading debugging, admin glider, and pets for NPCs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;cropveloren-voxygen_2024-03-04_15-52-06.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on learnable recipes, vampire castle, spots in plugins,
loading plugins from the server, quadtree LoD tiling, animated NPCs in plugins, attack balancing,
bitcode for more efficient network communication, dwarfen mines, NIX script updates, sword animation,
structure data loading, sprite attributes, a new voxygen UI, hammer skills, mage tower,
attack radius, further cave changes, &lt;code&gt;aabb_in_circle&lt;&#x2F;code&gt; refactoring, rock snapper animation,
test server fixes, inventory overflow, aerodynamics, loot table in structure rework,
loot table balancing, merging torvus and more Weblate translation updates.&lt;&#x2F;p&gt;
&lt;p&gt;Phew, there is a lot of coding going on at the moment!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;veloren-voxygen_2024-03-04_14-45-38.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;&#x2F;h2&gt;
&lt;p&gt;Mushroom spores &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;2024-02-27_18-03-50.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;The community &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1210301755036926012&#x2F;1212852910111719545&quot;&gt;voted&lt;&#x2F;a&gt; to keep &quot;energy&quot; over &quot;stamina&quot; in descriptions.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;veloren-voxygen_2024-03-04_14-41-50.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The discussion about using a different or even creating a custom UI crate for veloren &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1047541214104256572&#x2F;1212466680987389974&quot;&gt;rekindled&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tweaks-fixes-and-additions-to-air-content-by-juliancoffee&quot;&gt;Tweaks, fixes and additions to air content by @juliancoffee&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;glider-physics&quot;&gt;Glider physics&lt;&#x2F;h3&gt;
&lt;p&gt;So, remember the update to the glider which left some people upset? Well, sorry, although we did buff it later, so I guess it&#x27;s fine now :). But I&#x27;m here to announce a new change, more like a bugfix, to be honest.&lt;&#x2F;p&gt;
&lt;p&gt;Two things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Actual wind.
We missed it in the client-side calculation of gliding, this update enables it, and it&#x27;s much cooler now.
Your gliding ratios will naturally be affected by it, if you fly into the wind, your horizontal velocity will be lower, while vertical one is the same, which means you will cover less distance until you touch the ground.&lt;&#x2F;p&gt;
&lt;p&gt;But the same is true if you follow the wind, in that case, your velocity is buffed by it, which means you can cover more distance until you touch the ground!
Whether the wind goes where you want to go or not might be the question of luck, yes, so ... I wish you all good luck!)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Ridge lift.
Here @Treeco might add more (he was responsible for fix in this MR), but conceptually, the more steep the terrain is, the bigger lift you get, because the wind pushes into the ground and bounces from it. If it pushes into the mountains, the only way it can go then is upward, so you get a massive boost there. Here is the video during the strong storm. (Note, air velocity and actual upward gliding velocity).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;2024-03-01_17-44-14.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;npc-gliding-ai&quot;&gt;NPC Gliding AI&lt;&#x2F;h3&gt;
&lt;p&gt;For a while, humanoid NPC with gliders did equip the glider when reaching the velocity limit soon after which they would receive fall damage, but the way they controlled their glider was wrong, and they did stall very frequently. Now, this problem is fixed, as they are using their glider maybe even better than Voxygen&#x27;s automatic glide feature.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1709317100298.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;admin-tools&quot;&gt;Admin tools&lt;&#x2F;h3&gt;
&lt;p&gt;For a while, we had The Broom in &#x2F;kit debug, it resembles the legends of witches using them to fly, but the actual implementation and visuals were close to non-existent. So I did improve things a little, by adding better particles and orientation. There&#x27;s an intermediate state shown in the video below, and since then we have improved things to change orientation based on velocity (so now the animation also changes depending on whether you fly up or down) and better particle positioning, which can be seen if you try to fly straight down.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;output_res.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And, for a long time, I was working on Admin Glider. The goal was revamping internal ability systems, as for now we only can have them on weapons, which is limiting, we want to do more. Also, it&#x27;s a chance to experiment with the glider itself and explore different gliding physics effects.
Here is a very short demo.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;output_res2.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here is the recorded video:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;JWzGKay_vNs&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In the future it allows us to be more flexible with where our abilities come from, so we can implement things like fishing, better mining, armor abilities, fist fighting and so on.&lt;&#x2F;p&gt;
&lt;p&gt;Comments by @Treeco:&lt;&#x2F;p&gt;
&lt;p&gt;So, ridge lift isn&#x27;t a new feature, and in fact we&#x27;ve made it weaker than before, but previously it applied in the wrong places.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s meant to represent horizontal wind being deflected upwards by hillsides, generating updraughts, however we were calculating steepness incorrectly, such that plains were maximally steep, and a sheer cliff faces were considered horizontal. This lead to unexpected, random, strong thermals while travelling, and was generally just confusing. It seems to work more as expected now.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;animated-characters-in-plugins-by-christof&quot;&gt;Animated characters in plugins by @Christof&lt;&#x2F;h2&gt;
&lt;p&gt;This figure has a separate idle and running animation





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;vlcsnap-2024-03-01-23h43m40s361.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;I have a working animation inside a plugin, connected via &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;component-model.bytecodealliance.org&#x2F;design&#x2F;wit.html&quot;&gt;WIT&lt;&#x2F;a&gt; (so I could also write the animation in C++, java script or python), hot reloading for plugins isn&#x27;t working, yet, but it is already very cool!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;dev&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;christof&#x2F;plugin_figure&#x2F;plugin&#x2F;examples&#x2F;anim&#x2F;src&#x2F;lib.rs?ref_type=heads#L60&quot;&gt;Plugin source code&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And these are the most amazing features of all:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;you can compile the plugin with only a copy of the wit, no veloren sources are required&lt;&#x2F;li&gt;
&lt;li&gt;you can debug the plugin in chrome, single step into Rust independent of veloren:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;javascript1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;javascript2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;The output of the tested function:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;javascript3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;0034be90a683a618bae0eef5d36a0814fe9a08ab&#x2F;plugin&#x2F;js-test&#x2F;html&#x2F;main.js&quot;&gt;And the JS test harness&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;JavaScript&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-JavaScript &quot;&gt;&lt;code class=&quot;language-JavaScript&quot; data-lang=&quot;JavaScript&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;animation&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;events&lt;&#x2F;span&gt;&lt;span&gt;} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.&#x2F;anim.js&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;getBody&lt;&#x2F;span&gt;&lt;span&gt;} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.&#x2F;veloren&#x2F;plugin&#x2F;actions.js&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;events&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;load&lt;&#x2F;span&gt;&lt;span&gt;(&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;single-player&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;bodyidx &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;getBody&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;lizard&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;body &lt;&#x2F;span&gt;&lt;span&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;animation&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Body&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;bodyidx&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;dependency &lt;&#x2F;span&gt;&lt;span&gt;= {
&lt;&#x2F;span&gt;&lt;span&gt;    velocity: [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;span&gt;    ori: [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;span&gt;    lastOri: [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;span&gt;    globalTime: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.2&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    avgVel: [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;span&gt;    state: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;,
&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;skeleton &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;updateSkeleton&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;dependency&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;skeleton&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;important-translation-announcement-by-juliancoffee&quot;&gt;Important translation announcement by @juliancoffee&lt;&#x2F;h2&gt;
&lt;p&gt;TL;DR from now on, Weblate is the only accepted way to get your translations into the game.&lt;&#x2F;p&gt;
&lt;p&gt;Now, if I may, a little history.&lt;&#x2F;p&gt;
&lt;p&gt;For some time, we used a simplistic internationalization system via config files. Our game is written in Rust and for config files, we use &lt;code&gt;.ron&lt;&#x2F;code&gt; files. If you know what JSON is, you get the idea, but simply put it&#x27;s a way to represent common data structures like numbers, strings, lists or objects, using a strictly defined format. Our data structure for translations is an object that maps localization keys to the translated text.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1709578940224.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;&#x2F;&#x2F;&#x2F; WARNING: Localization files shall be saved in UTF-8 format without BOM
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;&#x2F;&#x2F; Localization for &amp;quot;global&amp;quot; English
&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    string_map: {
&lt;&#x2F;span&gt;&lt;span&gt;        &#x2F;&#x2F; SCT outputs
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;hud.sct.experience&amp;quot;: &amp;quot;{amount} Exp&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;hud.sct.block&amp;quot;: &amp;quot;BLOCKED&amp;quot;,       
&lt;&#x2F;span&gt;&lt;span&gt;        },
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    vector_map: {
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The snippet above defines two keys: &lt;code&gt;hud.sct.experience&lt;&#x2F;code&gt; and &lt;code&gt;hud.sct.block&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are some disadvantages to using it, and I think you will figure them out for yourself. However, the main disadvantage is that this format is only used in Veloren, so there is no tooling for it. We could build this tooling ourselves, and we tried, but what we ideally need is some production-ready solution we and our translators (yes, I&#x27;m looking at you, the person behind the screen :3) can use.&lt;&#x2F;p&gt;
&lt;p&gt;So we started by changing the underlying format to Fluent, a localization format by Mozilla. We could go with something older like gettext, but we decided that Fluent will serve us better, as we&#x27;re building the game, and we need more modern features.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1708942028611.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;hud-sct-experience = { $amount } XP
&lt;&#x2F;span&gt;&lt;span&gt;hud-sct-block = BLOCKED
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is the same snippet, much easier to write and read, don&#x27;t you think?&lt;&#x2F;p&gt;
&lt;p&gt;That solved a lot of problems but didn&#x27;t solve the main one: You still need a lot of expertise to get your translation into the game. The only way to get anything into the game is by committing it to the git repository, which means you need to at least know what that is, and then how to use it. Ideally, we prefer you also wouldn&#x27;t burn out in the middle of doing all of it.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s where Weblate steps in. It&#x27;s a web interface, you can open it in your browser, just go to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;translate.codeberg.org&#x2F;projects&#x2F;veloren&#x2F;#information&quot;&gt;https:&#x2F;&#x2F;translate.codeberg.org&#x2F;projects&#x2F;veloren&#x2F;#information&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;After you log in, you can start suggesting translations, simple as that. Then, either your translation is reviewed by dedicated members of the translation team, or you get three upvotes from the community and soon after that, the next time you get the update from Airshipper, it will include your work!&lt;&#x2F;p&gt;
&lt;p&gt;Check our translator documentation for more:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;game-translation.html&quot;&gt;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;game-translation.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For better or for worse, I&#x27;m here not to tell you the story, but to share a decision we made.
In the past, the only way to get your translation in the game was to open a Merge Request on GitLab and get it reviewed and merged.&lt;&#x2F;p&gt;
&lt;p&gt;It was unnecessarily hard for non-programmers, and we introduced Weblate as an alternative way.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1708924399228.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Recently, we focused our attention on Weblate and made it the recommended way to translate.&lt;&#x2F;p&gt;
&lt;p&gt;Weblate helps us with the organization of the translation team, we can define per-language reviewers, and if not we have escape-hatch in terms of community voting, multiple people can work with the same language at the same time, which wasn&#x27;t possible with git-based workflow, it provides a lot of useful stats, it even has some automated checks.&lt;&#x2F;p&gt;
&lt;p&gt;There are downsides to it, as it makes the feedback loop much bigger, but there are some ways to make it shorter. Also, it&#x27;s a bit longer to review contributions in Weblate, but we believe it can be solved in the future.&lt;&#x2F;p&gt;
&lt;p&gt;That said, git isn&#x27;t happy when multiple entities touch the same part of the project and requires careful coordination of workflows, which puts a lot of work on maintainers, so we needed to choose, and we have chosen Weblate.&lt;&#x2F;p&gt;
&lt;p&gt;If you contributed via GitLab in the past, reach out to us, there is a high chance we will give you a reviewer role in Weblate, leave a comment on your accepted GitLab MR, so we know that&#x27;s you.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1709202017023.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;CaveFire.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1709203181715.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1709207772187.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;228&amp;#x2F;screenshot_1708966239359.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Paradise Island? See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;228&#x2F;CROPveloren-voxygen_2024-03-04_13-16-55.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 227</title>
          <pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-227/</link>
          <guid>https://veloren.net/blog/devblog-227/</guid>
          <description>&lt;p&gt;These weeks, we finally thank the many weblate translators, announce 0.16 release schedule and look into the cave rework.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @xMAC94x, @brons_glb, @juliancoffee, @naddl, @crabman and @uniior, @Isse, @laundmo,
@zesterer, @Christof, @imbris, @fvasco, @evgenkot, @y.hfahmy, @floppy, @james.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes a Rust tool-chain update, weapon crafting hints, a chat display fix, server command extensions, many dependency updates, SRV DNS lookup,
critical chance RON cleanups, separate event busses, wind affect on gliders, aiming tweaks, WIT based plugins using wasmtime, removing debug output,
a metal shader fix, Italian translation updates, loot localization, entity deletion fixes, more signals for shutdown, beginner balancing, terracotta ruins,
shader optimizations, contagious burning, and Phoenix tweaks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;ArcMoonTiger.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on character gender change, bank storage, shader improvements (horizon, cloud, LoD), loading plugins over the network,
ore damage count, network connection improvements, civilization simulation, sword balancing, snakes, and a server GUI.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;&#x2F;h2&gt;
&lt;p&gt;@juliancoffee proposed an onboarding documentation at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1944&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1944&lt;&#x2F;a&gt; and is looking for feed-back.&lt;&#x2F;p&gt;
&lt;p&gt;@xMAC94x modernized the Rust compiler version and many dependencies, therefore merge request should rebase on master before push to reduce the load on CI servers.&lt;&#x2F;p&gt;
&lt;p&gt;An update on steel drum design








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;1uaqkz&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;A 3D modelled Veloren character





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;Bigapple.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;New treeant sapling attack
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;2024-02-17_16-06-08.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Psychedelic colors by @ThatOneMonkey369, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449602562165833760&#x2F;1205687401859784824&quot;&gt;see this discord thread for explanation and code&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;Screenshot_2024-02-09_203750.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Bug report: Floating houses





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;Screenshot_20240215_011701.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updates-by-juliancoffee&quot;&gt;Updates by @juliancoffee&lt;&#x2F;h2&gt;
&lt;p&gt;We now have &lt;code&gt;&#x2F;into_npc&lt;&#x2F;code&gt; command, which is similar to &lt;code&gt;&#x2F;make_npc&lt;&#x2F;code&gt;, but instead lets you transform into the required NPC which may be useful when adding one … or just for fun!&lt;&#x2F;p&gt;
&lt;p&gt;It doesn&#x27;t support alignment and group manipulation, but it can be added later. The following picture shows this functionality in action:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1706878480641.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And … grandiose update to our gliding mechanics, we now have wind simulation, and your glider will behave differently depending on some conditions. We already did post about in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-212&quot;&gt;devblog-212&lt;&#x2F;a&gt;, and now it&#x27;s finally going live.&lt;&#x2F;p&gt;
&lt;p&gt;We did tune it to our usual gliding capabilities, yet don&#x27;t worry, we didn&#x27;t nerf it too much, and you can still get the wind which will even lift you upwards if you&#x27;re lucky :). See also the video in the previous issue.&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and Admin Glider sneak-peek, which may or may not be actually live when people will see this post.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;MdYWVjOIesE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;new-airshipper-by-isse&quot;&gt;New airshipper by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;I published the newest Airshipper version on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;airshipper&quot;&gt;&lt;code&gt;crates.io&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. Which means that doing &lt;code&gt;cargo install airshipper&lt;&#x2F;code&gt; is now possible to do. I will also be maintaining this with newer versions of airshipper in the future.&lt;&#x2F;p&gt;
&lt;p&gt;One issue I ran into while doing this was that the max compressed package size on crates.io is 10 MB. But trying to publish Airshipper it was 14 MB. Most of this size, 11MB, was from a font we used for the server browser where we need to support most unicode symbols. What I ended up doing is using the system font for the crates.io package instead, meaning that on some systems it might look a bit different from the Airshipper builds we produce.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;translation-updates-by-walpo&quot;&gt;Translation updates by @walpo&lt;&#x2F;h2&gt;
&lt;p&gt;The translation team has updated the documentation for translators, featuring Weblate as the recommended method to translate the game.
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;index.html&quot;&gt;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;index.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The translation workflow is defined better. The current workflow is attached.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;weblate-veloren-workflow.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;car-racing-event-by-vagabond-and-necti&quot;&gt;Car racing event by @Vagabond and @necti&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;poster.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;7nRxYBjufUM&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;0-16-release-on-march-30th-by-xmac94x&quot;&gt;0.16 release on March 30th by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;The 0.16 release is on Saturday, 2024-03-30 18:00 UTC&lt;&#x2F;p&gt;
&lt;p&gt;As usual, there will be a feature freeze starting from 2024-03-23 18:00 UTC. We recommend submitting critical and large MRs for review now, before the feature freeze.&lt;&#x2F;p&gt;
&lt;p&gt;This release will also have a stress test event between the feature freeze and the release. We will be sharing further details of this later.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;Cliffs.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;getting-your-large-mr-merged-before-feature-freeze&quot;&gt;Getting your large MR merged before feature freeze&lt;&#x2F;h3&gt;
&lt;p&gt;Please mention @xMAC94x in the ⁠&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1212006333285666816&quot;&gt;&lt;strong&gt;0.16&lt;&#x2F;strong&gt; release MRs thread&lt;&#x2F;a&gt; with a short summary with the following details (the more, the better):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;What is complete&lt;&#x2F;li&gt;
&lt;li&gt;What needs to be done&lt;&#x2F;li&gt;
&lt;li&gt;Can your feature be partially introduced to master in its current state (as multiple MRs)?&lt;&#x2F;li&gt;
&lt;li&gt;Do you foresee any issues with your MR and if so, which ones?&lt;&#x2F;li&gt;
&lt;li&gt;Why should this feature be in 0.16?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is required to align our testing and review strategies to ensure a smooth release.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;Cliffs2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;schedule&quot;&gt;Schedule&lt;&#x2F;h3&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;2024-03-23 18:00:00 UTC Feature freeze — No new feature MRs will be merged.
&lt;&#x2F;span&gt;&lt;span&gt;2024-03-25 18:00:00 UTC Stress test event.
&lt;&#x2F;span&gt;&lt;span&gt;2024-03-29 10:00:00 UTC Total freeze — no new merges will be introduced unless they&amp;#39;re critical.
&lt;&#x2F;span&gt;&lt;span&gt;2024-03-29 16:00:00 UTC Release build will be compiled.
&lt;&#x2F;span&gt;&lt;span&gt;2024-03-30 18:00:00 UTC Release party!
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;cave-rework-by-synis&quot;&gt;Cave rework by @Synis&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1707659983131.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1707659773085.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1707659688299.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1707929916729.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CaveGlow2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CaveMushroom.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CaveMushroom2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CaveBarren.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CaveBarren2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CaveLevels.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;contentdeliverynetwork-switch&quot;&gt;ContentDeliveryNetwork switch&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1708737909565.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Previously we used direct links to the images posted in Discord from the devblog. Now the links got an expiry date and people saw long delays in loading them we
switched to Wasabi.&lt;&#x2F;p&gt;
&lt;p&gt;A huge shoutout to @walpo for driving this transition and fixing all the links after uploading the material.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1708742567437.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;translation-attribution&quot;&gt;Translation attribution&lt;&#x2F;h2&gt;
&lt;p&gt;I had trouble find a proper way to attribute the countless contributors to our translations in weblate, @walpo helped out with a proper link: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;translate.codeberg.org&#x2F;projects&#x2F;veloren&#x2F;#reports&quot;&gt;https:&#x2F;&#x2F;translate.codeberg.org&#x2F;projects&#x2F;veloren&#x2F;#reports&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I am still looking for a good way to present this, but here are the contributions from the past 14 months. &lt;strong&gt;Thank you!&lt;&#x2F;strong&gt; To all people involved!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1707515304088.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;ul&gt;
&lt;li&gt;Arabic (Saudi Arabia): walpo (22)&lt;&#x2F;li&gt;
&lt;li&gt;Basque: walpo (38)&lt;&#x2F;li&gt;
&lt;li&gt;Belarusian: walpo (38)&lt;&#x2F;li&gt;
&lt;li&gt;Bulgarian: walpo (7)&lt;&#x2F;li&gt;
&lt;li&gt;Catalan: walpo (37)&lt;&#x2F;li&gt;
&lt;li&gt;Chinese (Simplified): walpo (38), mozz (10), jiangyi (5), zerocraft (4)&lt;&#x2F;li&gt;
&lt;li&gt;Chinese (Traditional): walpo (22)&lt;&#x2F;li&gt;
&lt;li&gt;Czech: walpo (38), 5Litt (1)&lt;&#x2F;li&gt;
&lt;li&gt;Dutch: walpo (34)&lt;&#x2F;li&gt;
&lt;li&gt;English: walpo (20), fnetX (4)&lt;&#x2F;li&gt;
&lt;li&gt;Esperanto: walpo (36), jadedctrl (1)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;CityLights.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;ul&gt;
&lt;li&gt;French: Nifou (51), walpo (40), fnetX (30), DominicF96 (11), ezamux (8), Timm (4), Vallley (1)&lt;&#x2F;li&gt;
&lt;li&gt;German: fnetX (183), walpo (39), Vuizur (3)&lt;&#x2F;li&gt;
&lt;li&gt;Hungarian: walpo (38), zoli111 (3)&lt;&#x2F;li&gt;
&lt;li&gt;Italian: walpo (37)&lt;&#x2F;li&gt;
&lt;li&gt;Japanese: walpo (36)&lt;&#x2F;li&gt;
&lt;li&gt;Korean: walpo (39), l3nemy (1)&lt;&#x2F;li&gt;
&lt;li&gt;Norwegian Bokmål: walpo (34)&lt;&#x2F;li&gt;
&lt;li&gt;Polish: walpo (39)&lt;&#x2F;li&gt;
&lt;li&gt;Portuguese: walpo (22), loglizzy (3)&lt;&#x2F;li&gt;
&lt;li&gt;Portuguese (Brazil): walpo (38), RyanOrigins (4)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1708454493717.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;ul&gt;
&lt;li&gt;Romanian: walpo (38), alextecplayz (12)&lt;&#x2F;li&gt;
&lt;li&gt;Russian: tdehtyar (46), walpo (39), DiXiao (33), Paw (15), GeroinEX (15), Ixniyevonn (6), Sovenok-Hacker (4), aleeo (3), leca (2), Axegaik (1), mapemka (1), evgenkot (1)&lt;&#x2F;li&gt;
&lt;li&gt;Serbian: walpo (38)&lt;&#x2F;li&gt;
&lt;li&gt;Spanish: walpo (50), macintosh (27), TestVelorenAccount (2), alexjhr (1)&lt;&#x2F;li&gt;
&lt;li&gt;Spanish (Latin America): walpo (39), marcelodemonn (24), guillermytho (3)&lt;&#x2F;li&gt;
&lt;li&gt;Swedish: walpo (39)&lt;&#x2F;li&gt;
&lt;li&gt;Thai: walpo (39), tidare (4)&lt;&#x2F;li&gt;
&lt;li&gt;Turkish: walpo (37)&lt;&#x2F;li&gt;
&lt;li&gt;Ukrainian: walpo (38), SomeTr (23), Renkal (11), juliancoffee (7)&lt;&#x2F;li&gt;
&lt;li&gt;Vietnamese: walpo (38)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1708738205241.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;&#x2F;th&gt;&lt;th&gt;Count total&lt;&#x2F;th&gt;&lt;th&gt;Edits total&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;fnetX&lt;&#x2F;td&gt;&lt;td&gt;245&lt;&#x2F;td&gt;&lt;td&gt;5833&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;walpo&lt;&#x2F;td&gt;&lt;td&gt;1087&lt;&#x2F;td&gt;&lt;td&gt;5816&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Nifou&lt;&#x2F;td&gt;&lt;td&gt;51&lt;&#x2F;td&gt;&lt;td&gt;2884&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DiXiao&lt;&#x2F;td&gt;&lt;td&gt;33&lt;&#x2F;td&gt;&lt;td&gt;862&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;tdehtyar&lt;&#x2F;td&gt;&lt;td&gt;46&lt;&#x2F;td&gt;&lt;td&gt;711&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;macintosh&lt;&#x2F;td&gt;&lt;td&gt;27&lt;&#x2F;td&gt;&lt;td&gt;378&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Renkal&lt;&#x2F;td&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;294&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GeroinEX&lt;&#x2F;td&gt;&lt;td&gt;15&lt;&#x2F;td&gt;&lt;td&gt;292&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;marcelodemonn&lt;&#x2F;td&gt;&lt;td&gt;24&lt;&#x2F;td&gt;&lt;td&gt;221&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Paw&lt;&#x2F;td&gt;&lt;td&gt;15&lt;&#x2F;td&gt;&lt;td&gt;196&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;guillermytho&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;153&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;juliancoffee&lt;&#x2F;td&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;133&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;SomeTr&lt;&#x2F;td&gt;&lt;td&gt;23&lt;&#x2F;td&gt;&lt;td&gt;114&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;mapemka&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;93&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;evgenkot&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;84&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ixniyevonn&lt;&#x2F;td&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;60&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;aleeo&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;57&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ezamux&lt;&#x2F;td&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;53&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Timm&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;52&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Sovenok-Hacker&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;37&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;TestVelorenAccount&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;22&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;leca&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;21&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;alexjhr&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DominicF96&lt;&#x2F;td&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;19&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Vallley&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;19&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;alextecplayz&lt;&#x2F;td&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;mozz&lt;&#x2F;td&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;jiangyi&lt;&#x2F;td&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;RyanOrigins&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;tidare&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;zerocraft&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;loglizzy&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Vuizur&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;zoli111&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;jadedctrl&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Axegaik&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;l3nemy&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;5Litt&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;227&amp;#x2F;screenshot_1707272377317.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Northern shores. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;227&#x2F;CaveGlow.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 226</title>
          <pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-226/</link>
          <guid>https://veloren.net/blog/devblog-226/</guid>
          <description>&lt;p&gt;These weeks, we marvel at the new colorful trees, and talk about aiming and grammatical gender.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @floppy, @dsalt, @timvinc, @keeganjw, @Sam and @crabman, @evgenkot,
@donovan, @zesterer, @jcoxeye, @juliancoffee, @Isse, @synis, @christof, @fvasco, @kHannibal, @Treeco, @woeful,
and @Animoe.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes an adlet elder sword fix, many many translation updates, kill_npc targeting pets, enter&#x2F;return equivalence in chats,
battlemode time fixes, digging tooltip fixes,
recipes for charms, sword balancing, toggling lanterns on ground, item tiering fixes, more price entries, no cursor jump when un-grabbing,
updated furniture models,
terrain persistence crash fix, better network compression of sprites, sea decor block fix, weather optimization, better tab completion for items,
hot reload fixes, random colored trees, new LoD tree types, WGPU 0.18🥳, better aiming, inventory overflow logic, more cursor position fixes,
proper grammatical gender in chat messages, and item tooltip size.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1199040801699807273&amp;#x2F;wood_pile.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on item reinforcement, Mammoth AI, mining ore with multiple hits, separated event systems, snakes,
hammer skills, flight aerodynamics and wind effects, a chat rework, item merging, LoD shader improvements, better balancing of beginner progress,
learnable recipes, dwarven mine, poise based blocking, more NPC commands, an active glider (admin only), loading plugins over network and
supporting WASI 0.2 components as plugins.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1199130288681394276&amp;#x2F;bed-0.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;interactible-lights-by-zesterer&quot;&gt;Interactible lights by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;As a demonstration of the new sprite representation overhaul and sprite attribute system, I added an attribute to lamp-like sprites
specifically (lanterns, street lights, etc.) that allows them to be toggled on and off.
Players can interact with them as they can other sprites to toggle this attribute.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1198665857388249128&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Also, you can read more about plans for moveable sprite parts in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;467861553178345502&#x2F;1199449644367892501&quot;&gt;this discord thread&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;over-the-shoulder-aiming-by-woeful&quot;&gt;Over the shoulder aiming by @Woeful&lt;&#x2F;h2&gt;
&lt;p&gt;After being unsatisfied with the third person camera whilst using ranged weapons I decided to make a change.
My first issue being unable to properly see what I was aiming at due to the player character obstructing the view.
The second being projectiles weren&#x27;t actually going towards where you were aiming!&lt;&#x2F;p&gt;
&lt;p&gt;To address the first issue I reworked the camera in third person to allow horizontal and vertical offsets, allowing for over-the-shoulder style camera gameplay.
This is also completely customizable in the gameplay settings menu, where players can configure these offsets in any way they like.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1199084096798855229&amp;#x2F;shoulder_cam.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;But the problem now with moving the camera - the ranged projectiles no longer go where you are aiming! This is due to how the projectile spawning system works;
projectiles are spawned at a specific position relative to the player body, and then fired forward, simply copying the player&#x27;s look direction. Due to the camera now being offset, where the camera crosshair is positioned and where the player is looking is now different!&lt;&#x2F;p&gt;
&lt;p&gt;To fix this I needed to rework how the player&#x27;s look direction is calculated; instead of just copying the camera rotation, we need to have the player look at where we believe the camera crosshair is pointing. To do this we cast a ray from the camera&#x27;s position forwards and look if we intersect the terrain or any entity and return the closer point. (This required me to create a new basic entity ray cast method to check for intersections with entity hit boxes).&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1199795799241019492&amp;#x2F;entity_raycasting.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Once we have this point where the camera ray is hitting something, we can determine the direction from the player body&#x27;s projectile spawn point to this camera hit point.
This direction will now be our new player&#x27;s look direction! This ensures that now matter where the camera is offset and positioned, the player will always look and aim to where the crosshair is pointing! And handily enough, this new aiming system fixes my second issue mentioned initially as well!&lt;&#x2F;p&gt;
&lt;p&gt;New configurable camera features and more crosshair accurate projectiles - two birds with one stone!
I can answer any questions or clarifications needed for this new &quot;QoL&quot; ranged camera&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wgpu-update&quot;&gt;WGPU update&lt;&#x2F;h2&gt;
&lt;p&gt;@Isse&#x27;s update across ten full versions of our GPU library WGPU finally merged. You should get it automatically with the next weekly release this Thursday.
From then on DX11 support is history,
but even older graphics cards should now be supported thanks to openGL. And newer graphics cards with Vulkan and DX12 drivers likely get a speed boost.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1199855225662607473&amp;#x2F;grafik.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Please note that the related transition from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;google&#x2F;shaderc&quot;&gt;&lt;code&gt;shaderc&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gfx-rs&#x2F;naga&quot;&gt;&lt;code&gt;naga&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; will happen in a separate merge.
This will finally get rid of some compilation dependencies like a python interpreter.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly migrating to 0.19.1 should be a low risk later update.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1200411787774935081&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;multi-hit-mining-by-crabman&quot;&gt;Multi-hit mining by @crabman&lt;&#x2F;h2&gt;
&lt;p&gt;







&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;46yjjo&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449655372618137618&amp;#x2F;1199060499627770016&amp;#x2F;2024-01-22_19-37-52.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chat-tweaks-by-synis&quot;&gt;Chat tweaks by @Synis&lt;&#x2F;h2&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1201246877346168872&amp;#x2F;1201247065829806110&amp;#x2F;2024-01-28_20-20-51.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;terracotta-updates-by-floppy&quot;&gt;Terracotta updates by @floppy&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1201400581995122768&amp;#x2F;1201400877307666522&amp;#x2F;Screenshot_from_2024-01-28_21-29-00.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1201400581995122768&amp;#x2F;1201400879824244747&amp;#x2F;Screenshot_from_2024-01-28_21-32-18.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1201400581995122768&amp;#x2F;1201400880654721034&amp;#x2F;Screenshot_from_2024-01-28_21-33-00.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1201400581995122768&amp;#x2F;1201400883259375686&amp;#x2F;Screenshot_from_2024-01-28_21-35-53.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;









&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;kr3ggy&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;various-beautiful-screenshots&quot;&gt;Various beautiful screenshots&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1201642951458168913&amp;#x2F;Beautiful.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1202320150762623036&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1203361737869627432&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1203707497681129492&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1202317611296104448&amp;#x2F;screenshot_1705520000350.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Synchronized lightning (now fixed)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1116406965237719062&amp;#x2F;1202971203791486996&amp;#x2F;2024-02-02_10-20-31.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Thermal glider lift&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1202982760734523432&amp;#x2F;screenshot_1706842868562.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Destruction in Lagrad&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1202907012040495174&amp;#x2F;screenshot_1706857049197.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;translation-updates-by-juliancoffee&quot;&gt;Translation updates by @juliancoffee&lt;&#x2F;h2&gt;
&lt;p&gt;There are many ways to contribute to Veloren and the least technical one is to join the translation team. We do need both people who want
to translate the game and people who want to review other people&#x27;s translations, as well as just people in general who can give us a
special perspective of their language concerning translation internal systems. We had &lt;code&gt;@Translator&lt;&#x2F;code&gt; role, but it was somewhat generic,
yet at the same relatively difficult to gain.&lt;&#x2F;p&gt;
&lt;p&gt;For that, I want to make a special announcement, we now have a &lt;code&gt;@TranslationPingSquad&lt;&#x2F;code&gt; role that you can &lt;strong&gt;self-assign&lt;&#x2F;strong&gt; in &lt;code&gt;#⁠rules-and-info&lt;&#x2F;code&gt;,
and get pings about different translation-related activities and discussions.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;YGM_Pw6rPHg&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The next portion of translation news is going in, the biggest change is gender handling, grammatical gender to be precise. If your language has the concept of grammatical gender, you already have a glimpse of how complex this problem is, yet it&#x27;s even more complex than you can imagine.&lt;&#x2F;p&gt;
&lt;p&gt;But complex problems shouldn&#x27;t scare us!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1199561826279620648&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In a previous blog, we proposed the idea of passing two variables, first for &quot;he or she&quot; and second for animacy,
but later we decided to make very small incremental step and expose only player gender, which we derive from the character&#x27;s sex, and expose it only in chat UI.
This MR was mainly targeted at Slavic languages, as they have a verb-noun agreement, which means that you need to
pick the right verb depending on the gender of the actor who &#x27;executes&#x27; the action this verb represents.&lt;&#x2F;p&gt;
&lt;p&gt;Here is an example.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;hud-chat-died_of_pvp_buff_msg =
&lt;&#x2F;span&gt;&lt;span&gt;    .burning = { $attacker_gender -&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        [she] [{ $attacker }] спалила [{ $victim }] живцем
&lt;&#x2F;span&gt;&lt;span&gt;        *[he] [{ $attacker }] спалив [{ $victim }] живцем
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1201065489422622790&amp;#x2F;veloren-voxygen_rguYa62p0C.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Let me unpack it.&lt;&#x2F;p&gt;
&lt;p&gt;(I assume that you&#x27;ve seen Fluent already, but if you haven&#x27;t, this declares message hud-chat-died_of_pvp_buff_msg and its attribute, burning, which says what should we display on death from Burning debuff)&lt;&#x2F;p&gt;
&lt;p&gt;First, we match on &lt;code&gt;$attacker_gender&lt;&#x2F;code&gt;, because it&#x27;s PvP defeat, we do know[1] the gender of both &lt;code&gt;$attacker&lt;&#x2F;code&gt; and &lt;code&gt;$victim&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The first branch is &lt;code&gt;[she]&lt;&#x2F;code&gt;, which means that the attacker was feminine, and if you know Ukrainian, or at least can read Cyrillic, here we use &quot;спалила&quot;, which is a feminine variant of the word &quot;палити&quot; in Past Tense, or &quot;to burn&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;The second branch is slightly more complicated, it declares a masculine branch and default branch, hence &lt;code&gt;*&lt;&#x2F;code&gt; mark at the beginning, It means, that if, for some reason, you get an unexpected gender to match, you will default to the masculine branch. Other than that, it&#x27;s simple, you use the same template, except now you use &quot;спалив&quot;, which is the masculine form.&lt;&#x2F;p&gt;
&lt;p&gt;Important note, you only have &lt;code&gt;$attacker_gender&lt;&#x2F;code&gt; with PvP-like notifications. For PvE-like notifications, it&#x27;s much more complicated and we intentionally didn&#x27;t add it yet, you only have &lt;code&gt;$victim_gender&lt;&#x2F;code&gt;, which is always the player.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1199092792664805396&amp;#x2F;screenshot_1705955026448.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now, the asterisk.&lt;&#x2F;p&gt;
&lt;p&gt;We do know the gender of both &lt;code&gt;$attacker&lt;&#x2F;code&gt; and &lt;code&gt;$victim&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;That was a lie, we do not know. We derive it from the character&#x27;s gender, which may or may not match the gender of the player, but it&#x27;s a character you picked. This also means that we don&#x27;t know the gender at all if you don&#x27;t pick the character. In other words, when you join the server, and then instantly log out, without entering the world or if you did join the world but used Spectator mode, we can&#x27;t provide gender to translators, and they should handle it with the default branch if possible, i.e. fallback to current behaviour before this MR.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;hud-chat-offline_msg = { $user_gender -&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    [she] [{ $name }] вийшла з серверу
&lt;&#x2F;span&gt;&lt;span&gt;    [he] [{ $name }] вийшов з серверу
&lt;&#x2F;span&gt;&lt;span&gt;    *[any] [{ $name }] оффлайн
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1203044522364248094&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We do want to handle this better by providing a special UI where you can pick the real gender you want to associate with your account, and if you want to implement this feature, please reach out to us!&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s not all, there is also a small MR, that slightly improves the experience of translators when it comes to translating NPC messages,
namely &lt;code&gt;npc-speech-tell_site&lt;&#x2F;code&gt; and &lt;code&gt;npc-speech-tell_monster&lt;&#x2F;code&gt;. It&#x27;s the message that was combined from multiple different messages, and it was unclear which went where.&lt;&#x2F;p&gt;
&lt;p&gt;The answer is that these messages use &lt;code&gt;npc-speech-dir*&lt;&#x2F;code&gt; messages, &lt;code&gt;npc-speech-dist-*&lt;&#x2F;code&gt; messages and &lt;code&gt;npc-speech-body-*&lt;&#x2F;code&gt; variables from &lt;code&gt;body.ftl&lt;&#x2F;code&gt; component.
We now explicitly guarantee that these messages are used ONLY for &lt;code&gt;npc-speech-tell_site&lt;&#x2F;code&gt; and &lt;code&gt;npc-speech-tell_monster&lt;&#x2F;code&gt;,
which means that you should place all &quot;helper words&quot; like articles or any others on corresponding words, like that.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1203301892940107836&amp;#x2F;screenshot_1706959607703.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;body-npc-speech-generic = some creature
&lt;&#x2F;span&gt;&lt;span&gt;body-npc-speech-biped_large-ogre-male = an ogre
&lt;&#x2F;span&gt;&lt;span&gt;body-npc-speech-biped_large-ogre-female = an ogre
&lt;&#x2F;span&gt;&lt;span&gt;body-npc-speech-biped_large-cyclops = a cyclops
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;npc-speech-dir_north = to the north
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_north_east = to the north-east
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_east = to the east
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_south_east = to the south-east
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_south = to the south
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_south_west = to the south-west
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_west = to the west
&lt;&#x2F;span&gt;&lt;span&gt;npc-speech-dir_north_west = to the north-west
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Please reach out to us, if you still have problems with translating these strings or any other strings!&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s also some cool stuff in the review stage, unrelated to translations, but more on that later.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;autumn-trees-and-cherry-blossom-by-khannibal&quot;&gt;Autumn trees and cherry blossom by @kHannibal&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1201190381900025937&amp;#x2F;screenshot_1706456393287.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1202773370081386506&amp;#x2F;screenshot_1706833883062.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1203708841322217532&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;🐊 Patiently waiting for lunch. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1203731997655048233&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 225</title>
          <pubDate>Sat, 20 Jan 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-225/</link>
          <guid>https://veloren.net/blog/devblog-225/</guid>
          <description>&lt;p&gt;These weeks, we look at Haniwa tombs, WGPU testing, item i18n and more sprite IDs.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @imbris, @dsalt, @jtornello, @Pybit,
@yusdacra, @Isse, @the_dimasmith, @hrom, @juliancoffee, @crabman, @walpo,
@zesterer, weblate contributors, @fvasco, @alphyr, @floppy.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes more efficient screenshot conversion, shader fixes,
a day length slider for singleplayer, more potions,
system dispatcher optimizations, and nix build script updates,
cave entrance fixes, Ukrainian translation, twig shoulder rename,
buff extension command, unstacking buffs, removing twitter,
server rules at login, item internationalization, a modernized character
selection menu, updated translations, a large sprite rework, an update of the
assets manager dependency, Haniwa tomb dungeon, and a sword nerf.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on event system diversification,
loot export, drowning in terrain, beginner balance tweaks,
a much updated WGPU version, wireshark decoder, more price entries,
item tiering fixes, loading plugins over network, more options for kill NPC,
dwarfen mine, and a digging tooltip fix.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1194054123545440316&amp;#x2F;klop_rossxhrom.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;wgpu-testing-by-isse&quot;&gt;WGPU testing by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;We&#x27;re currently trying to upgrade our graphic backend and need your help.&lt;&#x2F;p&gt;
&lt;p&gt;In the new version DirectX11 is no longer supported, but OpenGL is. So I&#x27;m mostly looking for people to test on Windows,
but other people testing is helpful too, to be able to catch any bugs.&lt;&#x2F;p&gt;
&lt;p&gt;OpenGL is supported on Linux in this new version too.&lt;&#x2F;p&gt;
&lt;p&gt;There is a form here to go through, and there are download links in the form. And any question can go in the thread of this message.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forms.gle&#x2F;6qrdC5FDFAN4tnpZ7&quot;&gt;Form link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In case you want to try the binary before starting any feed-back form, here are direct links to the binary downloads:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;jobs&#x2F;5886957725&#x2F;artifacts&#x2F;download&quot;&gt;Windows&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;jobs&#x2F;5886957717&#x2F;artifacts&#x2F;download&quot;&gt;Linux&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;jobs&#x2F;5886957727&#x2F;artifacts&#x2F;download&quot;&gt;MacOs x86&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;jobs&#x2F;5886957728&#x2F;artifacts&#x2F;download&quot;&gt;MacOs aarch64&lt;&#x2F;a&gt; -
but please keep in mind that we created this blog-post
specifically to receive your early feed-back about this significant change.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;haniwa-updates&quot;&gt;Haniwa updates&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1193143928610881626&amp;#x2F;Screenshot_from_2024-01-06_10-54-53.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1193143929495879690&amp;#x2F;Screenshot_from_2024-01-06_11-07-14.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;pbu3sy&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;l32zaa&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;sonnh7&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;jr6xgf&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;tree-burning-event&quot;&gt;Tree burning event&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1195414250982752256&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;

YouTube &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=LuiJQvqAG4U&quot;&gt;live link&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195866499987034175&amp;#x2F;Screenshot_330.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195896072980152511&amp;#x2F;screenshot_1705192655272.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195896073676398723&amp;#x2F;screenshot_1705193793673.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195896074414592010&amp;#x2F;screenshot_1705193678031.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1196178074656579734&amp;#x2F;news_8.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1196159940889428119&amp;#x2F;screenshot_1705256966567.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1196161040191344811&amp;#x2F;screenshot_1705257256267.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wiki-update&quot;&gt;Wiki update&lt;&#x2F;h2&gt;
&lt;p&gt;Updated: For some time, loot tables on the wiki were out of date and did not support multi-loot.
These now generate from exported data, with collapsible grouping in drop tables.
Examples below are the Yeti drop table and Rugged Hide source table.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1198424438031524011&amp;#x2F;drops_example.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1198424438278991913&amp;#x2F;sources_example.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1196157232438587492&amp;#x2F;screenshot_1705256487790.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;&#x2F;h2&gt;
&lt;p&gt;There is also a new MR which extends &lt;code&gt;&#x2F;buff&lt;&#x2F;code&gt; command to be used with complex buffs like polymorphed, so you can transform yourself into a bunny :3&lt;&#x2F;p&gt;
&lt;p&gt;Strange bugs (enable sound to experience what goes wrong here):&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195095173433143426&amp;#x2F;Flautita.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;A new way of fighting a Frost Giga resulted in a lot of traffic until
the bug was fixed:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195659403278422087&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195680436169490484&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;A collection of nice photos&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1192947547484991651&amp;#x2F;banda_ameba_2.JPG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1195768367370485780&amp;#x2F;screenshot_1705163742521.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1193225680054407278&amp;#x2F;Screenshot_2024-01-05_160613.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Copious metal resources:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1193829734845530122&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192946367283351682&amp;#x2F;news_7.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1195776953618276422&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Shield blocking by @Papinha
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449667182683619339&amp;#x2F;1195199622826696786&amp;#x2F;2024-01-11_23-53-37.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Proposal to make giant trees great again





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;1195988420703555595&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;fWdoXG0TA6k?feature=shared&quot;&gt;You can run veloren on Android … using a Windows emulator&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;server-rules-by-zesterer&quot;&gt;Server rules by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;@crabman and I spent the last few days working on a menu that displays server rules when players first connect to a server. Accepting server rules is mandatory, and happens on first connection (or for subsequent changes to the rules). Rules can be customised by server owners and fully support localisation. See &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;server-hosting&#x2F;configuration.html#descriptionron&quot;&gt;here&lt;&#x2F;a&gt; for more information.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1196881871531933716&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@juliancoffee: By the way, for an official server, we do accept translations of official rules, as I understand
⁠&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1196883197502431333&quot;&gt;server.veloren.net rules transl…&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&quot;&gt;⁠new-contributors&lt;&#x2F;a&gt; if you don&#x27;t have permissions&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-new-character-selection-by-zesterer&quot;&gt;A new character selection by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve also been working on overhauling the character selection screen. The (very old) placeholder backdrop has been removed, and your character(s) now appear on an Airship, hovering over the world. The terrain beneath corresponds to that of the world you&#x27;re about to join.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1196883647756783787&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;item-internationalization-by-juliancoffee&quot;&gt;Item internationalization by @juliancoffee&lt;&#x2F;h2&gt;
&lt;p&gt;What and why this MR does.&lt;&#x2F;p&gt;
&lt;p&gt;First, &quot;cosmetic&quot; things.&lt;&#x2F;p&gt;
&lt;p&gt;We created a new veloren&#x2F;common&#x2F;i18n crate that hosts Content type, that previously was in the common::comp::chat module. Because Content is general enough, it needed its own module anyway, by putting it in its own crate, we can significantly reduce the compilation time of veloren&#x2F;client&#x2F;i18n crate which depends on Content.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1196162160565420124&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Additionally, Localization::get_content has better docs (cut from !4236 (closed)). And using random in i18n is explicitly discouraged, yet not completely deprecated. Read #1655 for more.&lt;&#x2F;p&gt;
&lt;p&gt;Now, the reason you&#x27;re reading this — item localization. This MR deprecates Item.name() and Item.description() methods along with the corresponding ItemDesc methods. Instead, we use the ItemL10n manifest (like item_image_manifest.ron, but in common) that maps ItemKey to the i18n identifier.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1196162161190387763&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Important note: if an item has a different ItemKey it has a different i18n identifier, which means two things.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;All modular weapons have different i18n identifier, we don&#x27;t use concatenation magic.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Some modular weapons have the same i18n identifier (like Staff with Heavy core and Light one). We only differentiate by hand-ness and primary component. That&#x27;s how ItemKey works and that&#x27;s what we do with voxel assets.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Import note no. 2: we deprecate these methods, not remove them. There are a number of systems that rely on these.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Plugins can&#x27;t use i18n yet.&lt;&#x2F;li&gt;
&lt;li&gt;CSV import&#x2F;export.&lt;&#x2F;li&gt;
&lt;li&gt;Inventory sorting (by name) is server-side, which is unfortunate.&lt;&#x2F;li&gt;
&lt;li&gt;Crafting UI ordering and filtering. This is probably easiest to solve because all data is available, but I think that should be done in follow-up MR, this one is big enough.&lt;&#x2F;li&gt;
&lt;li&gt;There was also dependency on the English name in the sfx.ron config, but it&#x27;s fixed in this MR.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;After we solve all these issues in follow-up MRs, we can remove Item::name&#x2F;description. (as well as ItemKind::Ingredient::descriptor).&lt;&#x2F;p&gt;
&lt;p&gt;oh, almost forgot, it also changes &#x2F;kit all, which now really gives you all items, that&#x27;s why Admin Bag is now enlarged.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1196165836084351046&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On the topic of translations, that&#x27;s still a concept, but we want to start handling &lt;strong&gt;grammatical&lt;&#x2F;strong&gt; gender.&lt;&#x2F;p&gt;
&lt;p&gt;I want to start with &lt;code&gt;hud&#x2F;chat.ftl&lt;&#x2F;code&gt; and expose a few of the variables there.&lt;&#x2F;p&gt;
&lt;p&gt;First is what I call gender, in our case it&#x27;s an answer to the question &quot;he or she?&quot;, and we check it from &lt;code&gt;Body.body_type&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Second is animacy, which is roughly an answer to the question &quot;is it sentient or no?&quot; and roughly corresponds to what the English language calls &quot;it&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;That allows us to do things like that for Slavic languages that require agreement with the gender of a noun.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;hud-chat-online_msg = [{ $name }] { $user_gender -&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    *[he] зайшов на сервер
&lt;&#x2F;span&gt;&lt;span&gt;    [she] зайшла на сервер
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Because we use &lt;code&gt;body.body_type&lt;&#x2F;code&gt;, for a moment, your gender is derived from the sex of the character you play with.&lt;&#x2F;p&gt;
&lt;p&gt;I showed the example from Ukrainian, what about other languages you would ask?&lt;&#x2F;p&gt;
&lt;p&gt;Well, it&#x27;s probably impossible to cover every rule of every language, but we want to try, so if you see some problems with how we handle your language or some requests, please reach out to me on Discord, @juliancoffee.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sprite-identifier-rework-by-zesterer&quot;&gt;Sprite identifier rework by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;These two weeks started quietly and then a lot of changes came in over the
past days. Another one of these is @zesterer&#x27;s change to expand sprite identifiers:&lt;&#x2F;p&gt;
&lt;p&gt;Over the last few days I&#x27;ve been working on overhauling the way we represent sprites, the small-scale voxel objects you find around the world like grass, crafting tables, and doors.&lt;&#x2F;p&gt;
&lt;p&gt;This is an internal change that&#x27;s been needed for a long time, but the fact that we recently started to approach the existing limit of 255 sprites was concerning and something needed to be done. As a happy side-effect, this overhaul should open up a lot of opportunities for more interesting sprite behaviours!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1194911942561779772&amp;#x2F;image_2024-01-11_155307373.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;a-little-context&quot;&gt;A little context&lt;&#x2F;h3&gt;
&lt;p&gt;In Veloren, each block is represented as 4 bytes (where each byte is 8 bits, i.e: 256 possible values). The first byte is the &#x27;block kind&#x27;: this tells the game the overhaul type of block.&lt;&#x2F;p&gt;
&lt;p&gt;Examples of block kinds include &lt;code&gt;Stone&lt;&#x2F;code&gt;, &lt;code&gt;Wood&lt;&#x2F;code&gt;, &lt;code&gt;Grass&lt;&#x2F;code&gt;, &lt;code&gt;Ice&lt;&#x2F;code&gt;. For these so-called &#x27;filled&#x27; blocks (i.e: that get rendered as a coloured cube), the remaining 3 bytes specified the RGB (red, green, blue) colour.&lt;&#x2F;p&gt;
&lt;p&gt;However, block kinds can also be &#x27;unfilled&#x27; such as &lt;code&gt;Air&lt;&#x2F;code&gt; and &lt;code&gt;Water&lt;&#x2F;code&gt;. In these cases, we don&#x27;t need to use the remaining 3 bytes for the colour, since these blocks have no colour (water colour is hard-coded elsewhere and can&#x27;t change on a per-block basis)! As such, we use the 3 extra bytes to represent sprites. Previously, we chose the first of these to represent the &#x27;sprite kind&#x27;. Like the &#x27;block kind&#x27;, this tells the game what type of sprite is present. We have sprite kinds like &lt;code&gt;LongGrass&lt;&#x2F;code&gt;, &lt;code&gt;CraftingBench&lt;&#x2F;code&gt;, &lt;code&gt;Pumpkin&lt;&#x2F;code&gt;, &lt;code&gt;WildFlax&lt;&#x2F;code&gt;, etc. You&#x27;ve no doubt encountered these sprites on your adventures.&lt;&#x2F;p&gt;
&lt;p&gt;However, there&#x27;s a problem! A byte can only have up to 256 possible values. Since one of them is used to represent the lack of a sprite &lt;code&gt;(Empty)&lt;&#x2F;code&gt;, we can only have a maximum of 255 possible sprites! That might sound like a large number, but Veloren is an ever-growing project with ever-more sites and features that demand a wider variety of sprites. Within the last few weeks we&#x27;ve come very close to the limit, so it was time to do some work to expand that number.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1193430585398534224&amp;#x2F;tall-mushroom.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-people-demand-sprite-attributes&quot;&gt;The people demand sprite attributes!&lt;&#x2F;h3&gt;
&lt;p&gt;The old approach was quite inefficient. We only used just one of the 3 extra bytes, so we can do better. However, there are more things we&#x27;d like to be able to do. In particular, for a long while we&#x27;ve wanted to be able to give sprites additional attributes that change their behaviour. Here are a few examples of attributes we might want to give sprites:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The orientation of the sprite&lt;&#x2F;li&gt;
&lt;li&gt;The growth stage of plants&lt;&#x2F;li&gt;
&lt;li&gt;Whether a lantern&#x2F;lamp has been turned on or off&lt;&#x2F;li&gt;
&lt;li&gt;Whether a trapdoor or gate it open or closed&lt;&#x2F;li&gt;
&lt;li&gt;The level or quality of loot in a container&lt;&#x2F;li&gt;
&lt;li&gt;Whether the sprite has snow covering it&lt;&#x2F;li&gt;
&lt;li&gt;Whether a pot&#x2F;planter has a plant in it, and the type of plant&lt;&#x2F;li&gt;
&lt;li&gt;The specific objects that a cupboard or shelf has on it&lt;&#x2F;li&gt;
&lt;li&gt;The material of an item of furniture (colour of paint, stone&#x2F;metal&#x2F;wood, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;The colour or design of a flag&#x2F;banner&lt;&#x2F;li&gt;
&lt;li&gt;etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1193606115351605291&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-solution&quot;&gt;The solution&lt;&#x2F;h3&gt;
&lt;p&gt;To accommodate all of these needs, I&#x27;ve overhauled the way we represent sprites. Now, the first of the three extra bytes corresponds to the sprite &#x27;category&#x27;, a new idea introduced with this change. The category of a sprite tells the games which bits in the remaining two bytes are used to store which attributes (or whether those attributes even exist at all!), along with the sprite ID (which, together with the category, gives you back the sprite kind that we mentioned earlier).&lt;&#x2F;p&gt;
&lt;p&gt;By placing things in categories, we can isolate the attributes above to those categories. We might want plants to store their growth stage, but we don&#x27;t want to be wasting those bits for sprites that can&#x27;t grow at all! Therefore, only the category containing plant sprites gets allocated the growth stage attribute.&lt;&#x2F;p&gt;
&lt;p&gt;This new design is immensely more flexible. In addition to allowing for many sprite attributes, it also allows the sprite ID to inhabit as many as all of the remaining 2 extra bytes (i.e: 16 bits). That means we can have up to 65,536 sprites per-category! Needless to say, I think it&#x27;ll be a long while until we need to think about upgrading our sprite representation again!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1192116998260400128&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Express deliveries (not yet in game). See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1192120905766285444&#x2F;screenshot_1704279884768.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 224</title>
          <pubDate>Wed, 03 Jan 2024 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-224/</link>
          <guid>https://veloren.net/blog/devblog-224/</guid>
          <description>&lt;p&gt;These weeks, we show images of how snow and illuminations transformed the
world of Veloren into a winter wonderland for ten days, read a travel report
and peek into the ongoing Haniwa tomb work.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @Christof, @crabman, @Froggy, @jcoxeye,
@floppy, @DaforLynx, @ErnestoSev, @GeekyGami, @Thy, @Sam, and @dsalt.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes re-enabling Christmas decorations and hats,
gitlab tagging fixes, armor offset fixes, correct small leather pouch salvaging,
taming crustaceans, re-enabling kelp and corals in the sea, drop fixes,
beam sound effect fixes, new music tracks, removing dead combo melee code, more efficient screenshots,
and airship piloting fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on world boss compass, dwarven mines, more price
entries, converting spots to sites, item reinforcement, NPC personalities, nix scripts,
translation updates, terracotta ruins, vampire castle, and Haniwa tombs.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;christmas-event-images&quot;&gt;Christmas event images&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187369747025776660&amp;#x2F;screenshot_1703146289766.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188123581561966713&amp;#x2F;festive-dungeon.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187520033186910302&amp;#x2F;screenshot_1703085503574.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1190245760403521576&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188033451857805332&amp;#x2F;screenshot_1703310653722.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1187123672436179094&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1187819972681007225&amp;#x2F;screenshot_1703268707603.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188223411181326397&amp;#x2F;Screenshot_311.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188003646366031944&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1189666666653700198&amp;#x2F;screenshot_1703708772238.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188033453099335731&amp;#x2F;screenshot_1703311040408.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1185540945240915999&amp;#x2F;1185541951966154832&amp;#x2F;screenshot_1702724956839.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187756911962108004&amp;#x2F;parking.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187757425512689704&amp;#x2F;fireplace-wreath.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187369746237243523&amp;#x2F;screenshot_1703147402035.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1187015593900134420&amp;#x2F;christmas-lake.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1187597820006510602&amp;#x2F;screenshot_1703215749182.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1189344943546830938&amp;#x2F;screenshot_1703631834478.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1186897009433657405&amp;#x2F;screenshot_1703048311527.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1190226577049526272&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1190424791010770984&amp;#x2F;screenshot_1703889657133.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188120917075841134&amp;#x2F;screenshot_1703340325379.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190467576766156941&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190663917505097829&amp;#x2F;screenshot_1703946715903.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187494981611557015&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187520033983832186&amp;#x2F;screenshot_1703071834401.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;meanwhile-on-the-party-map&quot;&gt;Meanwhile on the party map&lt;&#x2F;h2&gt;
&lt;p&gt;Because the party map was hand-designed by @Hannibal and not procedurally generated it isn&#x27;t covered in snow.
But it still looks pretty enough to regularly become popular for photo shootings.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188224507224281189&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188225167634202644&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188225554940432544&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188033457843089438&amp;#x2F;screenshot_1703314584954.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188033455699787846&amp;#x2F;screenshot_1703313623251.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1188033456748380220&amp;#x2F;screenshot_1703313778671.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192088129193119784&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Dodge on top of shenlong&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;travel-report-by-dodge&quot;&gt;Travel report by @Dodge&lt;&#x2F;h2&gt;
&lt;p&gt;the very first day in veloren i got some leather armour and headed into eleokvan&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192068277057372172&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;regretted so bad&lt;br&gt;
i was so unprepared&lt;&#x2F;p&gt;
&lt;p&gt;died so many times to sand sharks&lt;br&gt;
raptors&lt;br&gt;
but funny enough i killed a aracheos in eleokvan w the help of villages&lt;br&gt;
went to moskh to meet some new friends and since i knew i was so unprepared i went back to wreau&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192068683925823558&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;after which i asked people in the chat to suggest me a town where i could start to journey&lt;br&gt;
people mentioned ornerd&lt;br&gt;
but well haha ornerd was already very less populated by merchants and villagers and looked like it went so much&lt;br&gt;
i decided its not enough and yea i killed just two hunters two merchants and two travellers with help from Rai&lt;br&gt;
and emotional support via flute performance by atenea&lt;br&gt;
then i headed for the south areas&lt;br&gt;
so i went to some high up places in the mountains to take in the view&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192069976035709029&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;and flew down to alaubrord wasnt too much interested in it&lt;br&gt;
then went to spolm&lt;&#x2F;p&gt;
&lt;p&gt;pretty normal village as wel&lt;br&gt;
the nicest part was climbing the mountain and looking at the world&lt;br&gt;
and gliding down back&lt;br&gt;
Bolvarr was also pretty much like other villages&lt;br&gt;
then i got some advice that i need to find pincers in order to make good frostwood weapons from froggy and horblegorble&lt;br&gt;
so i went out to search for crabs&lt;br&gt;
this is where the real journey began&lt;&#x2F;p&gt;
&lt;p&gt;someone mentioned there were a lot of crabs near the central lake so i set out to bichriel&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192070816880394281&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;i was scared of antlions&lt;br&gt;
or i couldve hunted them and the spiders instead so i was like&lt;br&gt;
i already killed some crabs and got pincers and they were pretty easy to kill&lt;br&gt;
so uhh yea but good news is i didnt kill more than 5 crabs perhaps&lt;br&gt;
got most of it from merchants&lt;br&gt;
:)&lt;br&gt;
so yea back to the story , someone mentioned again that its near the desert area so i set out to that side and somehow ended up walking along to the savannah lands&lt;br&gt;
saw my first ever savannah village mpizozi&lt;br&gt;
i thought it was like any other village but oh boy&lt;br&gt;
the tunnel system was SO COOL&lt;br&gt;
like so many rooms connected via tunnels&lt;br&gt;
so so cool 👍&lt;br&gt;
then i was like why not journey to every town and find it out? so i set out to go to every town in this map!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192072072470474833&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;most of the villages werent that interesting but i totally enjoyed abelen, it had such good atmosphere&lt;br&gt;
gotta say one of my fav villages is abelen shoutout to abelen!&lt;br&gt;
and i reached valing, by that time i knew this one is going to be a long journey this map is VAST as hell&lt;br&gt;
this is the final screenshot of the early days part, where i started from valing and ended at ordodraic&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192072539623657512&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;again nginsu was a savannah village and the other villages were like wreau but the most interesting one of all is ordodraic&lt;br&gt;
i will never forget how deserted that village was&lt;br&gt;
not a single soul&lt;br&gt;
even Ayialrad which was also cut off and didnt have any sort of transportation routes had a lot of people&lt;br&gt;
but this village was suuuper deserted&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190496320759279697&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;this was the path i took yesterday&lt;br&gt;
left ordodraic to asaundling and passed on a few villages to finally meet bakhyen mountain folk&lt;br&gt;
the mountain people have such a cool town&lt;br&gt;
and there was a mine near bakhyen which had steepy caves&lt;br&gt;
so was very easy to escape and use arrows and mine well&lt;br&gt;
was a fruitful mining session over 21 iron ingots, 3 diamonds 5 amethyst 5 emeralds and 2 cobalt ores&lt;br&gt;
and cute fungomes&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190497303971233945&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;this is the path i took today&lt;br&gt;
the first village was a normal savannah village nothing too extraordinary&lt;br&gt;
but after that i went to see town ereris which is uh no town actually&lt;br&gt;
got washed up by the lake&#x2F;river sadly&lt;br&gt;
the circle with the number one is ereris &lt;br&gt;
the circle with number 2 is a mountain village called Ayialrad and surprisingly even if it has no means of transport has a lot of merchants and guards, was surprised that ordodraic, even if it had proper roads and proper houses had no people but this village had&lt;br&gt;
finally climbed up a mountain and glided down to Dunbapa, pretty cool day&lt;&#x2F;p&gt;
&lt;p&gt;went on a deep mining session and got dripped&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190948773397016686&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;climbed the tree of yest!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191025540069605487&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;omg i love this village&#x27;s color scheme!!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191036771564257401&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;i was pleasantly surprised&lt;br&gt;
its so well organized as well&lt;&#x2F;p&gt;
&lt;p&gt;me and my buddy driggle in cathos :)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191331413736304710&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;ft rai[¹]&lt;br&gt;
continuation of my journey so far! the tree of yest was pretty bigg&lt;br&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191332571380977674&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;here the town charlough was submerged and onipses was a pleasant surprise :o&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191332876428521472&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;ended the day with ston&lt;br&gt;
and today&lt;br&gt;
i ended it at crathos another town just like onipses!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191333201403195422&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;met my new friend driggle at fobreric&lt;br&gt;
i skipped that village on the northeast of crathos cuz rai said it was submerged as well&lt;br&gt;
and ston had only one house lol&lt;br&gt;
very bizzarre yet cool&lt;br&gt;
the journey is almost coming to a close&lt;br&gt;
idk if indiana jones is here but im going to your fav town next ;)&lt;&#x2F;p&gt;
&lt;p&gt;this is the ideal village&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191606114463256586&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;just the center workstation&lt;br&gt;
nothing else&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191613561647136788&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;reached my last village that i had to travel&lt;br&gt;
storic&lt;br&gt;
:)&lt;br&gt;
successfully completed the voyage&lt;&#x2F;p&gt;
&lt;p&gt;came back to wreau in new drip :D&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191660871164907590&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So this is how my final day of journey went&lt;br&gt;
started from crathos&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192066011759911012&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;went to adrespilling&lt;&#x2F;p&gt;
&lt;p&gt;Indiana jones&#x27;s fav town&lt;br&gt;
it was a nice beachside town&lt;br&gt;
pretty scenery&lt;br&gt;
Frilling is just another village you see&lt;&#x2F;p&gt;
&lt;p&gt;and on the way i went to ostechrendam&lt;br&gt;
the most ideal village&lt;br&gt;
after which there was two towns that i havent went&lt;br&gt;
one was storic and the other was lamakan&lt;br&gt;
so i went thru abelen and the villages that i visited way earlier&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192067005579280404&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;i really love how beautiful abelen is&lt;br&gt;
totally recommend doing a visit to the town&lt;br&gt;
could say its a better ornerd simply because you wouldnt find a frost giga suddenly spawning in there xD&lt;br&gt;
finally reached storic by gliding down the mountains&lt;br&gt;
with a melanchoclic music by the side&lt;br&gt;
the song name was &quot;the heavens weep&quot;&lt;br&gt;
thanks to nolan i completed the journey by airshipping to lamakan, why? well i wanted to try airship once in this journey&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1192067892716507156&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;and went to mine in a nearby cave that necti mentioned, and it had a lot of bloodsteel, mined with nolan got good amount of bloodsteel went to eleokvan, got my armour headed to wreau and ended my journey for the day&lt;br&gt;
:D&lt;&#x2F;p&gt;
&lt;p&gt;that marks the end of the grand journey&lt;br&gt;
thanks for tagging along :)&lt;&#x2F;p&gt;
&lt;p&gt;also forgot to mention&lt;br&gt;
while i was trying to go to adrespilling i was chased down by sea clerics -_-&lt;&#x2F;p&gt;
&lt;p&gt;[¹]: feat Rai (The Wyvern Slayer), they accompanied me for that short journey in their airship&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ongoing-haniwa-tomb-work&quot;&gt;Ongoing Haniwa tomb work&lt;&#x2F;h2&gt;
&lt;p&gt;@Floppy is working on a tomb inspired by structures close to the Great Wall, the screenshots are just
too exciting to withhold.
The original site design was done by @Hannibal in MagicaVoxel, @Gemu created new models.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190196718386548776&amp;#x2F;Screenshot_from_2023-12-28_22-25-16.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190196719435132938&amp;#x2F;Screenshot_from_2023-12-28_22-28-39.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190196720781512755&amp;#x2F;Screenshot_from_2023-12-28_22-30-06.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190196721293209610&amp;#x2F;Screenshot_from_2023-12-28_22-30-57.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190339863292149842&amp;#x2F;screenshot_1703869524167.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190624307068538902&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1190939287026421780&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;e92nc0&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191109466448466030&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191340072839172116&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191366918414798868&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191370379588014100&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191511811023982733&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191527177833955378&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1190196111210721292&amp;#x2F;1191704112560095282&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190288434800115792&amp;#x2F;Screenshot_3788.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Perhaps when NPCs talk about the weather the code should check against the current weather&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187494727155716126&amp;#x2F;news_4.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1187494726753075220&amp;#x2F;News_5.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190758450641248368&amp;#x2F;News_6.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Another Veloren news issue by Sam113&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191585822055616653&amp;#x2F;table-with-a-view.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A table with a view&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1190843982058631258&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Making good use of the stage&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1191446587826786304&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Obviously this tavern isn&amp;#x27;t specialized on Denari customers&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;1187899515018162276&amp;#x2F;untitled.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;crabman found the bug which lead to deserted airships&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1189679194607718520&amp;#x2F;screenshot_1703715328213.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;No game content but clearly in the holiday spirit&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1188128019613745182&amp;#x2F;Screenshot_304.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Northern lights illuminate the way. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1188571993897967698&#x2F;170344804084026985.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 223</title>
          <pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-223/</link>
          <guid>https://veloren.net/blog/devblog-223/</guid>
          <description>&lt;p&gt;These weeks, we take the time before snow and illuminations transform the
world of Veloren into a winter wonderland.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @Neras, @hrom, @Isse, @floppy, @uniior,
@DoNoVan, @jcoxeye, @Froggy.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes cobalt and blood-stone armor buffs,
sword skill icon fixes, Taverns💃🕺🍹, crab animation, crate and barrel sprites,
Dagon and Wyvern poise resilience, and various Head Armor offset fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on Dwarven Mines, Music updates,
world boss location tools, new prices, crab taming, sword defense,
spot to site conversion, Christmas content, personality traits, pumpkin recipes,
mage tower, translations, anti-cheat, time length sliders,
poise and combat and durability tweaks, a large event system overhaul,
and potions.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
where game contributors are always invited to communicate their updates
or simply post a link to a different channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-updates&quot;&gt;Development updates&lt;&#x2F;h2&gt;
&lt;p&gt;New attacks of Frost Giants &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1166848972011360337&amp;#x2F;1173353322200170566&amp;#x2F;2023-11-12_20-59-12.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;World boss compass 







&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;hgujj5&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Swiftness potion &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1178654503390674945&amp;#x2F;1179376083305508935&amp;#x2F;55.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1178654503390674945&amp;#x2F;1180576877694439535&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;modelled after a running champion&amp;#x27;s cup&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Crates and barrels 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1185641981532176484&amp;#x2F;1185754471670743040&amp;#x2F;screenshot_1702775702452.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Pumpkin cake 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1186667059099213904&amp;#x2F;1186670986305753098&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-to-create-a-party-map-by-hannibal&quot;&gt;How to create a party map by @Hannibal&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;First I try to find a theme that I want to work on and that would fit Veloren. First release was Desert style city, Second was Pirate Tropical Island, Last One was a test for Elven architecture using Asian inspiration (Japan x China)&lt;&#x2F;li&gt;
&lt;li&gt;Then I look for artworks of those themes to get a first impression of what I am aiming to achieve, it often gives me direct or indirect inspiration&lt;&#x2F;li&gt;
&lt;li&gt;Then I watch minecraft timelapse, it&#x27;s not always fully relatable but it gives me a first impression on how to turn those artworks into voxels (although minecraft cheats with different block types, but that is something you gotta adapt to)&lt;&#x2F;li&gt;
&lt;li&gt;Next I do the first draft, making a list of what I want on the map, to be sure to make a terrain that fits the idea&lt;&#x2F;li&gt;
&lt;li&gt;Next I create the terrain, using worldpainter. If you don&#x27;t know how to use WorldPainter, I suggest watching Jeracraft tutorial and using his brushes. (Not that not everything from there is applicable, because it&#x27;s a tool made for minecraft at first). The terrain MUST be below 2000x2000 blocks (it&#x27;s MagicaVoxel limit).&lt;&#x2F;li&gt;
&lt;li&gt;I export the terrain as a heightmap&lt;&#x2F;li&gt;
&lt;li&gt;Either use photoshop or an alternative (I use PhotoScape X) to split the image. Splitting it allows you to create tiles. The size of each tile MUST be below 256x256. If I use a terrain of 1920x1920, I will split by 8x8 to get 64 tiles of 240x240. If I use 1792x1792, I divide by 7 to get 49 tiles of 256x256.&lt;&#x2F;li&gt;
&lt;li&gt;Then open MagicaVoxel, enter world mode, delete the box and select color palette 2&lt;&#x2F;li&gt;
&lt;li&gt;I then import all tiles into the world mode of MagicaVoxel (there are tutorials for world mode on YouTube)&lt;&#x2F;li&gt;
&lt;li&gt;Assemble all of them like puzzle pieces to make up the initial heightmap&lt;&#x2F;li&gt;
&lt;li&gt;Resize all the tiles to have a z height of 256&lt;&#x2F;li&gt;
&lt;li&gt;Then you need a special shader plugin for magicavoxel called xs heightmap (can be found online).&lt;&#x2F;li&gt;
&lt;li&gt;Use it on every tile to make up the terrain&lt;&#x2F;li&gt;
&lt;li&gt;Group them using the group tool, so it can be moved as a unit&lt;&#x2F;li&gt;
&lt;li&gt;Decide sea level (should be done on WorldPainter first, but you need to decide on MV too cuz sometimes it changes)&lt;&#x2F;li&gt;
&lt;li&gt;Then create your color palette by selecting Palette 3. (I use Adobe Color to create my palettes)&lt;&#x2F;li&gt;
&lt;li&gt;Recolor the terrain to fit your needs, for the soil i suggest using the xs soil shader or xs soil_replace shaders that can be found online, it saves dozens of hours of work&lt;&#x2F;li&gt;
&lt;li&gt;Then you can fill the water once terrain is done (use a blue block on MV, you will need to use that RGB in a future step at the end for it to be water in game)&lt;&#x2F;li&gt;
&lt;li&gt;Create all the assets you need, I suggest making them all in different boxes so it&#x27;s faster AND easily copy-pasteable (I can&#x27;t really detail this step it comes down to what you wanna do but it is the biggest step of the project, it can take more than 100 hours if you want it to be very detailed)&lt;&#x2F;li&gt;
&lt;li&gt;When your map is finished, you might want to add sprites. for that, select colors that you HAVE NOT used yet (that means the index AND the RGB).&lt;&#x2F;li&gt;
&lt;li&gt;Then, you will need @Isse&#x27;s tool that will generate the chunks for you to load your asset on the map&lt;&#x2F;li&gt;
&lt;li&gt;for that you need to have the game compiled, download their tool (isse-vox-placer)&lt;&#x2F;li&gt;
&lt;li&gt;You need to make sure your terrain in your compiled game is persistent (there is an explanation on how to do that in the book)&lt;&#x2F;li&gt;
&lt;li&gt;Find a location in game where you can load the map. I suggest being near coasts in water, so it&#x27;s not floating too much, which creates lag&lt;&#x2F;li&gt;
&lt;li&gt;Take the coordinates and input them in vox-placer&lt;&#x2F;li&gt;
&lt;li&gt;Place your .vox file of the map in vox-placer&lt;&#x2F;li&gt;
&lt;li&gt;For water and sprites, there is an explanation on the gitlab of vox-placer to transform the RGB you used.&lt;&#x2F;li&gt;
&lt;li&gt;Once all is set up, launch the vox-placer process using a terminal&lt;&#x2F;li&gt;
&lt;li&gt;wait for the process to end&lt;&#x2F;li&gt;
&lt;li&gt;copy the chunks generated in your chunk folder of your compiled veloren&lt;&#x2F;li&gt;
&lt;li&gt;launch the game and go to that location&lt;&#x2F;li&gt;
&lt;li&gt;if it&#x27;s there, it worked xD&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you have never used MV, I suggest reading the tutorial pinned in ⁠new-contributors
There is also this video that might be helpful: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;live&#x2F;19D2kntYyKE?si=tJGEHhZX4rc4n01F&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;live&#x2F;19D2kntYyKE?si=tJGEHhZX4rc4n01F&lt;&#x2F;a&gt;
It goes more in depth for the asset modelling for party maps&lt;&#x2F;p&gt;
&lt;h2 id=&quot;veloren-news&quot;&gt;Veloren news&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1182782703649706205&amp;#x2F;News.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1182782704085897236&amp;#x2F;News_2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1185310444626391070&amp;#x2F;News3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1185310445125517443&amp;#x2F;screenshot_1702239373877.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;boss-drop-options&quot;&gt;Boss drop options&lt;&#x2F;h2&gt;
&lt;p&gt;This looks classy





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1185406387434553444&amp;#x2F;screenshot_1702693070324.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;but shouldn&#x27;t it become like this more realistic concept art:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1185594269910716417&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;requires processing in-situ to get any use out of (can yield much-needed materials like tough hide, horn, teeth, tainted meat, etc. with proper tooling)&lt;&#x2F;li&gt;
&lt;li&gt;axes, while badass, are too heavy to haul without a team let alone wield&lt;&#x2F;li&gt;
&lt;li&gt;moderate health risk if left to fester, attracts scavengers, get fined if you fail to burn or bury the body&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;pvp-tournament-images&quot;&gt;PvP tournament images&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1186426106564321451&amp;#x2F;screenshot_1702935406224.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1186426108263022702&amp;#x2F;screenshot_1702935411865.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1183234208769003660&amp;#x2F;winding-roads_1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This road crosses difficult terrain and weather. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1183571290427248700&#x2F;Captura_desde_2023-12-01_14-07-24.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 222</title>
          <pubDate>Sat, 02 Dec 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-222/</link>
          <guid>https://veloren.net/blog/devblog-222/</guid>
          <description>&lt;p&gt;These weeks, we look at cliff towns and crab animations.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @Isse, @crabman, @floppy, @Qsto, @zesterer.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes vehicle mounting fixes, precision balancing,
troll cave and camp sites, clifftowns, new entity interaction commands,
a fix for loot protection with curious potions, a modular component trading fix,
the Phoenix rework🔥, and CI fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on dwarven mines, modular character states,
an event system rework, loot table fixes, charm animations,
sword parrying, spot to site conversion, curious potion file rename,
improved walking animations, more potions, world boss behavior fixes,
terracotta ruins, mage tower, vampire castle and crab animation🦀.&lt;&#x2F;p&gt;
&lt;p&gt;We met in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;534843870375182339&quot;&gt;#Working&lt;&#x2F;a&gt; last week,
see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;534843870375182339&#x2F;1178046711143354458&quot;&gt;the chat&lt;&#x2F;a&gt; for details.
Development meetings are announced in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597829554194874379&quot;&gt;#town-hall&lt;&#x2F;a&gt;
and ping @DevPingSquad, self-subscribe &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449650270096588810&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This developer blog is based on information collected by @Christof
and on the links and text posted to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;597826574095613962&quot;&gt;#blog-content&lt;&#x2F;a&gt;,
game contributors are always invited to post updates there.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cliff-towns-moved-to-mesa-biomes&quot;&gt;Cliff towns moved to mesa biomes&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1176656951858450452&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;!-- 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1177212428019306518&amp;#x2F;Screenshot_from_2023-11-22_20-55-52.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1177212428606504960&amp;#x2F;Screenshot_from_2023-11-23_12-17-07.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1177212429114028073&amp;#x2F;Screenshot_from_2023-11-23_12-23-39.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
 --&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1177358056355532891&amp;#x2F;Screenshot_from_2023-11-23_21-43-02.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1177358056846282792&amp;#x2F;Screenshot_from_2023-11-23_21-45-25.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1179981247200624711&amp;#x2F;new_village.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;attack-types-are-now-separated-from-body&quot;&gt;Attack types are now separated from body&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1177037982679711764&amp;#x2F;1177306322056794252&amp;#x2F;screenshot_1700761928700.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1177037982679711764&amp;#x2F;1177306326406275233&amp;#x2F;screenshot_1700761791418.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;crab-animation&quot;&gt;Crab animation&lt;&#x2F;h2&gt;
&lt;p&gt;







&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;pf66bo&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;









&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;jcvjdd&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;1179148809180282960&amp;#x2F;0.5.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;1179148810165948496&amp;#x2F;0.75.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Different sizes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;And improved walking animation








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;rd3zca&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development-news&quot;&gt;Development news&lt;&#x2F;h2&gt;
&lt;p&gt;A single player was able to collect more loot than intended if they use the curious potion to shape-shift. This is now fixed, but if you want to
read the details go to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1178756095221714944&#x2F;1178756099793485864&quot;&gt;the discord thread&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1170973632483299368&amp;#x2F;1179467474442387627&amp;#x2F;screenshot_1701277278985.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Taverns are unintentionally dug into the ground&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Horblegorble updated all entity pages and their drop tables in the Wiki. Thanks to them!&lt;&#x2F;p&gt;
&lt;p&gt;@Uniior created a garlic model 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1179077146812104734&amp;#x2F;garlic.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1166848972011360337&amp;#x2F;1173353322200170566&amp;#x2F;2023-11-12_20-59-12.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;More dangerous Frost Gigas&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new entity interaction commands in action
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1177338676787814510&amp;#x2F;2023-11-23_21-02-32.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;player-vs-player-tournament&quot;&gt;Player vs player tournament&lt;&#x2F;h2&gt;
&lt;p&gt;A player vs player tournament took place in high ground





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1179387009060589668&amp;#x2F;image2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1180469812326051870&amp;#x2F;screenshot_1701512407645.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The location&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1180619260813385778&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1180619291704426607&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1180622519296860180&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Look for future event announcements in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;888424036143607809&quot;&gt;#events&lt;&#x2F;a&gt; channel.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;collected-impressions-from-the-game&quot;&gt;Collected impressions from the game&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1180000462242586714&amp;#x2F;ornerd.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1178144115054092318&amp;#x2F;Screenshot_12.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1180153646470672425&amp;#x2F;under-the-weather.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1175024073248612412&amp;#x2F;5_tunnels_1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1180874538364436490&amp;#x2F;screenshot_1701612666312.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1176989599747293284&amp;#x2F;1234.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bridge over peaceful water. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1176912618955493396&#x2F;screenshot_1700667337331.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 221</title>
          <pubDate>Sat, 18 Nov 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-221/</link>
          <guid>https://veloren.net/blog/devblog-221/</guid>
          <description>&lt;p&gt;These weeks, we look at community events, plugin progress, Salamander animation and spot to site migration.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @floppy, @uniior, @crabman,
@Christof, @Sorann753, @zesterer, @Isse, @Sam, @PopeRigby.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes fixes to Jungle ruins, a clover leaf glider
recipe, buff balancing, kits in plugins, translation updates,
ice reflections and mesas, rock circle sites, shader fixes,
beam terrain collision fixes, separating combat and behaviour state,
buff optimizations, a fire potion, precision 🞋, serde enum-maps,
and removing the spin-melee state.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on zone balancing, mage tower,
vampire castle, terracotta ruins, a burning pot model, learnable recipes,
inventory overflow, rain extinguishing burning, Salamander AI, Torvus, Taverns, antigravity potions, and item merging.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-web-site-layout&quot;&gt;New web site layout&lt;&#x2F;h2&gt;
&lt;p&gt;@Walpo put significant effort into a modernization of the Veloren
web site, now licensing became explicit, the blog posts got a new
template and linking to streamable videos became more convenient.&lt;&#x2F;p&gt;
&lt;p&gt;Thank you for pushing this through, @Walpo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;community-events&quot;&gt;Community events&lt;&#x2F;h2&gt;
&lt;p&gt;On November the 3rd @Hrom and @necti organized a Team vs Team death-match
on the party island docks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1170094556797227058&amp;#x2F;Team_vs_Team_Deathmatch.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1170476971759767653&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1170476972137271386&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Two weeks later there was an underground chicken fighting





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1175899057168842772&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wecw-plugin-content&quot;&gt;WECW plugin content&lt;&#x2F;h2&gt;
&lt;p&gt;You can find @EvanMeek&#x27;s plugin &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;evanmeek&#x2F;veloren-wecw-plugin&quot;&gt;here on Codeberg&lt;&#x2F;a&gt;. The original WECW, a Veloren fork,
can be found &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;EvanMeek&#x2F;veloren-wecw-assets&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It adds new axes and hammers,&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;596384200576335873&amp;#x2F;1171099254861856920&amp;#x2F;screenshot_1699280548183.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;… and panda armor&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;596384200576335873&amp;#x2F;1172589453043310704&amp;#x2F;Image_1699637495708.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;596384200576335873&amp;#x2F;1172589453416607744&amp;#x2F;Image_1699637492436.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;and more&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;596384200576335873&amp;#x2F;1172666308341538886&amp;#x2F;veloren-migrade-armor.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We found that internationalization is needed for plugins as well:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;596384200576335873&amp;#x2F;1172669256542998640&amp;#x2F;veloren-emacs-git-status.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Adapting the model offset needs reloading for fast feedback - which isn&#x27;t yet implemented, and the plugin manifest merging seems to have broken hot-reloading.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-salamander-attacks&quot;&gt;New Salamander attacks&lt;&#x2F;h2&gt;
&lt;p&gt;@floppy and @MetalGunTalk are working on new Salamander fire attacks:








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;uu32xr&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1170474008949559316&amp;#x2F;1171967152752959508&amp;#x2F;Clip_-_1182023_71630_PM.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;spot-to-site-migration&quot;&gt;Spot to site migration&lt;&#x2F;h2&gt;
&lt;p&gt;The stone circle became a site (like dungeons and towns), previously it was a spot (low overhead random structure, like pirate ship):&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;dzv4yg&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Camps in different environments&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1176516972415029291&amp;#x2F;1176517207551909918&amp;#x2F;Screenshot_from_2023-11-21_14-01-43.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1176516972415029291&amp;#x2F;1176517208067805275&amp;#x2F;Screenshot_from_2023-11-21_14-02-50.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1176516972415029291&amp;#x2F;1176517208550166578&amp;#x2F;Screenshot_from_2023-11-21_14-03-52.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;And troll caves&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1176516972415029291&amp;#x2F;1176517334484144169&amp;#x2F;Screenshot_from_2023-11-21_14-07-19.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1176516972415029291&amp;#x2F;1176517335293640754&amp;#x2F;Screenshot_from_2023-11-21_14-09-17.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1176516972415029291&amp;#x2F;1176517335885025320&amp;#x2F;Screenshot_from_2023-11-21_14-10-21.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tethering-testing-by-zesterer&quot;&gt;Tethering testing by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;You can indeed build an airship convoy, I had to modify the &lt;code&gt;&#x2F;airship&lt;&#x2F;code&gt; command to give them a tether:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1173570164365738026&amp;#x2F;screenshot_1699871294856.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;But it doesn&#x27;t always go to plan:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1173574879681982504&amp;#x2F;screenshot_1699872438880.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1174461771604574310&amp;#x2F;screenshot_1700083654267.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A skillful love graffiti. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1170766873059655710&#x2F;screenshot_1699151491222.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 220</title>
          <pubDate>Sat, 04 Nov 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-220/</link>
          <guid>https://veloren.net/blog/devblog-220/</guid>
          <description>&lt;p&gt;These weeks, we enjoy colorful trees and spooky monsters.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @crabman, @Christof, @xMAC94x, @floppy, @Isse, @Hannibal.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes less frequent Dullahan during Halloween, plugin fixes, CI fixes, items in plugins, NPC spawn fixes, snow glitter shaders,
an extended roadmap section and a new section on plugins in the book.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;726090746528268429&amp;#x2F;1165915349955387412&amp;#x2F;1_large.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on precision, preventing buff stacking, balancing, various worldgen improvements, starter glider, phoenix,
WGPU 0.18 testing, torvus, single player worldgen parameters, and taverns.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, @imbris is making progress on an automated scene recording and replay mechanism to investigate rendering performance and bugs.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1169604246182830161&amp;#x2F;2023-11-02_12-48-29.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Snow glitter&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;worldgen-meeting-by-isse&quot;&gt;Worldgen meeting by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;Last Saturday we had a worldgen meeting discussing how to move forward when it comes to plots. Right now plots decide their own shape and style, this is something we want to separate. This way we can more easily define similar buildings but have different styles. For example a blacksmith in a desert town and a mountain town might have similar shape and function, but very different styles in colors and details.&lt;&#x2F;p&gt;
&lt;p&gt;We also want a concept of rooms in buildings, which would make buildings be able to have multiple purposes. Like a merchant having a shop on the lower floor, and a bedroom on the top floor. This would also make it easier to make buildings advertise what functions it has, by looking at what each room can do.&lt;&#x2F;p&gt;
&lt;p&gt;Hierarchical plots were also discussed, and how it related to rooms. Hierarchical plots would allow plots to include other plots, like a castle being able to have houses within its walls.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1169601237629546516&amp;#x2F;small-canyon.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We reached a few conclusions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rooms can be plots. With hierarchical plots, we can just say that rooms are sub-plots of the house.&lt;&#x2F;li&gt;
&lt;li&gt;We need a way to map connections between plots, and rooms because of the first conclusion. This would make it much easier for rtsim NPC to navigate sites. This can be done by keeping track of walls and what plots they connect to.&lt;&#x2F;li&gt;
&lt;li&gt;We need plots to be able to be 3d. For example a giant tree could have a house on one branch above another house, these shouldn&#x27;t affect each other because of plots being allocated on a 2d grid.&lt;&#x2F;li&gt;
&lt;li&gt;We need to fully rework how plot allocation works, especially when it comes to hierarchical plots.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1169253765401030686&amp;#x2F;screenshot_1698842129647.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@zesterer wrote an example of what this could look like in code &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;play.rust-lang.org&#x2F;?version=stable&amp;amp;mode=debug&amp;amp;edition=2021&amp;amp;gist=519add45741aa0f75f52aacff5811f85&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We also talked about using more premade assets in site generation. One example of how to do this is using tiles, similar to how you&#x27;d use a tilegrid in 2d games,
you can do the same in Veloren. But with voxel models.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren worldgen&#x2F;worldsim terms:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Site&lt;&#x2F;strong&gt;: A place with buildings, could be a town, a dungeon or even a giant tree.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Plots&lt;&#x2F;strong&gt;: An allocation of space in a site.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;rtsim NPC&lt;&#x2F;strong&gt;: An NPC which is always simulated, even in chunks that aren&#x27;t currently loaded by a player.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;halloween-season-impressions&quot;&gt;Halloween season impressions&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1167935087522893834&amp;#x2F;me_there_really.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1167340160883621948&amp;#x2F;screenshot_1698355217372.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1166530623884767332&amp;#x2F;screenshot_1698167717744.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1166841886770737163&amp;#x2F;screenshot_1698211021419.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1167586192179597402&amp;#x2F;screenshot_1698432139944.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1168351171078008873&amp;#x2F;2023-10-29_21-35-03.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1168528738422636625&amp;#x2F;aftermath.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1167840280142151720&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Playing Veloren can obviously get addictive!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1168618204478832731&amp;#x2F;screenshot_1665675131329.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Living in a pumpkin. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1166821521784836116&#x2F;screenshot_1.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week in Veloren 219</title>
          <pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-219/</link>
          <guid>https://veloren.net/blog/devblog-219/</guid>
          <description>&lt;p&gt;This week, we enjoy terraced terrain.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last week&#x27;s contributors @RaulWCosta, @imbris, @Isse, @Sam, @floppy, @zesterer, @crabman, @Christof, @xMAC94x, @jshipsey and @DaforLynx.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes faster color mapping, hot re-loading fixes, puddle detail
shader fixes, using Beziers for beams, dreadhorn hitbox fixes, fixing a panic on
adding dead pets, fixing division by zero, avoiding the pilot duplication, new
walking animations, adding items via plugins, moderation improvements, LoD
improvements, spawning Dullahans in more remote places, lava sounds, carts and
entity joints (tethering) and LoD reflection fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on plugins, weapon precision, barns, worldgen
experiments, balancing, dwarven mines, inventory overflow, item merging, phoenix,
conversation UI, voxel file renaming, updating WGPU, taverns and blacksmith workshops.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1164640614416138351&amp;#x2F;screenshot_1697741982514.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;precision-explanation-by-sam&quot;&gt;Precision explanation by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;Precision changes criticals to be non-random, and instead based on, well, precision.
Only melee, projectile, and beam attacks can benefit from precision.
All three can become precise when attacking from behind, or partially precise when attacking from the sides.
Melee can also become precise when attacking a poised target, becoming more precise as a target is more poised.
Projectile can also become precise when colliding with the head of a target (technically the upper 10% of a body&#x27;s cylinder).
Beam can also become precise when a target is continuously hit, becoming more precise over time.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;server-configuration-changes-by-xmac94x&quot;&gt;Server configuration changes by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;There is an upcoming configuration change that requires your action:
The setting &lt;code&gt;server&#x2F;server_config&#x2F;settings.ron:metrics_address&lt;&#x2F;code&gt; will be moved to &lt;code&gt;server-cli&#x2F;settings.ron:web_address&lt;&#x2F;code&gt;.
So, in case you used this setting, e.g. to collect metrics, you need to adjust the server-cli settings to make this work.&lt;&#x2F;p&gt;
&lt;p&gt;This change went live on Oct 19th with the weekly release.&lt;&#x2F;p&gt;
&lt;p&gt;Part of this change is also providing an API to monitor and moderate chat messages on the game server (Global, Group, Fraction, Direct Messages, everything).
This feature isn&#x27;t enabled on the official server, yet.&lt;&#x2F;p&gt;
&lt;p&gt;But we plan to enable it soon, so be prepared. A dedicated announcement will follow before this gets enabled.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1163177821196255363&amp;#x2F;screenshot_1697355722156.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Halloween is coming!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;defining-items-in-plugins-by-christof&quot;&gt;Defining items in plugins by @Christof&lt;&#x2F;h2&gt;
&lt;p&gt;This week a long-running development branch was merged which enables definition
of new items via plugins. Sadly sending plugins from the server to the client is
still missing, so the effect is only local for now.&lt;&#x2F;p&gt;
&lt;p&gt;You can take a look at an example plugin at https:&#x2F;&#x2F;github.com&#x2F;cpetig&#x2F;veloren-plugin-canoe . Vox files and similar assets can be directly included in
the plugin. But adding new entries to existing RON based manifests is more tricky
and requires merging the data, enabling this for all file variants is still worked on.&lt;&#x2F;p&gt;
&lt;p&gt;Please note that for now we avoid making guarantees about plugin backwards compatibility.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1031448647147204608&amp;#x2F;1163943230325399592&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A &amp;#x27;weapon&amp;#x27; and foot &amp;#x27;armor&amp;#x27; defined in a plugin&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;other-development-reports&quot;&gt;Other development reports&lt;&#x2F;h2&gt;
&lt;p&gt;WGPU recently gained support for WGL &#x2F; OpenGL 3.3, so for older graphics cards there
will soon be an alternative to directX 11 or Vulkan. We plan to release a test binary
with a much newer WGPU soon. In this case we skipped eight full releases
(0.9 to 0.18) and openGL support had been discontinued ever since
Veloren 0.10 switched to WGPU in mid 2021!&lt;&#x2F;p&gt;
&lt;p&gt;Dropping support for directX 11 isn&#x27;t ideal, so we delayed this transition,
but besides much improved support
for directX 12 and Vulkan in WGPU 0.18, openGL should re-enable running on
even much older cards and directX 11 might eventually get re-implemented again.&lt;&#x2F;p&gt;
&lt;p&gt;An impressive video of a terracotta dungeon walkthrough by @floppy








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;wlj0ag&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1166022345601863690&amp;#x2F;screenshot_1698069194476.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Barns by @EvgenKot&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1166022347317334156&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1164905766495465502&amp;#x2F;screenshot_1697805563121.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new carts outside their comfort zone&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1164905330489171968&amp;#x2F;screenshot_1697805445939.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1164023517394776095&amp;#x2F;screenshot_1697595205821.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new LoD transition by @zesterer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1163453469559115786&amp;#x2F;2023-10-16_14-26-22.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Taverns by @Isse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1162811892973183036&amp;#x2F;screenshot_1697306324949.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hall of mirrors by @zesterer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1162673028514185216&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Watch your steps!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;new-geological-structures-by-zesterer-work-in-progress&quot;&gt;New geological structures by @zesterer (work in progress)&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1165677419932438639&amp;#x2F;screenshot_1697989515672.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165368625872506950&amp;#x2F;screenshot_1697915921686.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165394678112329878&amp;#x2F;screenshot_1697922124896.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165395148486742097&amp;#x2F;screenshot_1697922245174.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165396435395682407&amp;#x2F;screenshot_1697922552826.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165433723936837733&amp;#x2F;screenshot_1697931430629.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165427123977199668&amp;#x2F;screenshot_1697929863286.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1165433284008882296&amp;#x2F;screenshot_1697931335967.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Everybody waits for swamps to become real. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1165369349327040553&#x2F;screenshot_1697916060026.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 218</title>
          <pubDate>Sun, 15 Oct 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-218/</link>
          <guid>https://veloren.net/blog/devblog-218/</guid>
          <description>&lt;p&gt;These weeks, we enjoy the new running animation updates.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @floppy, @crabman, @xMAC94x, @imbris, @uniior,
@Isse, @zesterer, and @slipped.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes fix for stopping birds by talking to them, status messages
during load, toolchain update, new treasure chests, frost giga tweaks,
shader numerical fixes (for large clock values), new running animations,
MacOS linking, airship docks, backpack fixes, and shaders in low reflection mode.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on items in plugins, barns, terracotta ruins,
inventory overflow handling, vampire castle, mage tower, mines, bank storage,
item merging, phoenix, loot export, and bird large routes.&lt;&#x2F;p&gt;
&lt;p&gt;Developer meetings happen Saturdays or Sundays at 7pm UK time, they get announced a
few hours ahead on #town-hall with a ping to @DevPingSquad,
which is self-assignable in #rules-and-info.&lt;&#x2F;p&gt;
&lt;p&gt;The recent weeks have been very informal in a small group, but this week had
a larger audience, you can read the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;BkBBtLOWa&quot;&gt;minutes here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;toolchain-update&quot;&gt;Toolchain update&lt;&#x2F;h2&gt;
&lt;p&gt;@imbris was able to fix the Vulkan crash in gfx-hal, so the toolchain was updated without
requiring a newer WGPU version, which would break our directX11 support.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;thank-you-to-the-moderators&quot;&gt;Thank you to the moderators!&lt;&#x2F;h2&gt;
&lt;p&gt;This week, again, there were some hostile chat interactions and the moderators
continued their unthankful work of warning, timing out or banning offenders.
Many of them continuing the vandalism with alternate accounts.&lt;&#x2F;p&gt;
&lt;p&gt;As usual seeing the deleted material isn&#x27;t good for your mental health
or belief in humanity&#x27;s capacity for good.&lt;&#x2F;p&gt;
&lt;p&gt;So many thanks to the moderators for their continued work to keep Veloren a
friendly place! 🙏&lt;&#x2F;p&gt;
&lt;h2 id=&quot;developer-updates&quot;&gt;Developer updates&lt;&#x2F;h2&gt;
&lt;p&gt;New walking animation by @zesterer on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;wq8dDlm&quot;&gt;Imgur&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;RTSim bug causing pilot mass duplication





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1161822960890413226&amp;#x2F;1162032191941910588&amp;#x2F;screenshot_1697120444778.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;534843870375182339&amp;#x2F;1162819515223130225&amp;#x2F;untitled.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;some-impressions-from-the-game&quot;&gt;Some impressions from the game&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1161524748304527420&amp;#x2F;screenshot_1696999391776.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1154516451970011256&amp;#x2F;screenshot_1694638662903.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1155911895023353926&amp;#x2F;screenshot_1695661241201.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1155961429728444426&amp;#x2F;screenshot_1695673063185.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1155906210399256586&amp;#x2F;screenshot_1695659905497.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1162673028514185216&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;a sinkhole!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1158043581097984150&amp;#x2F;screenshot_1696106207192.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1155930856410591332&amp;#x2F;screenshot_1695665744723.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;a bug, but pretty&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1162122140712185886&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1158521117770788914&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pilot error at night. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1158043466446684160&#x2F;screenshot_1696105648776.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 217</title>
          <pubDate>Sun, 01 Oct 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-217/</link>
          <guid>https://veloren.net/blog/devblog-217/</guid>
          <description>&lt;p&gt;These weeks, we look at map experiments and the treasure hunt event.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @vasco, @imbris, @Haijo7, @xMAC94x,
@christof, @james, @Isse, @crabman, @lle-bout, and @floppy.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes translation updates, cursor locking on wayland,
item quality fixes, updating uuid, authentication fixes, location name fixes,
updating to a new major version of specs🏆, the singleplayer map GUI🗺️,
removing unwrap, non-hostile NPCs ignore loot, removing unused dependencies,
localization of server command responses, the arena building in desert cities🏟️,
fixing windowsills,
and fixing airship de-synchronization (which caused duplication of captains)👩🏿‍✈️.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1154214675727274064&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on Frost Giga buffing,
numerical error reduction in shaders, toolchain update, vampire castle, barns,
loading progress text, loot export, phoenix, bird travel, terracotta ruins,
dwarven mines, heightmap loading, tethering, plugins, bank storage, localize commands,
sword balancing, specs refactoring, windmills, and vox file names.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1154214311544225832&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Some small (up to five people) developer meetings took place, but I wrote down no minutes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;singleplayer-map-selection&quot;&gt;Singleplayer map selection&lt;&#x2F;h2&gt;
&lt;p&gt;@Isse created a map selection UI for singleplayer mode:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1105860122430931025&amp;#x2F;1152901943388282960&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This has led to many experiments by players:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1154448474880880670&amp;#x2F;screenshot_1695308053185.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1154762959726333992&amp;#x2F;AOJR4RE58N6U57PYU6A6E.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1154856107320283227&amp;#x2F;screenshot_1695409332660.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1155846430653698048&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1155856694740521000&amp;#x2F;screenshot_1695546014352.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1155862900162961538&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1155878390885257267&amp;#x2F;screenshot_1695653194875.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1155902428491821146&amp;#x2F;screenshot_1695658971365.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;1155079954086768661&amp;#x2F;screenshot_1695461449266.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;treasure-hunt-event-by-vaga-and-hrom&quot;&gt;Treasure hunt event by @Vaga and @Hrom&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1151234797440614400&amp;#x2F;mainpic.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The puzzle starts with a riddle:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1153042936850825256&amp;#x2F;theriddle.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;With this you&#x27;re led to the capture the flag tower by Werograd. Here you find a man playing the flute named Kokopelli, he gives you a string of letters and numbers, &quot;BlzgI0yg87Y&quot;.
This is the ending of a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BlzgI0yg87Y&quot;&gt;YouTube link&lt;&#x2F;a&gt;, that has a flute playing in Morse code, along with some other random gibberish to distract you.
The Morse code gives you the word &quot;Pralis&quot;, which happens to be a town.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;911333300197544066&amp;#x2F;1153311919604768778&amp;#x2F;screenshot_1694977754971.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;In this town you meet character called Portunus . He also gives you a string: &quot;Fnzw Uzfx ov Xhtrsbacbh &amp;lt;r oelch tye kwif&amp;gt; occ lwlc pvdzx&quot;.
This is a vigenere cipher and to solve this you need a key. In the town there are 4 more characters scattered around houses, each representing a relic weapon:
Thor (Mjolnir), Loki (Laevateinn), Hermes (Caduceus), and Vidyudabhi (Parashu). Portunus also hints at needing keys, and that &quot;United gods are unstoppable&quot;.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;911333300197544066&amp;#x2F;1153312042724368504&amp;#x2F;4gods.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;In order to get the key, you needed to combine all the relic names into one and for the right order of the names, look at the armor the characters were wearing, which went from none all the way up to tier 4.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;911333300197544066&amp;#x2F;1153312364704301236&amp;#x2F;tablehermes.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Once you had the key, you could reveal the cipher&#x27;s true text, and the answer that must be sent, &quot;x marks the spot&quot;.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;911333300197544066&amp;#x2F;1153312364108709899&amp;#x2F;portunus.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;911333300197544066&amp;#x2F;1153312364381356082&amp;#x2F;screenshot_1694983782127.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for participating, there were some big brain ideas, congrats to: Luminas, Kotty, Dimlbur and do-no-van for reaching the end!!!





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;888424036143607809&amp;#x2F;1153113826259111956&amp;#x2F;crabday.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;toolchain-update-and-wgpu&quot;&gt;Toolchain update and WGPU&lt;&#x2F;h2&gt;
&lt;p&gt;Updating the Rust compiler to a newer version crashes the Vulkan driver on @christof&#x27;s
computer. Updating WGPU fixes this problem.&lt;&#x2F;p&gt;
&lt;p&gt;This led to a discussion of finally updating WGPU, with no solution for
directX11 support.
Perhaps a fork using the old WGPU for Windows builds is an option,
or magically a DX11 backend for WGPU 0.10+ materializes with enough demand.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;specs-refactor&quot;&gt;Specs refactor&lt;&#x2F;h2&gt;
&lt;p&gt;@imbris fixed the ECS system specs (and its data manager shred) to be MIRI compliant.
This is one of the most significant changes to specs since 2020. @imbris also
changed Veloren to use this corrected ECS crate.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;frost-giga-testing&quot;&gt;Frost giga testing&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1157674373495394334&amp;#x2F;screenshot_1696080820009.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1157674373101138000&amp;#x2F;screenshot_1696080039893.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1157674373495394334&amp;#x2F;screenshot_1696080820009.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;wmJ3GZhvb0c&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;new-moderator&quot;&gt;New moderator&lt;&#x2F;h2&gt;
&lt;p&gt;Please welcome @crabman as a newly nominated moderator.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;upcoming-discord-changes&quot;&gt;Upcoming Discord changes&lt;&#x2F;h2&gt;
&lt;p&gt;Discord adds new extensions to shared content which will likely restrict the
time you can download a file from a link in the future. We are working on a new
content system to deliver the images and videos included in this blog.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1155914943414145075&amp;#x2F;screenshot_1695473672867.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Looking into the far distance of a hollow world. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1154223301795790928&#x2F;screenshot_1695258512987.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 216</title>
          <pubDate>Sun, 10 Sep 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-216/</link>
          <guid>https://veloren.net/blog/devblog-216/</guid>
          <description>&lt;p&gt;These weeks, we look at arena, windmill and phoenix work.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @lle-bout, @Christof, @imbris, @crabman and @Nectical, @xMAC94x, @Gaxrodi, @tygyh, many contributors in Codeberg WebLate, @walpo, @vasco, @namolite, Thomas S, @Isse, @Qsto and @floppy, @xiretza, @Neras.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes a network library update, locations in character selection, a winit (OS window) update, a new portal graphic, dependency update, many translation updates, a README update, rtsim airship fixes, loot balancing, buff death message improvements, and group chat fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on Phoenix abilities, NPC arena 🏟️, Frost Giga attacks, a compass, bank storage, windmills, CI scripts, saving window size, singleplayer world selection, lava material, and weather network optimization.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the last developer meeting&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;H1quJ3KR3&quot;&gt;minutes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reviewing-merge-requests&quot;&gt;Reviewing merge requests&lt;&#x2F;h2&gt;
&lt;p&gt;Although the amount of merge requests merged increased in August
after a low in June, there are still plenty of them open.
So we encourage everyone to participate in reviews, a gitlab account is all
you need to start. Alternatively you can join the discussion in the
Discord thread linked from the MR.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to learn more about how swarm reviews can work
for open source projects, look at Alice&#x27;s excellent
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.leafwing-studios.com&#x2F;blog&#x2F;triage-by-controversy&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt;
or presentation video &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;u3PJaiSpbmc&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;misc-development-updates&quot;&gt;Misc development updates&lt;&#x2F;h2&gt;
&lt;p&gt;The new portal in action by @necti&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1144263547275186286&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing work on Windmills by @EvgenKot&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1143082646705029181&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;534843870375182339&amp;#x2F;1150134747650068570&amp;#x2F;screenshot_1694282311446.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;4063&quot;&gt;NPC arena work&lt;&#x2F;a&gt; by @floppy, @Isse, @lle-bout and @zesterer&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1139101474148843531&amp;#x2F;1141904444766818344&amp;#x2F;screenshot_1692321610634.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1139101474148843531&amp;#x2F;1142707379612438578&amp;#x2F;screenshot_1692512869463.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;5rmr20&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Some work in progress animations from the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1134112079310241792&quot;&gt;Phoenix rework&lt;&#x2F;a&gt; by @floppy and @Neras&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1134112079310241792&amp;#x2F;1143830596641116190&amp;#x2F;Veloren_2023-08-23_11-53-29.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1134112079310241792&amp;#x2F;1144624748148564048&amp;#x2F;Veloren_2023-08-25_16-29-21.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1134112079310241792&amp;#x2F;1150126931786862684&amp;#x2F;Veloren_2023-09-09_20-53-24.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1134112079310241792&amp;#x2F;1150129730914365552&amp;#x2F;Veloren_2023-09-09_21-04-21.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;ru3xag&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;game-video-footage&quot;&gt;Game video footage&lt;&#x2F;h2&gt;
&lt;p&gt;Player vs player event footage by @necti&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;mDGYFwjVcAw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Cave combat video by @Coba&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1147236398420721744&amp;#x2F;Veloren.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Creative shader usage by @Uniior&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1151068591379202068&amp;#x2F;2023-09-12_05-07-17.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1144660797763637348&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Looking back to the last release party map. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1144649854702858381&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 215</title>
          <pubDate>Sun, 20 Aug 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-215/</link>
          <guid>https://veloren.net/blog/devblog-215/</guid>
          <description>&lt;p&gt;These weeks, we again present many ongoing activities on the Veloren project.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @Igigog, @Isse, @NerasW, @aweinstock, @Maxicarlos, @Sam and @Pfau, @Daforlynx, @jimmy, @tibbon1, @Qsto, @floppy, @xMAC94x, @neutralmodder, @TelepathicWalrus, @imbris, and @EvgenKot.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes rtsim save refactor, a division by zero fix, balance tweaks, item quantity display, chieftain mask fixes, ⛏️ Axe skills, combat music toggle, controller layers, dependency updates, Brimstone armor fixes, 🐉 spawning Wyverns, chest loot balancing, CI fixes, repair sound, craftable shovels, desert biome fixes, a new leather backpack, zoom key bind, disable Sapling fleeing, stay and follow commands to pets, coastal town fence fixes, physics synchronization changes, pirate hideout, jungle ruins, cactus fixes, configurable SI prefixes, and dungeon cave intersection avoidance.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on food diversification, bank storage, NPC arena, new helper functions, inventory overflow, translations, mines, vampire castle, terracotta ruins, crab animation, phoenix, windmill, using the mold linker, multiple singleplayer worlds, farms, wind affecting gliding, airships, balancing, new textures, pan, agent debug menu, and documentation fixes.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the last developer meeting&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;SkcujmA3n&quot;&gt;minutes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;misc-development-updates&quot;&gt;Misc. development updates&lt;&#x2F;h2&gt;
&lt;!--TODO Video shows as corrupt in Firefox --&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1140419199932567582&amp;#x2F;atimelapse.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Timelapse by @Hrom&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Qsto and @Isse are working on an iron pan item.&lt;&#x2F;p&gt;
&lt;p&gt;Food changes by @Borbop are in review, @Qsto and @Gemu are working on existing bags and backpacks,
@UncomfySilence is looking into balance tweaks (DPS squash and health up).&lt;&#x2F;p&gt;
&lt;p&gt;@Isse: Shovels have now been made craftable, and are used to dig up mud and graves for loot.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-content-by-floppy&quot;&gt;New content by @floppy&lt;&#x2F;h2&gt;
&lt;p&gt;Links to Streamable videos:&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;m24b2y&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Shovel attack&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;qghaec&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Desert City Arena&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;cb7723&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Stay follow commands to pets (together with @Qsto)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;a7ujaz&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Flame rain attack for phoenix&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;bock4d&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Fiery tornado&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Related work is the burn attack by @Neras. You can find many more videos in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1134112079310241792&quot;&gt;this Discord thread&lt;&#x2F;a&gt; &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1134112079310241792&amp;#x2F;1141719438161362955&amp;#x2F;Veloren_2023-08-17_16-02-42.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;farmers-working-in-the-fields-by-zesterer&quot;&gt;Farmers working in the fields by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1139536811081875506&amp;#x2F;screenshot_1691757133951.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1139537477049253968&amp;#x2F;screenshot_1691757291092.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;distant-land-experimental-shader-by-zesterer&quot;&gt;Distant land experimental shader by @zesterer&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1141402673510359101&amp;#x2F;1141730016460296212&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;maze-creation-by-aweinstock&quot;&gt;Maze creation by @aweinstock&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;822286774428106762&amp;#x2F;1140836238417469621&amp;#x2F;maze.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1141033582094196767&amp;#x2F;maze_triangles.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;multiple-singleplayer-worlds-in-voxygen-by-isse&quot;&gt;Multiple singleplayer worlds in voxygen by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve been working on having multiple singleplayer worlds in voxygen, which you will see in the game soon. Which will allow players
to more easily generate different maps to play on. And your current singleplayer world will be migrated to this new system, so progress won&#x27;t be lost.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1141798645327470803&amp;#x2F;Screenshot_1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As it is currently it&#x27;s not really a user facing thing to generate maps. So I&#x27;m looking forward to more interesting maps being generated!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1141088305971220531&amp;#x2F;shovelcult.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Craftable shovels became popular. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1140390565901516993&#x2F;screenshot_1691927792405-1.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 214</title>
          <pubDate>Wed, 26 Jul 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-214/</link>
          <guid>https://veloren.net/blog/devblog-214/</guid>
          <description>&lt;p&gt;These weeks, we take a look at the many things going on at veloren development at the moment.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;1126347737424728195&amp;#x2F;Pre-Alpha.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A very visual reminder&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @xMAC94x, @RunRobDog, @Qsto, @sglorch, Jaroslav Lichtblau, @Pfau, @floppy, @imbris, @aweinstock, .&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes TCP receive buffer increase, spawn tab completion, loot changes, translation updates, dwarven quarry⛏️ (still inactive in game), coastal town, desert city fixes, CI optimization, shorter item count texts.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on vampire castle, terracotta ruins, more loot cleanup, medicine, defensive stance, moving crabs, avoiding dungeon cave intersections, iron pan, axe, controllers, readme clean-up, balancing, wgpu 0.17, wyverns, mines, winit update, jungle ruin, chieftain mask, agent debug menu, marketplace.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the developer meeting&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;B1WzHud9h&quot;&gt;minutes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ongoing-work&quot;&gt;Ongoing work&lt;&#x2F;h2&gt;
&lt;p&gt;@crabman implemented adding discord links to the merge request in GitLab, so now we have bi-directional linking.&lt;&#x2F;p&gt;
&lt;p&gt;@Hannibal initiated a veloren roadmap, the current &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;book&#x2F;-&#x2F;blob&#x2F;587f1a8653d51601ad74fa200298d8480f1d975e&#x2F;src&#x2F;players&#x2F;roadmap.md&quot;&gt;draft version is available in GitLab&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@walpo set up web based &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;translate.codeberg.org&#x2F;engage&#x2F;veloren&#x2F;&quot;&gt;veloren translation in Codeberg Weblate&lt;&#x2F;a&gt;, this is integrated with &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;dev&#x2F;veloren&#x2F;-&#x2F;tree&#x2F;weblate-translation&quot;&gt;our GitLab instance&lt;&#x2F;a&gt;. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.weblate.org&#x2F;en&#x2F;latest&#x2F;user&#x2F;translating.html&quot;&gt;This document&lt;&#x2F;a&gt; explains how to add translations.&lt;&#x2F;p&gt;
&lt;p&gt;@Floppy, @Gemu, and @Hannibal have been working on creating small sites that would serve as a replacement to the &#x27;spot&#x27; system. The goal is to have a variation of points of interest, smaller than dungeons, that will populate the wilderness of the world. Some of the planned ideas include moving the spots to site2, having more outposts, ruins, abandoned buildings, etc. To start off, we have been working on jungle ruins and temperate ruins, using handmade assets in site2.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1134937730799915068&amp;#x2F;image_1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1134937731202551930&amp;#x2F;image_2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1134937731638775911&amp;#x2F;Screenshot_from_2023-07-14_10-50-02.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1134937732091744376&amp;#x2F;Screenshot_from_2023-07-14_10-39-51.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Gemu, @Qsto and @Uncomfy are working on resource scarcity and more horizontal ways of obtaining them. They are cleaning the dungeons chests and moving woods to other droppers. They plan to decrease the occurrence of natural world materials in dungeons and incentivize foraging and wandering over the world to gather them.&lt;&#x2F;p&gt;
&lt;p&gt;Prototype implementation of portals in dungeons by @crabman (teleportation is unlikely to be added to the main game):&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1130554051654864937&amp;#x2F;1130643775572693082&amp;#x2F;portal.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@floppy and @Zion have been working on getting wyvern attack AI ready to match this fearful opponent.&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;se22tc&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;1a5zgv&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;More food types with more diverse effects by @Borbop.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1131999698631266447&amp;#x2F;1133695351841357886&amp;#x2F;Veloren_2023-07-26_05-39-37.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;another-frost-giga-sighting&quot;&gt;Another Frost Giga sighting&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1133489307894698104&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Frost Giga was here&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1133843702482223165&amp;#x2F;Screenshot_from_2023-07-26_21-27-13.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concert with a colorful light show. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1128632992110235658&#x2F;screenshot_1689154918616.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 213</title>
          <pubDate>Mon, 03 Jul 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-213/</link>
          <guid>https://veloren.net/blog/devblog-213/</guid>
          <description>&lt;p&gt;These weeks, we look closer at what happened around the code freeze period.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @zesterer, @xMAC95x, @Pfau, @walpo, @Christof, @Isse, @floppy, @Sam, @bd, @aweinstock, @tygyh, @Fengo.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes anti-cheat mechanisms (speed limits), a new login background, bloom and cinematic shaders, version bumps,
translation updates, wasmer update and &lt;code&gt;cfg(wasm32)&lt;&#x2F;code&gt; removal, a plugin fix, wildlife spawn changes, durability changes, confirmation
on one-way trades and item sorting by quantity.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on loot changes, coastal town, wyverns, avoiding cave dungeon intersections, map exploration, TCP buffering, iron pan, consumable cost reduction, lantern adjustments, axe skill tree, spawn entities from debug UI, voxel model spawning (a fortress), removing the coin counter, NPC searching players, wind affecting gliders and dwarven quarry.&lt;&#x2F;p&gt;
&lt;p&gt;There was no weekly meeting in the past two weeks, but there was a release party.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;0-15-release&quot;&gt;0.15 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Of course, you have to watch the cool trailer for this week&#x27;s release with matching music:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;weIK41W3tX0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The release party recording is available at &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;LWWiFaDp1-M&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;During the party someone used a loophole in veloren&#x27;s crafting mechanism to overload the server, a fix has been developed since then.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ongoing-work&quot;&gt;Ongoing work&lt;&#x2F;h2&gt;
&lt;p&gt;@Oguz did some &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450039871650660374&#x2F;1122605278123274330&quot;&gt;experiments&lt;&#x2F;a&gt; with shiny indices, but the end result wasn&#x27;t considered good enough -
until shiny gets proper &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1069340367855554690&#x2F;1069411255200260106&quot;&gt;implementation&lt;&#x2F;a&gt;.
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;1122635123930697900&amp;#x2F;Ekran_Kayd_2023-06-26_00.08.00.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;@floppy worked on rtsim large bird behavior, here is a test spawn of 600 crows:&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;xsfo5g&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Also @flopp4y improved wyvern attacks&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;l84lz2&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;1v7k9e&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;fh9wfv&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;a1ltio&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;assorted-impressions&quot;&gt;Assorted impressions&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1120799637192843295&amp;#x2F;158.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Frost Giga was here&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1124022226446987414&amp;#x2F;screenshot_1688057530630.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Artistic view with nonoise and sobel shaders. See you then!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1122481836476600440&#x2F;screenshot_1687636336735.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.15 Release</title>
          <pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-15/</link>
          <guid>https://veloren.net/blog/release-0-15/</guid>
          <description>&lt;h2 id=&quot;0-15-release&quot;&gt;0.15 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is releasing 0.15! This version is about 6 months in the making, and we
have a lot to show off!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;everytimezone.com&#x2F;s&#x2F;2609befe&quot;&gt;18:00 GMT on July
1st&lt;&#x2F;a&gt;, make sure to join the release party.
On the side, you can also watch the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Ry9Z8Nr6RHM&quot;&gt;release party dev
stream&lt;&#x2F;a&gt;, where we&#x27;ll be chatting
with devs about what went into this version.&lt;&#x2F;p&gt;
&lt;p&gt;To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an
account&lt;&#x2F;a&gt;, then launch the game and hop on the
default server. See you there!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-in-this-release&quot;&gt;New in this release&lt;&#x2F;h3&gt;
&lt;p&gt;Here are some of the changes in this release:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Our first world boss, the &#x27;frost giga&#x27;: seek him out if you dare!&lt;&#x2F;li&gt;
&lt;li&gt;A new dungeon: Adlet caves&lt;&#x2F;li&gt;
&lt;li&gt;Airships can now be used by players&lt;&#x2F;li&gt;
&lt;li&gt;Enemy loot is now shared between players&lt;&#x2F;li&gt;
&lt;li&gt;A reputation system: if you commit crimes, NPCs will remember it!&lt;&#x2F;li&gt;
&lt;li&gt;Improved AI: NPCs will talk to players and each other about events in the world&lt;&#x2F;li&gt;
&lt;li&gt;Much richer world simulation: NPCs will migrate and pass on rumours&lt;&#x2F;li&gt;
&lt;li&gt;You can now choose your character&#x27;s starting town&lt;&#x2F;li&gt;
&lt;li&gt;A durability and repair system&lt;&#x2F;li&gt;
&lt;li&gt;Improved accessibility, performance, bug fixes, and much, much more!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;As always, there are always more changes than we can add to a single post! You
can check out the full changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#0150-2023-07-01&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this versions contributors (in random order):&lt;&#x2F;p&gt;
&lt;p&gt;João Capucho, Monty Marz, Francesco Vasco, Nico, Cat Stevens, tygyh, Marcel,
Pexxxzz, Ellen Sun, Monty Marz, Vitalya, Sam, Youssef Fahmy, Antonios Barotsis,
maxicarlos08, Hudson, Corvella, Thomas S, flo, Terraaaagd, Ellen Sun,
mkatsenelson, Avi Weinstock, UncomfySilence, BigKhan, Rovetown, TaylorNAlbarnaz,
Julian Tölle, NiniKo, Joshua Barretto, Thanos Psaridis, Tao In Way, Isse, Scott
Bronson, walpo, Nicolas Wildner, MadirexRus, Marcel Märtens, Samuel Keiffer, cat
stevens (catb0t), Christof Petig, walpo, Thegaming Life, Imbris, Pedro H, Sophia
Waggoner, CxRedix, jshipsey, IsseW, Nils Ascheuer, Jonathan Berglin, Kittycat,
Joseph Donofry, Ben Wallis, Tormod Gjeitnes Hellen, Justin Shipsey,
Maxicarlos08, Joshua Yanovski, James Melkonian, Zaixun, Yusuf Bera Ertan,
DaforLynx, and Archit Gupta&lt;&#x2F;p&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one for this
release!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;557222912394788884&#x2F;1124748257017470996&#x2F;0.15.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 212</title>
          <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-212/</link>
          <guid>https://veloren.net/blog/devblog-212/</guid>
          <description>&lt;p&gt;These weeks, we look closer at two of the ongoing development activities 🌬️ 🌵 and ask you for feedback on hammer 🔨.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors @imbris, @walpo, @floppy, @aweinstock, @tormod, @archit, @mkatsenelson, @xMAC94x, @uniior, and Youssef Fahmy.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes mapping between RTSim, character and ECS ids, migration towards &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;IETF_language_tag&quot;&gt;IETF language tags&lt;&#x2F;a&gt;, cliff town rework, a visual edge enhancement shader, town placement improvements, nix&#x2F;flake updates, chat borders, CIDB server swap, more cacti models and small balance changes.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on dwarven quarry, physics synchronization between server and client, cart tethering, inventory rework, coastal towns, axe rework, winit and iced changes,
learnable recipes, terracotta ruins, beginner difficulty balancing, gnarlings close to giant trees, secondary cities, CI optimization, woodcrafting tools, better game controller support, food rework,
plugin code cleanup, avoiding dungeon-cave-intersections, recipe and stats tweaks, and glider-wind-interaction.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the weekly meeting minutes: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;H1Vygzjvn&quot;&gt;Jun 17th&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wind-wind-blowing-face-effects-on-gliding-by-laund&quot;&gt;Wind 🌬️ effects on gliding by @laund&lt;&#x2F;h2&gt;
&lt;p&gt;In reality, gliders don&#x27;t just glide downwards - they can reach quite high altitudes by using atmospheric phenomena that produce lift. I have been working on adding a few of these to Veloren to make it possible for gliders to climb up in the air.&lt;&#x2F;p&gt;
&lt;p&gt;The types of lift I have implemented are&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Thermals, which are columns of hot rising air created by the sun hitting surfaces and heating the air above. Thermals are more likely to occur in direct sunlight, so the time of day is a very important factor.&lt;&#x2F;li&gt;
&lt;li&gt;Ridge lift, which occurs when wind hits the side of a mountain and is guided upwards. This is not very reliable as it depends on the strength and direction of the wind.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;851517587337773056&amp;#x2F;1118647080102154310&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;i.laundmo.com&amp;#x2F;tENe0&amp;#x2F;LejinuBe33.mp4&amp;#x2F;raw&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;See also &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;851517587337773056&#x2F;1118647080370569266&quot;&gt;this discord thread&lt;&#x2F;a&gt; for more info.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cacti-cactus-rework-by-uniior&quot;&gt;Cacti 🌵 rework by @Uniior&lt;&#x2F;h2&gt;
&lt;p&gt;With feedback received from Gemu, I have remade the cacti models that were in the game since 2019, plus added a few extra ones made by Ge. Here&#x27;s a comparison for both the old cacti and the new ones remade by me, for reference.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1120167859478331564&amp;#x2F;cacti_oldvsnew.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;hammer-hammer-skill-questionnaire-by-sam&quot;&gt;Hammer 🔨 skill questionnaire by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;As the axe skill tree rework nears its completion, it is time to start collecting ideas that will be used in the hammer rework.&lt;&#x2F;p&gt;
&lt;p&gt;The hammer&#x27;s intended play style is to provide crowd control and support.&lt;&#x2F;p&gt;
&lt;p&gt;The abilities in the hammer skill tree are broadly intended to deal a large amount of poise damage to stagger targets, and have a hefty amount of knockback to remove enemies from your allies.&lt;&#x2F;p&gt;
&lt;p&gt;Suggestions for the hammer abilities can be made in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;1nydiL6QnG73CxzE8LU2u19aeYRhz5VxdOynY27JdqHQ&quot;&gt;this form&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;assorted-impressions&quot;&gt;Assorted impressions&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;conduit.koesters.xyz&amp;#x2F;_matrix&amp;#x2F;media&amp;#x2F;v3&amp;#x2F;download&amp;#x2F;conduit.rs&amp;#x2F;U6aSyNBcHj91QK6qODhCpvFz12iDbWo9&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1118809526276210729&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Does curiosity kill cattle?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1119043923634036736&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A tower bathing in red sun-light. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1115778708649807993&#x2F;screenshot_1685674800254.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 211</title>
          <pubDate>Mon, 05 Jun 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-211/</link>
          <guid>https://veloren.net/blog/devblog-211/</guid>
          <description>&lt;p&gt;These weeks, we look at some of the ongoing development activities.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @zesterer, @taoist, @vasco, @thanosfisherman, @crabman, @lioncat2002,
@tormod, @floppy, @tygyh, @xMAC94x, @walpo, @doiska, @Isse, and Thomas S.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes various fixes, charms, translation updates, one-way walls, loudness fixes, durability free areas, site placement improvements, IP address anonymization in logs, frost gigas in game, experimental shaders, fall damage fixes, savanna hut updates, plant creatures, cyclops and dullahan tweaks.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on ship movement, pet commands, Terracota ruins, dwarven quarry, coastal towns, cliff town rework, axe skills, physics sync, and many many more others.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the weekly meeting minutes: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;SyxXHOyU3&quot;&gt;May 27th&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vehicles-by-zesterer&quot;&gt;Vehicles by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve mostly been screwing around with vehicles this week. In particular, I&#x27;ve been working on adding wheeled vehicles.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;-5M3qEvEsSA&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;MFrJEvTyBEc&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rtsim-npc-movement-debugging-by-isse&quot;&gt;RTSim NPC movement debugging by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;Recently a branch I was working on isse&#x2F;rtsim-work was merged. With this came a fix for a bug that caused pilots to be dismounted from their airships if the ship was unloaded but the pilot wasn&#x27;t. This also means that you won&#x27;t find any empty airships anymore, yes it was a lot of fun, but airships also had their own issues and exploits. And hopefully players will be able to drive vehicles again, and it not being through a bug. It will also fix a bug causing rtsim monsters to swim into the depths of the ocean, never to be seen again.&lt;&#x2F;p&gt;
&lt;p&gt;While fixing these issues I thought it would be nice to have a more proper way to view what was happening in rtsim, which became my weekend project. I first made a very simple version that drew everything on the CPU.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1115332266630062203&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The small yellow dots are npcs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The next day I made a more involved version which uses &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bevyengine.org&#x2F;&quot;&gt;bevy&lt;&#x2F;a&gt;, which draws things on the GPU making it a bit more efficient to run. And I added some features like inspecting and querying for NPCs.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;IsseW&#x2F;rtsim-browser&quot;&gt;Source branch&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;fTrbyDUoUPQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;plant-creatures-by-taoist&quot;&gt;Plant creatures by @taoist&lt;&#x2F;h2&gt;
&lt;p&gt;Recently, our branch, &quot;plant creature&quot; is merged. This branch consist a set of enchanting &quot;plant&quot; creatures that has been specifically designed to cater beginner players. The primary objective behind the inclusion of these new mobs is to enhance the starting experience for beginner players.&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;m7s81s&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;charms-by-taoist&quot;&gt;Charms by @taoist&lt;&#x2F;h2&gt;
&lt;p&gt;Charms, akin to ancient talismans or magic papers known as ofuda, offer players a unique way to harness supernatural powers and gain an edge in their adventures. Each charm corresponds to a specific unique attribute, allowing players to inflict unique effects on their foes or bolster their own abilities. These charms add an exciting layer of strategy and versatility to the gameplay experience.&lt;&#x2F;p&gt;
&lt;p&gt;While these charms are not obtainable by normal means yet, their inclusion in our game opens up a world of possibilities for future updates and expansions.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1115347264580362391&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;site-rework-by-floppy&quot;&gt;Site rework by @floppy&lt;&#x2F;h2&gt;
&lt;p&gt;Recently some work was done on existing and upcoming sites:&lt;&#x2F;p&gt;
&lt;p&gt;Sea Chapel was overhauled and a couple of new assets and NPCs by Gemu were added, such as Coral Golem, Sea Bishop and Dagonite.
Savannah Pits received two additional building types: Hut and Workshop.
Cliff Towns were reworked for improved structures with better stairs and more accessible workshops.
A new site, Coastal Town, was completed and work has progressed on a new dungeon, Terracotta Ruins.
Also part of the site work was to include optimizations to prepare the sites better for the zoomy-worldgen optimization branch.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1115363081971839076&amp;#x2F;sites.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;a-preview-of-an-underground-place-by-hannibal&quot;&gt;A preview of an underground place by @Hannibal&lt;&#x2F;h2&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1111482440318459974&amp;#x2F;Teaser1.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;four-years-ago-in-comparison&quot;&gt;Four years ago in comparison&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1111664773826871379&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1113559289676701696&amp;#x2F;screenshot_1685562415357.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;So many lights in the night! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1112506564134322247&#x2F;screenshot_1685312569472.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Five years of Veloren</title>
          <pubDate>Mon, 29 May 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/birthday-5y/</link>
          <guid>https://veloren.net/blog/birthday-5y/</guid>
          <description>&lt;p&gt;This week we look back on the past five years of the project.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2018-may-25th&quot;&gt;2018 May 25th&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;CubeWorld&#x2F;comments&#x2F;8m079o&#x2F;cloning_cube_world_not_as_hard_as_you_may_think&#x2F;&quot;&gt;initial post on reddit 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;InitialPost.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The name Veloren was chosen on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;449602562165833760&#x2F;450691102576738314&quot;&gt;May 28th&lt;&#x2F;a&gt;, it is a simplification of the German word for &quot;lost&quot;: &quot;verloren&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Above&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;CubeWorld&#x2F;comments&#x2F;8vgple&#x2F;that_cubeworld_clone_we_were_building_heres_what&#x2F;&quot;&gt;banner image was taken on 2018 July 2nd&lt;&#x2F;a&gt; and is the oldest screenshot in this collection.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2018-july-4th-release-0-1&quot;&gt;2018 July 4th, Release 0.1&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;682562932181172233&amp;#x2F;o8xswbh2dz911.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;JMvJ2vx3tpM&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Video of terrain generation&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On July 24th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;VoxelGameDev&#x2F;comments&#x2F;91jy27&#x2F;veloren_foss_inspired_by_dwarf_fortress_cube&#x2F;&quot;&gt;ambient occlusion was added&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Jul.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;August 10th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;VoxelGameDev&#x2F;comments&#x2F;96bv11&#x2F;sunset_in_veloren_our_opensource_voxel&#x2F;&quot;&gt;screenshot&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Aug.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;On August 14th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&quot;&gt;veloren.net&lt;&#x2F;a&gt; went live.&lt;&#x2F;p&gt;
&lt;p&gt;On September 11th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9f0o59&#x2F;structure_generation_is_in_development_as_you_can&#x2F;&quot;&gt;structures were added&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Sep.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;September 21th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9hoy8d&#x2F;a_preview_of_some_of_the_server_commands_im&#x2F;&quot;&gt;A video with server commands&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9hp4z8&#x2F;a_very_early_preview_of_the_new_world_generation&#x2F;&quot;&gt;another one with worldgen&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9hvxgd&#x2F;an_early_preview_of_the_new_ui_engine_im_working&#x2F;&quot;&gt;the new UI&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Sep2.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;October 21st &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9q671l&#x2F;so_ive_been_playing_around_with_worldgen_what_do&#x2F;&quot;&gt;worldgen work&lt;&#x2F;a&gt; and a new screenshot &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;CubeWorld&#x2F;comments&#x2F;9q6p1d&#x2F;its_been_3_months_since_we_last_posted_this_is&#x2F;&quot;&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Oct2.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On October 22nd terrain color blending was added &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9qbonx&#x2F;testing_out_terrain_colour_blending_its_still_a&#x2F;&quot;&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Oct3.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On October 24th terrain was generated by a single continuous function&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;proceduralgeneration&#x2F;comments&#x2F;9r48fh&#x2F;the_terrain_of_veloren_now_generated_entirely_by&#x2F;&quot;&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Oct.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;November 6th saw a rework which temporarily broke character rendering &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9us830&#x2F;working_on_some_experimental_things_i_broke_the&#x2F;&quot;&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Nov.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On November 18th the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;9y9tmf&#x2F;working_on_a_proper_main_menu_for_veloren_no_more&#x2F;&quot;&gt;main menu was added&lt;&#x2F;a&gt;.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Nov2.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;On December 4th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;a374bn&#x2F;im_working_on_adding_fxaa_antialiasing_to_veloren&#x2F;&quot;&gt;FXAA became an option&lt;&#x2F;a&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;reddit&amp;#x2F;Veloren01_Dec.webp&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;On January 15th the animation system &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rust_gamedev&#x2F;comments&#x2F;ag8q3g&#x2F;im_working_on_an_animation_system_for_veloren_the&#x2F;&quot;&gt;was recreated&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;On February 4th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-1&quot;&gt;the first devblog&lt;&#x2F;a&gt; went live.&lt;&#x2F;p&gt;
&lt;p&gt;On April 14th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;&quot;&gt;the book&lt;&#x2F;a&gt; went &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;bd3bic&#x2F;the_new_veloren_book_includes_useful_information&quot;&gt;live&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;April 16th Animation update with the new engine
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;86CMjnRbW3w&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On April 17th &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;be9nbl&#x2F;a_thank_you_to_all_our_new_contributors&#x2F;&quot;&gt;this public thank you listed many early developers and their contributions&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2019-may-28th-release-0-2&quot;&gt;2019 May 28th, Release 0.2&lt;&#x2F;h2&gt;
&lt;p&gt;0.2 was a full rewrite compared to 0.1 and came with enhanced stability.&lt;&#x2F;p&gt;
&lt;p&gt;Highlights: Gliding, character customization and name tags, music, sword combat.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;bu5ys1&#x2F;thanks_to_everyone_that_took_part_in_the_release&#x2F;&quot;&gt;Announcement&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-17&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;582950491554578435&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;2019-august-4th-release-0-3&quot;&gt;2019 August 4th, Release 0.3&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: NPC combat, caves, XP and leveling, character customization, day&#x2F;night cycle.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-27&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;607665430202548246&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;2019-october-10th-release-0-4&quot;&gt;2019 October 10th, Release 0.4&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Administrator level, asset reloading, adjustable FOV.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-37&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;633170795862163485&amp;#x2F;screenshot_1571028502893.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;2020-january-31st-release-0-5&quot;&gt;2020 January 31st, Release 0.5&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Moon, clouds, sounds, map, erosion simulation, new NPCs.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-53&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;News &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;VPJ_AVb6Gg0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
Gource &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;1ldHQfxCT24&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2020-may-16th-release-0-6&quot;&gt;2020 May 16th, Release 0.6&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Music, hairstyles, authentication, advanced combat, armor, fields, dungeons, cultists.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-68&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Trailer &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;kjDFVgWYMd4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2020-august-15th-release-0-7&quot;&gt;2020 August 15th, Release 0.7&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Lottery, dancing, groups, crafting, furniture.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-81&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;745098696924069948&amp;#x2F;screenshot_1597715749478.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;2020-november-28th-release-0-8&quot;&gt;2020 November 28th, Release 0.8&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Far terrain, shadows, more attacks, sneaking, rolling, travellers, auroras.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-96&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Gameplay &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;TMYfrdiEJw4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2021-march-20th-release-0-9&quot;&gt;2021 March 20th, Release 0.9&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Reflections on water, skill trees, gems, trading, new dungeon NPCs, cliffs, giant trees, glow effect, airships.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-112&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;696825216868810855&amp;#x2F;825368877494960148&amp;#x2F;veloren.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;2021-june-12th-release-0-10&quot;&gt;2021 June 12th, Release 0.10&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Mining, one handed weapons, crafting stations, new glider physics, minimap, new caves, craftable armor.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-124&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Party &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;NMvEhymkqUw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2021-september-9th-release-0-11&quot;&gt;2021 September 9th, Release 0.11&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Persistent pets and terrain, spots.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-11&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Trailer &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;l1oOjvaWJlw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2021-december&quot;&gt;2021 December&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-150&quot;&gt;150th devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And the first &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;holiday-2021-christmas&quot;&gt;Christmas party&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;GwF7FltpX2E&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;2022-february-19th-release-0-12&quot;&gt;2022 February 19th, Release 0.12&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Hats, mounting pets, spiders.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-12&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Trailer &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;604JC5QdYQE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2022-july-23rd-release-0-13&quot;&gt;2022 July 23rd, Release 0.13&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Modular weapons, weather system, cave biomes.&lt;&#x2F;p&gt;
&lt;p&gt;Trailer &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;TEQHYO-hbz0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
Party &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;VWUT8m3NdMQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-13&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2023-january-7th-release-0-14&quot;&gt;2023 January 7th, Release 0.14&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: SeaChapel, water animation, sword skills, instruments.&lt;&#x2F;p&gt;
&lt;p&gt;Party &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Ry9Z8Nr6RHM&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-14&quot;&gt;Devblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-personal-take-on-five-years-of-veloren-by-zesterer&quot;&gt;A personal take on five years of Veloren by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is now more than 5 years old, and still kicking. I think this should come as a surprise to anybody that joined
the project in the early days; it&#x27;s most definitely a surprise to me. The project means many things to many people, but
perhaps a little context about what it means to me might be interesting to some.&lt;&#x2F;p&gt;
&lt;p&gt;In May 2018 I was coming to the end of my final exams at university. I also had a dissertation to finish and so,
naturally, I did everything I could to distract myself from these inevitable realities and began aggressively pursuing
anything that would take my mind off them. I remembered a game I&#x27;d found several years earlier, Cube World, that I&#x27;d
briefly been obsessed with (despite not having a computer capable of running it). Disheartened by the lack of updates,
I set about &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=oQOsogpUo0A&quot;&gt;recreating&lt;&#x2F;a&gt; some of the bits I found most enjoyable about the
game - the rolling hills and bright colours - as a weekend demo project using my newfound knowledge of C++ and OpenGL.&lt;&#x2F;p&gt;
&lt;p&gt;After posting about the demo on the Cube World subreddit, I was shocked to find that the enthusiasm to turn it into a
larger project was strong. People encouraged me to set up a Discord server for those interested, and suddenly the
project was born. At the time, I considered it a bit of fun, something that would die down after a month. Back then I
was never very good at committing to projects (as evidenced by 100+ dead repositories attached to my GitHub account),
so I didn&#x27;t have particularly high hopes for this one either.&lt;&#x2F;p&gt;
&lt;p&gt;Needless to say, I severely underestimated the effect that an enthusiastic community has on the development process.
Whenever I was lacking in motivation members of the community were there to cheer us on: and as one active developer
turned into two, and two turned into five, and five turned into a dozen, the project began to take on a life of its own.
The rest, as they say, is history. Five years on, I feel no sense of personal ownership over the project. Although I&#x27;m
still an active developer, the project is so much bigger than any one individual. I&#x27;m frequently amazed by the skill
and craftsmanship of others working on the project: artists, composers, programmers, designers, moderators, wiki editors,
DevOps wizards, documenters, playtesters, and all those working in and around the project to make it what it is.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;ll excuse my grandstanding for a moment:&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s most astounding, to me, is that nobody working on Veloren is paid for what they do. Every single person that
contributes to the project does so without the expectation of reward or profit, creating a game that is free in the
absolute &lt;em&gt;strongest&lt;&#x2F;em&gt; terms: not simply free to play, but also free from the constraints of monetisation, free from
the whims of investors, free from the requirement to generate profit, free from the need to extort both players and
developers as is so common in the increasingly exploitative games industry.&lt;&#x2F;p&gt;
&lt;p&gt;Further, it&#x27;s a positive affirmation that games and game development can not only survive outside the sphere of the
profit motive, but that they can &lt;em&gt;thrive&lt;&#x2F;em&gt; for the very reason that they decide to reject it. It&#x27;s also evidence to me
that humans are at their most creative and motivated when they&#x27;re not cajoled into the hierarchy of a corporation but
are free to self-organise as equals. In this sense Veloren is as much a game as it is a political statement, and
the project holds within it - as do countless other community-driven projects - the seeds of a possible future where the
work we do, the games we play, and the communities we frequent do not need to exist at the behest of undemocratic
corporations. We need only choose that future.&lt;&#x2F;p&gt;
&lt;p&gt;For now, I&#x27;d just like to thank everybody that&#x27;s been part of this project, no matter whether you&#x27;ve worked on the
biggest features or whether you&#x27;re a casual player that logs in to the server for an hour each month to check things
out.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m incredibly excited to see what the next 5 years has in store for the game and its community!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2023-july-1st-release-0-15&quot;&gt;2023 July 1st, Release 0.15&lt;&#x2F;h2&gt;
&lt;p&gt;Highlights: Locks and keys, durability, rtsim2 (professions), sitting on chairs, Adlet caves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;1105504404599218256&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Do you want to explore this in game? Join us for the 0.15 release party!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="&#x2F;images&#x2F;reddit&#x2F;201805_Early_veloren.webp" type="image/webp"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 210</title>
          <pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-210/</link>
          <guid>https://veloren.net/blog/devblog-210/</guid>
          <description>&lt;p&gt;These weeks, Adlet dungeons and pets-on-shoulders were merged. The toolchain received an update and the server infrastructure was reworked.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @Isse, @walpo, @Amaiolamo, @tygyh, @xMAC94x, @Terraaaagd, @DaforLynx, @zesterer, @hannibal, @imbris, @Vitalya, @Corvella, @Sam,
@vasco, @maxicarlos08.&lt;&#x2F;p&gt;
&lt;p&gt;The merged work includes translations, dependency updates, music updates, balancing, subtitles, server start optimization, dual sword skills, terrain persistance optimization, and sittable sprites.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on dwarven quarry, axe skills, plant creatures, seachapel rework, coastal towns, plugins, economy, pet commands, world generation, rtsim timescale, and many many more others.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the weekly meeting minutes: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;SkvgnRqXn&quot;&gt;&lt;del&gt;April 29th&lt;&#x2F;del&gt;&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;Bk1vwA7E3&quot;&gt;May 6th&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;BJ7167pN3&quot;&gt;13th&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;audio-subtitles-by-isse&quot;&gt;Audio subtitles by @Isse&lt;&#x2F;h2&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1100789221851152465&amp;#x2F;1100854029090820136&amp;#x2F;2023-04-26_20-37-41.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Audio subtitles (lower right)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;more-complex-patterns-on-blocks&quot;&gt;More complex patterns on blocks&lt;&#x2F;h2&gt;
&lt;p&gt;@zesterer has implemented material specific shaders, a very early prototype looks like this. This is promising interesting visual options for the future.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1107442026343059576&amp;#x2F;screenshot_1684105141638.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;new-animations&quot;&gt;New animations&lt;&#x2F;h2&gt;
&lt;p&gt;by @floppy&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;80qv4h&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;hb3v2h&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;and by @Lowis&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;851517587337773056&amp;#x2F;1107410676303011900&amp;#x2F;20230514-2052-07.4647881.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;party-map-progress-by-hannibal&quot;&gt;Party map progress by @Hannibal&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1100505782660890814&amp;#x2F;snap2023-04-25-15-35-58.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1101219637833760848&amp;#x2F;snap2023-04-27-14-53-12.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-screen-shots-from-the-game&quot;&gt;More screen shots from the game&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1105715456297406534&amp;#x2F;screenshot_1683692146149.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1104783685657571349&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1104821046760190142&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1104198221217149009&amp;#x2F;screenshot_1683322048996.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Is it going to rain soon? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1104822048615837856&#x2F;screenshot_1661064547493.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 209</title>
          <pubDate>Mon, 24 Apr 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-209/</link>
          <guid>https://veloren.net/blog/devblog-209/</guid>
          <description>&lt;p&gt;These weeks, durability and rtsim2 became part of the game.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors @aweinstock, @tony, @imbris, @UncomfySilence, @Christof, @hudson, @Sam, @floppy, @zesterer, @Isse, @taoist,
@Corvella, @apricote, @ubruntu, @pegasus4903, @walpo, @amaiolamo, @tygyh, @xMAC94x.&lt;&#x2F;p&gt;
&lt;p&gt;These changes include inventory list mode, an underwater fall damage fix, dependency updates, sword tweaks, multiple models in one VOX file, loot scrolling fixes,
equipment wear on death (&quot;durability&quot;), drawing optimizations, salamander animation, resource exhaustion and NPC professions and detailed behavior (&quot;rtsim2&quot;),
dullahan attacks, many further NPC behavior fixes, shader fixes, riding fixes, &quot;multi-loot&quot;, translation updates and more sounds.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1093617416623370270&amp;#x2F;Veloren_11_14_2022_5_36_40_PM.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on adlets, combat balancing, Frost Gigas, accessibility, NPC behavior, sea chapel, economy, sit-enabled sprites, faster server startup,
airship docks, charms, pyroscope, civilization simulation, and &quot;zoomy worldgen&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Link to the weekly meeting minutes: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;rJDqEFbQ3&quot;&gt;April 22nd&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;8sKLY7V6hvo&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Code reading for rtsim2&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;many-new-animations-by-floppy&quot;&gt;Many new animations by @floppy&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren seems to become a much scarier place if you watch these previews:&lt;&#x2F;p&gt;
&lt;p&gt;Dullahan animations&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;3moyfc&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;h8o2cb&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Cyclops animations&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;l9ot03&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;xp5pi9&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Adlet elder animations&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;cfe572&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;6yb4xf&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Drum animations&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;5ygc85&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Sea chapel animations&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;hgt3o7&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;dziv3e&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;mqbosh&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1099811514443108352&amp;#x2F;Veloren_2023-04-23_17-35-32.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;an inn&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;airship-furniture-by-isse&quot;&gt;Airship furniture by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;In &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-206&quot;&gt;TWIV 206&lt;&#x2F;a&gt; you might have noticed an airship with a set of chairs on it. That&#x27;s something I&#x27;ve been developing on and off the last couple of months. The goal is to be able to give more detail to airships and boats using sprites (which can be furniture, doors, ropes). This also makes voxygen handles voxel colliders a lot more like normal terrain, where you can interact with some blocks, other blocks give off particles or even sounds (sounds are yet to be implemented).
4
With this feature I&#x27;ve also implemented a way to mount a few sprites, like chairs or a helm which lets you control the vehicle. This makes riding an airship much more seamless as you don&#x27;t have to worry about falling off.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1097798321139105923&amp;#x2F;2023-04-18_10-15-24.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;airship equipment&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1100205153669349426&amp;#x2F;snap2023-04-24-19-40-15.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;progress on the next release party map&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;game-gallery&quot;&gt;Game Gallery&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1096170653230567575&amp;#x2F;screenshot_1680812093698.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1097616174575001733&amp;#x2F;screenshot_1681762387865.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1096170017155981362&amp;#x2F;screenshot_1681313275306.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1099854398949167144&amp;#x2F;screenshot_1682277038031.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1099853988146462730&amp;#x2F;screenshot_1682176124199.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1092509677314646086&amp;#x2F;screenshot_1680544986256.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Getting ready for nightfall. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1092347174379077672&#x2F;screenshot_1680506194555.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 208</title>
          <pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-208/</link>
          <guid>https://veloren.net/blog/devblog-208/</guid>
          <description>&lt;p&gt;These weeks, we get to select a spawn location.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors, @imbris, @DuckLuck, @floppy, @christof, @zesterer, @Sam, @Pfau, @ProfessionalHobbyist, @yusdacra, @kinoshi, @tygyh, @Isse, and @Maxicarlos08.&lt;&#x2F;p&gt;
&lt;p&gt;These changes include the new sword skill tree, an April&#x27;s fool surprise, configurable day length, RON based spots, time synchronization, translations and the selection of the starting town.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on rtsim2, Adlet dungeons, Durability (aka death penalty), multi-loot and the optimization branch &quot;zoomy worldgen&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Links to the weekly meeting minutes: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;BJO5FtQe3&quot;&gt;March 18th&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;HkraH93gh&quot;&gt;25th&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;S1xAxgIW2&quot;&gt;April 1st&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work-on-learnable-recipes-by-james&quot;&gt;Work on learnable recipes by @James&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve been working on crafting recipes. With my changes recipes can now be learned. Pfau and Gemu are working on the art side





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1084547355648479352&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1083698412798623784&amp;#x2F;recipe.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;selectable-spawn-location-by-zesterer&quot;&gt;Selectable Spawn location by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m working on allowing new players to choose their spawn location. The UI is still quite rough and @Pfau [GMT +2] will probably force me to clean it up before merge, but it does at least work. In the long term, I&#x27;d like this to grow into a system that allows you to choose your character&#x27;s backstory and attributes more like a traditional RPG.&lt;&#x2F;p&gt;
&lt;p&gt;(Yes, that is a temporary slider, I have no intention of forcing players to move a slider to choose their site)





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1091383165924429905&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;And here&#x27;s the final result:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1091885554905403504&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rtsim2-work&quot;&gt;Rtsim2 work&lt;&#x2F;h2&gt;
&lt;p&gt;@zesterer and @Isse are working on bringing the new simulation ready, this involves a lot of different professions in towns, more meaningful behavior of NPCs and persistent resource exhaustion.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;797421546871324712&amp;#x2F;1073355898266861578&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;797421546871324712&amp;#x2F;1092141278529077349&amp;#x2F;screenshot_1680457148378.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Two NPCs engaged in conversation&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;multi-model-voxel-files&quot;&gt;Multi-model voxel files&lt;&#x2F;h2&gt;
&lt;p&gt;@Christof is working on loading multiple models from one voxel file, this should make coherent design of armor sets more easy.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1085359082925465730&amp;#x2F;1092118604167790662&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;adlet-animations&quot;&gt;Adlet animations&lt;&#x2F;h2&gt;
&lt;p&gt;@floppy, @Gemu and @Sam are tirelessly working on making the Adlet dungeon a remarkable place&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;z0wgqs&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;4hbhd4&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1089245350931476570&amp;#x2F;2023-03-25_13-51-31.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;assorted-game-impressions&quot;&gt;Assorted game impressions&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1086335636983787580&amp;#x2F;screenshot_1679023285574.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1088815372926460094&amp;#x2F;screenshot_1679631758686.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1088815376546140261&amp;#x2F;screenshot_1679631567396.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1089259573594038333&amp;#x2F;screenshot_1679769920045.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1092091502454382702&amp;#x2F;Veloren_02_04_2023_16_16_06.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1086328095000248380&amp;#x2F;screenshot_1678746053271.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Isn&amp;#x27;t this magical? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1091308281449947256&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 207</title>
          <pubDate>Mon, 13 Mar 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-207/</link>
          <guid>https://veloren.net/blog/devblog-207/</guid>
          <description>&lt;p&gt;These weeks, we see work on creating visual guides for people new to Veloren, progress on rtsim2, and a poll for a skill tree overhaul.&lt;&#x2F;p&gt;
&lt;p&gt;- Sam, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors, @Pfau, @catb0t, @imbris, @floppy, @zesterer, and @Sam.&lt;&#x2F;p&gt;
&lt;p&gt;These changes include culling of underground terrain for rendering, more spots such as campsites, the ability to lock camera zoom, and optimizations related to buffs and auras.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608865447976970&amp;#x2F;screenshot_1678484192889.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on sword rework, durability (death penalty), adlet caves, more food types, unlockable recipes, quests, arches, and many more.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608865934524556&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;new-core-developers&quot;&gt;New Core Developers&lt;&#x2F;h2&gt;
&lt;p&gt;We recently added two new core developers. Welcome @Isse and @aweinstock to the core dev team.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;visual-guides-by-atenea&quot;&gt;Visual Guides by @Atenea&lt;&#x2F;h2&gt;
&lt;p&gt;Atenea has created some visual guides to help new players to Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212952007196822&amp;#x2F;1_Basic_controls.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212952514711632&amp;#x2F;2_Where_do_i_start_redo.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212953118670868&amp;#x2F;3_Basic_Crafting.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212953659752539&amp;#x2F;4_Modular_Weapon.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212954246959215&amp;#x2F;5_Mapeado_redo.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212954842529902&amp;#x2F;6_Tradeos_e_inv.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084212955165507715&amp;#x2F;7_Skills_redo.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work-on-rtsim2-by-isse&quot;&gt;Work on rtsim2 by @Isse&lt;&#x2F;h2&gt;
&lt;p&gt;This week I&#x27;ve been doing some work on rtsim2, in hopes of getting a version that&#x27;s not a regression from master merged soon.&lt;&#x2F;p&gt;
&lt;p&gt;More specifically I worked on rtsim birds, such as phoenixes and rocks, currently the implementation is very similar to master, except they have a home dungeon they will fly back to. In the future I hope the home can be a nest on top of a mountain or something similar.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608866446217276&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The second part I worked on was repopulation. One problem with the current rtsim is that players eradicate the population of both NPCs and phoenixes. Which is also the reason why merchants are currently immortal. That will be removed in rtsim2 as NPCs and birds will now be replenished. In the current implementation (might be changed before it gets merged) the population will always stay the same, as when one NPC dies, another one will spawn in another place.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608863959007342&amp;#x2F;screenshot_1678535096766.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;buff-and-aura-optimizations-by-sam&quot;&gt;Buff and Aura Optimizations by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;Buffs have been using much more network bandwidth than they should need to. The reason for this is that they kept track of their remaining duration by a counter that decreased every tick by the delta time. Because this modifies the &lt;code&gt;Buffs&lt;&#x2F;code&gt; component on an entity, it then is marked as needing to be resent over the network to each client, when obviously nothing has changed that the client should not be able to predict.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608867515777076&amp;#x2F;screenshot_1678353753124.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Instead of tracking how much time each buff has remaining before it expires, I changed buffs to instead calculate what time they will end at. This has the added benefit that buffs do not need to be mutated every tick, which allowed for an additional optimization: the buff system would no longer require mutable access to buffs (which means it can parallelize with other systems that also need to access buffs).&lt;&#x2F;p&gt;
&lt;p&gt;This change was also extended to auras as the implementation were similar enough to make doing so easy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;release-party-map-by-hannibal&quot;&gt;Release Party Map by @Hannibal&lt;&#x2F;h2&gt;
&lt;p&gt;Hannibal has created the past few maps that we&#x27;ve had for release parties, and is working on the next one.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084296422884655174&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;axe-skill-tree-overhaul-by-sam&quot;&gt;Axe Skill Tree Overhaul by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;Now that the second sword skill tree overhaul is effectively done, we can begin the skill tree rework for axes. As with the sword rework, we plan to shift away from passive skills instead to unlocking active abilities. The axe is intended to be a weapon that is focused on maintaining a high amount of combo for more powerful attacks, with a berserker-theme. The ideas will primarily be used as a source of inspiration when designing the axe abilities. Some things to note, being specific in your ideas can be helpful, as it allows us to have a better idea of what your idea would actually entail, but if your idea contains numbers it will be ignored and discarded (by an auto-filter).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;1adVTa1AH7QQpTs-EePAMufWYo_jNLeAfe3nn0_bf6K4&quot;&gt;Axe Skill Tree Suggestion Form&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;unlockable-recipes-by-james&quot;&gt;Unlockable Recipes by @James&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1084547355648479352&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;James has been working on unlockable crafting recipes. Pfau and Gemu have provided some models.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1083698412798623784&amp;#x2F;recipe.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;recent-player-growth&quot;&gt;Recent Player Growth&lt;&#x2F;h2&gt;
&lt;p&gt;We recently saw a large influx of players that have pushed both the official server and community servers to the limits. Because of this, there has been some recent focus on optimizations as well as a decrease to the max player limit on the official server.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;assorted-game-impressions&quot;&gt;Assorted game impressions&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608864843993218&amp;#x2F;screenshot_1678484892517.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608867004063875&amp;#x2F;screenshot_1678354283682.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1084608863438905495&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Isn&amp;#x27;t this magical? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;1084608867998109776&#x2F;screenshot_1678301670059.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Two Weeks in Veloren 206</title>
          <pubDate>Sat, 25 Feb 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-206/</link>
          <guid>https://veloren.net/blog/devblog-206/</guid>
          <description>&lt;p&gt;These weeks, we see work on extending voxel model usage in the game and hear about asset licencing.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last two weeks&#x27; contributors, @James, Scott Bronson, @walpo, @floppy, and @tormod.&lt;&#x2F;p&gt;
&lt;p&gt;These changes include energy fixes, bird and Frost elemental and werewolf animations, and site placement changes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1075687891260428295&amp;#x2F;screenshot_1676534326153.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James added swing sound effects to the new sword abilities.&lt;&#x2F;p&gt;
&lt;p&gt;Ongoing (unmerged) work is happening on sword rework, camps (see below), sittable sprites,
durability (death penalty), adlet caves, culling (display speedup), more food types, and many more.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1077678195475746956&amp;#x2F;screenshot_1677008660164.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Deck-chairs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;weekly-meeting-schedule-change&quot;&gt;Weekly meeting schedule change&lt;&#x2F;h3&gt;
&lt;p&gt;With less people attending the weekly meeting in this year we created a poll and found
that Saturday evenings works best for the respondents.&lt;&#x2F;p&gt;
&lt;p&gt;With the confusion about time zoned meetings in mind we decided for Saturday 8pm Bristol, UK time.
So if you live in the northern hemisphere the time should remain mostly constant across the year,
with a brief period of out-of-sync close to the switching.
The later time should still make it convenient for west coast US
and South American participants (sorry about the meeting time shifting two times a year).&lt;&#x2F;p&gt;
&lt;p&gt;The &#x27;weekly&#x27; developer meeting minutes are available at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;Sy8cZUBao&quot;&gt;2023-02-11&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1076206767924592640&amp;#x2F;screenshot_1676639567816.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;more-expressive-site-design&quot;&gt;More expressive site design&lt;&#x2F;h3&gt;
&lt;p&gt;@Pfau, @Sam, @zesterer and @Christof are working on getting more functionality into sites.
Sites are small voxel models spread randomly across the world, you might have encountered them as witch houses, lion rocks, dwarven graves and many more.&lt;&#x2F;p&gt;
&lt;p&gt;These voxel files typically come with a RON file describing some colors as special voxel, e.g. where to place
doors, the cauldron, windows and chests.&lt;&#x2F;p&gt;
&lt;p&gt;Now besides all sorts of materials (including Air and GlowingRock), trees, fruits and unoriented sprites, you can also define RotatedSprites
(rotation is relative to the model and gets modified according to the random placement, the &quot;unit&quot; vectors),
EntitySpawners (these place a NPC at this block with a specific chance) and a Keyhole.
Keyholes react to items in your inventory and then destroy all (closed) doors around them.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;1074811069412950146&amp;#x2F;screenshot_1676325066656.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The creators of these features had mage towers and mines in mind, but we are quite sure that this
convenient way to add content to the game with minimal coding (you have to add some lines
to register the site with its environmental requirements, e.g. only spawn in cold climates in nearly flat areas)
will enable lots of exciting contributions in the future.&lt;&#x2F;p&gt;
&lt;p&gt;See the &quot;camps&quot; branch for this ongoing work.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1076830512460599316&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;PS: @Christof thinks that this is a perfect candidate for cool extension mods using plugin files,
especially if the remaining coding gets replaced by a RON file describing the environmental constraints via an enum.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-most-obscure-physics-bug-by-atenea&quot;&gt;A most obscure physics bug by @Atenea&lt;&#x2F;h3&gt;
&lt;p&gt;If you use the glider at a proper angle just before diving into the water, you can propel yourself. You can do it repeatedly, even crossing lakes like this.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;I6bZN1X&quot;&gt;https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;I6bZN1X&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;asset-relicensing&quot;&gt;Asset relicensing&lt;&#x2F;h2&gt;
&lt;p&gt;It became clear, that while the intention to share content for usage on open source games was well stated with the GNU general public licence,
its requirement to share all source files to re-create the content was never fully intended for non text-based files like music and graphics.&lt;&#x2F;p&gt;
&lt;p&gt;Thus we looked for a more suitable licence for game assets and contacted music and graphic contributors about their opinion.
Two licenses made it to the final round, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by&#x2F;4.0&#x2F;&quot;&gt;CC-BY&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-sa&#x2F;4.0&#x2F;&quot;&gt;CC-BY-SA&lt;&#x2F;a&gt;. While the SA variant is most
similar to the previous GPLv3 licence it might create legal questions for using the music and graphics
while streaming game content.&lt;&#x2F;p&gt;
&lt;p&gt;Generally the consensus reached was to prefer the non-SA variant to enable free reuse in video streaming.&lt;&#x2F;p&gt;
&lt;p&gt;So, if you have contributed content to veloren and want to re-license your
files to a creative commons licence, reach out to the project via matrix or discord.
Already contributed files keep their licence as GPLv3, but if you contributed music
you might want to re-licence to escape GPLv3&#x27;s source material guarantees.&lt;&#x2F;p&gt;
&lt;p&gt;For future contributions to the game please either directly embed the licence of your choice
into the file (e.g. in a file comment) or state it in a text file in the same directory.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1066097340634640404&amp;#x2F;1067219239875911740&amp;#x2F;0527e0fb-5053-4045-8ee0-95d91f127f76_Creative_commons_licences.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;PS: Of course the licence decision remains the sole choice of the copyright owner!
If you prefer the most liberal CC0 this is fine as well, as CC0 content can be included in any game without drawbacks.
A ND clause will prevent modifications to your content, so you prevent us from re-coding into more efficient or suitable file formats in the future.
And a NC clause might interfere with or even prevent potential future releases on proprietary gaming platforms.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;assorted-game-impressions&quot;&gt;Assorted game impressions&lt;&#x2F;h2&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1077407994939199600&amp;#x2F;screenshot_1676944363292.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1078294391858405426&amp;#x2F;screenshot_1677155648428.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1077223862279872552&amp;#x2F;screenshot_1675975415974.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Isn&amp;#x27;t this magical? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1077223539981160519&#x2F;screenshot_1675466845780.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 205</title>
          <pubDate>Wed, 08 Feb 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-205/</link>
          <guid>https://veloren.net/blog/devblog-205/</guid>
          <description>&lt;p&gt;These weeks, we see glowing sprite voxels and internship results.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors, @zesterer, @aweinstock, @isse, @joedonofry, @niniko, @tygyh, @walpo, @Corvella, @vasco, @Teffmasterjeff, @poggly, @floppy, @Christof, @capucho, Nicolas Wildner, @MadirexRus, @imbris, @james.&lt;&#x2F;p&gt;
&lt;p&gt;These changes include potion sickness, many translations and fixes, more creatures, moderator badges and chat command suggestion fixes.&lt;&#x2F;p&gt;
&lt;p&gt;The &#x27;weekly&#x27; developer meeting minutes are available at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;HJbpdeooj&quot;&gt;2023-01-22&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;Bk8HVVE2o&quot;&gt;2023-01-29&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;ryBsoMnhs&quot;&gt;2023-02-04&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;potion-shops-were-created-during-a-two-week-internship-by-nixda&quot;&gt;Potion shops were created during a two week internship by @nixda&lt;&#x2F;h3&gt;
&lt;p&gt;In my two-week internship about game-design, I learned a lot about the different aspects and tasks that come with it.
I was always interested in programming and I always wanted to contribute to a game, which now I did.
Around 1 month before the Internship started, I started learning the basics of Rust.
In my first week, I learned a lot about what comes with game-design, for example economy or how the code of Veloren is structured and where to find things etc…
In the second week I build my own random generated &quot;house&quot; using site2.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1069375318562975744&amp;#x2F;screenshot_1674928647618.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1069375319372476496&amp;#x2F;screenshot_1674928667442.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;glowing-sprite-voxels-finally-made-it-into-the-game&quot;&gt;Glowing sprite voxels finally made it into the game&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1072285095408443412&amp;#x2F;screenshot_1675723063666.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;assorted-video-and-image-impressions&quot;&gt;Assorted video and image impressions&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1069720602413367438&amp;#x2F;Veloren_Drop_Edit.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1068474670598332476&amp;#x2F;veloren-voxygen_KfiHBqQHzU.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1067322337634029598&amp;#x2F;47.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1066784954245201991&amp;#x2F;screenshot_1674354249640.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1072284593392205824&amp;#x2F;screenshot_1675722948731.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1068668555538739372&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lightning at the tower. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1073992508838793226&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 204</title>
          <pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-204/</link>
          <guid>https://veloren.net/blog/devblog-204/</guid>
          <description>&lt;p&gt;These weeks, we make site code developers more productive and can&#x27;t stop including images from the gallery.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors, @yusdacra, @DaforLynx, @ashirviskas, @thanosfisherman, @vasco, @blinc, @zesterer, @xMAC94x, @imbris, @tygyh, @Isse, @Sam, @nico, @Pfau, @floppy, @walpo, @Corvella, @James and @nixda.&lt;&#x2F;p&gt;
&lt;p&gt;These changes include translation fixes, trading message fixes, graphics fixes, new instruments, soundtracks, sprite timeout, energy modifications, hitbox fixes, nix fixes, chat controlled experimental shader activation, MacOS fixes, wind sway fixes, better inventory sorting, and the changes for the 0.14 release!&lt;&#x2F;p&gt;
&lt;p&gt;@James changed bat behavior: They now have larger hitboxes, move slower, and should bounce up and down less.&lt;&#x2F;p&gt;
&lt;p&gt;The &#x27;weekly&#x27; developer meeting minutes are available at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;rJOzUrJco&quot;&gt;2023-01-01&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;BJhiA2-oj&quot;&gt;2023-01-15&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;site2-hot-reloading-by-sam&quot;&gt;Site2 hot reloading by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I added the ability for site2 to be dynamically compiled, which allows changes to the code to be made and observed in game without needing to recompile (though you&#x27;ll still need to use the &#x2F;reload_chunks command). This uses the same mechanism that animations and agent code uses for hot reloading, and can be accessed by compiling with the hot-site feature.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1060740608270008330&amp;#x2F;2023-01-05_21-01-48.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;veloren-original-sound-track-2023-edition&quot;&gt;Veloren Original Sound Track, 2023 edition&lt;&#x2F;h3&gt;
&lt;p&gt;@DaforLynx has created an updated OST with many updated screen shots, three hours filled with music and beautiful pictures.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;yNxxCwwKyes&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;plenty-of-beautiful-screenshots-from-the-gallery-channel&quot;&gt;Plenty of beautiful screenshots from the #gallery channel&lt;&#x2F;h3&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1058824098987397120&amp;#x2F;screenshot_1672513650903.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Happy New Year in veloren&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1058466584877862962&amp;#x2F;screenshot_1672428486564.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1061323578986995783&amp;#x2F;screenshot_1673108809444.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159312966922270&amp;#x2F;screenshot_1673302042220.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159313327624222&amp;#x2F;screenshot_1673302128533.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159314095190048&amp;#x2F;screenshot_1673302313702.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159315693211648&amp;#x2F;screenshot_1673301548766.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159529825009816&amp;#x2F;screenshot_1673303437467.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159531657936977&amp;#x2F;screenshot_1673304397078.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159616185745458&amp;#x2F;screenshot_1673304526523.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159618953990154&amp;#x2F;screenshot_1673307857931.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062332552133742642&amp;#x2F;screenshot_1673279447485.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062950313939718224&amp;#x2F;2023-01-11_23-20-42.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1063302719558926377&amp;#x2F;screenshot_1673581304314.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1063540614236479559&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1063545767131873321&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1063546872117088367&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1064122868998340708&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1064864367507681331&amp;#x2F;screenshot_1673953740069.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1062159619344048168&amp;#x2F;screenshot_1673308141122.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Looking out for more things to come. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1062159530131202118&#x2F;screenshot_1673303660827.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.14 Release</title>
          <pubDate>Fri, 06 Jan 2023 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-14/</link>
          <guid>https://veloren.net/blog/release-0-14/</guid>
          <description>&lt;h2 id=&quot;0-14-release&quot;&gt;0.14 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is releasing 0.14! This version is about 5 months in the making, and we
have a lot to show off!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;everytimezone.com&#x2F;s&#x2F;2609befe&quot;&gt;18:00 GMT on January
7th&lt;&#x2F;a&gt;, make sure to join the release party.
On the side, you can also watch the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Ry9Z8Nr6RHM&quot;&gt;release party dev
stream&lt;&#x2F;a&gt;, where we&#x27;ll be chatting
with devs about what went into this version.&lt;&#x2F;p&gt;
&lt;p&gt;To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an
account&lt;&#x2F;a&gt;, then launch the game and hop on the
default server. See you there!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-in-this-release&quot;&gt;New in this release&lt;&#x2F;h3&gt;
&lt;p&gt;Here are some of the changes in this release:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added a Craft All button and new recipes&lt;&#x2F;li&gt;
&lt;li&gt;Musical instruments can now be crafted, looted and played&lt;&#x2F;li&gt;
&lt;li&gt;Pets can now be traded with&lt;&#x2F;li&gt;
&lt;li&gt;Added redwood and dead trees&lt;&#x2F;li&gt;
&lt;li&gt;SeaChapel, Greek&#x2F;Latin inspired dungeon for ocean biome coasts&lt;&#x2F;li&gt;
&lt;li&gt;Doors now animate opening when entities are near them&lt;&#x2F;li&gt;
&lt;li&gt;Added screen-space reflection and refraction shaders&lt;&#x2F;li&gt;
&lt;li&gt;Added reflection quality setting&lt;&#x2F;li&gt;
&lt;li&gt;FxUpscale AA mode for higher quality graphics at reduced internal resolutions&lt;&#x2F;li&gt;
&lt;li&gt;NPCs now move to their target&#x27;s last known position&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;bridges&quot;&gt;Bridges&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1053981275205156915&amp;#x2F;screenshot_1671358715865.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;water-flow&quot;&gt;Water flow&lt;&#x2F;h4&gt;
&lt;p&gt;Water will now move according to its apparent flow direction&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1060960238959870094&amp;#x2F;screenshot_1672941857200.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;As always, there are always more changes than we can add to a single post! You
can check out the full changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#unreleased&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this versions contributors (in random order):&lt;&#x2F;p&gt;
&lt;p&gt;Tormod G. Hellen, Timothy Finnegan, Samuel Keiffer, Rares, UncomfySilence, 4ydx,
Tianyang Zhang, Monty Marz, Bingen Galartza, Avi Weinstock, Welvex, Jonathan
Berglin, holychowders, AldanTanneo, Ben Wallis, Dominik Broński, Saverio
Miroddi, parzivale, Koboo, fanix472, Justin Shipsey, loki, MadirexRus, zDrag0nG,
Benoît du Garreau, pepsalt, Henning Meyer, Halosesparta, Imbris, Thanos
Psaridis, Kavin Teenakul, matheusclmb, Valter Sanches, Tine Jozelj, Vincent
Foulon, Joshua Barretto, Juan Pablo Lagos, kitswas, WanCheng Ye, electro79,
Marcel Märtens, Youssef Fahmy, IsseW, rmdlv, tygyh, flo, Socksonme,
juliancoffee, James Gayfer, LunarEclipse, Sau, Yusuf Bera Ertan, Francesco
Vasco, Kuba 1001, Julio Cezar Silva, Joshua Yanovski, Christof Petig, Tavo
Annus, Eternalisime, Blinc, James Melkonian, Matheus, flo666, Gamma, Tim
Finnegan, Madrots, Aidar Shaikhiev, Dong, Couls, DaforLynx, and Matas Minelga&lt;&#x2F;p&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one for this
release!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1047560628593770536&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week in Veloren 203</title>
          <pubDate>Thu, 29 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-203/</link>
          <guid>https://veloren.net/blog/devblog-203/</guid>
          <description>&lt;p&gt;This week, we celebrate snow and glowing tree decorations.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last week&#x27;s contributors, @DaforLynx, @Seventh Sam, @Pfau, @Rares, Francesco Vasco and @zesterer.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1058030942754721893&amp;#x2F;IMG_20221229_153300.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren on Steam Deck&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;skill-bar-rework-by-pfau&quot;&gt;Skill bar rework by @Pfau&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1055502114928984116&amp;#x2F;1055524555894034602&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Bag and Spell book buttons were moved and merged with elements on the left and right of the skill bar.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;frost-gigas-by-uncomfysilence&quot;&gt;Frost Gigas by @UncomfySilence&lt;&#x2F;h3&gt;
&lt;p&gt;A group of aspiring coders (@floppy, @Ythern, and myself) have been working over the past winter to present the first Veloren World-Boss!&lt;&#x2F;p&gt;
&lt;p&gt;Frost Gigas (concept and models by @Gemu) was intended to be released during the first Winter event last year, 2021, but grew stale shortly before completion.
However, thanks to @Floppy&#x27;s remembrance of the first conceptualised Gigas we decided to try to get it up an running again with some refurbishing.&lt;&#x2F;p&gt;
&lt;p&gt;Gigas will hopefully be the first of a numerous elemental giants to roam the open world of Veloren and
will need a large group of players to be able to take it down and collect its new uncraftable and legendary loot!&lt;&#x2F;p&gt;
&lt;p&gt;Special thanks to @Snowram and @Slipped for the initial ground work for Frost Gigas 😊&lt;&#x2F;p&gt;
&lt;p&gt;Sneak peak to some of the current animations made by floppy on
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1042526569639456888&#x2F;1055255850022871140&quot;&gt;Discord&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;1qmvif&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;christmas-event&quot;&gt;Christmas event&lt;&#x2F;h3&gt;
&lt;p&gt;If you played veloren these days you might have noticed a special festive atmosphere with glowing ornaments in trees lighting the snowy nights.
Most of the world is covered in snow and ice.&lt;&#x2F;p&gt;
&lt;p&gt;Look out for wild snowball throwing creatures which can reward you with rare treasures like blue cheese or a wooly red cap.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1056711725606502430&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1055224046675050536&amp;#x2F;screenshot_1671655137713.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1055136624624803940&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Winter has come. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1055576970836066465&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week in Veloren 202</title>
          <pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-202/</link>
          <guid>https://veloren.net/blog/devblog-202/</guid>
          <description>&lt;p&gt;This week, we marvel at improved clouds and bird animations.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last week&#x27;s contributors, @mentos1386, @jgayfer, Benoît du Garreau, @muphblu, @xMAC94x and @zesterer.&lt;&#x2F;p&gt;
&lt;p&gt;Fixing the attack distance for Llamas, and other hoof animals like antelopes, alpacas or donkeys, is @mentos1386 first contribution,
it got merged only 75 hours after they joined the Discord server. This feels like record time.&lt;&#x2F;p&gt;
&lt;p&gt;For the owners of the currently 67 open merge requests, who contributed a fix and are still waiting for a review or merge decision this might sound outrageous,
but please bear with the review team and keep reminding us of contributions to work on.
You might simply have come at a less fortunate time or provided a much more complex patch.&lt;&#x2F;p&gt;
&lt;p&gt;This week&#x27;s minutes are &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;S1rGSCnOi&quot;&gt;here&lt;&#x2F;a&gt;. The meeting was mostly about the creation of this devblog and preparation for the Christmas event.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-clouds-by-zesterer&quot;&gt;New clouds by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;Prettier and faster, as promised. Although not as much faster as I&#x27;d liked. Turns out that I&#x27;d actually already done the &#x27;big&#x27; optimisation I thought about earlier but had forgotten about it.
Still, substantially faster than before.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s actually faster to just make the noise texture larger and more detailed instead of trying to do lots of samples of the same low resolution texture and composite them.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053085237715927101&amp;#x2F;screenshot_1671145475950.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053086266650001418&amp;#x2F;screenshot_1671145722890.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053090695214272562&amp;#x2F;screenshot_1671146777401.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Veloren&#x27;s got a lot more inputs to work with for clouds than OpenMW, so I can make it do nicer stuff.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053093473999388702&amp;#x2F;screenshot_1671147439356.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Morrowind was 2003, OpenMW is an open-source rewrite of the engine.
And it recently got support for post-processing shaders.
So, naturally, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zesterer&#x2F;openmw-volumetric-clouds&quot;&gt;I added clouds&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053100110243962911&amp;#x2F;screenshot_1671149016436.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Looking down at a town on a river from an airship.
You forget how large Veloren&#x27;s world is until you see each tree from above.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053102828454940712&amp;#x2F;screenshot_1671149623018.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1053683756298412072&amp;#x2F;screenshot_1671288169185.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1053688302751977512&amp;#x2F;screenshot_1671289258201.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1053689500745879632&amp;#x2F;screenshot_1671289538124.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;finance-updates-by-angelonfira&quot;&gt;Finance updates by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve updated the last several months of finances in the Google Sheets found &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;spreadsheets&#x2F;d&#x2F;1Fk6kDsCdZLhVszXdsWUjoG4Cgc3cLbTqJgZ-gY3Ndq0&#x2F;edit#gid=0&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Of interest, here is the revenue of our Open Collective over time





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1052764212453191830&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This also included me creating an expense for server costs of the last several months for Hetzner and Wasabi. The total of this invoice is $1,521.71, and can be viewed
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;opencollective.com&#x2F;veloren&#x2F;expenses&#x2F;113487&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bird-animations-by-floppy&quot;&gt;Bird animations by @floppy&lt;&#x2F;h3&gt;
&lt;p&gt;In the past months, I have been adding a bunch of @Gemu&#x27;s creature models to the game.
He sent me a zip to work on something &quot;on the side&quot;, and I soon realized that I had no idea what I got myself into.
But @Slipped gave me the essential info how to best add creatures to the game.
The wyverns&#x27; wings were most challenging to add because of their size and shape.
Sometimes people say, you have to learn the tried and tested ways properly, to stray from them,
and the wings did that for me, in a way.
I had to really understand and practice first, what @Slipped taught me, to then adjust that process a little,
to get the wyvern wings right.&lt;&#x2F;p&gt;
&lt;p&gt;Another favorite creature of mine is the Dodarock, which annoyed many players when it was first added, much too strong.
I like its grumpy but friendly face, and I&#x27;m always amazed how @Gemu&#x27;s models seem to have actual personality.&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;97gjut&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1053103484788023336&amp;#x2F;screenshot_1671149821143.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Moonlit clouds. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1053099504829743104&#x2F;screenshot_1671148878094.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Three Weeks in Veloren 201</title>
          <pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-201/</link>
          <guid>https://veloren.net/blog/devblog-201/</guid>
          <description>&lt;p&gt;This three weeks, we buy some extra time for our 200th issue.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to last three weeks&#x27; contributors, @Pfau, @DaforLynx, @JSweeney743, @FaceImplosion, @ElliotStone1998, @xMAC94x, @Isse, @electro79, @floppy, Francesco Vasco, @Madrots,
@tygyh, @rmdlv, and @Gamma.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-about-issue-200&quot;&gt;What about issue 200?&lt;&#x2F;h3&gt;
&lt;p&gt;We would like to make the 200th issue of &quot;This week in Veloren&quot; special, very much in the tradition of the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-100&quot;&gt;100th&lt;&#x2F;a&gt;.
But the option to not report ongoing activities by waiting for the 200th to become ready is not attractive as we just managed to
get the issues more timely again. So here is the compromise: The issues will be named 199+x until the 200th is ready.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile we would like to collect personal stories of how people came to veloren and make it a quilted one.
Roughly four sentences should already do, unless you have a very special story to tell us.
I especially encourage the many non-English
speaking server communities to contribute their individual view, preferably in their native language with an English translation to show the diversity of our
user base.&lt;&#x2F;p&gt;
&lt;p&gt;¡Por favor escribe tu historia con veloren! Bitte schreib&#x27; deine Geschichte mit Veloren! S&#x27;il te plaît écrire ton histoire avec veloren! Napisz swoją historię z Veloren! …&lt;&#x2F;p&gt;
&lt;p&gt;I just created a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1051972323298779367&#x2F;1051972326910074920&quot;&gt;thread&lt;&#x2F;a&gt; below #general to collect these, if you prefer to remain anonymous (please say so) or if you use Matrix you can also DM or ping @Christof or @christof.petig:matrix.org - please don&#x27;t count on me finding unmarked messages in some other channel.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;weekly-meetings&quot;&gt;Weekly meetings&lt;&#x2F;h3&gt;
&lt;p&gt;You can find the weekly minutes at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;%40veloren&#x2F;BJ-1CM-vj&quot;&gt;Nov 27th&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;%40veloren&#x2F;rkeb1w9vo&quot;&gt;Dec 4th&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;%40veloren&#x2F;rkMh99Xdj&quot;&gt;Dec 11th&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wyvern&quot;&gt;Wyvern&lt;&#x2F;h3&gt;
&lt;p&gt;@floppy created nice Wyvern animation videos:&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;uhin9x&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;mpgw7b&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;v64ir1&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;lkkl8s&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;w6yujo&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And there is a video showing the medium bird animations, which I find very cute to watch&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;dj5tn5&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here is another one with peacocks &lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1046403448779853824&amp;#x2F;peacocks.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;moderation-web-frontend-by-isse&quot;&gt;Moderation web frontend by @Isse&lt;&#x2F;h3&gt;
&lt;p&gt;The past week or so I’ve been working on a website which would make things easier for moderators. This website would behave very much like Torvus,
a bot that sits on the server and reads all messages on a server, but it would have more features like showing messages from a specific users.
Or in general more advanced queries for messages.&lt;&#x2F;p&gt;
&lt;p&gt;The main motivator for this change was that the discord search feature stopped working in #ingame-chat,
which at least I heavily relied on when making moderation decisions.&lt;&#x2F;p&gt;
&lt;p&gt;I also thought that I could use this as an opportunity to learn some rust web dev.
I decided to use &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rocket.rs&#x2F;&quot;&gt;rocket&lt;&#x2F;a&gt; which is a framework which makes it easy to implement web applications.
I used SQLite to store the logs of messages, users and user activity (which allows tracking playtime).
And as you can see in the images, a pretty poorly made website with hacky JavaScript.&lt;&#x2F;p&gt;
&lt;p&gt;While built to be used on the official servers it can be used for other servers too,
I haven&#x27;t written a guide to setting that up, but if someone would be interested in that you can @ me.&lt;&#x2F;p&gt;
&lt;p&gt;The source is on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;IsseW&#x2F;veloren-mod-panel&quot;&gt;GitHub&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1050806714569601024&amp;#x2F;Screenshot_from_2022-12-09_17-06-41.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1050806714984841257&amp;#x2F;Screenshot_from_2022-12-09_17-07-18.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1051462000661758083&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Watching a mesmerizing moon. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1050293291880558633&#x2F;screenshot_1670479619394.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 200</title>
          <pubDate>Tue, 29 Nov 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-200/</link>
          <guid>https://veloren.net/blog/devblog-200/</guid>
          <description>&lt;p&gt;This week, we take a step back and tell some personal stories behind the game development.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;p&gt;I apologize for dragging the final publication of this issue over several months.
The excellent and plenty material in our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-100&quot;&gt;100th developer blog&lt;&#x2F;a&gt; certainly created high expectations for this issue.
Since it coincided with a change of the editor position it was difficult to live up to these.&lt;&#x2F;p&gt;
&lt;p&gt;Many people contributed their personal stories and I will just present them in arbitrary order, starting with the short ones.
This issue also contains stories from moderators, an important assignment which was less prominent hundred issues ago.&lt;&#x2F;p&gt;
&lt;p&gt;Though yet, I was not able to collect as many stories as I had liked to from the many non-English communities which grew during the past months. Please feel free to contribute your stories to a future issue.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stories-with-veloren&quot;&gt;Stories with Veloren&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1038915113505259520&amp;#x2F;screenshot_1667520050626.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@darin755: &quot;I found Veloren after searching for FOSS games other than Minetest. I started playing it and was blown away by how detailed and complex the game is.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;@RunRobDog: &quot;After months upon months of playing Veloren I still play it now and then because it&#x27;s just straight up a good game, especially to consider how early it is in development.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;@acrimon: &quot;I&#x27;ve been here a darn long time too I feel
not as early as lunar but still early
Veloren had like 20 peeps or something caring about it?
I think zest convinced me this was a good idea.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse: &quot;For me it was the comment on the cube world subreddit, I was the 4th person to join the discord iirc and offered to help with setting up  the server,
then I learned Rust to work on Veloren.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1039083986347098162&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Treeco: &quot;I can&#x27;t remember how I learned of it honestly, it wasn&#x27;t a CubeWorld route, though I happened to join the day CW died so that was a bit of a mess.
I mostly just sit in the Discord and argue with people so I never feel I have much to say for these things sadly.&lt;&#x2F;p&gt;
&lt;p&gt;I remember the blog posts more than the game itself from early on, somehow? Following what was going on - rivers, at the time. I think I joined the server to follow that better, and then eventually got in to help test them, then got bullied into learning to compile so Sharp didn&#x27;t have to manually start off a build with every push. Good times honestly.&lt;&#x2F;p&gt;
&lt;p&gt;I guess the arguing began as it became more of a game, and my ideas for what kind of game I&#x27;d like to see solidified. The simulation aspects were what drew me to the project, and trying to get decent gameplay while not compromising that is an interesting problem.&lt;&#x2F;p&gt;
&lt;p&gt;(And subjective as all hell of course.
All in good fun, I&#x27;m phrasing it as arguing but I think it all stays fairly chill most of the time?
&lt;del&gt;I don&#x27;t know if any of this is worth including in a writeup though. And the end I haven&#x27;t done much, I guess. Might be impostor syndrome talking, but tbh I probably am the impostor.&lt;&#x2F;del&gt;
&lt;del&gt;Don&#x27;t amogus me, I fucking swear...&lt;&#x2F;del&gt;)&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1047557369380483082&amp;#x2F;screenshot_1669827454248.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@DaforLynx: &quot;I formally joined Veloren development in August 2020, making music. At the time, 0.7 had &lt;em&gt;just&lt;&#x2F;em&gt; released. This little project seemed to me an incredible fortune to stumble upon - a true gem. An open-world game, open-source and open-development. The game itself captured my imagination, reminding me both of existing games I had put down and looked upon nostalgically and of games I had imagined making years ago.&lt;&#x2F;p&gt;
&lt;p&gt;The years have flown by and I have contributed to development enough that I am now an audio team lead. When I joined, there were 15 music tracks in the game. Now, there are 64. As the gameplay and visuals evolved, so did the audio experience, thanks to the efforts of many, many composers, sound designers, and coders.&lt;&#x2F;p&gt;
&lt;p&gt;However, I also see how far we have yet to go. The things I have in mind include a reorganized and revamped audio system, a potential library switch, adaptive music, and the long road to modernizing the audio experience.&lt;&#x2F;p&gt;
&lt;p&gt;Which reminds me: among the first tasks to do this year is a switch of all &quot;rendered&quot; assets to a Creative Commons license. Currently, all assets and source code are licensed under GPLv3, which doesn&#x27;t actually contain provisions for assets specifically. Switching these assets, mainly including all music and sounds, to a new license would clear the water regarding their use and publishing in other projects. This switch hasn&#x27;t happened yet, but will in the near future. We will need the consent of the owners of the assets to include them in the game after the license switch.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1038848019577184306&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@KaliKatz: &quot;Moderation is just a job like any other, no spot light is really required.  recognition, sure..ok.&lt;&#x2F;p&gt;
&lt;p&gt;As for the rules, that&#x27;s going to be different for users and admins of there own servers. Should be up to the admin or admins to post the rules and regulations that there moderators use to police them. We have done that, the rules &amp;amp; info is posted already. We as moderators, should read and understand them, and then police on that basses. As for timeouts and bans, each would have a different case, going to be hard to make rules for each of them.  Generally I go with no timeouts and just perm ban.  Quite a lot of &quot;people&quot; listen and has worked for me.  But I am usually quite forceful, in reminding players, fun is fun, but were all real people in the end and hurt is hurt.  I don&#x27;t reverse my decisions, and give pretty clear warnings before a perm ban. Kicking&#x2F;killing merely wakes them up and reminds them that mods are real. On those that are clearly perm ban, easy. But easy moderating it isn&#x27;t. Timeouts are good for those &quot;jail&quot; times, but they just instantly come back as alts, or don&#x27;t bother coming back at all. Its simply easier to perm ban them away instead of micro-managing. Ban evasion is easy, the account page allows for this and should be made more challenging and slower to discourage griefers. But I have said that before.&lt;&#x2F;p&gt;
&lt;p&gt;So, about the guidelines... each server will have its own, we already have ours, maybe add some &quot;new&quot; rules to it from the already heavily used and somewhat abused #moderation-discussion.&lt;&#x2F;p&gt;
&lt;p&gt;As for a &quot;spot light&quot;, in the end, its merely a self satisfying position...dirty...and no one really cares that you did a bad&#x2F;good job. Its not for everyone. If its just for the free tp and tricks, then your just using them to play the game differently.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1039306671257833522&amp;#x2F;screenshot_1667632979546.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof: &quot;Some weeks ago I realized that the majority of my work-related skills I learned on open source projects. PostgreSQL has taught me how to structure huge C projects, Gtkmm introduced me to the wonders of well designed C++-98, monotone taught me Lua and Boost. On Veloren I learned Rust and WebAssembly which right now is exactly what I use day in day out.&lt;&#x2F;p&gt;
&lt;p&gt;I am immensely grateful to the numerous people on these projects which provided me guidance on how to properly write programs. This educational aspect of open source projects might be less obvious but it literally meant the world to me. I wouldn&#x27;t be in the position I am now without the skills I learned, also on the Veloren project.&lt;&#x2F;p&gt;
&lt;p&gt;Two years ago I was keen on making the economic simulation as good as possible - that dream has not come true yet. The economic simulation is still horribly inaccurate but sort of works, the rewrite while more correct had a tendency to spiral down to starvation. I learned a lot and got another brilliant idea on how to really fix it this time …&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile I worked on the plugin infrastructure, both the WebAssembly and the asset only variant of plugins. I originally started this in preparation for a school internship in game development of a friend of the family. But it became clear that even with the work spent on improving wasm plugins, they wouldn&#x27;t be ready in time. Luckily he proved skillful enough to create parametrized buildings with CSG in site2.&lt;&#x2F;p&gt;
&lt;p&gt;At the beginning of this year I was contacted by @Pfau to fix a small glitch in spots - the work on that project has been immensely satisfying - because I had another person who was directly building on my work to create amazing in game structures. I really recommend anyone to team up in development, it is more fun, highly motivating and gives quick feed-back about the features you create. And the chance to get your work integrated into the game increases with every person also having a stake in the feature branch.&lt;&#x2F;p&gt;
&lt;p&gt;So thanks to you all for a good two and a half years and let&#x27;s make Veloren even better and better.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1037756494705348638&amp;#x2F;screenshot_1667490201056.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@UncomfySilence: &quot;Hello, most of you know me as Uncomfy. I first came across this game in the comment sections of one of many “CubeWorld’s Downfall” videos back in early April of 2021. I had a lot of free-time back then so I decided to download and boot this game up. The moment I stepped into the world of Veloren, only aware that it was a voxel game similar to CW, I was stunned by the visuals, animations, music, every little bit of the game I experienced. I sat glued to my little desk, walking around world for ~30 minutes, just exploring the various biomes and entities whilst muttering “wow” to myself. After familiarizing myself with the game some more I decided that I wanted to become more knowledgeable about it and help in any way I could considering that it was open source.&lt;&#x2F;p&gt;
&lt;p&gt;I honestly didn’t really know how to approach this behemoth of an early development game and the thousands of people already seated within the discord server. I tried my hand at some art and some idea proposals but I mainly just ended up reading the new and unfolding discussions between some of the established members in the community. After some time just asking questions in-game and in discord about game mechanics I ended up with enough confidence to start answering questions from even newer members of the community. There was always the chance that I was wrong with a statement of mine, but I knew that there’d be a correction from someone more knowledgeable just around the corner. I simply wanted to be the one to help guide people that may have been as confused about certain mechanics as I was (considering that I didn’t know how to fix them code wise :P).&lt;&#x2F;p&gt;
&lt;p&gt;Over time I eventually became a moderator for Veloren, likely due to my continuous participation amongst the community. To each moderator there is a different meaning to the term “moderation”, even though at the end of the day moderation is just keeping the peace within Veloren. To me, moderating is trying to guide, discuss, enjoy my time, and interact with the community! So far I’ve greatly appreciated my time here amongst the lot of you, no matter how many circular debates &lt;del&gt;with treeco&lt;&#x2F;del&gt; I get into or  repetitive questions I answer! Hopefully I’ll get to see some of you in-game or on the discord server soon. :)&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1043830775805653003&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Hannibal: &quot;Hello! I am Hannibal, also known as DA BIG KHAN in game. I arrived on the discord on January 19th, 2020, after reading about it on Cube World&#x27;s Steam forum posts. At first, I was just curious about the project, and wanted to see how it’d progress before actually starting to play the game and to contribute on it. At that time, I decided to train on MagicaVoxel, the software we use for models, watching tutorials and practicing to get better at it. I originally come from Minecraft’s building scene, so voxel modeling was familiar, but I quickly realized how different the two were.&lt;&#x2F;p&gt;
&lt;p&gt;I came back after a long break from discord activity in June 2021, where I became an active contributor. My contributions are mostly buildings and structures. I like to view myself as a 3D architect for Veloren, where my models serve as mockups for our procgen team. I have only a few actual contributions in the game because I mostly do 3D concept art, rather than direct contributions. Some of the in-game assets include spots (the pirate outpost, some jungle temples and totems, shipwrecks, and the Stonehenge-like structure), dungeon entrances (pyramids and desert structure). I believe I started making a “name” for myself when I designed a desert city in October 2021, which gave us the idea to have party maps, something our seasoned players are (I hope lol) enjoying a lot. In January 2022, we had our first big release party map, the desert city, where at the time, I thought I had pushed the limits of MagicaVoxel. It was a massive success, and I keep a lot of good memories from this time. After that, I began working on the second party map, the Jungle Pirate Islands, where I added an extra layer of work to the process: handmade terrain. It was quite a challenge, where I restarted the project from scratch 3 times and literally broke the vox-spawn tool we had in-game by crashing my PC with a VOX file that was too big. Thanks to Isse, we managed to make it work, and create Veloren’s first pirate hunt! However, with this amount of work for one single mockup, I had a bit of a burnout where I barely worked on Veloren for 3-4 months. At the time I am writing this, I am working on the 3rd party map, inspired by medieval fantasy China and Japan; it is meant to be a mockup for Elven architecture. It is colossal, but with the prior experiences, I learned how to rest, how to optimize my time, and also found new tools and techniques that allow me to add more impressive landscapes. I am most likely going to reach 1k hours on MV with this project, as I am currently around 600-700 hours.&lt;&#x2F;p&gt;
&lt;p&gt;However, Veloren isn’t only contributing! It’s also a social gathering of passionate individuals with different backgrounds. I got to meet fascinating people through numerous discord conversations! On top of my head shoutout to: Gemu, the goat artist, my sensei, my boss, who taught me a lot, Isse and Zesty, my coding saviors, without whom none of the party maps would have been possible, Kali, the infamous pirate cook of the King of the Pirates DA BIG KHAN (YARRRRR)! Yuri, the weeb who can crash a server with his gaze, Treeco, how do I even describe him lol. It wouldn’t be the full Veloren experience without Treeco! Pfau, the dentist UI god who does way too many puns lmao. And finally, MY FAILED CLONE, the one and only UNCOMFYSILENCE, whose kindness only has for equal his love for feet! Of course, shoutout to all the team, all the contributors, who have made this one of the biggest open-source projects ever.&lt;&#x2F;p&gt;
&lt;p&gt;At this point, this is the part I love the most about Veloren: seeing all those individuals, including myself, dream about the game’s future, while also watching it grow on to become one of the greats someday. I often joke around, saying that we will be GOTY 2025, or that someday, Veloren’s music will become as popular as Minecraft’s, but deep down, I truly believe that we can reach world renown, through hard work, passion, and dedication! THANK YOU VELOREN FOR EVERYTHING!!!&lt;&#x2F;p&gt;
&lt;p&gt;Your favorite French, the King of the Pirates,
DA BIG KHAN HANNIBAL.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1039209494426685531&amp;#x2F;screenshot_1667836665553.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;So many things to explore. See you soon!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;closing-thanks&quot;&gt;Closing thanks&lt;&#x2F;h2&gt;
&lt;p&gt;And of course I would like to thank numerous people who haven&#x27;t contributed their story here, but instead have created amazing new features, some of them presented in parallel issues (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-201&quot;&gt;201&lt;&#x2F;a&gt; to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-209&quot;&gt;209&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1048138436655194202&#x2F;screenshot_1669966035248.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 199</title>
          <pubDate>Mon, 21 Nov 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-199/</link>
          <guid>https://veloren.net/blog/devblog-199/</guid>
          <description>&lt;p&gt;This week, we see development on new more complex house layouts and many animation work.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @ythern, @hjalle2000, xMAC95x, @Sam, @zesterer, @tormod, @tygyh, @kuba1001t, @halosesparta, @holychowders, @floppy, and Francesco Vasco.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;ByM-wy_Ui&quot;&gt;This week&#x27;s meeting minutes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;An improvement to quickly select internal resolution was merged,
also @Pfau added the user interface for experience bars:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;827218346071031889&amp;#x2F;1043924940426063902&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dagon-attacks-by-floppy&quot;&gt;Dagon attacks by @floppy&lt;&#x2F;h3&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;eeb3n2&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;bird-animations-by-floppy&quot;&gt;Bird animations by @floppy&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1043977114556305438&amp;#x2F;ab.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1044153111993925682&amp;#x2F;snowy_owl.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;frost-giga-animations&quot;&gt;Frost Giga animations&lt;&#x2F;h3&gt;
&lt;p&gt;The original work by @uncomfy was taken up by @floppy and can be seen in this video&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;85hugn&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Although it already looks impressive @Ythern and @floppy still work on the jumping animation:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1042526569639456888&amp;#x2F;1042889111213703168&amp;#x2F;leapshockwave_sfx.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1042526569639456888&amp;#x2F;1043176906335461416&amp;#x2F;2022-11-18_15-51-36.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-houses-by-zesterer&quot;&gt;New houses by @zesterer&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1037350866514096188&amp;#x2F;screenshot_1667394101236.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1037422156570689626&amp;#x2F;screenshot_1667411102096.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1037136999091556372&amp;#x2F;screenshot_1667343121053.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Not fully intentional variation&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1045200360085671986&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Playing music with friends. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1046552242624405634&#x2F;screenshot_1669417034614.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 198</title>
          <pubDate>Mon, 14 Nov 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-198/</link>
          <guid>https://veloren.net/blog/devblog-198/</guid>
          <description>&lt;p&gt;This week, we gain insight into the many exciting developments happening at the moment.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @DaforLynx, @Pfau, @floppy, @aweinstock, @floppy, and @holychowders.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;Bkd7bhArj&quot;&gt;This week&#x27;s meeting minutes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;train-stations-by-aweinstock&quot;&gt;Train stations by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1041508727175512115&amp;#x2F;screenshot_1668385565220.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;1041510173732249651&amp;#x2F;screenshot_1668385911020.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;If you want to get a glimpse into the difficulties and debugging aids to implement tracks you can take a look into &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;467073814208053248&#x2F;1039222013312639056&quot;&gt;these series of posts in #rendering&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;instrument-crafting&quot;&gt;instrument crafting&lt;&#x2F;h3&gt;
&lt;p&gt;@Pfau started a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;1036737546954211449&#x2F;1036737550150291517&quot;&gt;discord thread&lt;&#x2F;a&gt; about instrument crafting and received a lot of feedback.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;savannah-pits&quot;&gt;Savannah pits&lt;&#x2F;h3&gt;
&lt;p&gt;The merge of the savannah pits, a new town type, got lost during the pre-Halloween preparations,
now with some minor fixes merged this week we feature a picture from within this town type:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1038935649878806589&amp;#x2F;screenshot_1667771746753.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;flower-variants-by-ge&quot;&gt;Flower variants by @Ge&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1040912370719010856&amp;#x2F;snap2022-11-12-09-53-29.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;minotaur-buffs-by-froggy&quot;&gt;Minotaur buffs by @Froggy&lt;&#x2F;h3&gt;
&lt;p&gt;Minotaur attacks just became much more impressive with this work&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1034615295081467914&amp;#x2F;1039474899078627328&amp;#x2F;Veloren_2022-11-08_20-41-02.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;moss-drake-visuals-and-animations-by-floppy&quot;&gt;Moss drake visuals and animations by @floppy&lt;&#x2F;h3&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;rcrd3i&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;more-adlet-cave-work-by-floppy&quot;&gt;More adlet cave work by @floppy&lt;&#x2F;h3&gt;
&lt;p&gt;You can take a look at the current state of the adlet cave work (a new dungeon type) in this video&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;rm1580&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;roshwalr-attacks-by-ythern&quot;&gt;Roshwalr attacks by @Ythern&lt;&#x2F;h3&gt;
&lt;p&gt;@Ythern continued their work on giving the Roshwalr a specific attack capability&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1040257157926498396&amp;#x2F;1041453594718785596&amp;#x2F;2022-11-13_21-44-07.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;which then lead to an interesting discussion about the animation building up the attack and a reworked proposal by @floppy&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1040257157926498396&amp;#x2F;1041420045538041876&amp;#x2F;roshwalr.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;and the subsequent reviews to get it merged.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1039968111111196796&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bad weather ahead. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1039083776766119968&#x2F;image.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 197</title>
          <pubDate>Mon, 07 Nov 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-197/</link>
          <guid>https://veloren.net/blog/devblog-197/</guid>
          <description>&lt;p&gt;This week, we learn about doors and train tracks.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s code contributors, @floppy, @aweinstock and @zesterer.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;@veloren&#x2F;rkP57HrSs&quot;&gt;This week&#x27;s meeting minutes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;doors-by-aweinstock&quot;&gt;Doors by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;Opening doors were merged this week.&lt;&#x2F;p&gt;
&lt;p&gt;For now doors open consistently in one direction defined by the world orientation,
because responding to a direction they get pushed in would require adding internal state to sprites.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;1037141228594143342&amp;#x2F;doors_attempt6_20221101.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;train-tracks-by-aweinstock&quot;&gt;Train tracks by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;Tracks are disabled by default and can be enabled in assets&#x2F;world&#x2F;features.ron. Train stations and (later) trains are still under progress.&lt;&#x2F;p&gt;
&lt;p&gt;Getting the lighting correct on the tracks made this work more complicated.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449667182683619339&amp;#x2F;1036695222584889344&amp;#x2F;screenshot_1667237861158.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;1035740827202355312&amp;#x2F;traintracks_vp9_20221028.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;programming-veloren-by-zesterer&quot;&gt;Programming Veloren by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;@zesterer gave a talk at the Rust and C++ Cardiff Meetup which gives a good overview of the early history of and the ideas behind Veloren:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;bT2SeYXpQm8&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1037379947058180176&amp;#x2F;screenshot_1667401038109.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Exploring in the rain. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1036603337702912120&#x2F;screenshot_1667195368194.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 196</title>
          <pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-196/</link>
          <guid>https://veloren.net/blog/devblog-196/</guid>
          <description>&lt;p&gt;This week, we admire the visuals introduced for the Halloween event.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @holychowders, @Sam, @jshipsey, @Isse, @floppy, @DaforLynx, @kevinsmia1939, @flaffwaffle, kitswas.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;impressions-from-the-halloween-event&quot;&gt;Impressions from the Halloween event&lt;&#x2F;h3&gt;
&lt;p&gt;Colorful trees:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035290161300381776&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035290708111790140&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035291083359408128&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035289455277396058&amp;#x2F;screenshot_1666892764908.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035284771401637942&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035283574733156483&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035133943579676732&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Water reflections:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1035991456642506772&amp;#x2F;screenshot_1667019163971.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035338786109923450&amp;#x2F;screenshot_1666912455706.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Trick or treat:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1036009237438005309&amp;#x2F;screenshot_1667070198497.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035486838531559464&amp;#x2F;screenshot_1666949532830.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1036597326682263592&amp;#x2F;Veloren_2022-10-31_12-07-12.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Tricksters playing bass, …&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035162649027166239&amp;#x2F;Veloren_2022-10-27_14-06-30.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;… guitar, …&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035160909548617748&amp;#x2F;Veloren_2022-10-27_13-59-26.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;… and hurdy gurdy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Bats:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1035398807564853288&amp;#x2F;screenshot_1666922480814.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Harvester:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1035226200643219556&amp;#x2F;imagen_2022-10-27_131904171.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;A trailer showing off the Halloween themed content along spooky music.
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;pVPpCaCeOD8&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Halloween trailer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1033737258731311195&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A very special concert. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1036484091488505897&#x2F;screenshot_1667187299654.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 195</title>
          <pubDate>Mon, 24 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-195/</link>
          <guid>https://veloren.net/blog/devblog-195/</guid>
          <description>&lt;p&gt;This week, we see a preview of the upcoming sword skill tree and the moving and reflecting water changes.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @floppy, @Pfau, Sam, and @uncomfysilence.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;water-reflections-by-zesterer&quot;&gt;Water reflections by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on making water flow in the direction of rivers and adding screen-space reflections.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1029069195842945075&amp;#x2F;screenshot_1665419560196.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1029069196291735572&amp;#x2F;screenshot_1665419305864.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1033391600883216444&amp;#x2F;screenshot_1666450143886.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-new-gnarling-chieftain-mask-by-pfau&quot;&gt;A new gnarling chieftain mask by @Pfau&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1031159359033589780&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The gnarling chieftain mask can now be looted from... the chieftain&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;sword-skill-redesign&quot;&gt;Sword skill redesign&lt;&#x2F;h4&gt;
&lt;p&gt;The animations created during the past weeks do now have a matching skill tree - with lots of different options to learn from:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1032776995257450648&amp;#x2F;1033485972186337381&amp;#x2F;2022-10-22-135940_1920x1080_scrot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;more-moody-screenshots-before-the-trees-get-colorful-next-week&quot;&gt;More moody screenshots before the trees get colorful next week&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1033937609099055124&amp;#x2F;screenshot_1666580310276.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lightning hits a spot.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1033614493047074816&amp;#x2F;screenshot_1666503158751.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying over misty hills&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1033384062234132582&amp;#x2F;screenshot_1666448304164.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Among the redwoods. See you next week for halloween!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1033345366994718730&#x2F;screenshot_1666439084928.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 194</title>
          <pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-194/</link>
          <guid>https://veloren.net/blog/devblog-194/</guid>
          <description>&lt;p&gt;This week, we plan more for the Halloween event.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Pfau, @4ydx, @zesterer, @Isse.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;halloween-planning&quot;&gt;Halloween planning&lt;&#x2F;h3&gt;
&lt;p&gt;During this week&#x27;s meeting we did more planning for the Halloween event:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Barren trees are being worked on as part of the citadel branch by @zesterer&lt;&#x2F;li&gt;
&lt;li&gt;Discussion of a Halloween boss (Vampire)&lt;&#x2F;li&gt;
&lt;li&gt;@Isse has been working on the Halloween branch&lt;&#x2F;li&gt;
&lt;li&gt;What can be worked on? Halloween songs in #audio?&lt;&#x2F;li&gt;
&lt;li&gt;@Hannibal might be working on a Halloween map location&lt;&#x2F;li&gt;
&lt;li&gt;Moving to a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1731&quot;&gt;tracking issue&lt;&#x2F;a&gt; for all ideas&lt;&#x2F;li&gt;
&lt;li&gt;Working on Halloween town decorations&lt;&#x2F;li&gt;
&lt;li&gt;Carved pumpkin model&lt;&#x2F;li&gt;
&lt;li&gt;Villager costumes&lt;&#x2F;li&gt;
&lt;li&gt;Moon recolouring&lt;&#x2F;li&gt;
&lt;li&gt;NPC lantern changes, Green or orange&lt;&#x2F;li&gt;
&lt;li&gt;Create a broom model for a glider&lt;&#x2F;li&gt;
&lt;li&gt;Town NPCs get a spooky hat&lt;&#x2F;li&gt;
&lt;li&gt;NPCs are more inclined to using furry&#x2F;scary clothing&lt;&#x2F;li&gt;
&lt;li&gt;Draugrs spawn in the wild and drop candy&lt;&#x2F;li&gt;
&lt;li&gt;Exclusive candy drops, would need the model created&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;See also &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;1rd3-wCnQgy36-VeUQHTcQ&quot;&gt;this week&#x27;s meeting minutes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;server-browser-retrospective&quot;&gt;Server browser retrospective&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;how-has-it-been-going&quot;&gt;How has it been going?&lt;&#x2F;h4&gt;
&lt;p&gt;Overall, many communities have had more visibility on their servers,
It’s quite easy to see nearby servers.
Servers can specify which region they’re in,
Number of players on the main game server is currently hovering around a reasonable number (~150).&lt;&#x2F;p&gt;
&lt;h4 id=&quot;what-are-some-things-we-ve-heard-people-want&quot;&gt;What are some things we’ve heard people want&lt;&#x2F;h4&gt;
&lt;p&gt;Communities want to feel more official,
Only the main game server gets a star, and there is only one of them.
Larger communities want methods to share characters between servers.
Player count on servers.
I’d like to be able to see which “federation” I can connect to with my current credentials, and how my characters can be shared across servers,
This is quite dependent on the new auth system.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;what-are-the-next-steps&quot;&gt;What are the next steps?&lt;&#x2F;h4&gt;
&lt;p&gt;Work on the new auth system:
Being worked on by @Nadja, @XVar, @Sharp, @imbris…&lt;&#x2F;p&gt;
&lt;p&gt;Work on the player count:
How are the config&#x2F;status of the server being shared with Airshipper?&lt;&#x2F;p&gt;
&lt;p&gt;Much is being discussed in this thread: V3650 DRAFT Added Query Server to Veloren Server
There are issues of servers just sharing arbitrary information&lt;&#x2F;p&gt;
&lt;h4 id=&quot;plugins-by-christof&quot;&gt;Plugins by @Christof&lt;&#x2F;h4&gt;
&lt;p&gt;I work on extending plugins.
So far (MR V3658) I was able to add an item to the game without modifying or adding any file in assets
and only providing voxel and RON files within assets&#x2F;plugins&#x2F;hello.plugin.tar.&lt;&#x2F;p&gt;
&lt;p&gt;Sadly this alone is of less value as:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;sadly you can&#x27;t build wasm modules in master (so the archive won&#x27;t load), combined with socksonme&#x2F;suggin_plugin_debuggin it loads&lt;&#x2F;li&gt;
&lt;li&gt;modules are not yet automatically downloaded to a client&lt;&#x2F;li&gt;
&lt;li&gt;no support for loot and crafting (so no way to get the items in the plugin as a normal user)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Example plugin:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;-rwxrwxr-x christof&#x2F;christof 302432 2022-10-09 21:26 hello.wasm
&lt;&#x2F;span&gt;&lt;span&gt;-rw-rw-r-- christof&#x2F;christof 544 2022-10-16 19:14 plugin.toml
&lt;&#x2F;span&gt;&lt;span&gt;-rw-rw-r-- christof&#x2F;christof 157 2022-10-16 17:56 assets&#x2F;voxygen&#x2F;item_image_manifest.ron
&lt;&#x2F;span&gt;&lt;span&gt;-rw-rw-r-- christof&#x2F;christof 23027 2022-10-16 17:56 assets&#x2F;voxygen&#x2F;voxel&#x2F;weapon&#x2F;tool&#x2F;paddle.vox
&lt;&#x2F;span&gt;&lt;span&gt;-rw-rw-r-- christof&#x2F;christof   142 2022-10-16 17:56 assets&#x2F;voxygen&#x2F;voxel&#x2F;biped_weapon_manifest.ron
&lt;&#x2F;span&gt;&lt;span&gt;-rw-rw-r-- christof&#x2F;christof   467 2022-10-16 17:56 assets&#x2F;common&#x2F;items&#x2F;weapons&#x2F;tool&#x2F;paddle.ron
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;```txt
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;figure class=&amp;quot;inline-image&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;lt;img src=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;s3.eu-central-2.wasabisys.com&amp;amp;#x2F;veloren-blog&amp;amp;#x2F;cdn&amp;amp;#x2F;597826574095613962&amp;amp;#x2F;1031262244715122738&amp;amp;#x2F;unknown.png&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    loading=&amp;quot;lazy&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;figcaption&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;      &amp;lt;p&amp;gt;&amp;lt;i&amp;gt;Sneak preview, the dithering of the wood is still sketchy&amp;lt;&#x2F;i&amp;gt;&amp;lt;&#x2F;p&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&#x2F;figcaption&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;figure&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;figure class=&amp;quot;inline-image&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;lt;img src=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;s3.eu-central-2.wasabisys.com&amp;amp;#x2F;veloren-blog&amp;amp;#x2F;cdn&amp;amp;#x2F;634860358623821835&amp;amp;#x2F;1031012607253024788&amp;amp;#x2F;screenshot_1665880531649.png&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    loading=&amp;quot;lazy&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;figcaption&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;      &amp;lt;p&amp;gt;&amp;lt;i&amp;gt;A witch living in the woods. See you next week!&amp;lt;&#x2F;i&amp;gt;&amp;lt;&#x2F;p&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&#x2F;figcaption&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;figure&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1029675003261767751&#x2F;screenshot_1665564007570.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 193</title>
          <pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-193/</link>
          <guid>https://veloren.net/blog/devblog-193/</guid>
          <description>&lt;p&gt;This week, we learn about the planning for the Halloween event.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, Juan Pablo Lagos, @Nether190, @galaipa, WanCheng Ye, @kitswas, @tygyh, @kilpkonn, Julio Cezar Silva, and @james.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;halloween-planning&quot;&gt;Halloween planning&lt;&#x2F;h3&gt;
&lt;p&gt;The veloren team plans to have a Halloween themed week directly before November ends.&lt;&#x2F;p&gt;
&lt;p&gt;Collected Ideas include werewolves, flying bats, spooky lanterns, pumpkins, villagers in costumes, candy drops,
&quot;trick or treat&quot; interactions, flying with a broom, a more spooky moon color, acid rain.&lt;&#x2F;p&gt;
&lt;p&gt;See also &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;VkVA0lpOQnO49YcCS0qXrQ&quot;&gt;this week&#x27;s meeting minutes&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ongoing-work&quot;&gt;Ongoing work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;bridges-isse&quot;&gt;Bridges (Isse)&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1023953790778486865&amp;#x2F;screenshot_1664199928636.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Isse has been doing some worldgen work on larger bridges, and can span larger gaps.
They are inspired by larger-architected bridges. There is work that does checks at
generation time to make sure that the bridges flow nicely into the terrain.&lt;&#x2F;p&gt;
&lt;p&gt;There are several different types of bridges, some with the ability to bridge high
and low terrain with a tower and stairs to help players get to different heights.
Another bridge variant is small, and allows for roads to cross small rivers.
Once the bridges are ready, you’ll be able to see them on the minimap as well!&lt;&#x2F;p&gt;
&lt;p&gt;These different variants are inspired from medieval bridges in different cultures,
as well as different architectural patterns. Prototype models were created by @Hannibal,
and then remade with CSG objects by @Isse.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;1024301784774225990&amp;#x2F;screenshot_1664282907713.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;plugin-work-socksonme-and-christof&quot;&gt;Plugin work (Socksonme and Christof)&lt;&#x2F;h4&gt;
&lt;p&gt;@Christof and @Socksonme have been working on updating @zesterer’s plugins branch
to the current head of master.
@Christof has been planning some dug-out canoes to see how it can be made with the plugin system.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;water-work-zesterer&quot;&gt;Water work (Zesterer)&lt;&#x2F;h4&gt;
&lt;p&gt;Zesterer has worked on water shaders. Implemented moving water, screen space reflection,
and in general improving water shaders. Although much of this is experimental,
the techniques add a lot to how water looks in lakes and rivers.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1028503259847073834&amp;#x2F;screenshot_1665280496376.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Halloween is coming. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1029086086061883492&#x2F;screenshot_1665421120591.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 192</title>
          <pubDate>Mon, 03 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-192/</link>
          <guid>https://veloren.net/blog/devblog-192/</guid>
          <description>&lt;p&gt;This week, we watch a certain jumping plumber.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @fanix472, @aweinstock, @juliancoffee, @meyerhenning, @ztianyang.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tracking-issues-in-the-book-by-zesterer&quot;&gt;Tracking issues in the book by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I added a page to the book that lists all of the currently open tracking issues. I hope this will act as a useful resource for contributors looking to work on things, and hopefully it&#x27;ll encourage us to improve the quality of our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;tracking-issues.html#tracking-issues&quot;&gt;tracking issues&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;See also &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;DxpRFzx6Rxav81DDg8ltSA&quot;&gt;this week&#x27;s developer meeting minutes&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;super-veloren-64&quot;&gt;Super Veloren 64&lt;&#x2F;h3&gt;
&lt;p&gt;Also @zesterer created a cool tech demo because he &quot;was bored today&quot;:
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;iSg3KpQvzUw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;translation-changes-by-juliancoffee&quot;&gt;Translation changes by @Juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;Me and @xMAC94x made some changes to how chat is translated and introduced the new i18n-helpers crate. For the time being it lies in voxygen workspace.
It enables third-party clients to use localisation (and translations, if desired) via the client&#x2F;i18n subcrate.&lt;&#x2F;p&gt;
&lt;p&gt;And with that we now have the possibility to work on more complex translations, like character names and items.
Until that point, we could translate mostly GUI only (+ some NPC messages).
If you want to work on it, ping me @juliancoffee in #new-contributors&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1025486531609247764&amp;#x2F;screenshot_1664565398532.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A diverse group. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1025274327169511434&#x2F;screenshot_1664514633785.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 191</title>
          <pubDate>Mon, 26 Sep 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-191/</link>
          <guid>https://veloren.net/blog/devblog-191/</guid>
          <description>&lt;p&gt;This week, we hear about recent pet feeding improvements.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s code contributors, @xMAC94x, @Welvex, @zesterer, @floppy, @Sharp, @LunarEclipse, @Sam, @Couls, @MadirexRus.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pet-feeding-by-aweinstock&quot;&gt;Pet feeding by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;To solve the problem of pets choosing not to pick up food (and having other NPCs take the food),
I added trade AI for pets. Pets only accept trade requests with their owner, only accept food,
and do not return food that they&#x27;re given.&lt;&#x2F;p&gt;
&lt;p&gt;In the process of working with pet inventories to
ensure that they had the right amount of slots, I also fixed an issue where pets were not
supplied their intrinsic weapons and armour when reloaded on login (e.g. tortoises had
significantly lower defence after taming them and logging out and in).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;1022286504657178625&amp;#x2F;1024067691511824557&amp;#x2F;2022-09-26-172019_1362x572_scrot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Trading with your pet&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;20-000-members-in-discord&quot;&gt;20,000 Members in Discord&lt;&#x2F;h3&gt;
&lt;p&gt;On September, 22nd we reached the 20,000 member mark in Discord: 




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1022507149265473616&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Here are some graphs over time:





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1023224927844839555&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1023225394725408898&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1022903021342044170&amp;#x2F;screenshot_1663949448764.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Enjoying the view. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1024047726083723354&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 190</title>
          <pubDate>Mon, 19 Sep 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-190/</link>
          <guid>https://veloren.net/blog/devblog-190/</guid>
          <description>&lt;p&gt;This week, we hear about the airshipper release which deploys the server
browser feature.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s code contributors, @koboo, @floppy, @yusdacra, @james,
@Sharp, @tygyh, @XVar, @xMAC94x and @juliancoffee.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;details&quot;&gt;Details&lt;&#x2F;h3&gt;
&lt;p&gt;@James fixed a bug where pets would attack their owner when healed with the
sceptre.&lt;&#x2F;p&gt;
&lt;p&gt;@Sharp is working on several changes to improve parallelism and resource
utilization within the server process. One server reported a 10× reduction in
tick times at 90 players. (These are separate from his other worldgen
improvements which optimize site voxel drawing).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;airshipper-0-9-is-available-and-includes-a-server-browser-by-xvar&quot;&gt;Airshipper 0.9 is available and includes a server browser, by @XVar&lt;&#x2F;h3&gt;
&lt;p&gt;This release includes an exciting new feature, the Server Browser.  As many of
you will have noticed, our player count has rapidly increased over the past few
weeks, to the point at which the main Veloren server is often no longer the most
populated server.  To aid discovery of non-official servers, we have added a
Server Browser to Airshipper.  This feature allows you to select a server before
running the game, which will cause that server to be pre-populated in the
Server.&lt;&#x2F;p&gt;
&lt;p&gt;Initially, all servers featured in the Server Browser will be using the official
auth.veloren.net auth server meaning you can use the same username&#x2F;password for
all servers - your characters are still unique to each server though.  All
servers will also be using the Weekly update channel, so the game client
distributed via Airshipper will be compatible as long as the server owner has
their server configured to correctly update with the weekly releases.&lt;&#x2F;p&gt;
&lt;p&gt;Following this release, the #servers channel is now deprecated and no longer a
supported way to share servers.  However, we have added the #communities channel
in its place, which is focused on sharing your own communities including their
Discord, website, etc.&lt;&#x2F;p&gt;
&lt;p&gt;If you have a server that you wish to be listed in the server browser that isn&#x27;t
already listed, please follow &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;serverbrowser#adding-a-server&quot;&gt;the instructions
here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We hope this feature brings greater accessibility to the many servers run by the
community 🙂&lt;&#x2F;p&gt;
&lt;p&gt;If you have any questions or issues regarding this update, please feel free to
ask in support or questions.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;getting-the-update&quot;&gt;Getting the update&lt;&#x2F;h4&gt;
&lt;p&gt;Windows - Airshipper should auto-update itself the next time it is launched.&lt;&#x2F;p&gt;
&lt;p&gt;Linux &#x2F; MacOS - The latest version of Airshipper can be downloaded from the
links on our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;Download page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Flatpak &#x2F; AUR distributions will be updated shortly.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1020808647233773598&amp;#x2F;Screenshot_7.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;testing-aids-and-more-by-juliancoffee&quot;&gt;Testing aids and more by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I added a new Golden Cheese item. It is meant for testers with admin rights and
provides an almost infinite source of health and energy.  It helps when you want
to test interaction with the world without full invincibility from the admin
Tabard.&lt;&#x2F;p&gt;
&lt;p&gt;Also the &#x2F;kit command when containing a modular weapon will give you all
variants.  The loot export to CSV binary now exports all modular weapons
included in a loot table, this helps wiki preparation.&lt;&#x2F;p&gt;
&lt;p&gt;And of course, there were minor improvements and bug fixes to
internationalisation. Ping @juliancoffee on Discord if you want to get involved.
Right now we are designing a system that allows our third-party front-ends to
localise content, that should unblock many nice things like translation of NPCs,
items, better chat and much more.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1019952259603386418&amp;#x2F;screenshot_1663245878483.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Exploring the world below! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1020570847804670002&#x2F;unknown_3.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 189</title>
          <pubDate>Mon, 12 Sep 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-189/</link>
          <guid>https://veloren.net/blog/devblog-189/</guid>
          <description>&lt;p&gt;This week, we hear about the progress of high quality upscaling.&lt;&#x2F;p&gt;
&lt;p&gt;- Christof, TWiV Contributor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @yusdacra, @matheusclmb, @juliancoffee,
@Sharp, @xMAC94x, @XVar, @zesterer and @floppy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;high-quality-upscaling-by-zesterer&quot;&gt;High quality upscaling by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;For those that run Veloren with a low internal resolution, I made some changes
that might improve the game for you:&lt;&#x2F;p&gt;
&lt;p&gt;Firstly, I realised that the way we applied FXAA at internal resolutions other
than 1.0x was incorrect.  After fixing this, FXAA does its job more effectively
at lower internal resolutions.&lt;&#x2F;p&gt;
&lt;p&gt;Secondly, I added a HQX anti-aliasing option (although technically, it&#x27;s less
anti-aliasing and more upscaling).  It attempts to take the low resolution
framebuffer generated by the game and perform edge detection to reconstruct the
original geometry.  It&#x27;s by no means perfect, but I personally much prefer it
over both no anti-aliasing and FXAA at very low internal resolutions.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a comparison at 0.25x internal resolution between no-AA, FXAA, and HQX:&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1018197008814710938&amp;#x2F;screenshot_1662827063679.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;No anti-aliasing&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1018197009427075172&amp;#x2F;screenshot_1662827068374.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;FXAA&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1018197010236579920&amp;#x2F;screenshot_1662827072615.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;HQX&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1015500454622396416&#x2F;screenshot_1662180845556.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 188</title>
          <pubDate>Mon, 05 Sep 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-188/</link>
          <guid>https://veloren.net/blog/devblog-188/</guid>
          <description>&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @YusufBeraErtan, @juliancoffee, @Isse, @imbris,
@zesterer, @Sam, @flo, @XVar, @DominikBroński, @Dong, @tygyh, @xMAC94x, @Sau,
and @zDrag0nG!&lt;&#x2F;p&gt;
&lt;p&gt;This week saw an unprecedented increase in player count. When the number of players came closer to the server limit of 400 the overall gaming experience became bad due the long reaction time. Thus this week was dominated by developers working to optimize the server code.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1015683886270918676&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1015684086351810580&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;1015684164344885360&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;tormeh&quot;&gt;@tormeh&lt;&#x2F;h3&gt;
&lt;p&gt;A while back I added a modification to NPC behavior where NPCs with a certain
personality and above a certain health threshold would attack others if there
were no one else nearby (i.e. no witnesses)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;floppy&quot;&gt;@floppy&lt;&#x2F;h3&gt;
&lt;p&gt;We have been working on playable music instruments that allow players to combine their collected instruments into (hopefully) enjoyable sounds.&lt;&#x2F;p&gt;
&lt;p&gt;The guitar in the video uses samples, recorded by @Oolnokk, the model was
created by MerlinMan.&lt;&#x2F;p&gt;








&lt;figure class=&quot;streamable&quot;&gt;
  &lt;iframe src=&quot;https:&amp;#x2F;&amp;#x2F;streamable.com&amp;#x2F;e&amp;#x2F;ir2yly&quot;
  frameborder=&quot;0&quot;
  allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;yurimomo-isse-sharp&quot;&gt;@YuriMomo, @Isse, @Sharp&lt;&#x2F;h3&gt;
&lt;p&gt;There was a spooky interaction between environment variables, a vulkan SDK installation,
shaderc, changing Rust compiler versions and voxygen compilation which created a reproducibility
nightmare for the developers this week. The problem manifested as broken DX11 and DX12
support with @Sharps latest thread pool changes.&lt;&#x2F;p&gt;
&lt;p&gt;See also &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;450064928720814081&#x2F;1014315399979999352&quot;&gt;this Discord thread&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;p&gt;PS: Other problems around these changes were far from solved at the date of this blog post.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1014710271387914250&amp;#x2F;screenshot_1661995673245.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Taking a refreshing bath. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1014075488924348446&#x2F;344.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 187</title>
          <pubDate>Mon, 29 Aug 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-187/</link>
          <guid>https://veloren.net/blog/devblog-187/</guid>
          <description>&lt;p&gt;This week, we see some updates to the parrying stances.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @xMAC94x, @flo666, @juliancoffee,
@parzivale, @Christof, @Isse, @flo, @tygyh, @XVar, @Isse, @Sharp, @MadirexRus,
@Sam, and @Sau&lt;&#x2F;p&gt;
&lt;p&gt;Parrying stance related animations:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1009626096087617576&amp;#x2F;2022-08-17_20-52-41.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1013109102852984943&amp;#x2F;2022-08-27_11-32-01.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1013186860304056330&amp;#x2F;2022-08-27_16-40-22.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1013533212452061297&amp;#x2F;2022-08-28_15-37-57.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;ukraine-update-by-juliancoffee&quot;&gt;Ukraine update by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;Despite everything, I am now writing this post from my home in Kyiv, the capital
of Ukraine. And if at first people were betting how long Ukraine could stand,
three days or three months, it&#x27;s sixth month and it seems that Ukraine still
alive 🙂 In 1994, Russian president Borist Yeltsin started First Chechen War and
destroyed Grozny, in 1999 Russian prime minister and future president Vladimir
Putin led Second Chechen War and occupied Ichkeria Republic, in 2008 Russian
president Dmitry Medvedev invaded Georgia, in 2014 Russian president Vladimir
Putin invaded Ukraine and in 2022 committed full-scale invasion of Ukraine. And
now we have the chance to stop it, once and for all. Huge thanks to all people
of the free world for support and huge thanks to Veloren community for sharing
my story ❤️.&lt;&#x2F;p&gt;
&lt;p&gt;As always, here are some links to volunteer and charity organizations.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.comebackalive.in.ua&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.comebackalive.in.ua&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nestprytulafoundation.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;nestprytulafoundation.org&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.savedschools.in.ua&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.savedschools.in.ua&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Слава Україні! Жыве Беларусь!
Glory to Ukraine! Long Live Belarus!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1013302553041174528&amp;#x2F;screenshot_1661649827876.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Riding from a sea chapel into the desert. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1013302553041174528&#x2F;screenshot_1661649827876.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 186</title>
          <pubDate>Mon, 22 Aug 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-186/</link>
          <guid>https://veloren.net/blog/devblog-186/</guid>
          <description>&lt;p&gt;This week, we hear about work done with the translation system by @juliancoffee.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @juliancoffee, @matheusclmb,
@xMAC94x, @parzivale, @xMAC94x, @zesterer, @XVar, @Matheus, @DaforLynx,
@SaverioMiroddi, @Socksonme, @Tormod, and @tygyh&lt;&#x2F;p&gt;
&lt;h3 id=&quot;translation-updates-by-juliancoffee&quot;&gt;Translation updates by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;Henlo frens, if you remember &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-183&quot;&gt;last blog&lt;&#x2F;a&gt;, I
mentioned that we&#x27;re moving to a new translation system. And now, I want to say
that we officially did it! As you will see in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;juliancoffee&#x2F;kotygoroshko&#x2F;-&#x2F;blob&#x2F;veloren-rfc&#x2F;RFC.md&quot;&gt;this
RFC&lt;&#x2F;a&gt;,
our old system was plain hash map in &lt;code&gt;.ron&lt;&#x2F;code&gt; format. &lt;code&gt;.ron&lt;&#x2F;code&gt; is Rust&#x27;s analogue for
&lt;code&gt;.json&lt;&#x2F;code&gt; format from the web world, and it&#x27;s good for generic structured data but
quite verbose for specific cases like translation. Let&#x27;s look at a &quot;hello world&quot;
example.&lt;&#x2F;p&gt;
&lt;!-- Test --&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Localization for &amp;quot;global&amp;quot; English (.ron)
&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    string_map: {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Start Main screen section
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;main.intro&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Hello, World!&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    },
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    vector_map: {
&lt;&#x2F;span&gt;&lt;span&gt;    },
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And with our new format,&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;fluent&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-fluent &quot;&gt;&lt;code class=&quot;language-fluent&quot; data-lang=&quot;fluent&quot;&gt;&lt;span&gt;#### Localization for &amp;quot;global&amp;quot; English (.ftl)
&lt;&#x2F;span&gt;&lt;span&gt;main-intro = Hello, World!
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010541749233520710&amp;#x2F;screenshot_1661002520668.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Of course, we didn&#x27;t move to a new translation system just because it was
verbose, but during my research I was like, wow, it&#x27;s so pleasant to write in.
So, to give more background, we knew that &lt;code&gt;.ron&lt;&#x2F;code&gt; system is temporary.
Localisation isn&#x27;t something you want to build yourself because you need to
support large variety of languages, standards, and tooling, if you want to
create a good thing. And for more than a year (29 November 2020), we had an
issue that pointed to limitations of the system, like web UI and plural forms.&lt;&#x2F;p&gt;
&lt;p&gt;Assuming you know English, we all know that in plural form, words get a -s
ending, for example, coin =&amp;gt; coins. And, of course, it&#x27;s not that easy. Even in
English, there are deviations from this rule, words that end with s&#x2F;sh already,
like ash =&amp;gt; ashes. And there is more, think about counting: first, second,
third, fourth, twenty-first. Four forms overall. Thankfully, there is a
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;unicode-org.github.io&#x2F;cldr-staging&#x2F;charts&#x2F;38&#x2F;supplemental&#x2F;language_plural_rules.html&quot;&gt;standard for
that&lt;&#x2F;a&gt;,
and of course, our &lt;code&gt;.ron&lt;&#x2F;code&gt; format didn&#x27;t cover that.&lt;&#x2F;p&gt;
&lt;p&gt;This and web UI sounded so incredibly complex that I was afraid to even think
about that, but when I tried to fix one of the issues with translations, @Sharp
pointed to me that it makes more sense to create a more flexible localisation
system than trying to extend our &lt;code&gt;.ron&lt;&#x2F;code&gt; system. That&#x27;s when the journey began. I
looked at our issue
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;858&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;858&lt;&#x2F;a&gt;
and proposed solutions there, found Fluent&#x27;s main page, found Weblate docs and
started research. And to be honest, I was sold on Fluent right there because of
an example of Polish as Polish being one of the Slavic languages has quite
complex grammar and Fluent can handle it, yay. Fluent has basic things you
expect from a localisation format:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Plain messages.&lt;&#x2F;li&gt;
&lt;li&gt;Variables. We supported them in &lt;code&gt;.ron&lt;&#x2F;code&gt; format, but it worked as a convention,
variables weren&#x27;t part of the syntax and weren&#x27;t checked.&lt;&#x2F;li&gt;
&lt;li&gt;Attributes, as a way to group messages.&lt;&#x2F;li&gt;
&lt;li&gt;Selectors on numbers.&lt;&#x2F;li&gt;
&lt;li&gt;Selectors on arbitrary strings (gender, grammar case, letter case).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010541749871071253&amp;#x2F;screenshot_1660997848513.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There are many formats other than Fluent - one of them is &lt;code&gt;gettext&lt;&#x2F;code&gt; with &lt;code&gt;.po&lt;&#x2F;code&gt;
files. Legends say Ancient Maya used it to communicate with Spanish
conquistadors. It&#x27;s very primitive by itself but has a lot of extensions and
tools to work with it. Despite that, in our opinion, Fluent has a brighter future
so we decided to use it.&lt;&#x2F;p&gt;
&lt;p&gt;At last, here are some examples.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;fluent&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-fluent &quot;&gt;&lt;code class=&quot;language-fluent&quot; data-lang=&quot;fluent&quot;&gt;&lt;span&gt;## trivial message
&lt;&#x2F;span&gt;&lt;span&gt;common-singleplayer = Singleplayer
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;## variables
&lt;&#x2F;span&gt;&lt;span&gt;hud-sct-experience = { $amount } Exp
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;## attributes
&lt;&#x2F;span&gt;&lt;span&gt;common-abilities-debug-possess = Possessing Arrow
&lt;&#x2F;span&gt;&lt;span&gt;    .desc = Shoots a poisonous arrow. Lets you control your target.
&lt;&#x2F;span&gt;&lt;span&gt;common-abilities-sword-spin = Whirlwind
&lt;&#x2F;span&gt;&lt;span&gt;    .desc = Move forward while spinning with your sword.
&lt;&#x2F;span&gt;&lt;span&gt;common-abilities-axe-leap = Axe Jump
&lt;&#x2F;span&gt;&lt;span&gt;    .desc = A jump with the slashing leap to position of cursor.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;## number selectors
&lt;&#x2F;span&gt;&lt;span&gt;hud-trade-buy = Buy Price: { $coin_num -&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    [one] one coin
&lt;&#x2F;span&gt;&lt;span&gt;    *[other] { $coin_formatted } coins
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;hud-trade-sell = Sell Price: { $coin_num -&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    [one] one coin.
&lt;&#x2F;span&gt;&lt;span&gt;    *[other] { $coin_formatted } coins
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Also thanks to @Sharp for pushing for new translation system and @EvanMeek for
pushing translation work. Of course, we still have a lot of things to do for
internalisation of Veloren, so if you want to get involved, check &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1582&quot;&gt;this tracking
issue&lt;&#x2F;a&gt;. And if you want to get
involved in translating the game to your favourite language, check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;translators&#x2F;game.html&quot;&gt;this
guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Translation is cool, but it&#x27;s some nerdy thing for devs. Veloren now has another
killer feature, &lt;code&gt;&#x2F;body&lt;&#x2F;code&gt; command, which is obviously admin-only*, and it allows
you to change your body to arbitrary species. It allows you to fly like an
eagle, swim like a fish and beave like a beaver. Here are some pictures of me
having fun:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010541750256943175&amp;#x2F;screenshot_1660997578326.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010543624838189076&amp;#x2F;screenshot_1661002972276.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010546746939678811&amp;#x2F;screenshot_1661003713959.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010546748567060591&amp;#x2F;screenshot_1661003710951.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010569787816022016&amp;#x2F;screenshot_1661008042222.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;861247966575460426&amp;#x2F;1010569788399046736&amp;#x2F;screenshot_1661008031561.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1010660018170896504&amp;#x2F;screenshot_1661030744257.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And to add on beavers and eagles, there is war. I wrote my first impression on
24 February here &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;ukraine&quot;&gt;https:&#x2F;&#x2F;veloren.net&#x2F;ukraine&lt;&#x2F;a&gt;.
Read it if you haven&#x27;t. In two days from the time I&#x27;m writing this post, it will
be Ukraine Independence Day, and ironically, it will be six months since
Russia&#x27;s full-scale invasion, so I wanted to express my feelings again.&lt;&#x2F;p&gt;
&lt;p&gt;The first thing I wanted to mention is that I call 24 February a full-scale
invasion because the war started eight years ago, with the occupation of Crimea
and the War in Donbas started by Russian agents like Girkin. The second thing
that I think is important to understand is that every war has the front line and
rear. And for eight years, the front line was mostly stable, and while more two
million people left their homes, it was so easy to forget about the war. What I
can say about today, Russian reminds about war every day. I can only imagine
what happens on occupied territories, knowing what happened in Bucha. And I can
only imagine what happens at towns near frontline. But what I don&#x27;t need to
imagine is air alarm each day and night, two three times per day or sometimes
even frequent. And usually these air alarm end with strikes of Russian rockets
somewhere in Ukraine. And if at first, core emotion was chaos, now the core
emotion is non-stop stress. Stress and hope.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1008818338123755661&amp;#x2F;screenshot_1660591321544.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Gliding towards the moon&amp;#x27;s reflection. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1008818338123755661&#x2F;screenshot_1660591321544.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 185</title>
          <pubDate>Mon, 15 Aug 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-185/</link>
          <guid>https://veloren.net/blog/devblog-185/</guid>
          <description>&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Isse, @zesterer, @xMAC94x, @DaforLynx,
@JulioCezarSilva, @Pfau, @Sam, @flo, @AldanTanneo, @imbris, @Slipped, @Vincent,
and @juliancoffee.&lt;&#x2F;p&gt;
&lt;p&gt;More mediocre animations
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008500040693710998&amp;#x2F;2022-08-14_18-18-08.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008508443667214467&amp;#x2F;2022-08-14_18-51-35.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008537316446457936&amp;#x2F;2022-08-14_20-46-09.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;isse&quot;&gt;@Isse&lt;&#x2F;h3&gt;
&lt;p&gt;This week I got my MR merged that implemented spectator mode, but hidden in that MR was also a bug fix. Which is in my opinion more interesting than the feature itself.&lt;&#x2F;p&gt;
&lt;p&gt;So for some time now we&#x27;ve had a bug were if you die while in lava, you would still be on fire when you respawn.&lt;&#x2F;p&gt;
&lt;p&gt;So a fix for this bug had already been outlined by @imbris [GMT-4], and a very
good description by @zesterer [GMT+0], in
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1379&quot;&gt;this&lt;&#x2F;a&gt; issue. The first part
of the issue was caused by having client authoritative physics, and the client
&quot;teleporting&quot; back into the lava after respawning. Zesterer wrote this great
diagram describing the issue:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Server thinks the player is...   | Client thinks the player is...
&lt;&#x2F;span&gt;&lt;span&gt;---------------------------------|-------------------------------
&lt;&#x2F;span&gt;&lt;span&gt;1) Player walks into lava
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;In lava, alive                   | In lava, alive
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;2) Player burns to death, entering the dead state
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;In lava, dead                    | In lava, dead
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;3) Player requests a respawn. Request received by server and a teleport occurs, but client does
&lt;&#x2F;span&gt;&lt;span&gt;not yet know
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;At waypoint, alive               | In lava, dead
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;4) Client and server now send contradictory position requests to one-another: the client still
&lt;&#x2F;span&gt;&lt;span&gt;thinks the player is in the lava, but the server thinks they are respawned. Both server and
&lt;&#x2F;span&gt;&lt;span&gt;client accept the reality of the other, so the server and client&amp;#39;s view of the world &amp;#39;swap&amp;#39;.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;In lava, alive (on fire)         | At waypoint, alive
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;5) The short window above is enough time for the character to pick up the burning debuff because
&lt;&#x2F;span&gt;&lt;span&gt;the server sees them as being in the lava. Now, the client&amp;#39;s new &amp;quot;correct&amp;quot; position request gets
&lt;&#x2F;span&gt;&lt;span&gt;sent back to the server, unifying both views of reality and finally placing the player back at
&lt;&#x2F;span&gt;&lt;span&gt;the waypoint for both server and client
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;At waypoint, alive (on fire)     | At waypoint, alive (on fire)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;6) The burning debuff sticks around because it is on a time delay. The player *perceives* this as
&lt;&#x2F;span&gt;&lt;span&gt;a continuation of the debuff they had when they died, but in fact it is a new debuff that got
&lt;&#x2F;span&gt;&lt;span&gt;picked up as a result of the respawn position hot-swapping discussed above.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This issue was fixed by holding a counter of each force update that is done for that client, i.e each respawn, mounting position updates and teleports through commands. If we then we also keep this counter in sync on the client, and send that synced counter back with position updates from the client to the server, we can check if that position update is valid for the current counter on the server. If it&#x27;s not equal to the one on the server, we can throw that update out.&lt;&#x2F;p&gt;
&lt;p&gt;So, I had implemented all that... But it still wasn&#x27;t working. So I tested a bit
and found out that the bug still happened with client authoritative physics
turned off! Which was surprising. After some debugging I found that after
respawning, the server still thought that the player was in lava. Which
definitely wasn&#x27;t correct. I&#x27;ll also make a little diagram of what was
happening.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;1) Player walks into lava
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;2) The phys system runs, setting in_liquid to Some(Lava).
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;3) Player dies from burning debuff, in_liquid remains unchanged
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;4) Player respawns, in_liquid still remains unchanged.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;&#x2F; This next part depends on ecs system order being this way
&lt;&#x2F;span&gt;&lt;span&gt;5) The buff system runs, checking that in_liquid is Some(Lava) and if so applying the burning debuff.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;6) The phys system runs, setting in_liquid to None. &#x2F;&#x2F; In most cases. There could be a campfire underwater :P
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This was a much simpler fix than the former one. We just needed to reset the component holding in_liquid once the player respawned.
This being a double issue might&#x27;ve contributed to why it took so long for it to be fixed, and also the former fix is not really a straight forward fix. But in most cases it was the second fix that actually caused the bug, because client authoritative couldn&#x27;t have caused it if the player&#x27;s spawn point is far enough away, or they&#x27;re playing on server authoritative physics.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1008195646097997895&amp;#x2F;screenshot_1660442861667.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A large tree in the distance! See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1007301306744066140&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        
          
        
        <item>
          <title>This Week In Veloren 184</title>
          <pubDate>Mon, 08 Aug 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-184/</link>
          <guid>https://veloren.net/blog/devblog-184/</guid>
          <description>&lt;p&gt;This week, we see many new animation videos.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @juliancoffee, @Vincent, @xMAC94x, @loki,
@Sam, @XVar, @DaforLynx, @imbris, @Isse, @Tavo, and @flo!&lt;&#x2F;p&gt;
&lt;p&gt;@Sam has been attempting to make things that resemble animations to expedite
sword skill tree rework. Here are some of the results:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1005583719102427227&amp;#x2F;2022-08-06_17-09-53.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1007069229155098666&amp;#x2F;2022-08-10_19-32-07.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1007094232521117837&amp;#x2F;2022-08-10_21-12-00.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1007446527331016744&amp;#x2F;2022-08-11_20-31-00.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1007454062117146707&amp;#x2F;2022-08-11_21-01-46.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1007467845040476231&amp;#x2F;2022-08-11_21-56-32.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008036615706382376&amp;#x2F;2022-08-13_11-36-37.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008220162702450728&amp;#x2F;2022-08-13_23-45-56.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008228963665064016&amp;#x2F;2022-08-14_00-21-04.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;

&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;1008411429939986602&amp;#x2F;2022-08-14_12-25-19.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1003529622840934430&amp;#x2F;Screenshot_from_2022-07-25_19-02-59.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A chill campfire in the evening. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;1003511049808515212&#x2F;screenshot_1659245074305.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 183</title>
          <pubDate>Mon, 01 Aug 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-183/</link>
          <guid>https://veloren.net/blog/devblog-183/</guid>
          <description>&lt;p&gt;This week, we hear about new worldgen settings, and how the translation system
update is going.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Isse, @xMAC94x, and @LunarEclipse&lt;&#x2F;p&gt;
&lt;h2 id=&quot;worldgen-settings-by-juliancoffee&quot;&gt;Worldgen settings by @juliancoffee&lt;&#x2F;h2&gt;
&lt;p&gt;I implemented a new setting for worldgen, &lt;code&gt;LoadOrGenerate&lt;&#x2F;code&gt;. Previously you needed
to use &lt;code&gt;Save&lt;&#x2F;code&gt; options to generate a new map and save it on disk with some cryptic
name (it&#x27;s actually the date of map generation). Then, when you would want to use it
next time, you would need to use &lt;code&gt;Load&lt;&#x2F;code&gt; option to load your map and pass it that
cryptic name, unless you renamed it yourself.&lt;&#x2F;p&gt;
&lt;p&gt;Now with &lt;code&gt;LoadOrGenerate&lt;&#x2F;code&gt; you don&#x27;t need to care about it all, you can just say
&lt;code&gt;LoadOrGenerate(&quot;my-cool-map&quot;)&lt;&#x2F;code&gt; and things will work automatically. You can pass
optional parameters, like map size and scale hack, the same way you would do
that with Save or Generate option, read about it in The Book. If you specify new
parameters and a name for the map with old parameters, worldgen will panic, if you
will want to overwrite the map, you can use overwrite parameter. Ask us on
Discord if you will have some troubles with it.&lt;&#x2F;p&gt;
&lt;p&gt;Also, to give an update on my previous post about translation, I am actively
researching &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;projectfluent.org&#x2F;&quot;&gt;Fluent project&lt;&#x2F;a&gt; and it will be just
a warp-jump for our translation capabilities. Probably no web-service UI yet
though.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;juliancoffee&#x2F;kotygoroshko&#x2F;-&#x2F;blob&#x2F;veloren-rfc&#x2F;RFC.md&quot;&gt;Here is RFC about the translation
move&lt;&#x2F;a&gt;.
Read this, if you&#x27;re translating Veloren to your language because quite soon
that will be the way to translate the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1000612174286311505&amp;#x2F;Capture.PNG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;How are we gonna get up this? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1003275544231682089&#x2F;screenshot_1659269912888.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 182</title>
          <pubDate>Mon, 25 Jul 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-182/</link>
          <guid>https://veloren.net/blog/devblog-182/</guid>
          <description>&lt;p&gt;This week, we hear about how the 0.13 release party went. We also get a video of
a lightning storm.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @DaforLynx, @JonHeath, and @Pfau!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;izYCHdRxuR4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;0-13-release-party-by-yurimomo&quot;&gt;0.13 Release Party by @YuriMomo&lt;&#x2F;h3&gt;
&lt;p&gt;This week, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-13&quot;&gt;Veloren 0.13 was released&lt;&#x2F;a&gt;! We
smashed our previous release party record with 277 players online at peak!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;557222912394788884&amp;#x2F;1000704303276761138&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here&#x27;s the old record, on the 0.12 release we peaked at 195 players!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;948188626502713364&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Check out the trailer to see some of the changes. The release party took the
place at 18:00 GMT on July 24th, if you missed the release party you can watch
it on our YouTube channel!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;VWUT8m3NdMQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here is the list of the features which were added to Veloren!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Better Weather system  by @DaforLynx (sound) @zesterer @Isse (programming)&lt;&#x2F;li&gt;
&lt;li&gt;LoD Objects by @zesterer&lt;&#x2F;li&gt;
&lt;li&gt;Balance changes to items and monsters&lt;&#x2F;li&gt;
&lt;li&gt;Performance improvements&lt;&#x2F;li&gt;
&lt;li&gt;Water caves by @Isse&lt;&#x2F;li&gt;
&lt;li&gt;CliffTowns by @floppy&lt;&#x2F;li&gt;
&lt;li&gt;Modular weapon @Sam sword overhaul by @Slipped [GMT -5]&lt;&#x2F;li&gt;
&lt;li&gt;Added loot ownership for drops from mining&lt;&#x2F;li&gt;
&lt;li&gt;Updated the Polish translation @LunarEclipse (LunarEclipse)&lt;&#x2F;li&gt;
&lt;li&gt;More varied ambient birdcalls @DaforLynx&lt;&#x2F;li&gt;
&lt;li&gt;Overhauled caves: they&#x27;re now a multi-layer network spanning the entire world
@zesterer [GMT+0]&lt;&#x2F;li&gt;
&lt;li&gt;Modular weapons now have a selling price @Christof&lt;&#x2F;li&gt;
&lt;li&gt;Metadata added to music files. Listen to the soundtrack more easily @DaforLynx&lt;&#x2F;li&gt;
&lt;li&gt;Optimized sprite processing decreasing the startup time of voxygen (and long
freezes when trying to enter the world when this hasn&#x27;t finished). @Imbris&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;998127222860820530&amp;#x2F;screenshot_1658042110564.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Taking a rest while exploring the caverns. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1000484044439564418&#x2F;screenshot_1658601819494.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.13 Release</title>
          <pubDate>Sat, 23 Jul 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-13/</link>
          <guid>https://veloren.net/blog/release-0-13/</guid>
          <description>&lt;h2 id=&quot;0-13-release&quot;&gt;0.13 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is releasing 0.13! This version is 5 months in the making, and we have a
lot to show off!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;everytimezone.com&#x2F;s&#x2F;020e183f&quot;&gt;18:00 GMT on July
23rd&lt;&#x2F;a&gt;, make sure to join the release
party. There will be a custom pirate-themed map with plenty of secrets to find (
thanks to @Hannibal ), minigames, and other events so don&#x27;t miss it and make
sure to bring your friends along! 🏴‍☠️ Explore the handcrafted jungle isles to
seek the treasures of the Sunken Duchess!&lt;&#x2F;p&gt;
&lt;p&gt;To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an
account&lt;&#x2F;a&gt;, then launch the game and hop on the
default server. See you there!&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve also put together trailer for 0.13 release party, made by @Hannibal, and
with music by Benjam Soule H. Walker, aka @Oolnokk.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;TEQHYO-hbz0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;new-in-this-release&quot;&gt;New in this release&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;crossed-swords-modular-weapons&quot;&gt;⚔️  Modular weapons&lt;&#x2F;h4&gt;
&lt;p&gt;You can now craft weapons in new ways!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;997831957062881280&amp;#x2F;screenshot_1657972255467.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;thunder-cloud-rain-real-time-weather-rain-wind-thunder-lightning&quot;&gt;⛈️  Real-time weather: rain, wind, thunder, lightning&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;998929435405328434&amp;#x2F;screenshot_1658231904841.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;mountain-snow-cliff-towns&quot;&gt;🏔️  Cliff towns&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;995108691718176858&amp;#x2F;screenshot_1657322762101.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;flashlight-interconnected-cave-networks-with-cave-biomes&quot;&gt;🔦  Interconnected cave networks with cave biomes&lt;&#x2F;h4&gt;
&lt;p&gt;So much more cave to explore!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;999835380012568686&amp;#x2F;CaveDive.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;evergreen-tree-lod-trees&quot;&gt;🌲  LoD trees&lt;&#x2F;h4&gt;
&lt;p&gt;You can see trees past the boundaries of loaded chunks now. This is going to add
a lot to far-off mountains!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;999103903603892294&amp;#x2F;screenshot_1658025212968.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;haircut-male-more-character-customisation-options&quot;&gt;💇‍♂️  More character customisation options&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;998368480782983218&amp;#x2F;Rest.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;cartwheeling-npc-personalities&quot;&gt;🤸  NPC personalities&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;997928610784628906&amp;#x2F;screenshot_1657995067178.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;raised-hands-and-much-more&quot;&gt;🙌  And much more!&lt;&#x2F;h4&gt;
&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;You can check out the full changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#unreleased&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this versions contributors (in random order):&lt;&#x2F;p&gt;
&lt;p&gt;John Heath, Karl Werf, Samuel Keiffer, Olexorus, Vlad, markobekko, Snowram,
Mehmet-dev, InfRandomness, Dr. Dystopia, Brandon Dyer, Benoît du Garreau, tygyh,
Imbris, Clary Chevry, Jack hollis-london, Bryant Deters, runrobdog, Enrique AM,
Corvella, Hugo Peixoto, Cheuk Yin Ng, Tormod G. Hellen, Monty Marz, Leonid
Toshchev, Andrzej Drabarek, jh0l, DaforLynx, Stanisław Grupiński, floppy, Влад
Куцепалов, Makselord, Samuel Lopes Mastrofrancisco, JakobDev, Vincent Foulon,
Joshua Barretto, brunt, Chase Rozon, UncomfySilence, StereoJunkie, Isidor
Nielsen, juliancoffee, terrarier2111, Euryn, Justin Shipsey, Plright, ninefox,
IsseW, Forest Anderson, Dominik Broński, Maxwell, Manuel Schmidbauer, Treeco,
Christof Petig, Ben Wallis, Socksonme, James Melkonian, Awkor, Anton Katsuba,
Avi Weinstock, aflying pumpkin, holychowders, Mckol, ubruntu, Jonathan Berglin,
Samantha W, Joshua Yanovski, Marcel, Julio Cezar Silva, Youssef Fahmy, Mel, flo,
jshipsey, Benjam Soule H. Walker, and Inojelis&lt;&#x2F;p&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one today!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;828699569135157282&#x2F;998212415802056714&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 181</title>
          <pubDate>Mon, 18 Jul 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-181/</link>
          <guid>https://veloren.net/blog/devblog-181/</guid>
          <description>&lt;p&gt;This week, we hear about the new server-side physics system&#x27;s development.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Christof, @juliancoffee, @tygyh,
@xMAC94x, @Isse, @aweinstock, @Treeco, @AngelOnFira, @Sharp, @Treeco,
@DaforLynx, @LunarEclipse, @Socksonme, @VincentFoulon80, and @UncomfySilence!&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse has updated the Polish translations.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-roadway-to-better-server-side-physics-by-xmac94x&quot;&gt;The roadway to better server-side physics by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;There are currently 2 physics modes: client-side physics which is prone to hacks
and has low latency, and server-side physics which is not hackable (or so we
think) but has
high latency. Here&#x27;s how we want to get the best out of both.&lt;&#x2F;p&gt;
&lt;p&gt;First, let&#x27;s have a look how current server-side physics works. Assume we have a
&lt;code&gt;Server&lt;&#x2F;code&gt;, &lt;code&gt;ClientA&lt;&#x2F;code&gt;. and &lt;code&gt;ClientB&lt;&#x2F;code&gt;. The latency (ping) of &lt;code&gt;ClientA&lt;&#x2F;code&gt; is 300ms
and the latency of &lt;code&gt;ClientB&lt;&#x2F;code&gt; 200ms. This means that sending a message to the
server for &lt;code&gt;ClientA&lt;&#x2F;code&gt; takes ~150ms, and getting a message back takes ~150ms. So
when &lt;code&gt;ClientA&lt;&#x2F;code&gt; jumps it takes 150ms for the server to find out, and then 100ms
for &lt;code&gt;ClientB&lt;&#x2F;code&gt; to get that update. &lt;code&gt;ClientB&lt;&#x2F;code&gt; sees this after 150 + 100 = 250ms.
Even worse: The same goes for &lt;code&gt;ClientA&lt;&#x2F;code&gt;, it sends the message to the server,
waits for the servers answer and therefore starts the jump animation after its ping time, or 300ms+. 300ms till the press of a button and seeing something
happen is unplayable.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1003511049808515212&amp;#x2F;screenshot_1659245074305.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Our new server-side physics will work with 2 clever tricks:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;A client no longer waits for a message to go to the server and back, but will
start the animation immediately&lt;&#x2F;li&gt;
&lt;li&gt;Voxygen does not show you what the server sends you, but always &quot;project&quot; a
latency + a bit in the future.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Lets deep dive into the latter one. The server counts the time since its start,
the so called tick time. starting with 0s, and increasing every tick by ~33.3ms.
Lets look at what happens a bit after the game starts, at time t=10s. The server makes it calculations and
sends an event to the client: Arrow is flying to your feet and will reach you in
1s!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;ClientA&lt;&#x2F;code&gt; does not yet know about this arrow, as the message hasn&#x27;t been sent
over the internet. It takes 300ms, so at t=10.3s, the client receives the
message of the arrow. Now comes the fancy part. &lt;code&gt;ClientA&lt;&#x2F;code&gt; knows the message was
sent at the server at t=10s, so the client will revert it&#x27;s time back to t=10s
and now simulates 300ms. If we would keep it like that the client would see the
arrow 700ms away.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;1001601909901238272&amp;#x2F;screenshot_1658870677008.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is good, Voxygen already substracted the 300ms for the
latency from server-&amp;gt;client. But we don&#x27;t stop here. We are simulating another
300ms + a bit (lets say 50ms) = 350ms. This way, we are taking into account the
time it will take from the client to the server. The 50ms are a small buffer
that will be explained later.&lt;&#x2F;p&gt;
&lt;p&gt;The actually image &lt;code&gt;ClientA&lt;&#x2F;code&gt; will see shows the
arrow only 350ms away from their feet, as we show 10.75s even though the time
is t=10.3s The client now sees exactly what the server will see once their
message arrives, so they quickly press the jump button. &lt;code&gt;ClientA&lt;&#x2F;code&gt; sends a message
to the server: Hey, I want to jump at exactly t=100.65s. When the server receives
that message another 300ms are gone, it&#x27;s not t=100.6s. The server processes the
jump-request and sees: it&#x27;s still valid, it was send 50ms ahead of time and
starts the jump of &lt;code&gt;ClientA&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;All this what we spoke about will repeat endlessly. with each message from the
server additional info is send, e.g.: your message was 50ms early. This will
then be used at the client to tighten the timings and calculate the ping.&lt;&#x2F;p&gt;
&lt;p&gt;For this algorithm to work flawlessly we need to improve the accuracy of our
tick calculations and physics calculations. We need to predict a lot of
variables and constantly need to adjust the 50 ms buffer we talked earlier about
so that the image doesn&#x27;t appear laggy. All this is another story for anther
blog but needs to be done first. Expect it NOT before the next release party.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;999437669383819274&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;With the right knowlege, you too can levitate! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;1000279877339058257&#x2F;screenshot_1658555631651.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 180</title>
          <pubDate>Mon, 11 Jul 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-180/</link>
          <guid>https://veloren.net/blog/devblog-180/</guid>
          <description>&lt;p&gt;This week, we hear about changes that are being made to the Scrolling Combat
Text system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @xMAC94x, @DaforLynx, @Isse,
@XVar, @Awkor, @Christof, @Julio, @Slipped, and @Socksonme!&lt;&#x2F;p&gt;
&lt;p&gt;Weather by @Isse &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;3183&#x2F;&quot;&gt;has been merged!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;scrolling-combat-text-by-socksonme&quot;&gt;Scrolling combat text by @Socksonme&lt;&#x2F;h3&gt;
&lt;p&gt;For the past couple of months, I&#x27;ve been working on a rewrite of the SCT system
that we have. (These are the damage numbers that show up on the screen - both
for the player and the enemies). The old method that was used for creating the
&quot;floaters&quot; had many issues. First, it checked if the health had changed in the
last frame, and second, it only used the last change applied to the health. The
way that the check was made was by storing the HP on the current tick, and then
on the next tick - comparing them to see if they&#x27;re different.&lt;&#x2F;p&gt;
&lt;p&gt;The issue that this caused was that an equal amount of healing and damage done
in the same tick would lead to no damage numbers being shown. The second issue,
which is displaying only the last change, led to some attacks&#x2F;weapons showing
incorrect damage. For example - the bow&#x27;s &quot;Shotgun&quot; attack, the slashing damage
from the sword, whenever the enemy doesn&#x27;t have enough energy left, or the poise
damage, whenever the enemy is stunned. All of these attacks apply multiple
changes to the health, in the same tick, which would obviously cause an issue.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;994868656666333214&amp;#x2F;screenshot_1657265518422.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new system put in place now uses &quot;outcomes&quot;, which are the result of an
event. Whenever an attack is applied, a &lt;code&gt;HealthChange&lt;&#x2F;code&gt; server event is emitted.
This is then handled and then a &lt;code&gt;HealthChange&lt;&#x2F;code&gt; outcome is emitted. Then, for
every &lt;code&gt;HealthChange&lt;&#x2F;code&gt; outcome, we go through some new conditions in order to see
how some health changes should be displayed. Before the &lt;code&gt;HealthChange&lt;&#x2F;code&gt; server
event is emitted, a random number is generated and then stored, since we will
want to group up damage from the same attack (I will explain why later).&lt;&#x2F;p&gt;
&lt;p&gt;Another value that is now stored is the crit. Boolean, which, as the name
suggests, stores whether a health change was a crit or not. Crits dealt to an
enemy are separated from regular attacks, and they themselves aren&#x27;t accumulated
with other crits. They are also displayed in a random position left or right
from where the regular attacks show up. They are a bit larger than the damage
numbers for regular attacks and have a yellow color.&lt;&#x2F;p&gt;
&lt;p&gt;In comparison to the floaters for the enemies, crits and regular attacks are
shown in the same position for the player, and are accumulated normally,
however, they still possess a yellow color. I decided to also let the player
decide the duration for which floaters should be accumulated. This is done by
having two separate sliders going from 0.0 seconds to 2.0 seconds (one for
damage dealt by the player and one for damage dealt to the player).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;995347366636949534&amp;#x2F;screenshot_1657379424373.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;However, this poses another small issue, which is that, if you have damage from
the same attack happening in the same tick, while you have the damage
accumulation duration set to 0 seconds, this would lead to the text being
unreadable. As a method to solve this, as I mentioned before, we check if this
random number (which is the same for damage from the same attack) is the same,
and also if it&#x27;s from the same tick, and if so - accumulate the damage.&lt;&#x2F;p&gt;
&lt;p&gt;Some minor changes also include: having a toggleable option for rounding damage
which is greater than or equal to 1.0, having an option for experience number
accumulation (I decided that having a slider for the duration would be
excessive) and some sources of damage&#x2F;healing - for example, fall damage,
campfires, food, the regeneration buff, and others, now show up in the SCT.
Also, since we now have a slider for the accumulation duration, I felt that I
should remove both the single and cumulated damage options. (might post some
images later)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;1001893594778583130&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Ready to fight! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;998771000156094554&#x2F;screenshot_1658179434952.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 179</title>
          <pubDate>Mon, 04 Jul 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-179/</link>
          <guid>https://veloren.net/blog/devblog-179/</guid>
          <description>&lt;p&gt;This week, we hear about some work being done on the translation system. We also
have a small video of some cave spelunking!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Isse, @Socksonme, @imbris, @DaforLynx,
@zesterer, @xMAC94x, @Sharp, @BenjamWalker, @Sam, @James, @Treeco, and
@AngelOnFira!&lt;&#x2F;p&gt;
&lt;p&gt;@YuriMome and @xMAC94x got the ultimate plan set up for our GitLab organization,
which will give us more information about our development cycle.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;993033398786465883&amp;#x2F;Ostest_Hollow.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Cave spelunking by @Dumpling&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;translations-by-juliancoffee&quot;&gt;Translations by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I started doing translation work and started with introducing translation of
abilities (you can already see it in the ability selection menu of the diary).
Take a look at &lt;code&gt;en&#x2F;hud&#x2F;ability.ron&lt;&#x2F;code&gt; file for an example of how it is being done:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Localization for &amp;quot;global&amp;quot; English
&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    string_map: {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Debug stick
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.abilities.debug.possess.name&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Possessing Arrow&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.abilities.debug.possess.desc&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Shoots a poisonous arrow. Lets you control your target.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Sword
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.abilities.sword.spin.name&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Whirlwind&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.abilities.sword.spin.desc&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Move forward while spinning with your sword.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        ...
&lt;&#x2F;span&gt;&lt;span&gt;    },
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Not only you can translate existing abilities, you can also translate &quot;modded
ones&quot; by just adding &lt;code&gt;.name&lt;&#x2F;code&gt; and &lt;code&gt;.desc&lt;&#x2F;code&gt; to ability id. And on the topic of
translation, I can also give a sneak peek of a few things.&lt;&#x2F;p&gt;
&lt;p&gt;First, we want to add translation of names for entities soon (like, you know,
rabbit or Cultist). And second, more importantly, is that we want to move from
our self-made internationalization (i18n) system to something already used in
open source world, for example PO files. I can&#x27;t give any time estimate on when
they&#x27;ll be ready, but if you&#x27;re interested in it, please jump to our Discord to
discuss!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;998363533404274748&amp;#x2F;screenshot_1658098547268.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A dreary night, best to stay inside! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;995091145086484490&#x2F;screenshot_1657318602503.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 178</title>
          <pubDate>Mon, 27 Jun 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-178/</link>
          <guid>https://veloren.net/blog/devblog-178/</guid>
          <description>&lt;p&gt;This week, we have a great writeup from @Sharp about optimizations being made to
the site2 system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @juliancoffee, @xMAC94x, @runrobdog,
@BrandonDyer, @imbris, and @Sam!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;site2-optimizations-by-sharp&quot;&gt;Site2 optimizations by @Sharp&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on speeding up site2 rendering time by roughly an order of
magnitude across the board. Site2 greatly simplifies things for developers by
giving them normal geometric primitives to work with (rather than forcing them
to write everything in a sampling-based way), and allowing direct draws of
primitives to occur in a specific order with different fills.&lt;&#x2F;p&gt;
&lt;p&gt;(Un)fortunately, site2&#x27;s power and ease of use has led to a lot of rather
expensive patterns and primitives being used to emulate things like archways,
hollowed-out rooms, or sprites on the ground. This, combined with the actual
rendering still being done in a mostly sampling-based way (albeit with a bit of
cleverness around bounding boxes), has resulted in large regressions in overall
render time for chunks, putting us far out of reach of our end goal if we want
to support higher view distances or larger numbers of players.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;988484723976339466&amp;#x2F;screenshot_1655739209947.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Chunk generation times are highly variable and depend on many factors (player
count, player distribution, and view distance) that we don&#x27;t have much control
over, and as maps get bigger and servers get fuller, these factors are likely to
grow.&lt;&#x2F;p&gt;
&lt;p&gt;While it&#x27;s true that chunks can mostly render in parallel, many players play
single player or use servers with only a handful of cores; on such systems,
driving generation into the background isn&#x27;t as helpful as it seems. Even on
beefy servers, any CPU cycles spent on chunk generation are &lt;em&gt;not&lt;&#x2F;em&gt; being spent on
more useful work (plus, it&#x27;s lame to restrict players to such a small view
distance!).&lt;&#x2F;p&gt;
&lt;p&gt;Even if most cores are ideal, many systems (and players themselves!) can&#x27;t run
or perceive anything until a chunk is loaded, so slow chunk generation time has
a disproportionate impact on perceived latency. This is especially true in the
context of very fast transport systems, such as high speed trains, which require
loading new chunks very rapidly in order to keep up with the player.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve recognized that this is a problem for a while, so @aweinstock had been
working on a pretty interesting idea--JIT compiling expensive nodes in the site2
render tree, then evaluating it! While he got impressive results from doing
this, even taking the JIT compilation overhead into account, the total time
still seemed much too high to me. Since even if you have a JIT compiler, having
a faster interpreter is still always beneficial (since you can compile in the
background, or use the interpreter for all but the most expensive nodes), I
decided to see what improvements we could get by improving the interpreter
instead.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;991429549730566274&amp;#x2F;screenshot_1656445470301.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Fortunately, because site2 is so high-level, there is a lot of room to optimize
the interpreter! I quickly realized that there was a &lt;em&gt;lot&lt;&#x2F;em&gt; of low-hanging fruit
in that department, and the improvements quickly grew to the point where the
interpreter was finishing well before JIT compilation had a chance to finish.
Some techniques applied so far include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added UnionAll and IntersectAll primitives, which reduce the amount of time
spent recursing through the tree and result in easier and more frequent
chances for optimization.&lt;&#x2F;li&gt;
&lt;li&gt;Added a proper cost model to decide join ordering on unions, intersections,
and differences.&lt;&#x2F;li&gt;
&lt;li&gt;Reducing the number and capabilities of primitives, allowing us to focus more
on optimizing the remaining ones (for example, we have removed arbitrary
fills, and now insist that all lazy primitives be convex).&lt;&#x2F;li&gt;
&lt;li&gt;Changing from a sampling-based approach that walks the tree per-voxel, to one
that walks the tree to find bounding volumes; we now maintain a context with a
mask, transformation matrix, and stack of partially applied intersections,
which allows us to delay evaluation efficiently.&lt;&#x2F;li&gt;
&lt;li&gt;Pushing down unions and intersections as far as possible, only dropping to
point-based approaches when we hit a primitive (so we iterate over small,
mostly-disjoint AABBs).&lt;&#x2F;li&gt;
&lt;li&gt;Some tentative initial applications of explicit SIMD (to parts of the segment
prism algorithm). Over time, we will probably convert the entire render loop
to SIMD, treating the mechanics of rendering more like we would a GPU.&lt;&#x2F;li&gt;
&lt;li&gt;A lot of heroic optimizations for difficult primitives and special cases (for
example, superquadrics are about 4x as fast as they were with a more naive
approach, due to exploiting symmetry, inline caching, and the fact that they
have explicit solutions in restricted cases).&lt;&#x2F;li&gt;
&lt;li&gt;Avoiding per-voxel dynamic dispatch on fills (which turns out to have a &lt;em&gt;huge&lt;&#x2F;em&gt;
impact in some cases, e.g. cliff towns).&lt;&#x2F;li&gt;
&lt;li&gt;Restricting differences statically to ensure that the domain is strict
(inspired by polarized type theory).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;965039450746925066&amp;#x2F;screenshot_1650153591405.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;These, plus a number of other miscellaneous optimizations, have resulted in very
significant wins! Caveat: some features still need to be enabled, and segments
are broken in ways that may affect benchmarks, so some of these may regress a
bit--but they are very impressive...&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Gnarling fortresses are about 15x faster than they were on master, and render
in about 2.1 ms &#x2F; chunk. While they are segment-heavy and therefore might
regress, they also have the most complex geometry by far of any site2 to date,
and don&#x27;t use any custom fills, so they have much more room for improvement by
optimizing geometry than any of the other sites do. Therefore, I&#x27;m fairly
confident that we will end up at least 15x faster after my changes are
complete.&lt;&#x2F;li&gt;
&lt;li&gt;Dungeons are about 7x faster than they were on master, and render in about 3.3
ms &#x2F; chunk (they lag other results because they are almost entirely
bottlenecked on their complex custom fill, which I have not spent much time
optimizing because dungeons are due for a rewrite anyway). This improvement
also &lt;em&gt;seems&lt;&#x2F;em&gt; to have some impact on server startup time!&lt;&#x2F;li&gt;
&lt;li&gt;Cliff towns are 7x faster than they were after some other fairly significant
performance improvements, so they are likely at least 10x faster than master
(I&#x27;d guess a lot more, since they heavily use large intersected
superquadrics).&lt;&#x2F;li&gt;
&lt;li&gt;Cities use a lot of primitives that haven&#x27;t been optimized, so it&#x27;s hard to
say how they would compare to master (we didn&#x27;t have an old benchmark for
them), but they render in under 2ms &#x2F; chunk.&lt;&#x2F;li&gt;
&lt;li&gt;Giant trees were not benchmarked on master, but they now actually render at
less than 125 μs per chunk (which was my original super stretch goal time for
chunk rendering--I believe this is the first time we have hit that with a
realistic structure!). Avoiding dynamic dispatch on fills, alone, made giant
trees over 4x faster than they were after other fairly significant performance
improvements compared to master, so it is likely that they also saw an order
of magnitude speedup overall. However, they are very segment-heavy, so it&#x27;s
difficult to say where they&#x27;ll end up after segments are fixed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Finally, to validate that the existing optimizations are indeed useful, I ported
citadel code from @zesterer&#x27;s branch (which I&#x27;d never looked at before), fixed
it to be compatible with my current code (which required only a handful of
changes, since it was already correctly polarized), and then benchmarked it.&lt;&#x2F;p&gt;
&lt;p&gt;As it turns out, it was very superquadric, union, and intersection-with-AABB
heavy, so it benefited from many of the optimizations mentioned above!  Citadels
now render in only about 650 μs&#x2F;chunk--making them more efficient than any site
except giant trees. I am extremely confident that this represents more than a
10x improvement over the old branch (I included some pictures of it to break up
the text!).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;988484724500602940&amp;#x2F;screenshot_1655738087967.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Going forward, there are still several more optimizations to implement before I
submit my changes (this is by no means the end of possible optimizations--I have
many more ideas!--but it&#x27;s a good stopping point assuming that we can maintain
our order of magnitude improvement after segments are fixed and differences are
added back):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Draw immediately when fill is called, rather than allocating into a primitive
array first and then dispatching later.&lt;&#x2F;li&gt;
&lt;li&gt;Add efficient internal algorithms for rendering the remaining primitives, in
both the intersection and masked cases (and consolidate any we no longer
need).&lt;&#x2F;li&gt;
&lt;li&gt;Make sharing of primitives &lt;em&gt;explicit&lt;&#x2F;em&gt; and visible to the user, so we avoid
recomputing the same primitive too many times (at least in some cases) and
instead cache enough information to efficiently re-render the volume. This
should be especially useful for hard &quot;problem&quot; cases, such as the various
hacks we use to ensure sprites in caves lie on the floor.&lt;&#x2F;li&gt;
&lt;li&gt;Reimplement differences, using the fact that we have an explicit primitive to
efficiently mask it out by inverting it.&lt;&#x2F;li&gt;
&lt;li&gt;Also use the above technique when distributing intersections over unions (or
at least cache some information, such as data allocated in the arena, to avoid
exponential explosions in memory use).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As well as extra cleanup work:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Finish up filling in cost model details that have been omitted so far (since
it turned out that improving render performance was far more important than
getting the cost model correct given where we currently are).&lt;&#x2F;li&gt;
&lt;li&gt;Finish up work needed to make sure all values are validated on construction
and that we don&#x27;t have more than a handful of ways of directly constructing
the primitive.&lt;&#x2F;li&gt;
&lt;li&gt;Finish up making sure that correctly polarized combinations of unions and
intersections all actually &lt;em&gt;work&lt;&#x2F;em&gt; (this part is quite unfinished, since
validating the performance improvements only required dealing with the
patterns that we actually use so far).&lt;&#x2F;li&gt;
&lt;li&gt;Do a better job of avoiding recursion in common cases (this one may be hard).&lt;&#x2F;li&gt;
&lt;li&gt;Figure out a proper structure for the various kinds of heroic optimizations we
have, categorize them, and put them in their own files, so we can focus on
them individually rather than having gigantic, messy functions. Keep the core
loop of the interpreter small.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Overall, I am really excited about these (and future!) improvements, especially
in tandem with improvements elsewhere (such as the preliminary design of a site2
visual editor, hierarchical plots, and discussions about how better to handle
common cases like putting sprites on the floor and walls). Hopefully, these
improvements are able to make it into the game in some capacity within the next
month or two!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;991530075944144966&amp;#x2F;screenshot_1656469400734.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;update-1&quot;&gt;Update #1&lt;&#x2F;h4&gt;
&lt;p&gt;I seem to have gotten another order of magnitude performance win with the first
future work suggestion in the post (&quot;draw immediately&quot;).&lt;&#x2F;p&gt;
&lt;p&gt;New numbers (faster across the board, generally much faster, with roughly
equivalent geometry). The &quot;render&quot; is the relevant one here, the &lt;code&gt;generate_&lt;&#x2F;code&gt; are
testing something that only happens at server startup (AFAIK). Every site type
tested now renders in under 1ms &#x2F; chunk, and many of them run at around double
that speed (500 microseconds &#x2F; chunk). Giant trees, the surprise champions from
earlier, render in a ridiculous 40 microseconds &#x2F; chunk!  These numbers will
regress with proper segments, but not by nearly enough to lose our order of
magnitude improvements.&lt;&#x2F;p&gt;
&lt;p&gt;Below are some of the results of the benchmarks, but you can see the rest of
them &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;988921561769738270&#x2F;New_benchmarks&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;generate_city           time:   [19.520 ms 19.538 ms 19.559 ms]                          
&lt;&#x2F;span&gt;&lt;span&gt;                        change: [-0.3957% -0.1977% +0.0013%] (p = 0.05 &amp;gt; 0.05)
&lt;&#x2F;span&gt;&lt;span&gt;                        No change in performance detected.
&lt;&#x2F;span&gt;&lt;span&gt;Found 9 outliers among 100 measurements (9.00%)
&lt;&#x2F;span&gt;&lt;span&gt;  1 (1.00%) low severe
&lt;&#x2F;span&gt;&lt;span&gt;  2 (2.00%) low mild
&lt;&#x2F;span&gt;&lt;span&gt;  2 (2.00%) high mild
&lt;&#x2F;span&gt;&lt;span&gt;  4 (4.00%) high severe
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;render_city&#x2F;identity_allocator                                                                             
&lt;&#x2F;span&gt;&lt;span&gt;                        time:   [3.4023 ms 3.4114 ms 3.4207 ms]
&lt;&#x2F;span&gt;&lt;span&gt;                        thrpt:  [1.7540 Kelem&#x2F;s 1.7588 Kelem&#x2F;s 1.7635 Kelem&#x2F;s]
&lt;&#x2F;span&gt;&lt;span&gt;                 change:
&lt;&#x2F;span&gt;&lt;span&gt;                        time:   [-2.3020% -1.9525% -1.6172%] (p = 0.00 &amp;lt; 0.05)
&lt;&#x2F;span&gt;&lt;span&gt;                        thrpt:  [+1.6438% +1.9913% +2.3562%]
&lt;&#x2F;span&gt;&lt;span&gt;                        Performance has improved.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;generate_cliff_town     time:   [6.9444 ms 6.9518 ms 6.9609 ms]                                
&lt;&#x2F;span&gt;&lt;span&gt;                        change: [-0.2329% -0.0320% +0.1523%] (p = 0.75 &amp;gt; 0.05)
&lt;&#x2F;span&gt;&lt;span&gt;                        No change in performance detected.
&lt;&#x2F;span&gt;&lt;span&gt;Found 13 outliers among 100 measurements (13.00%)
&lt;&#x2F;span&gt;&lt;span&gt;  6 (6.00%) high mild
&lt;&#x2F;span&gt;&lt;span&gt;  7 (7.00%) high severe
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;render_cliff_town&#x2F;identity_allocator                                                                             
&lt;&#x2F;span&gt;&lt;span&gt;                        time:   [2.0587 ms 2.0692 ms 2.0800 ms]
&lt;&#x2F;span&gt;&lt;span&gt;                        thrpt:  [1.9230 Kelem&#x2F;s 1.9331 Kelem&#x2F;s 1.9430 Kelem&#x2F;s]
&lt;&#x2F;span&gt;&lt;span&gt;                 change:
&lt;&#x2F;span&gt;&lt;span&gt;                        time:   [-4.5641% -3.8519% -3.1480%] (p = 0.00 &amp;lt; 0.05)
&lt;&#x2F;span&gt;&lt;span&gt;                        thrpt:  [+3.2503% +4.0062% +4.7823%]
&lt;&#x2F;span&gt;&lt;span&gt;                        Performance has improved.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;generate_dungeon        time:   [4.2436 ms 4.2503 ms 4.2572 ms]                              
&lt;&#x2F;span&gt;&lt;span&gt;                        change: [+0.3002% +0.5213% +0.7344%] (p = 0.00 &amp;lt; 0.05)
&lt;&#x2F;span&gt;&lt;span&gt;                        Change within noise threshold.
&lt;&#x2F;span&gt;&lt;span&gt;Found 2 outliers among 100 measurements (2.00%)
&lt;&#x2F;span&gt;&lt;span&gt;  1 (1.00%) high mild
&lt;&#x2F;span&gt;&lt;span&gt;  1 (1.00%) high severe
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;update-2&quot;&gt;Update #2&lt;&#x2F;h4&gt;
&lt;p&gt;I just got a 5x improvement to forested chunks by (basically) rendering them
with site2 after my changes, even with the old segments algorithm!  Since tree
chunks are very common they tend to in practice be a huge bottleneck, so this is
a very welcome development. I still need to add back a bit of the old
functionality and figure out the differences between old and new tree rendering
to make this fully apples to apples, but I think that improvement will remain 🙂&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;That&#x27;s all of the updates on site2 performance, but @Sharp will be back in
later posts with more updates. Stay tuned!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;991085406529396776&amp;#x2F;Schermafdruk_van_2022-05-08_01-52-51.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A bright night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;991382805055537172&#x2F;Screenshot_2022-06-23_19-58-52.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 177</title>
          <pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-177/</link>
          <guid>https://veloren.net/blog/devblog-177/</guid>
          <description>&lt;p&gt;This week, we hear about how what @YuriMomo has been doing in the world of testing.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Imbris, @xMAC94x, @Sam, @XVar, @Ixxe,
@Maveth, @BrandonDyer, and @YuriMomo!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;this-week-in-testing-by-yurimomo&quot;&gt;This week in testing by @YuriMomo&lt;&#x2F;h3&gt;
&lt;p&gt;In his regular rounds as lead of Veloren&#x27;s testing working group, @YuriMomo got
the game server banned from using the Veloren&#x27;s login API.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;991061564872351744&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;988187156625383434&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In an interview with @YuriMomo, he promised to not take down auth for at least
one week.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;(@AngelOnFira) Hello, do you promise to not take down server auth for at least a week?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;(@YuriMomo) Yes, I promise 😄&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;991062568955174973&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;989944339851534426&#x2F;screenshot_1656091112019.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 176</title>
          <pubDate>Mon, 13 Jun 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-176/</link>
          <guid>https://veloren.net/blog/devblog-176/</guid>
          <description>&lt;p&gt;This week, we hear about more progress that has gone into the new weather system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Christof, @xMAC94x, @Isse, @zesterer, and @Sam!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;weather-by-isse&quot;&gt;Weather by @Isse&lt;&#x2F;h3&gt;
&lt;p&gt;Weather is getting closer! 🌧️ 🌦️&lt;&#x2F;p&gt;
&lt;p&gt;There will be different weather in different parts of the world at the same
time. And it will be consistent among all clients playing on a server. Right
now, the only variables for weather are clouds, rain, and wind. So the existing
clouds will now be controlled by the server. And you will also see rain, which
is affected by wind. And also some other cool effects that come with this.&lt;&#x2F;p&gt;
&lt;p&gt;More technical: The weather is built up of a grid of weather cells. Where each
cell has each of the variables cloud, rain, and wind. Each one of these weather
cells covers 16x16 chunks. Meaning that on a default world there are 64x64
weather cells.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;991057395323138089&amp;#x2F;PMVQ9At.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On the server, we have two new ECS systems for weather. One for simulating and
one for syncing, which are both run at regular time intervals of 5 seconds.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The simulation in this first implementation is simplified to using noise to
fill the weather cells with sensible values.&lt;&#x2F;li&gt;
&lt;li&gt;The syncing sends the weather grid to every connected client.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;On the client-side, we store three weather grids, with the latter two being the
last weather grids the server sent us. The third is created by linearly
interpolating between the two grids sent from the server. This smooths out the
weather between updates from the server. So now we have a grid of the current
weather on the server, but we still have the problem of getting the weather at a
specific location. This is done by bilinearly interpolating between the closest
four weather cells for that position. This weather value can give us the values
we need for playing sound, choosing music, etc.&lt;&#x2F;p&gt;
&lt;p&gt;The weather grid is also used to update a texture on the GPU. This texture is
then used for when the clouds are raytraced, and displaying the new rain. One
important thing when having a weather grid on both the GPU and CPU is making
sure that weather at certain positions lines up correctly. Which, in this case,
was solved by letting the world position (0, 0) be the center of the (0, 0)
cell.&lt;&#x2F;p&gt;
&lt;p&gt;Rain is drawn in the second pass in the same shader as clouds, meaning that we
have access to a depth buffer to make sure we don&#x27;t draw rain in front of
something when it should be behind. But there is another case where we shouldn&#x27;t
draw rain, that&#x27;s when it should be blocked by something. We solve this by
shadow mapping, yes the same shadow mapping we use for the sun.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;984244071696580608&amp;#x2F;rain_sun.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Shadows are similar to rain occlusion&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Much like sun light, rain can be simplified to a number of beams on a plane. So
we render depth of terrain and entities to a texture with an orthographic
projection rotated by the rain&#x27;s falling direction (Not actually using an
orthographic projection, but the same principle applies). Although in contrast
to shadows from the sun that take all loaded chunks into consideration, rain
occlusion only takes 9 chunks, and the entities in those chunks into
consideration.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;985294098401476648&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 175</title>
          <pubDate>Mon, 06 Jun 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-175/</link>
          <guid>https://veloren.net/blog/devblog-175/</guid>
          <description>&lt;p&gt;This week, we hear about an issue with memory leaking somewhere in the memory
pipeline.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Christof, @imbris, @XVar, @Slipped, and
@terrarier2111!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;982412916651327518&amp;#x2F;snap2022-06-03-19-33-23.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;veloren-memory-leak-by-yurimomo&quot;&gt;Veloren memory leak by @YuriMomo&lt;&#x2F;h3&gt;
&lt;p&gt;This week, @YuriMomo found a memory leak in the Veloren.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;983801120956751882&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As we can see, Veloren is taking up significantly more RAM than it should.
@YuriMomo dove deeper into the problem to diagnose it. They found that something
was constantly allocating 32 bytes each frame, which added up over time.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;983810471914254417&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Although this memory would be freed just fine after the game closes, it&#x27;s
clearly living for longer than it should. Ideally, it should be cleaned up after
each frame. A little more analysis lead to discovering this code:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;##[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;no_mangle&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub unsafe extern &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;wgpu_render_pass_push_debug_group&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pass&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; RenderPass,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span&gt;: RawString,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;color&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u32&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; bytes = ffi::CStr::from_ptr(label).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;to_bytes&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    pass.base.string_data.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;extend_from_slice&lt;&#x2F;span&gt;&lt;span&gt;(bytes);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    pass.base.commands.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(RenderCommand::PushDebugGroup {
&lt;&#x2F;span&gt;&lt;span&gt;        color,
&lt;&#x2F;span&gt;&lt;span&gt;        len: bytes.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(),
&lt;&#x2F;span&gt;&lt;span&gt;    });
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Which was passing information from Veloren to wgpu, the rendering API that
Veloren uses. Some more diagnostics were run, and @imbris mentioned that the
problem seemed to be deeper than what we have access to through just the wgpu API.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;983824982054408304&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This issue still has not been fully resolved, but more people on the team are
looking into parts of it. More to come in the future!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;982702411623850074&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying through the valley. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;975957428183117864&#x2F;screenshot_1652755723571.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 174</title>
          <pubDate>Mon, 30 May 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-174/</link>
          <guid>https://veloren.net/blog/devblog-174/</guid>
          <description>&lt;p&gt;This week, we hear about additions to the taming system. We also get to see some
of the progress of SFX with weather, and we see a prototype for a proposed UI
overhaul to Airshipper&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Makselord, @xMAC94x, @XVar,
@BenoîtduGarreau, @Christof, @Sam, @imbris, @zesterer, @Isse, @inojelis, and
@StereoJunkie!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;978765889530908672&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 40%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Taken by @KaliKatz, the Elbst is a fun mount, has a nice green glow with
lantern, and is a fav amongst pirates YARRRR&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;taming-special-animals-by-inojelis&quot;&gt;Taming special animals by @Inojelis&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on special animals that can be tamed and mounted. The MR was
merged!&lt;&#x2F;p&gt;
&lt;h4 id=&quot;taming&quot;&gt;Taming&lt;&#x2F;h4&gt;
&lt;p&gt;Now Hirdrasil, Catoblepas, and Mammoths (they&#x27;re going to become peaceful soon)
are not tameable, as they&#x27;re too overpowered for being used as pets. Medium
birds were also added as pets, but they&#x27;re not mountable at all.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mounting&quot;&gt;Mounting&lt;&#x2F;h4&gt;
&lt;p&gt;A mass limit was added for mouflon, holladon, and boar. Currently, the limit is
above the heaviest humanoids, as it is expected to be balanced in the future.
Most medium quadrupeds are still mountable. Small quadrupeds are now not
mountable except truffler (for all riders), holladons, and boar (with a mass
limit that I previously mentioned). Low quadrupeds are now not all rideable
except salamanders and tortoises.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;weather-sfx-by-daforlynx&quot;&gt;Weather SFX by @DaforLynx&lt;&#x2F;h3&gt;
&lt;p&gt;Over the past couple of months, a few of us have been working on weather sim.
That includes adding rain ambience SFX. The previous ambience system was
exclusive to wind and worked well enough. But I decided it needed a slight
rewrite to support multiple layers of sound at once.&lt;&#x2F;p&gt;
&lt;p&gt;The new system now supports rustling leaves, rain, rumbling thunder, and wind
(which now takes into account weather sim wind) all at the same time with volume
depending on certain factors. In the future, I envision the system also
supporting things like crowds and cave ambience, and possibly pseudo-directional
sounds like rivers. The music system can also detect weather, and some new
tracks by @Oolnokk have been added which are exclusive to rainy weather (one of
which can be heard in the clip).&lt;&#x2F;p&gt;
&lt;p&gt;In addition to the ambience changes, I added functionality for true UI SFX.
Before, these sounds played from the camera&#x27;s position instead of
&quot;omnisciently&quot;, which is most noticeable with the level-up sound. Now, the sound
properly plays in stereo. The same goes for inventory-related sounds, as well as
a new &quot;crafting&quot; SFX that happens when you craft an item - the first step to
button clicks and other UI SFX.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;979090460851191838&amp;#x2F;veloren-voxygen_220525113207.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;airshipper-ui-prototype-by-mark&quot;&gt;Airshipper UI prototype by @mark&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on a UI Concept prototype for an overhaul of Airshipper. I
focused on maintaining the main features of the launcher we have right now, but
during the wireframing process I realized there was space for much more.&lt;&#x2F;p&gt;
&lt;p&gt;Adding the links present in the website (game&#x27;s manual (book), contact info,
account details, and donations) to Airshipper makes for a handy user experience.
This turns it into a hub for everything someone might need, without having to go
back to the main page after downloading the game.&lt;&#x2F;p&gt;
&lt;p&gt;And because Veloren&#x27;s community is so heartwarming and interactive, I have also
added a &quot;Community Showcase&quot; section, so everyone can look at beautiful gallery
submissions while preparing to launch the game, as well as a new way to
differentiate patch notes from website content. The colors were supposed to
reflect the current daytime, but that&#x27;s still a WIP.&lt;&#x2F;p&gt;
&lt;p&gt;I am heavily inexperienced when it comes to coding in general, so this is just a
prototype for now, if you want to contribute anyhow, feel free to ping me on
Discord at @marcelompf c:&lt;&#x2F;p&gt;
&lt;p&gt;There is a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.figma.com&#x2F;proto&#x2F;kXWYc9pZS694jGTsMqbgnL&#x2F;Veloren---Airshipper-Revamp?node-id=10%3A500&amp;amp;scaling=scale-down&amp;amp;page-id=0%3A1&amp;amp;starting-point-node-id=1%3A2&quot;&gt;working Figma
prototype&lt;&#x2F;a&gt;
if you want to try clicking the buttons.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;979896453176647740&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;979896453751255140&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;979896454015492157&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;984118864893861958&amp;#x2F;screenshot_1654699658087.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An airship battle! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;982729036407136316&#x2F;screenshot_1654371231486.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 173</title>
          <pubDate>Mon, 23 May 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-173/</link>
          <guid>https://veloren.net/blog/devblog-173/</guid>
          <description>&lt;p&gt;This week, modular weapons were merged, and we learn about some changes that
will come from them. We also hear about how NPCs can now pick up items.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @zesterer, @Corvella, @imbris,
@xMAC94x, @Inojelis, @XVar, @chaserozon, @Euryn, @HugoPeixoto, @Slipped,
@samuellm, @s.grupinski, and @UncomfySilince!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;modular-weapons-by-sam&quot;&gt;Modular weapons by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;The modular weapons branch started a little over 10 months ago. What started as
a plan to simply implement the initial prototype created by @aweinstock quickly
expanded to require a rewrite the majority of the item code, and almost the
entirety of the crafting code.&lt;&#x2F;p&gt;
&lt;p&gt;Further, I had substantially underestimated the amount of models that would need
to be created (a total of 330 weapon models, and a few dozen more for the new
items were needed, a big thanks to @Gemu for creating all of them). All in all,
something that I had initially expected to take 3-4 months quickly came to
require much larger changes than I had been expecting.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;979838144864210944&amp;#x2F;screenshot_1653681930949.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;changes&quot;&gt;Changes&lt;&#x2F;h4&gt;
&lt;p&gt;3 new stats have been added to weapons: energy efficiency, buff strength, and
range. Energy efficiency reduces the energy cost and energy drain on abilities.
Buff strength increases the strength of debuffs applied through attacks, and of
buffs applied through auras. Range increases the range of melee attacks, the
speed of projectiles, shockwaves, and beam segments; and the radius of
explosions.&lt;&#x2F;p&gt;
&lt;p&gt;Most weapons have been migrated to new modular weapons. Modular weapons have two
parts: a primary and a secondary component (for swords, the blade, and hilt
respectively). The stats of the weapon depend on what components are used, for
example using a sabre blade when making a sword will increase the power of that
sword. The primary component is also made of some material, a kind of metal for
swords, axes, and hammers; and a kind of wood for bows, staves, and sceptres.&lt;&#x2F;p&gt;
&lt;p&gt;You can now craft most weapons that are in the game. This is done by combining
two components of the same toolkind at a crafting bench. Secondary components
can be directly crafted while primary components are created by combining a
material with a modifier (animal-related crafting ingredients, e.g. predator
claw, strong pincer, and a few others). Different components will affect stats
differently in the weapon.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;980212293788901466&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;npc-pickups-by-inojelis&quot;&gt;NPC pickups by @Inojelis&lt;&#x2F;h3&gt;
&lt;p&gt;My first big MR (for me at least, I&#x27;m not experienced in Open Source lol) was
finally merged 🥳&lt;&#x2F;p&gt;
&lt;p&gt;NPCs will now pick up items lying on the floor if there isn&#x27;t a threat. Thanks
to this, players can now heal their pets with potions or food. Also, this
removes the problem of using villages or travellers to get loot from hostile
entities.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;977131189351612476&amp;#x2F;Schermafdruk_van_2022-05-08_01-47-13.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Enjoying a campfire at night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;977126888843669504&#x2F;screenshot_1653035587683.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 172</title>
          <pubDate>Mon, 16 May 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-172/</link>
          <guid>https://veloren.net/blog/devblog-172/</guid>
          <description>&lt;p&gt;This week, we hear about performance improvements being made to the game server.
We also learn about balance changes to items and monsters. Finally, there is
some work being done on water caves.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @GLawrence, @Sam, @zesterer, @BryantDeters,
@xMAC94x, @holychowders, @Snowram, @Pfau, @HugoPeixoto, @Isse, @UncomfySilence,
@markobekko, and @CheukYinNg.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;performance-improvements-by-xmac94x&quot;&gt;Performance improvements by @xMAC94x&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;by moving chunk serialisation out of the hot loop&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;With the recent growth of our community, and hence our main game server, we were
in need of some performance improvements. One of those planned improvements was
moving the serialisation and compression of chunks out of the ECS. Serialisation
is the task of moving the chunk data into a format that can be sent over the
network from the server to the client.&lt;&#x2F;p&gt;
&lt;p&gt;For measuring the results we calculate a metric that basically says &quot;how many
cores would need to run at 100% when the game server would be under full load&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s assume we would have a 32 core server, that manages 37 ticks per second
(TPS) with an 28% CPU usage. 37 TPS means the game server is at &lt;code&gt;30TPS&#x2F;37TPS = 80%&lt;&#x2F;code&gt; of its maximum capacity. We can then look at the full system usage &lt;code&gt;28% &#x2F; 80% = 0.355&lt;&#x2F;code&gt;. That multiplied by our number of cores gives us &lt;code&gt;0.355 * 32 = 11.36&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;978711483443736646&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Graph of this tracked metric on our game server dashboard&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This means that under a full load of our server we would parallelize everything
to 35.5% and would reach a theoretical usage of 11 cores of our 32. For us as a
server owner, it&#x27;s important to optimize the software to parallelize more, as we
still have to pay for 32 cores, even though we only &quot;use&quot; 11 of them.&lt;&#x2F;p&gt;
&lt;p&gt;The numbers above were the status quo before moving chunk out of the hot game
loop. After the optimisation we reach a metric of 41.3%, or 13 cores. 2 cores
don&#x27;t sound much, but it&#x27;s a 15% improvement which will help us to keep the tick
times low and stabilize the server even with many people on it.&lt;&#x2F;p&gt;
&lt;p&gt;The cost for this optimisation is that chunk requests are now delayed up to half
a second due to clustering multiple requests and only serialising them once.&lt;&#x2F;p&gt;
&lt;p&gt;This optimisation is only part of a series of optimisations that were done and
will be written in smaller blog posts over the next weeks.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;balancing-by-chaseowski&quot;&gt;Balancing by @Chaseowski&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve made a bunch of balancing adjustments and tweaks, as well as redid or
edited a lot of descriptions for most items, I am now much happier with them and
item drop-rates etc now, but there&#x27;s always room for improvements!&lt;&#x2F;p&gt;
&lt;p&gt;This involves more headgear, necklace stat balances, and drop-rate changes to
items within enemy loot-pools, I also went ahead and moved some items around
(such as straw hat and wanderers). Adjusted loot tables and drop rates involve
creatures like rats, wolves, pirates, yaks, cattle, highland, salamander, and
elbst.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;ll see a drastic change in Crown and Pirate Hat drop rates as well for those
grinding those too 👀 You&#x27;ll also notice changes to items tiers&#x2F;color that
should match how hard they are to get, or how good they are!&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s also a ton of other stuff, and there are over 123 changes to everything
I did in total. I think I&#x27;ve covered the gist of them all here, but I am very
excited to see how they work out! Enjoy!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;975607839898861628&amp;#x2F;screenshot_1652673353151.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;water-caves-by-isse&quot;&gt;Water caves by @Isse&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on water caves. So now instead of a cave entrance in oceans
being blocked off, you&#x27;ll be able to enter. (Entrances in lakes will still be
blocked off because of issues relating to water going through a cave to a lower
altitude)&lt;&#x2F;p&gt;
&lt;p&gt;Right now they aren&#x27;t filled with anything that makes them any more interesting
than normal caves, but that will hopefully change soon.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;975414290506981396&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;975412580673814578&amp;#x2F;Screen_Shot_2022-05-15_at_16.25.02.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The darkest of caves. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;977043940983341096&#x2F;screenshot_1653015734753.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 171</title>
          <pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-171/</link>
          <guid>https://veloren.net/blog/devblog-171/</guid>
          <description>&lt;p&gt;This week, we hear about the new LoD Object system. There are also more cool
images this week!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @xMAC94x, @holychowders, @Isse,
@Treeco, @Anton, @markobekko, @AngelOnFira, @imbris, and @Sam!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lod-objects-by-zesterer&quot;&gt;LoD Objects by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on an LoD object system. The obvious first candidate for this
system are trees.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;973553235040276520&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The LoD system pre-generates the position and kind of trees (and other objects)
on the server, but not the models themselves (doing so would be very costly).
This allows Voxygen to add a cheap placeholder model. At a distance, these look
sufficiently like the real thing to be passable. The net effect is that the
scale of distant terrain is more obvious. I&#x27;ve also been very surprised by just
how many trees Veloren&#x27;s world has!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;973553994125439006&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;973553995308228729&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;headwear-pieces-by-albinoaxolotl&quot;&gt;Headwear pieces by @AlbinoAxolotl&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;972363580844441690&amp;#x2F;snap2022-05-07-00-50-06.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;972363581133828116&amp;#x2F;snap2022-05-07-00-51-58.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;972363581393870879&amp;#x2F;snap2022-05-07-00-59-33.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;972363581679095848&amp;#x2F;snap2022-05-07-01-05-24.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;972549415489376276&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A sneak peak of modular weapons. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;973553994750382170&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>War in Ukraine</title>
          <pubDate>Wed, 04 May 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/ukraine/</link>
          <guid>https://veloren.net/blog/ukraine/</guid>
          <description>&lt;p&gt;&lt;em&gt;The following was written by @JulianCoffee, an active contributor to Veloren.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On 24th February, in Kyiv I woke up earlier than usual because my parents were
chaotically searching something in closets.
&lt;br&gt;
My uncle in town near Kyiv, who left
Russia years ago, woke up earlier than usual because of sounds of explosions and
was trying to leave his home.
&lt;br&gt;
My grandfather in town near Kherson woke up
earlier than usual because of sound of Russian tanks moving.
&lt;br&gt;
Millions of people
in Ukraine woke up earlier than usual that day, because Russia went for
full-scale war against Ukraine.&lt;&#x2F;p&gt;
&lt;p&gt;Do you know what war looks like?
&lt;br&gt;
Imagine that 9&#x2F;11 happens multiple times per
day in hundred of towns.
&lt;br&gt;
Imagine that people leaving its home to save their
families.
&lt;br&gt;
Imagine that in blocked cities people don&#x27;t have water, roof, medicine
and food.
&lt;br&gt;
Imagine that children became orphans because their father was killed
by enemy soldier and his mother was raped and then killed.
&lt;br&gt;
There is no war
without war crimes, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;oJHhB85huXQ&quot;&gt;like in Bucha&lt;&#x2F;a&gt;.
&lt;br&gt;
If you can&#x27;t
imagine that, that probably good at least for you.&lt;&#x2F;p&gt;
&lt;p&gt;At first day I explored shelters near my home. While I was coming from one of
them, I heard sound of flying missile. People run in panic back to shelter. And
I should say that sound of flying missile is just sound of something moving
fast, so I was in fear for my life each time I heard regular car moving.&lt;&#x2F;p&gt;
&lt;p&gt;At
second day when I heard sound of air alarm, I run to shelter and I saw
helicopter moving above us. And the most scary thing is that I had no idea which
side this helicopter belongs to and whether I will be able to run to shelter or
will die right there. When I got to shelter I was told that helicopter was
Ukrainian helicopter specialised on emergency situations.&lt;&#x2F;p&gt;
&lt;p&gt;For me the war is just
pure chaos and understanding that most elementary things might vanish. At second
day I didn&#x27;t have electricity and most markets were closed, partly because
workers were scared of leaving their houses, partly because people bought
everything at first day and logistic to deliver food just died as everything
else. By some luck, I managed to leave Kyiv at second day and move to West of
Ukraine. I can&#x27;t return to my home, but I want it so much.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to help Ukraine and stop this war, you can in multiple ways!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Please, call this war, not &quot;conflict&quot; or &quot;military operation&quot;. Yes, word &quot;war&quot;
is scary as it is.&lt;&#x2F;li&gt;
&lt;li&gt;You can donate, for example &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Ukraine&#x2F;status&#x2F;1505513001742487555&quot;&gt;here&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;putina.net&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. Don&#x27;t donate to International Committee of the Red Cross, because it&#x27;s unclear were money will go. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rada.gov.ua&#x2F;en&#x2F;news&#x2F;News&#x2F;220991.html&quot;&gt;Maybe to Russia?&lt;&#x2F;a&gt; (&quot;International&quot; part is important, there are different ones, like Ukrainian Red Cross Society)* Boycott companies that sponsor Russia by continuing working there, like Leroy Merlin.&lt;&#x2F;li&gt;
&lt;li&gt;Go for protests, asking your government for stronger actions.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Слава Україні! Жыве Беларусь!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;444005079410802699&#x2F;963927545672241212&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 170</title>
          <pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-170/</link>
          <guid>https://veloren.net/blog/devblog-170/</guid>
          <description>&lt;p&gt;This week, we have a lot of exciting images to check out!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @holychowders, @xMAC94x, @Isse,
@ClaryChevry, @EnriqueAM, and @DrDystopia!&lt;&#x2F;p&gt;
&lt;p&gt;@Gemu has been working on some Wyvern models.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;974426698714075176&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof worked on smoke strength and color variations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;970447993008422963&amp;#x2F;970448607524319272&amp;#x2F;screenshot_1651442457135.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James has been working on a rib cage generator that can generate some fun
variations. These will be used in adlet fortresses.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;974427504943181942&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rib cages to discover. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;971196134913622106&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 169</title>
          <pubDate>Mon, 25 Apr 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-169/</link>
          <guid>https://veloren.net/blog/devblog-169/</guid>
          <description>&lt;p&gt;This week, we hear about some balances to arthropods. We also hear a bit about
bank storage.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Anton, @Christof, @Sam, and
@UncomfySilence!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;968242028007800913&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The map for the future 0.13 release party&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@ubruntu has been working on bank storage, which is a separate inventory that
players will be able to access in towns to store excess items. Credit goes to
@Toaster for the sprite model.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;968263877269803078&amp;#x2F;screenshot_1650920663491.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There was also another Veloren Code Review stream. In this episode, @Sam brought
us through a merge request about how damage numbers show on screen.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;keI0VpjkgZg&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;arthropods-and-the-harvester-uncomfysilence&quot;&gt;Arthropods and the Harvester @UncomfySilence&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve made a small balance tweaks branch which touches upon a couple of things
that weren&#x27;t quite right nor was I happy with.&lt;&#x2F;p&gt;
&lt;p&gt;As part of this, I&#x27;ve finally rebalanced arthropods, so the long pain in finally
over. It took considerably longer than expected due to multiple things so I&#x27;m
incredibly sorry for the wait. I also ended up changing the stats for most hats
so that they&#x27;re better befitting of their rank alongside more specialized stats,
so I&#x27;d suggest checking them out and comparing!&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also adjusted the stats of the Harvester so that it has roughly the same
difficulty as a T4 boss. To hinder even more feature creep I am planning on
making another MR which will give the Harvester a new set of skills to make sure
that it&#x27;s as threatening as possible.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;966217137666531378&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Dinner time! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;964850225535655996&#x2F;screenshot_1650108494806.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 168</title>
          <pubDate>Mon, 18 Apr 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-168/</link>
          <guid>https://veloren.net/blog/devblog-168/</guid>
          <description>&lt;p&gt;This week, we hear about loadouts and livestreams that @JulianCoffee has been
doing.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @xMAC94x, @Anton, @Leonic, @Plright,
@Vlad, @aflyingpumpkin, and @flo!&lt;&#x2F;p&gt;
&lt;p&gt;A new Veloren Reading Club is out, this time with @imbris! This week, we
explored Veloren&#x27;s graphics pipeline. We worked on refactoring particles, and
how they re-create their buffer every frame.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;ff9EXhCXmFY&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;livestreams-and-loadouts-by-juliancoffee&quot;&gt;Livestreams and loadouts by @JulianCoffee&lt;&#x2F;h3&gt;
&lt;p&gt;So, this MR happens to be my 100th. And to make it more special, I wanted to
make &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;playlist?list=PLaf5k0VHJogKIWxTidcDvMqEcrxuIUzq5&quot;&gt;a live coding
playlist&lt;&#x2F;a&gt;
of me making it and trying to explain what I am doing. It mostly covers handling
errors in Rust, a bit about traits, and type conversions via From&#x2F;Into traits.
For Veloren it is mostly concentrated on our assets system and Serde (library
for serialisation and de-serialisation). I wanted to record full work and
mention review process, but then war happened, so sorry for the incomplete
playlist.&lt;&#x2F;p&gt;
&lt;p&gt;As for what has changed, we can now create the following loadout config.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;##![&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;enable&lt;&#x2F;span&gt;&lt;span&gt;(implicit_some)]
&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    inherit: Combine([
&lt;&#x2F;span&gt;&lt;span&gt;        Asset(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;test.loadout.ok.just_crafted_rings&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;),
&lt;&#x2F;span&gt;&lt;span&gt;        Choice([
&lt;&#x2F;span&gt;&lt;span&gt;            (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, Asset(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;test.loadout.ok.just_ori_armor&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)),
&lt;&#x2F;span&gt;&lt;span&gt;            (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, Asset(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;test.loadout.ok.just_dragonscale&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)),
&lt;&#x2F;span&gt;&lt;span&gt;        ]),
&lt;&#x2F;span&gt;&lt;span&gt;        Asset(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;test.loadout.ok.just_butterfly_gliders&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;),
&lt;&#x2F;span&gt;&lt;span&gt;        Asset(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;test.loadout.ok.just_lanterns&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;),
&lt;&#x2F;span&gt;&lt;span&gt;    ]),
&lt;&#x2F;span&gt;&lt;span&gt;    active_hands: [
&lt;&#x2F;span&gt;&lt;span&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, (
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.items.weapons.sword.caladbolg&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;            None,
&lt;&#x2F;span&gt;&lt;span&gt;        )),
&lt;&#x2F;span&gt;&lt;span&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, (
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.items.weapons.bow.sagitta&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;            None,
&lt;&#x2F;span&gt;&lt;span&gt;        )),
&lt;&#x2F;span&gt;&lt;span&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, (
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.items.weapons.hammer_1h.orichalcum-0&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.items.weapons.hammer_1h.orichalcum-0&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        )),
&lt;&#x2F;span&gt;&lt;span&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, (
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.items.weapons.axe_1h.orichalcum-0&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;common.items.weapons.shield.shield_1&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        )),
&lt;&#x2F;span&gt;&lt;span&gt;    ],
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The most notable thing is inheriting, yes, you can now reuse available loadouts
in other loadouts. Also, the way of handling weapons is improved, as you can see
we can have paired weapons or just one two-handed weapon. (Pirates that can
switch between paired swords and bows when?) And there is more!&lt;&#x2F;p&gt;
&lt;p&gt;If you have any questions, feel free to ping me on the Veloren Discord!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;965040666440773652&amp;#x2F;screenshot_1650153944572.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Out for a midnight ride. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;967749775220940800&#x2F;screenshot_1650799860643.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 167</title>
          <pubDate>Mon, 11 Apr 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-167/</link>
          <guid>https://veloren.net/blog/devblog-167/</guid>
          <description>&lt;p&gt;This week, we see a breakdown of the finances over the last several months.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @juliancoffee, @imbris, @xMAC94x, @Sam,
@holychowders, and @oversram!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;finances-by-angelonfira&quot;&gt;Finances by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;I recently went and took care of several months of finances. You can see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;spreadsheets&#x2F;d&#x2F;1Fk6kDsCdZLhVszXdsWUjoG4Cgc3cLbTqJgZ-gY3Ndq0&#x2F;edit#gid=0&quot;&gt;the
results
here&lt;&#x2F;a&gt;
(please feel free to reach out if you come across any discrepancies). Since
there were several months of invoices to process, it resulted in over $1,200 USD
being expensed from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;opencollective.com&#x2F;veloren&#x2F;expenses&quot;&gt;the Veloren Open
Collective&lt;&#x2F;a&gt;. Currently, Veloren is
paying for services from Hetzner (compute), Wasabi (storage), and OVH (temporary
download server).&lt;&#x2F;p&gt;
&lt;p&gt;Below, you can see the revenue from Open Collective over each month. We can see
that most months are around $200 USD, but we had some large donations in
November and December of 2021. We also can see that in 2022, we&#x27;re trending
towards $250 each month.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;966856113599430686&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Over time, our monthly Hetzner bill has increased. This is because we&#x27;ve had to
provision progressively more powerful game servers. Currently, we&#x27;re at the
highest tier that Hetzner provides for normal cloud servers, and this lets us
handle around 100 players at once. Ideally, the next level after this is
distributing to multiple servers.&lt;&#x2F;p&gt;
&lt;p&gt;Altogether, we seem to be trending upwards in the number of people who donate.
In the near future, I hope that this will help us host more servers around the
world with confidence that we&#x27;ll be financially stable enough to keep them
going. And of course, as always, donations are always appreciated!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;965645526735388691&#x2F;screenshot_1650298194861.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 166</title>
          <pubDate>Mon, 04 Apr 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-166/</link>
          <guid>https://veloren.net/blog/devblog-166/</guid>
          <description>&lt;p&gt;This week, we see Veloren&#x27;s participation in &#x2F;r&#x2F;place. We also have a new
Veloren Reading Club episode out!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @JakobDev, @James, @Sam, and
@Tormod!&lt;&#x2F;p&gt;
&lt;p&gt;Last weekend, Veloren participated in Reddit&#x27;s &#x2F;r&#x2F;place project. Veloren was
able to get a spot on the map by allying with &#x2F;r&#x2F;Rust and building beside them.
A template was created so that everyone in the area could know what colours to
place, which made it easy to protect the area. It was a lot of fun, and we got a
pretty great result eternalized in the final image (before the destruction of
the whole map 😛).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;962418544564379698&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 70%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Day one on the left, day two on the right.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;If you missed it, be sure to check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;veloren-direction&quot;&gt;Veloren&#x27;s April Fools post&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-reading-club-7-by-aweinstock&quot;&gt;Veloren Reading Club #7 by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;This week, another Veloren Reading Club was held! The topic was profiling
Veloren with the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wolfpld&#x2F;tracy&quot;&gt;Tracy profiler&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;-w0yTCjsV0k&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As a supplement to the talk, here are some commands to follow along and try
Tracy yourself:&lt;&#x2F;p&gt;
&lt;p&gt;Compiling and running Tracy:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span&gt; clone https:&#x2F;&#x2F;github.com&#x2F;wolfpld&#x2F;tracy
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; tracy
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span&gt; checkout tags&#x2F;v0.7.8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -b&lt;&#x2F;span&gt;&lt;span&gt; tags_v0.7.8
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; profiler&#x2F;build&#x2F;unix
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;make
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;.&#x2F;Tracy-release
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Compiling and running Veloren with Tracy support:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; --features&lt;&#x2F;span&gt;&lt;span&gt;=tracy&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; --bin&lt;&#x2F;span&gt;&lt;span&gt; veloren-server-cli
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; --features&lt;&#x2F;span&gt;&lt;span&gt;=tracy&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; --bin&lt;&#x2F;span&gt;&lt;span&gt; veloren-voxygen
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Running Veloren&#x27;s &quot;swarm&quot; client (requires running the server with --no-auth
and making swarm0 an admin):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; --features&lt;&#x2F;span&gt;&lt;span&gt;=&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;bin_bot tick_network&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; --bin&lt;&#x2F;span&gt;&lt;span&gt; swarm
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;962236741522173982&#x2F;screenshot_1649484859373.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>[April Fools] Need for Voxels: Veloren Cart</title>
          <pubDate>Fri, 01 Apr 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/veloren-direction/</link>
          <guid>https://veloren.net/blog/veloren-direction/</guid>
          <description>&lt;h2 id=&quot;veloren-s-new-direction&quot;&gt;Veloren&#x27;s New Direction&lt;&#x2F;h2&gt;
&lt;p&gt;Since Veloren&#x27;s inception, people have seen Veloren as heavily inspired by Cube
World. Today, we&#x27;re excited to fully break away from this lineage as we announce
the new direction of the project: &lt;strong&gt;Need for Voxels: Veloren Cart&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Market research shows that the most potential for a voxel game is in the casual
gaming market. That means games that can be played for a quick 15-30 minute
session and put down afterward. However, role-playing games, which are
grinding-focused, do not fit so well into this category. Therefore, we decided to pivot
the core mechanics to focus on racing.&lt;&#x2F;p&gt;
&lt;p&gt;This change will give you the opportunity to join the new world of &lt;strong&gt;Need for
Voxels: Veloren Cart&lt;&#x2F;strong&gt; in a race with up to 2,000 players through the places you
love: gigantic cities, scary dungeons, and on a moving airship! Not only this,
but we&#x27;ll be able to re-use many of our models from Veloren, so you&#x27;ll be able
to race while riding horses, fish, and spiders. The planned release date will be
in exactly one year, on &lt;strong&gt;2023-04-01&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;726090746528268429&amp;#x2F;959475017341608056&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;726090746528268429&#x2F;959490907122569246&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 165</title>
          <pubDate>Mon, 28 Mar 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-165/</link>
          <guid>https://veloren.net/blog/devblog-165/</guid>
          <description>&lt;p&gt;This week, we hear about the new GitHub Releases system for game updates through
Airshipper. We also hear about how the 0.13 release map will look, and about CliffTowns.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @jh0l, @Sam, @xMAC94x, @JackHollisLondon,
@ubruntu, @InfRandomness, @James, @Slipped, and @holychowders!&lt;&#x2F;p&gt;
&lt;p&gt;@Inojelis was continuing my work on making agents pick up items (ItemDrops).
This week they worked on making agents walk right to the ItemDrops. @Christof
just parallelized economic simulation - shortening server startup time (by a
small fraction) - but this prepares for adding more Goods (econsim groups of
items).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;github-releases-by-shouvik&quot;&gt;GitHub Releases by @Shouvik&lt;&#x2F;h3&gt;
&lt;p&gt;I worked on setting up GitHub releases for Veloren. We can use GitHub as a
faster and more stable backend for downloading files. Earlier, many users had
sporadic issues with bad connections and aborting updates in Airshipper. Those
should be gone now. Users outside of Europe can especially profit from this fix.&lt;&#x2F;p&gt;
&lt;p&gt;Setting this up involved using the Octocrab crate for uploads, and making
changes to Airshipper&#x27;s database and URL structure.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;incremental-airshipper-updates-by-aweinstock&quot;&gt;Incremental Airshipper updates by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;@XVar and I have been experimenting with packing extra metadata to facilitate
incremental Airshipper updates into standard zip files. Currently, Airshipper
downloads an entire ~224MB zip containing all the binaries and assets for each
update. Since GitHub Releases supports HTTP range requests, and since zip
supports random access to contained files, if the offsets of files within the
zip that have changed are known--, it&#x27;s possible to save bandwidth by only
downloading those files from the zip.&lt;&#x2F;p&gt;
&lt;p&gt;Since zip&#x27;s central directory supports adding a &quot;comment&quot; field containing
arbitrary metadata, we can store hashes there to detect which files need to be
redownloaded before downloading them. Since it&#x27;s possible to pack a file at the
beginning of a zip that&#x27;s not indexed in the central directory, it&#x27;s possible to
prefix enough metadata to the zip to locate the central directory in one
additional range request.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;0-13-release-map-by-hannibal&quot;&gt;0.13 Release Map by @Hannibal&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on the next release party map that will also serve as a
mockup. This map&#x27;s theme is JUNGLE!!! 🥳 🥳 This time, the party map will be an
entire island. That way, its placement in the water will look less odd than the
desert city did.&lt;&#x2F;p&gt;
&lt;p&gt;Things to expect:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Lots of trees!&lt;&#x2F;li&gt;
&lt;li&gt;Jungle temples!&lt;&#x2F;li&gt;
&lt;li&gt;Tribal villages&lt;&#x2F;li&gt;
&lt;li&gt;Treehouses&lt;&#x2F;li&gt;
&lt;li&gt;Secret areas 👀&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A first tiny look at the map (although there is much to do!):&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;958016002300473484&amp;#x2F;snap2022-03-28-16-42-42.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;958094590789951498&amp;#x2F;snap2022-03-28-22-05-33.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;clifftowns-by-floppy&quot;&gt;CliffTowns by @floppy&lt;&#x2F;h3&gt;
&lt;p&gt;Under @Gemu&#x27;s artistic supervision and with patient guidance from @zesterer,
@Isse, and others, I have been working on CliffTowns, Hoodoo&#x2F;Arabic inspired
towns for mountain regions. CliffTowns&#x27; houses are natural structures of
sedimentary stone layers, inhabited by Mountaineer NPCs. @MerlinMan created the
great furniture assets.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;958414703422480384&amp;#x2F;Screenshot_from_2022-03-29_19-02-46.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;958414703762231356&amp;#x2F;Screenshot_from_2022-03-29_19-13-48.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;958414704173268992&amp;#x2F;Screenshot_from_2022-03-29_19-15-55.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Living in a cliff town. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;959177283841712279&#x2F;screenshot_1648756040012.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 164</title>
          <pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-164/</link>
          <guid>https://veloren.net/blog/devblog-164/</guid>
          <description>&lt;p&gt;This week, we see some work being done on modular weapons and hear about
Veloren&#x27;s talk at Rust in Arts.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @XVar, @xMAC94x, @holychowders,
@AndrzejDrabarek, @Christof, @imbris, @James, @Mehmet-dev, @Mel!&lt;&#x2F;p&gt;
&lt;p&gt;@batvin123 got crafty, and put the Linux, Windows, and MacOS versions of the
launcher for Veloren on a cd-r. Now they can play the game like they were back
in the early 2000s or 90s!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;953694691768037446&amp;#x2F;IMG_20220315_205631.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;modular-weapon-tooltips-by-ubruntu&quot;&gt;Modular weapon tooltips by @ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;I worked on tooltips for modular weapon components. Not all the models are in
yet and the numbers need balancing, but now they display new stats. Also, the
item-kind text (e.g. &#x27;Fire staff Component&#x27; in this example) is dynamically
generated and i18n friendly.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;955178634904231976&amp;#x2F;sfc.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;rustfest-2021&quot;&gt;RustFest 2021&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;959070502448660480&amp;#x2F;maxresdefault.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Back in November of 2021, Veloren spoke at Rust in Arts with a &quot;Director&#x27;s
Commentary&quot; of the game. The talk was just released on YouTube, and you can
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rustfest.global&#x2F;session&#x2F;53-directors-commentary-veloren&#x2F;&quot;&gt;watch it
here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;954870205128003584&amp;#x2F;2022-03-20_00-22-11.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A golden sunrise. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;955066087001706516&#x2F;screenshot_1647775767696.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 163</title>
          <pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-163/</link>
          <guid>https://veloren.net/blog/devblog-163/</guid>
          <description>&lt;p&gt;This week, we hear about some work on the audio system. We also look at some of
the stats from last week&#x27;s post on Hacker News.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Tormod, @DaforLynx, @Sam, @Isse,
@zesterer, @Slipped, @xMAC94x, and @Treeco!&lt;&#x2F;p&gt;
&lt;p&gt;@ubruntu worked on adding decorations and sprites to houses and learning site2
as they go.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;950797998382784553&amp;#x2F;screenshot_1646461498968.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;audio-work-by-daforlynx&quot;&gt;Audio work by @DaforLynx&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve merged a bunch of audio work. I fixed the swimming sounds from playing too
unevenly and fixed the glider closing and opening sounds not playing at the
right times. I also made it so faster segments of rivers (i.e. most of them)
make a &quot;rushing river&quot; sound, while slow-flowing river segments make the old
&quot;bubbling&quot; sound. Keep in mind that river speed currently has no effect on
gameplay outside of worldgen and these sounds.&lt;&#x2F;p&gt;
&lt;p&gt;Lastly, I added sounds to the gliding that makes it sound like the cloth of the
glider is flapping in the wind. It&#x27;s very subtle, but it should add a bit more
auditory interest to long glides. Also, town music is back after being broken by
site2 towns :)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hacker-news-stats-by-angelonfira&quot;&gt;Hacker News stats by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;This week, a post about Veloren reached the top of Hacker News for half a day.
You can &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=30667022&quot;&gt;read the post&lt;&#x2F;a&gt; if you
like. The comment section had quite a few good discussions, and I took the time
to answer several questions myself. Out of interest, I wanted to see how the
post affected our YouTube views. Below is an image of the stats:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;952959000058675230&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;952752275451949107&#x2F;screenshot_1647224145136.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 162</title>
          <pubDate>Mon, 07 Mar 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-162/</link>
          <guid>https://veloren.net/blog/devblog-162/</guid>
          <description>&lt;p&gt;This week, we hear about a bug in Airshipper. We also explore some of the
difficulties of running Veloren on the Steam Deck.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Dr.Dystopia, @Christof, @xMAC94x,
@Isee, @Pfau, @DaforLynx, @imbris, @zesterer, @Slipped, and @ninefox!&lt;&#x2F;p&gt;
&lt;p&gt;@Isse has been working on creating new rocks that will be scattered across the
world.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;954021910444908594&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;airshipper-0-7-0-release&quot;&gt;Airshipper 0.7.0 release&lt;&#x2F;h3&gt;
&lt;p&gt;We&#x27;ve released a new Airshipper version that makes launching Veloren even better:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Changelog is rendered&lt;&#x2F;li&gt;
&lt;li&gt;Ability to specify ENV variables in airshipper.&lt;&#x2F;li&gt;
&lt;li&gt;Heavy under the hood maintenance to improve in the future.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;ACTION REQUIRED&lt;&#x2F;strong&gt;: Please upgrade ASAP as the old Airshipper 0.6 will no longer work in a few days. You can read the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;veloren&#x2F;Airshipper&#x2F;releases&#x2F;tag&#x2F;v0.7.0&quot;&gt;release notes here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;airshipper-fixes-by-xmac94x&quot;&gt;Airshipper fixes by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;This week we had a silent bug at Airshipper which was seen during some testing.
Our GitLab jobs reached the 2,147,483,647 barrier. That is a common number for
computer engineers, for example, until 2014 it wasn&#x27;t possible for a YouTube
video to get more than this number of views.&lt;&#x2F;p&gt;
&lt;p&gt;Back then google faced a similar issue than we faced, if a video would get more
than this number of views, it would overflow the possible 32-bit number range
and would be -2,147,483,648. Luckily neither YouTube nor Veloren faced an
outage. We were able to patch a version overnight before the weekly Thursday
release by increasing the number to 64-bit. Our new limit is
9,223,372,036,854,775,807, roughly the number of sand grains on earth.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;re also preparing for better multi-architecture and multi-channel support. In
the future, it will be possible to use Airshipper to download different versions
of Veloren and also historic versions. The groundwork for this feature has been
made and the feature will probably come within the next weeks.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-on-steam-deck-by-angelonfira&quot;&gt;Veloren on Steam Deck by @AngelOnFira&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;949052406740684840&amp;#x2F;steamdeck4.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Last week, I got my Steam Deck in! One of the first things I wanted to try was
running Veloren on it, and seeing what the process of getting into the game was.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren isn&#x27;t on Steam (yet), but the Steam Deck does have a cool feature where
you can add applications from the desktop mode. And since Steam OS runs on Arch
Linux, the process of installing Veloren isn&#x27;t so difficult. In the desktop mode
of the deck, I was able to go to the software store and find it without too much
difficulty.&lt;&#x2F;p&gt;
&lt;p&gt;However, after I got the game installed, there were many issues that arose that
would prevent people from playing the game with ease. First off, it seems that
the flatpak version of the game doesn&#x27;t allow permissions for controller input
to work. We had to download Airshipper manually and launch the game through it
outside of the flatpak version.&lt;&#x2F;p&gt;
&lt;p&gt;Then, it tends to run alright. The controller maps pretty nicely to the inputs
of the game, however, there are interactions that it&#x27;s much more difficult to
achieve on the Deck. Either the UX can&#x27;t be navigated easily enough, or it&#x27;s not
clear how to achieve something.&lt;&#x2F;p&gt;
&lt;p&gt;We mostly saw around 60fps while playing, although in multiplayer on the main
server, we experienced closer to 40fps, and some issues with networking.
Although this could also be because I&#x27;m located in North America, and the server
in Germany.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;949049925134606356&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;If you want to see more about the problems, you can check out the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1486&quot;&gt;tracking
issue&lt;&#x2F;a&gt; and the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;blfrIqxgR7GtMZY9QW9Bjg&quot;&gt;notes
doc&lt;&#x2F;a&gt;. Moving forward, we want to
explore how to create a more clear UI&#x2F;UX for controller-first experiences. We
also want to explore what graphics settings might be best for this hardware,
since it could be standardized quite easily.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;950793104997355540&#x2F;screenshot_1646700910990.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 161</title>
          <pubDate>Mon, 28 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-161/</link>
          <guid>https://veloren.net/blog/devblog-161/</guid>
          <description>&lt;p&gt;This week, we have another code reading club to watch. Work is being done on pet
healing, and how sites are placed.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @ninefox, @Slipped, @ubruntu,
@InfRandomness, @zesterer, @bwerf, @xMAC94x, @inojelis, @Sam, @floppy!&lt;&#x2F;p&gt;
&lt;p&gt;@ubruntu got players to now heal their pets as well as themselves when sitting
at a campfire. @tormeh has been working on sites. Giant trees, castles, towns,
and other sites should now be placed more appropriately, both in regards to
terrain and each other.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-reading-club-6&quot;&gt;Veloren Reading Club #6&lt;&#x2F;h3&gt;
&lt;p&gt;This week, another reading club was recorded! In this one, we learned about some
internals of Git, and how to move around different workflows. We also learned
about how the economy sim for Veloren is designed.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;MbiLZvuBLzc&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;949719635199152209&amp;#x2F;veloren_npc_secret_club.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A shady deal is happening out back of the inn&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;947434207523778590&#x2F;screenshot_1644109643614.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 160</title>
          <pubDate>Mon, 21 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-160/</link>
          <guid>https://veloren.net/blog/devblog-160/</guid>
          <description>&lt;p&gt;The Veloren core developers condemn the aggressive and unprecedented invasion of
Ukraine and the violence committed toward its people on the orders of Vladimir
Putin. We also wish to make clear that Russian people continue to be welcome in
the Veloren community, as ever, and that we do not consider them in any way
accountable for the unaccountable and unforgivable actions of Vladimir Putin.&lt;&#x2F;p&gt;
&lt;p&gt;- Veloren team&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @imbris, @inojelis, @IseeW,
@zesterer, @Slipped, @James, @Pfau, @shouvik, @Treeco, @floppy!&lt;&#x2F;p&gt;
&lt;p&gt;This week, Veloren 0.12 was released! You can check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-12&quot;&gt;the release blog post
here&lt;&#x2F;a&gt;. We broke our previous release party
record with 195 players online at peak.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;948188626502713364&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;veloren-0-12-dev-chats&quot;&gt;Veloren 0.12 Dev Chats&lt;&#x2F;h3&gt;
&lt;p&gt;For the 0.12 release, some of the core developers streamed another &quot;dev chats&quot;.
We looked at the map used for the release party, and gnarling forts.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;zLraJC8pnbo&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;veloren-mastodon&quot;&gt;Veloren Mastodon&lt;&#x2F;h3&gt;
&lt;p&gt;I created a Mastodon account for Veloren
(&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.technology&#x2F;@veloren&quot;&gt;@veloren@mastodon.technology&lt;&#x2F;a&gt;) to better
communicate with our FOSS friends. For those unfamiliar, Mastodon is an open
source decentralized microblogging platform. We will be posting updates there in
addition to our current use of Reddit and Twitter.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-gsoc&quot;&gt;Veloren GSoC&lt;&#x2F;h3&gt;
&lt;p&gt;Veloren is applying for Google Summer of Code! Although we haven&#x27;t been accepted
yet, we still have planned many areas where potential work on Veloren could
happen. To learn more, you can &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;gsoc-contribution-guide&quot;&gt;read the blog
post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;943892674652565514&amp;#x2F;screenshot_1645111800011.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A Gnarling stalker out and about. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;944691607448461372&#x2F;screenshot_1645294763186.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>GSoC 2022 Contribution Guide</title>
          <pubDate>Mon, 21 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/gsoc-contribution-guide/</link>
          <guid>https://veloren.net/blog/gsoc-contribution-guide/</guid>
          <description>&lt;h2 id=&quot;applying-for-gsoc&quot;&gt;Applying for GSoC&lt;&#x2F;h2&gt;
&lt;p&gt;Welcome! The application process consists of the following steps&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;First of all, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;introduction&#x2F;index.html&quot;&gt;Read up on the Veloren
book&lt;&#x2F;a&gt; to understand the
basics of what the project is about, how to compile and much more.&lt;&#x2F;li&gt;
&lt;li&gt;Play! You can &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;download the game here&lt;&#x2F;a&gt;, and
then either &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an account&lt;&#x2F;a&gt; or try out
single player.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;joinus&quot;&gt;Join us on social media platforms&lt;&#x2F;a&gt; to get in
contact with developers and better understand the different areas of the
codebase, known as Working Groups.&lt;&#x2F;li&gt;
&lt;li&gt;Begin thinking about improvements you&#x27;d like to see, or areas you&#x27;d like to
focus on. Reach out with questions!&lt;&#x2F;li&gt;
&lt;li&gt;Submit the application&#x2F;proposal including all requirements at the Google
Summer of Code Site.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ideas-for-gsoc-contributions&quot;&gt;Ideas for GSoC Contributions&lt;&#x2F;h3&gt;
&lt;p&gt;We&#x27;re welcome to any ideas you can come up with for contributing to Veloren, and
we&#x27;ve compiled a few examples.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;refactoring-the-ai-system-for-robustness-and-ease-of-use&quot;&gt;Refactoring the AI system for robustness and ease of use&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-medium&quot;&gt;(175 hours) (medium)&lt;&#x2F;h5&gt;
&lt;p&gt;Re-organization of the agent system will allow for continued expansion to
include new desired features (group-based combat mechanics, more environmental
awareness, daily simulated activity).&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Some basic behavior tree knowledge&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: James, Sam&lt;&#x2F;p&gt;
&lt;h4 id=&quot;integrating-the-wiring-system-in-procedurally-generated-structures-allowing-for-increased-player-interaction&quot;&gt;Integrating the wiring system in procedurally generated structures allowing for increased player interaction&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;350-hours-hard&quot;&gt;(350 hours) (hard)&lt;&#x2F;h5&gt;
&lt;p&gt;The wiring system is Turing-complete and allows electricity-like mechanics to be
added into the game. One desired feature is to introduce this system into
procedural structures such as dungeons to allow for opening of doors with
switches and similar features.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Strong mathematical logic capability&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: James&lt;&#x2F;p&gt;
&lt;h4 id=&quot;implement-a-site-governance-ai-that-can-grow-a-site-over-time-based-on-economic-factors&quot;&gt;Implement a site governance AI that can grow a site over time based on economic factors&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;350-hours-medium&quot;&gt;(350 hours) (medium)&lt;&#x2F;h5&gt;
&lt;p&gt;Sites such as towns currently contain knowledge of the land around them to
determine available resources, economic prosperity, potential to trade, etc. It
is desired for these sites to be able to develop over time based on incoming and
outgoing resources, using the flow of material to determine population change
and overall development of the site.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Modelling or economic background&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: zesterer, Christof&lt;&#x2F;p&gt;
&lt;h4 id=&quot;combat-expansion-developing-new-ability-sets-and-attacks&quot;&gt;Combat expansion, developing new ability sets and attacks&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-easy&quot;&gt;(175 hours) (easy)&lt;&#x2F;h5&gt;
&lt;p&gt;Many existing entities in the game have very basic or placeholder combat ability
sets. Expansion of these ability sets will be critical to create a varied,
diverse experience in different sections of the game.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: General programming, game design&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: Sam, James&lt;&#x2F;p&gt;
&lt;h4 id=&quot;interactive-vehicles-expanding-on-ships-and-airships-to-allow-player-use&quot;&gt;Interactive vehicles, expanding on ships and airships to allow player use&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-medium-1&quot;&gt;(175 hours) (medium)&lt;&#x2F;h5&gt;
&lt;p&gt;Currently ships and airships exist in a fairly simple state, and expansion of
the feature is necessary to properly engage players with the feature. The
ability to mount and control these ships will require improvements in
pathfinding, physics, and simulated interaction with towns.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Physics knowledge, general programming&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: zesterer, James&lt;&#x2F;p&gt;
&lt;h4 id=&quot;transitioning-network-to-quic&quot;&gt;Transitioning network to QUIC&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;350-hours-hard-1&quot;&gt;(350 hours) (hard)&lt;&#x2F;h5&gt;
&lt;p&gt;QUIC is a general-purpose network protocol which is partially implemented in
Veloren, however, not fully active. Further implementation of the protocol is
desired and will be used to improve player latency, creating a better
experience.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Network experience&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: xMax94x&lt;&#x2F;p&gt;
&lt;h4 id=&quot;create-diagnostics-for-tracking-bandwidth-contribution-of-each-type-of-message-with-counts-uncompressed-size-and-estimated-compressed-size&quot;&gt;Create diagnostics for tracking bandwidth contribution of each type of message with counts, uncompressed size, and estimated compressed size&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-easy-1&quot;&gt;(175 hours) (easy)&lt;&#x2F;h5&gt;
&lt;p&gt;Improving these metrics will give us more insight into network performance and
where bottlenecks are located, helping us better allocate time when determining
future improvements.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: General programming, network experience&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: imbris, xMac94x&lt;&#x2F;p&gt;
&lt;h4 id=&quot;expand-authorization-system-with-password-reset-email-tracking-a-friends-list-etc&quot;&gt;Expand authorization system with password reset, email tracking, a friends list, etc&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;350-hours-medium-1&quot;&gt;(350 hours) (medium)&lt;&#x2F;h5&gt;
&lt;p&gt;Improving this system will require programming experience to work on the veloren
authorization code and also some background into the security requirements
related to storage of data, such as e-mail addresses, across the US, EU and
other places.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Knowledge of standard practices for authorization&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: zesterer, AngelOnFira&lt;&#x2F;p&gt;
&lt;h4 id=&quot;develop-the-plugin-system-to-a-maturity-that-allows-for-writing-useful-plugins&quot;&gt;Develop the plugin system to a maturity that allows for writing useful plugins&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;350-hours-hard-2&quot;&gt;(350 hours) (hard)&lt;&#x2F;h5&gt;
&lt;p&gt;The plugin system will allow the download and use of mods for players and
servers, a strongly desired Veloren feature. Currently this system exists but is
not robust enough to introduce to the playerbase. Continued expansion of the
plugin system will greatly improve player experience.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: ECS experience, WASM knowledge&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: zesterer&lt;&#x2F;p&gt;
&lt;h4 id=&quot;implement-server-federation-allowing-characters-to-transfer-between-servers-in-the-same-federation&quot;&gt;Implement server federation, allowing characters to transfer between servers in the same federation&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;350-hours-medium-2&quot;&gt;(350 hours) (medium)&lt;&#x2F;h5&gt;
&lt;p&gt;A server federation is a union of trusted servers, and allows the servers in the
federation to operate knowing that the others can be trusted to hold characters
which haven&#x27;t been manipulated in any undesirable way (such as using commands to
introduce items).&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: Database experience, general programming&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: xMac94x, zesterer, XVar&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ui-refactor-to-continue-the-transition-to-new-gui-backend&quot;&gt;UI refactor to continue the transition to new GUI backend&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-medium-2&quot;&gt;(175 hours) (medium)&lt;&#x2F;h5&gt;
&lt;p&gt;Currently, the ICED and Conrod UI backends both exist in Veloren, it is desired
to make a full transition of the UI to the newer, improved UI backend, ICED. As
part of a visual UI overhaul as well, the transition will require both the
ability to create new widgets and artistic insight.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: UI development experience&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: imbris&lt;&#x2F;p&gt;
&lt;h4 id=&quot;implement-udp-hole-punching-on-the-auth-server-so-that-players-can-host-games-locally-without-needing-to-port-forward&quot;&gt;Implement UDP hole-punching on the auth server so that players can host games locally without needing to port-forward&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-hard&quot;&gt;(175 hours) (hard)&lt;&#x2F;h5&gt;
&lt;p&gt;UDP hole-punching establishes bidirectional connection between hosts, allowing
transfer of data between the hosts. The feature is desired in order to simplify
the creation of private servers for players to make it easier to play the game
with a group of friends.&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: zesterer&lt;&#x2F;p&gt;
&lt;h4 id=&quot;improve-controller-support-adding-a-gui-for-editing-controller-bindings&quot;&gt;Improve controller support, adding a GUI for editing controller bindings&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;175-hours-easy-2&quot;&gt;(175 hours) (easy)&lt;&#x2F;h5&gt;
&lt;p&gt;Controller support exists in a simple form, but additional features are desired
such as improving the editing of controller bindings, the ability to use the UI
with a controller, etc.&lt;&#x2F;p&gt;
&lt;p&gt;Desired skills: General programming&lt;&#x2F;p&gt;
&lt;p&gt;Mentors: imbris&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;906695229028065290&#x2F;screenshot_1636240466943.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.12 Release</title>
          <pubDate>Sat, 19 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-12/</link>
          <guid>https://veloren.net/blog/release-0-12/</guid>
          <description>&lt;h2 id=&quot;0-12-release&quot;&gt;0.12 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Today, Veloren is releasing 0.12. This version is 5 months in the making, and we
have a lot to show off!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;everytimezone.com&#x2F;s&#x2F;0b439554&quot;&gt;18:00 GMT today (February
19th)&lt;&#x2F;a&gt;, make sure to join the release
party. To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an
account&lt;&#x2F;a&gt;, then launch the game and hop on the
default server. See you there!&lt;&#x2F;p&gt;
&lt;p&gt;We have also made a trailer for 0.12, so be sure to check it out!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;604JC5QdYQE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;Below are some of the key items from the release. You can check out the full
changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#0120-2022-02-19&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;added&quot;&gt;Added&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Added a crafting station icon to the crafting menu sidebar for items that
could be crafted at a crafting station&lt;&#x2F;li&gt;
&lt;li&gt;Added a credits screen in the main menu which shows attributions for assets&lt;&#x2F;li&gt;
&lt;li&gt;Shrubs, a system for spawning smaller tree-like plants into the world.&lt;&#x2F;li&gt;
&lt;li&gt;Waterfalls&lt;&#x2F;li&gt;
&lt;li&gt;Sailing boat (currently requires spawning in)&lt;&#x2F;li&gt;
&lt;li&gt;Sneaking with weapons drawn&lt;&#x2F;li&gt;
&lt;li&gt;Stealth stat values on (some) armors&lt;&#x2F;li&gt;
&lt;li&gt;All new dismantling interface found at your nearest dismantling station&lt;&#x2F;li&gt;
&lt;li&gt;Wearable headgear, including hood, crown, bandanas&lt;&#x2F;li&gt;
&lt;li&gt;Bomb sprites (can be exploded with arrows or other explosions)&lt;&#x2F;li&gt;
&lt;li&gt;Campfire waypoints in towns&lt;&#x2F;li&gt;
&lt;li&gt;New outfit for merchants&lt;&#x2F;li&gt;
&lt;li&gt;Rivers now make ambient sounds (again)&lt;&#x2F;li&gt;
&lt;li&gt;Players can now mount and ride pets&lt;&#x2F;li&gt;
&lt;li&gt;Experimental shaders, that can be enabled in Voxygen&#x27;s settings (see the book
for more information)&lt;&#x2F;li&gt;
&lt;li&gt;Keybinding customization to set waypoint on Map&lt;&#x2F;li&gt;
&lt;li&gt;Added arthropods&lt;&#x2F;li&gt;
&lt;li&gt;A &#x27;point light glow&#x27; effect, making lanterns and other point lights more
visually pronounced&lt;&#x2F;li&gt;
&lt;li&gt;Convert giant trees to site2&lt;&#x2F;li&gt;
&lt;li&gt;Add new upgraded travelers&lt;&#x2F;li&gt;
&lt;li&gt;Wallrunning&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;changed&quot;&gt;Changed&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Made dungeon tiers 3, 4, and 5 more common&lt;&#x2F;li&gt;
&lt;li&gt;The Interact button can be used on campfires to sit&lt;&#x2F;li&gt;
&lt;li&gt;Made map icons fade out when near the edge of the map display&lt;&#x2F;li&gt;
&lt;li&gt;Agents using fireball projectiles aim at the feet instead of the eyes&lt;&#x2F;li&gt;
&lt;li&gt;Explosions can now have a nonzero minimum falloff&lt;&#x2F;li&gt;
&lt;li&gt;EXP on kill is now shared based on damage contribution&lt;&#x2F;li&gt;
&lt;li&gt;Dungeons have somewhat proper scaling. The higher the dungeon the harder it
gets, Cultist staying unchanged while Mino is now at its level.&lt;&#x2F;li&gt;
&lt;li&gt;Yeti loot table modified&lt;&#x2F;li&gt;
&lt;li&gt;Green&#x2F;Red lantern now shine their respective color instead of the default
lantern color&lt;&#x2F;li&gt;
&lt;li&gt;Poise damage dealt to a target that is in a stunned state is now converted to
health damage at an efficiency dependent on the severity of the stunned state&lt;&#x2F;li&gt;
&lt;li&gt;Made the hotbar link to items by item definition id and component composition
instead of specific inventory slots.&lt;&#x2F;li&gt;
&lt;li&gt;Made loot boxes drop items instead of doing nothing in order to loot forcing&lt;&#x2F;li&gt;
&lt;li&gt;Changed the way light strength is rendered by moving processing from shader
code (GPU) to CPU code&lt;&#x2F;li&gt;
&lt;li&gt;Made &#x2F;home command a mod+ exclusive&lt;&#x2F;li&gt;
&lt;li&gt;Friendly creatures will now defend each other&lt;&#x2F;li&gt;
&lt;li&gt;Creatures will now defend their pets&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;fixed&quot;&gt;Fixed&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;The menu map now properly handles dragging the map, zooming, and setting the
waypoint when hovering icons&lt;&#x2F;li&gt;
&lt;li&gt;Falling through an airship in flight should no longer be possible (although
many issues with airship physics remain)&lt;&#x2F;li&gt;
&lt;li&gt;Avoided black hexagons when bloom is enabled by suppressing NaN&#x2F;Inf pixels
during the first bloom blur pass&lt;&#x2F;li&gt;
&lt;li&gt;Many known water generation problems&lt;&#x2F;li&gt;
&lt;li&gt;Trading over long distances using ghost characters or client-side exploits is
no longer possible&lt;&#x2F;li&gt;
&lt;li&gt;Merchant cost percentages displayed as floored, whole numbers&lt;&#x2F;li&gt;
&lt;li&gt;Bodies of water no longer contain black chunks on the voxel minimap.&lt;&#x2F;li&gt;
&lt;li&gt;Agents can flee once again, and more appropriately&lt;&#x2F;li&gt;
&lt;li&gt;Items in hotbar no longer change when sorting inventory&lt;&#x2F;li&gt;
&lt;li&gt;Lantern color changes when swapping lanterns&lt;&#x2F;li&gt;
&lt;li&gt;NPCs no longer wander off cliffs&lt;&#x2F;li&gt;
&lt;li&gt;Guards will defend villagers instead of simply threatening the attacker&lt;&#x2F;li&gt;
&lt;li&gt;Seafaring ships no longer spawn on dry land&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;925629196074647562&amp;#x2F;Screenshot_from_2021-12-29_02-18-21.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one today!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;943900929210605568&#x2F;bg_main.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 159</title>
          <pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-159/</link>
          <guid>https://veloren.net/blog/devblog-159/</guid>
          <description>&lt;p&gt;This week, we see the 0.12 trailer. We hear about the new travelers that are
being implemented, and how species can now defend each other.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Slipped, @zesterer, @imbris, @James,
@xMAC94x, @floppy, @aweinstock, @Tormod, @XVar, @Crow, @IbrahimBeladi,
@InfRandomness, @DrDystopia, @Pfau, @UnfomfySilince, @ninefox, @phoenix13032005,
and @unvariant!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;725508097233125407&amp;#x2F;941725330618601552&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;new map icons for gnarlings, minotaur and mindflayer. Old icons for
comparison.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another Veloren Reading Club episode is out! In this one, @JulianCoffee talks to
us about getting started with some initial contributions. We see how to create a
new entity, and how to then go through the Merge Request process.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;f9PXtKEwedQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;new-travelers-by-juliancoffee&quot;&gt;New travelers by @Juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I finished the New Travelers MR based on ideas and work from @UncomfySilence.
That&#x27;s the same MR we started in the last &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=f9PXtKEwedQ&quot;&gt;Veloren Code Reading
Club&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;3180&quot;&gt;here is the link to the
MR&lt;&#x2F;a&gt; if you&#x27;re
interested.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;0-12-release&quot;&gt;0.12 Release&lt;&#x2F;h3&gt;
&lt;p&gt;This weekend, Veloren is releasing 0.12! Check out the trailer to see some of
the changes. The release party will be taking place at 18:00 GMT on February
19th, this is one you won&#x27;t want to miss!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;604JC5QdYQE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;defending-species-by-tormeh&quot;&gt;Defending species by @tormeh&lt;&#x2F;h3&gt;
&lt;p&gt;I made creatures of the same species defend each other, so individual horses
(for example) in bigger herds should now be a bit harder to pick off one by one.
I was just always annoyed by the fact that I could kill a horse and his buddy
two metres over would be like &quot;Meh, Dave kinda sucked anyway&quot; while continuing
to graze. The biggest problem was probably to figure out if two entities had the
same species or not, as the code isn&#x27;t particularly well-suited for that exact
problem. Turns out the solution wasn&#x27;t that complicated in the end, although a
bit verbose.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;940718468645421176&amp;#x2F;screenshot_1644080509907.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A new traveler ready for adventure. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;943228629301723146&#x2F;screenshot_1644953774233.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 158</title>
          <pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-158/</link>
          <guid>https://veloren.net/blog/devblog-158/</guid>
          <description>&lt;p&gt;This week, we hear about the work going on with giant trees and their new CSG
implementation. Waypoints now work better while you&#x27;re playing with group
members. Fine-grain support was added for server socket configs. Mockups were
made for potential future dungeons, and some changes were made to the econsim.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Christof, @James, @zesterer, @xMAC94x,
@floppy, @IsseW, @protheory8, @Crow, @Yurimomo, @imbris, @InfRandomness,
@Slipped, @Sam, @UncomfySilence, @Zughy, and @juliancoffee!&lt;&#x2F;p&gt;
&lt;p&gt;@InfRandomess worked on migrating giant trees from site to site2 (hopefully
releasing soon!). This uses an algorithm that generates a tree based on a given
scale that we paint by walking from the trunk to the very leaves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;939662811078983770&amp;#x2F;screenshot_1644103333059.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;csg-shapes-by-isse&quot;&gt;CSG Shapes by @Isse&lt;&#x2F;h3&gt;
&lt;p&gt;In addition to James&#x27; additions to CSG, I&#x27;ve added a way to repeat other CSG
shapes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;939606306157908018&amp;#x2F;screenshot_1643312489355.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve also made waypoints shared with group members, and saved between sessions,
which will hopefully get merged before release.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;725508097233125407&amp;#x2F;927288768103325757&amp;#x2F;2022-01-02_19-33-27.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;more-fine-granular-support-for-socket-listening-and-ipv4-and-ipv6-by-xmac94x&quot;&gt;More fine granular support for socket listening and IPv4 and IPv6 by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;With an update on Tuesday the 8th of February at 10:00 GMT, we will switch the
server config format in a way that allows you to specify the sockets for the
server to listen on in a more fine-grain way. The old scheme:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;gameserver_address: &amp;quot;0.0.0.0:14004&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This only allowed setting a single socket with a single port. E.g. IPv4
&lt;code&gt;0.0.0.0:14004&lt;&#x2F;code&gt; or IPv6 &lt;code&gt;[::]:14004&lt;&#x2F;code&gt;. This had a different behavior under
Linux&#x2F;Windows, for example, it was possible to enable the server for both IPv4
and IPv6 traffic under Linux by setting it to &lt;code&gt;[::]:14004&lt;&#x2F;code&gt;. But that
configuration didn&#x27;t work on a Windows server. To solve this problem we now
extended the configuration scheme to list multiple addresses like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;gameserver_protocols: [
&lt;&#x2F;span&gt;&lt;span&gt;    Tcp(
&lt;&#x2F;span&gt;&lt;span&gt;        address: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;[::]:14004&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;    Tcp(
&lt;&#x2F;span&gt;&lt;span&gt;        address: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;0.0.0.0:14004&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will be the new default for new installations which will listen on all IPv4
and all IPv6 addresses by default. You now have to possibility to either disable
one of them, change the port or also add other protocols, like the experimental
QUIC support:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;gameserver_protocols: [
&lt;&#x2F;span&gt;&lt;span&gt;    Quic(
&lt;&#x2F;span&gt;&lt;span&gt;        address: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;[::]:14004&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        cert_file_path: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;cert.der&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        key_file_path: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;key.der&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;    Tcp(
&lt;&#x2F;span&gt;&lt;span&gt;        address: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;0.0.0.0:1234&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;    Tcp(
&lt;&#x2F;span&gt;&lt;span&gt;        address: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;[::]:1234&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;hannibal&quot;&gt;Hannibal&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I worked on dungeon mockups to give ideas and concepts for the
dungeon overhaul coming up. The small designs help to create the general
atmosphere and layout of the dungeon to inspire the proc-geniuses.&lt;&#x2F;p&gt;
&lt;p&gt;First, we have a sewer dungeon with poisonous liquid. The deeper you go, the
fouler and more dangerous it is. Then, we have the Sahagin dungeon, which has
areas accessible only after going underwater or in the water. Finally, the adlet
troglodytes in snowy mountains, who live in caves and carved their houses on the
walls of the grotto.&lt;&#x2F;p&gt;
&lt;p&gt;Hopefully, the mockups will help the proc-geniuses have an easier time with the
generation of dungeons!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;939623530214068304&amp;#x2F;snap2022-02-04-17-05-27.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sewer Dungeon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;939623530801266698&amp;#x2F;snap2022-02-04-23-31-39.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sahagin Dungeon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;939623531333955594&amp;#x2F;snap2022-02-05-17-27-38.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;939623531937947788&amp;#x2F;snap2022-02-05-12-28-49.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Adlet Troglodytes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;christof&quot;&gt;@Christof&lt;&#x2F;h3&gt;
&lt;p&gt;I just provided a small fix to trading price calculation from loot tables.
Previously the loot tables were used as-is and then individually scaled against
each other - now each loot table is normalized to 100% and then multiplied and
combined. This might be less surprising to people changing weights and feels
more logical. I just adjusted the new weights to result in unchanged prices.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;939835066295668747&amp;#x2F;screenshot_1644135865198.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Something off in the dark, but what is it? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;939835065066725436&#x2F;screenshot_1644126699241.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 157</title>
          <pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-157/</link>
          <guid>https://veloren.net/blog/devblog-157/</guid>
          <description>&lt;p&gt;This week, we see the progress of gnarling fortifications and weapon trails. We
hear about the worldgen tracking issue from @zesterer, and entity refactors by @juliancoffee.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @juliancoffee, @zesterer, @Dr.Dystopia,
@imbris, @xMAC94x, @Sam, @floppy, @Slipped, @Aweinstock, @Martin, @YuriMomo,
@AngelOnFira, @InfRandomness, @IsseW, @James, @Scott, @Treeco, @threadexception!&lt;&#x2F;p&gt;
&lt;p&gt;@Sam has been working a bit on weapon trails.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;936093287683616798&amp;#x2F;2022-01-26_21-54-23.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@juliancoffee migrated the project to Rust 2021. Back to the future! You can
read more about what the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2021&#x2F;05&#x2F;11&#x2F;edition-2021.html&quot;&gt;2021 edition includes
here&lt;&#x2F;a&gt;. More work is
needed, but gnarling fortifications are slowly getting completed by @Slipped and
others.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;935457202003644416&amp;#x2F;screenshot_1643100549328.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;worldgen-tracking-issue-by-zesterer&quot;&gt;Worldgen tracking issue by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I created a tracking issue for worldgen things (in particular, the move to site2
and the upcoming rtsim refactor). &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;1444&quot;&gt;You can see it
here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The plan is to use it as a central place to coordinate development and break
larger tasks down into smaller ones that can be taken on by individual
contributors. I recommend you take a look at it!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;entity-config-refactor-by-juliancoffee&quot;&gt;Entity config refactor by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve refactored our entity configs to fix some potential logic holes and extend
features. This can affect any NPC, such as travellers, cultist, or foxes. Now
it&#x27;s possible to randomly choose which loadout an entity will get and to give
initial inventory items to NPCs in the entity config without the need for
coding. If everything works as planned, you shouldn&#x27;t notice any behaviour
change yet, but expect greater things soon™️.&lt;&#x2F;p&gt;
&lt;p&gt;Note for server owners with custom assets, you will need to update them to the
new format. To help with this, we created a special tool for migration. To use
it, you&#x27;ll need to follow a couple of steps.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Note: If there were comments in it, they will be erased, so make sure to create backups
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;1. Execute these commands
&lt;&#x2F;span&gt;&lt;span&gt;  $ git checkout 7585c8 # to go back in history, where this tool is active
&lt;&#x2F;span&gt;&lt;span&gt;  $ cargo run --bin entity_migrate --features bin_entity_migrate
&lt;&#x2F;span&gt;&lt;span&gt;2. Follow instructions of binary
&lt;&#x2F;span&gt;&lt;span&gt;3. Grab migrated assets folder and replace old assets folder with it
&lt;&#x2F;span&gt;&lt;span&gt;4. Check if everything is ok
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Have fun!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;937161418925539388&amp;#x2F;screenshot_1643506782327.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A midnight meeting among unusual suspects. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;937161418522914866&#x2F;screenshot_1643505226086.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 156</title>
          <pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-156/</link>
          <guid>https://veloren.net/blog/devblog-156/</guid>
          <description>&lt;p&gt;This week, we hear about some new shaders being developed. We also have a new
Veloren Reading Club to check out!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @DaforLynx, @InfRandomness, @flo,
@Slipped, @XVar, @imbris, @tygyh, @ubruntu, @unvariant, @AngelOnFira, @Sam,
@terrarier2111, @Snowram, @JulianCoffee, @IsseW, @roidujeu, and @James!&lt;&#x2F;p&gt;
&lt;p&gt;The December Rust Gamedev Newsletter is out! You can read it
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gamedev.rs&#x2F;news&#x2F;029&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. @AngelOnFira has been starting work on
improving parts of how Veloren&#x27;s GitLab bot works. Now, using &lt;code&gt;&#x2F;review&lt;&#x2F;code&gt; on
Discord will pin the link to the thread it makes. Very helpful for developers!&lt;&#x2F;p&gt;
&lt;p&gt;Another Veloren Reading Club episode is out! In this one, @Sam talks to us about
attacks and character states.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;nR2WDBMjkh8&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;shader-changes-by-zesterer&quot;&gt;Shader Changes by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on some changes to shaders this week.&lt;&#x2F;p&gt;
&lt;p&gt;First up, I added an &#x27;experimental shader&#x27; feature that allows us to add shader
effects to the game without committing to adding them by default. The system is
very simple, but allows enabling shader effects via Voxygen&#x27;s &lt;code&gt;settings.ron&lt;&#x2F;code&gt;.
That also makes space for us to add some &#x27;fun&#x27; shaders that we don&#x27;t feel are a
fit for the main game, but that we want to give users the opportunity to play
with. Information about these shaders and how to enable them &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;voxygen.html#experimental-shaders&quot;&gt;can be found
here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934018933760090123&amp;#x2F;screenshot_1642476145236.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;CurveWorld shader&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934018934431174656&amp;#x2F;screenshot_1642538821874.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Brickloren shader&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934018934766731344&amp;#x2F;screenshot_1642716038034.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Before `ProceduralLodDetail` shader ^ and after v&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934018935450398750&amp;#x2F;screenshot_1642716043656.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Secondly, I&#x27;ve added a &#x27;point glow&#x27; effect to the game. For a while now I&#x27;ve
struggled to make lanterns&#x2F;lights look visually impactful, but a few days ago I
found a neat technique that (ab)uses the depth buffer and some fast shader maths
to add a halo around point lights to simulate light diffusion in the air. Even
better, this effect works when the point light itself isn&#x27;t visible: you can see
the light of a campfire before you see it as you approach from over a hill, for
example. I know that it&#x27;s not for everybody so I added an in-game slider to
allow players to adjust the intensity of the effect (this will be in next week&#x27;s
build).&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a before and after that show the effect in action (I&#x27;ve cranked it up to
the highest setting to make it more obvious, but players can tone it down if
they so choose).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934019956725645352&amp;#x2F;screenshot_1642757470732.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934019956981506068&amp;#x2F;screenshot_1642757478264.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Lastly, I&#x27;m currently working on sprucing up the water shaders. There are a fair
few things going on here:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I added a caustic effect that shows refracted light projected onto the ocean
floor&lt;&#x2F;li&gt;
&lt;li&gt;I added distance fog that uses an approximation of water depth to calculate
light attenuation. It takes into account sun and moon light so the water
appears as a sensible colour&lt;&#x2F;li&gt;
&lt;li&gt;I altered the water surface rendering, re-enabling depth writing and fixing
the way reflection vs refraction was calculated when the water was viewed from
below&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Exploring the underwater world is now beautiful &lt;em&gt;and&lt;&#x2F;em&gt; creepy, as it should be!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934022742129381447&amp;#x2F;screenshot_1642758334876.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934022742448173066&amp;#x2F;screenshot_1642758338943.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934022742813057054&amp;#x2F;screenshot_1642758357689.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934022743056330792&amp;#x2F;screenshot_1642758380822.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;934022743421239346&amp;#x2F;screenshot_1642758431240.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An endless ocean to explore. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;934379321118822451&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 155</title>
          <pubDate>Mon, 17 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-155/</link>
          <guid>https://veloren.net/blog/devblog-155/</guid>
          <description>&lt;p&gt;This week, we hear about many small changes to the renderer, the agent system,
skiing, inventories, and arthropods. We also hear about how the development of
the new mount system is progressing.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @flo, @zesterer, @unvariant, @imbris,
@Maveth1, @JakobDev, @Slipped, @Kember, @Sam, @terrarier2111, @Isse, @Pfau,
@Yurimomo, and @Tormod!&lt;&#x2F;p&gt;
&lt;p&gt;@Capucho has gotten Veloren working with WGPU and OpenGL! Right now, we&#x27;re able
to use WGPU with Vulkan, however, this meant that older GPUs that couldn&#x27;t run
Vulkan couldn&#x27;t run Veloren. This is a step towards some more backward
compatibility.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;931922519701749830&amp;#x2F;2022-01-15_14-45-48.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James broke up the monolithic agent system into several modules that will
hopefully make it easier to work with. @Christof got skiing and ice skating into
a playable state and made a video:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;821484441344016405&amp;#x2F;932289204468191272&amp;#x2F;skating3b.webm&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@tormeh made item shortcuts in the hotbar independent of inventory sort, so you
can sort your possessions without losing the hotkey for your potions. @Snowram
added a new skeleton to the game; the arthropod. Here is the new batch of
creatures you will encounter soon...&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;932769379366608926&amp;#x2F;screenshot_1642435159058.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;932813747226046534&amp;#x2F;screenshot_1642469557573.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;mounts-by-zesterer&quot;&gt;Mounts by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working with @Slipped on getting mounts ready for players.&lt;&#x2F;p&gt;
&lt;p&gt;We did already have a mounting system, but it was weird, arcane, and
fundamentally broken in a variety of ways. It integrated very poorly with the
rest of the game and was full of bugs. For this reason, it wasn&#x27;t player-facing:
only admin-spawned entities could be mounted.&lt;&#x2F;p&gt;
&lt;p&gt;This week, that all changed! I finally had the time to sit down and rewrite the
entire mounting system from the ground up. It&#x27;s now very reliable, has fewer
bugs (although there may still be some: please report them!), and has more
features. New features include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;New jumping&#x2F;mounting animations (thanks @Slipped)&lt;&#x2F;li&gt;
&lt;li&gt;Interaction hints when close to entities (talk, trade, mount, pick up, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;Mounted combat: you can use weapons while mounted, to a limited degree
(certain moves are disabled for now)&lt;&#x2F;li&gt;
&lt;li&gt;Teleporting while mounted now works. You can use &#x2F;home while riding a mount!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;@Slipped gives a shoutout to @Snowram and @imbris too for setting up the mounted
animation some months back, which now gets to be used.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;fJpeOJT78TI&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;devblog-recap-by-dalyc&quot;&gt;Devblog Recap by @Dalyc&lt;&#x2F;h3&gt;
&lt;p&gt;Be sure to check out last week&#x27;s devblog recap by @Dalyc if you missed it! There
are also videos for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=f3wu05TnryA&quot;&gt;#153&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=a5WPY5Bvhgo&quot;&gt;#152&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;qLqDEvqLijg&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;931372046561210368&amp;#x2F;screenshot_1642126767716.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;As the lookout calls &amp;#x27;land ho!&amp;#x27;, the ship runs aground. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;932469997169676318&#x2F;screenshot_1642388384135.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 154</title>
          <pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-154/</link>
          <guid>https://veloren.net/blog/devblog-154/</guid>
          <description>&lt;p&gt;This week, we see lots of small improvements that are being made around the
codebase. @Sam has a poll to ask about what some new abilities for the sword
could look like.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @XVar, @tygyh, @Sam, @imbris, @Yurimomo,
@FreeFull, @Pfau, @zesterer, @unvariant, @fetsorn, and @voxal!&lt;&#x2F;p&gt;
&lt;p&gt;@Sam Skill persistence changes have finally merged. That means all your skill
points have been reset to ensure proper migration to the new persistence format.
@Pfau implemented UI visuals for crafting modular weapons:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;927280052448661514&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Voxal implemented a setting that allows players to see their own speech
bubbles. Most of the code was already there, and @Voxal just needed to check if
the setting is on. The main issue was wrestling with Git, somehow 135 commits
were added and it took them a few days to find a way to fix.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;928708209508765756&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Yurimomo and @imbris managed to fix black reeds which were a byproduct of
getting the square root of a negative number in shader code, which produced a
NaN value.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;929544901853601854&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@FreeFull found a solution for certain players where the world wouldn&#x27;t load for
them 💜&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;464698017283440640&amp;#x2F;929221153401217034&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;464698017283440640&amp;#x2F;929459341608767529&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof worked on implementing physics for skiing ⛷️  and ice skating ⛸️. They
have a working prototype but will need more days to create a cool video of it.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sword-survey-by-sam&quot;&gt;Sword survey by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;Now that the skill persistence overhaul and ability selection UI has merged, we
can now begin the skill tree rework. In the rework, we plan to shift away from
passive skills instead to unlocking active abilities. We are beginning the skill
tree rework with the sword, and since we want to have many abilities, we have
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;10nQqp0SOY6j1YxJa7iV4qKjWfc8mJINNFABmeQBk80I&quot;&gt;created a
poll&lt;&#x2F;a&gt;
for all of you to suggest ideas.&lt;&#x2F;p&gt;
&lt;p&gt;The sword is intended to be a weapon that is comb-focused and involves swapping
between different stances. The ideas will primarily be used as a source of
inspiration when designing the sword abilities.&lt;&#x2F;p&gt;
&lt;p&gt;Some things to note, being specific in your ideas can be helpful, as it allows
us to have a better idea of what your idea would entail. However if your idea
contains exact numbers we will be less likely to accept it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;930641637602893874&amp;#x2F;screenshot_1641952160031.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Time to bargain. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;930658252600008735&#x2F;screenshot_1641956421252.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 153</title>
          <pubDate>Mon, 03 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-153/</link>
          <guid>https://veloren.net/blog/devblog-153/</guid>
          <description>&lt;p&gt;New week, new year! We hear about upcoming fixes to daggers, and hear the audio
changes that are being made to rivers.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @DaforLynx, @imbris, @XVar, @tygyh,
@UncomfySilence, @xMAC94x, @Ubruntu, @AngelOnFira, and @flo!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @AngelOnFira worked on fixing the GitHub mirror of the project. It
turns out that there was a bug in the most recent version of &lt;code&gt;git-lfs&lt;&#x2F;code&gt;. On the
game server-side, the &lt;code&gt;entity_sync&lt;&#x2F;code&gt; system was reworked to become parallel! This
was a large issue that came up during the last release party. Once 150+ players
were on the server, it started taking more time each tick than any other system.
Hopefully, we get to test the improvements at the next release!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;924958659161751642&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;lunar-new-year-by-angelonfira&quot;&gt;Lunar New Year by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;With the Christmas holiday event just ending, we&#x27;re looking forward to the next
event, Lunar New Year 2022. However, our dev team doesn&#x27;t have many people who
celebrate this holiday. Because of this, we&#x27;d like to get more help on this!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;d like to help us get this event ready, feel free to join the effort in
the #aesthetics channel on our Discord server. This can include music,
decorations, information, and any other ideas. Give me a ping if you want to get
involved!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dagger-animations-by-ubruntu&quot;&gt;Dagger animations by @Ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I worked on dagger animations.&lt;&#x2F;p&gt;
&lt;p&gt;I started with some experimentation using the live reloading feature &lt;code&gt;cargo run --features &quot;hot-anim&quot;&lt;&#x2F;code&gt;. I did some investigation into why daggers had such a
different orientation on character models compared to all other weapons. I
couldn&#x27;t find a reason in the animation code itself, so I opened the dagger
&lt;code&gt;.vox&lt;&#x2F;code&gt; models in MagicaVoxel and found that they were horizontal whereas all
other weapon models were positioned vertically.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;925524175131652147&amp;#x2F;daggers_wielded.jpg&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This was my first time using MagicaVoxel but I managed to rotate the models to
the same orientation as other weapons, and after that, it was a matter of
playing with orientations in the animation files to make them look naturally
positioned on the character model. I took some artistic liberty and positioned
the daggers at the hip instead of across the back like other weapons and that
received some positive feedback. I also tied the &quot;tempbasic&quot; dagger attack skill
to a basic swing animation that one-handed swords use, just for the time being.&lt;&#x2F;p&gt;
&lt;p&gt;Daggers still aren&#x27;t acquirable normally in the game and still aren&#x27;t as
polished as other weapons but now they definitely don&#x27;t feel as &quot;under
construction&quot; as they were before. At this point, however, players can spawn
them with commands in singleplayer and try them out. We can now start to think
of making new dagger VOX models and NPCs that use daggers as weapons, as well
as work on animations for attacks that will use these cool weapons.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;925524174632534026&amp;#x2F;dagger_sheathed.jpg&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;daforlynx&quot;&gt;@DaforLynx&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I worked on re-implementing sounds of flowing water for rivers.
Before this feature was removed a while ago, it sounded very sparse and rather
un-riverlike. I took a different approach this time, making small bubbling
sounds emit from a single random water block every tick. The result is that
rivers sound a bit like a babbling brook now, and it gets appropriately louder
as you get closer.&lt;&#x2F;p&gt;
&lt;p&gt;Also, new town music by @phoenix13032005 and @Thy-SFX-[Velorian]- was added.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;929835679737868339&amp;#x2F;ezgif.com-gif-maker.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;925795190105604156&amp;#x2F;Bildschirmfoto_2021-12-29_um_17.53.48.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;What&amp;#x27;s this ship doing here?! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;924852795373412352&#x2F;Screenshot_from_2021-12-27_03-30-43.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 152</title>
          <pubDate>Mon, 27 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-152/</link>
          <guid>https://veloren.net/blog/devblog-152/</guid>
          <description>&lt;p&gt;This week, we hear about some updates to the item displays. The Christmas
holiday event is coming to a close.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @DoctorKompot, @zesterer,
@DaforLynx, and @UncomfySilence!&lt;&#x2F;p&gt;
&lt;p&gt;@Christof added some Christmas decorations with the help of @Sarra_Kitty.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;923242438636765184&amp;#x2F;screenshot_1639510180126.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof is also working on skiing, which is not yet ready as physics and
animations aren&#x27;t finished. Hopefully, we can hit the slopes in 2022!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;923242909405413396&amp;#x2F;screenshot_1639769809401.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@DaForLynx, @Oolnokk, and @Rarnage have been working on adding new music to the
game. Expect some more variety.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;item-displays-by-doctorkompot&quot;&gt;Item Displays by @DoctorKompot&lt;&#x2F;h2&gt;
&lt;p&gt;This week, I updated the item displays! All the items that were still using old
PNG files to display in the inventory have been updated to &lt;code&gt;.vox&lt;&#x2F;code&gt; models, which
look a lot better. Credits to @Gemu for the awesome art.&lt;&#x2F;p&gt;
&lt;p&gt;I also updated the item quality backgrounds, making them lighter, as it was
pretty hard to tell what item you were looking at sometimes.&lt;&#x2F;p&gt;
&lt;p&gt;Other changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Phoenix Feather is now Legendary quality&lt;&#x2F;li&gt;
&lt;li&gt;Yeti loot table has been tweaked by @UncomfySilence (&lt;em&gt;The Polaris lantern and
Boreal Warhelm are no longer dropped by the wild Christmas Yeti&lt;&#x2F;em&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;@Pfau&#x27;s Turban hat has been worked on to better fit the head of characters&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;925007924135346176&amp;#x2F;new-item-models2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;devblog-recap-by-dalyc&quot;&gt;Devblog Recap by @Dalyc&lt;&#x2F;h3&gt;
&lt;p&gt;Be sure to check out last week&#x27;s devblog recap by @Dalyc if you missed it!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Zbgb3JRKIHs&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;hr&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;923770145829171200&amp;#x2F;screenshot_1640314323782.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A Christmas tree in town. See you in 2022!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;923409920370573342&#x2F;screenshot_1640228402639.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren Christmas Week</title>
          <pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/holiday-2021-christmas/</link>
          <guid>https://veloren.net/blog/holiday-2021-christmas/</guid>
          <description>&lt;h2 id=&quot;christmas-week-2021&quot;&gt;Christmas Week 2021&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s the Christmas season, and we&#x27;ve made some special changes exclusive to this
week!&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ll be having a Christmas Party at 18:00 GMT on December 25th on the official
server. We know that many folks are separated from friends and family this year
due to Coronavirus, so feel free to log on if you&#x27;re looking for some company.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;924042755108376617&amp;#x2F;screenshot_1640379265554.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We have a ton of changes just for this week that are winter themed. Here&#x27;s some
of what we have:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;❄️ Snow everywhere and new ice lakes!&lt;&#x2F;li&gt;
&lt;li&gt;🎄 Ornaments on trees!&lt;&#x2F;li&gt;
&lt;li&gt;🎅 Christmas hats!&lt;&#x2F;li&gt;
&lt;li&gt;🎁 Unique seasonal items to find!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;From all of us in the Veloren community, we wish you all a happy holidays, no
matter what you&#x27;re celebrating!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;923840038696022036&amp;#x2F;veloren.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great holiday parties like the one today!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;923406133866168370&#x2F;screenshot_1640227517868.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 151</title>
          <pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-151/</link>
          <guid>https://veloren.net/blog/devblog-151/</guid>
          <description>&lt;p&gt;This week we hear about how the appearance of characters can now be edited. We
also hear about changes to how armor tooltips are displayed.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @UncomfySilence, @Christof, @flo,
@XVar, @ubruntu, @tygyh, @Slipped, @Snowram, @IsseW, @Sam, @xMAC94x, and
@EvenMeek!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;editing-characters-by-drdystopia&quot;&gt;Editing Characters by @DrDystopia&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve made it possible to edit the appearance of characters after they&#x27;ve been
created. The reason for this was many players have asked for the ability to
change their characters without having to make a new character from scratch.&lt;&#x2F;p&gt;
&lt;p&gt;During the process, I was helped a lot by @zesterer and @Isse. Their greater
understanding was essential to finish this feature.&lt;&#x2F;p&gt;
&lt;p&gt;To add this feature I had to apply a persistency state so that players wouldn&#x27;t
lose their ability, weapon, and item info when changing the appearance of their
characters. For the screen used to edit the character, we used a stripped-down
version of the original character creator as a base. In doing so we had to
disable the starting weapon, gender, and race choices. The character&#x27;s inventory
and equipment are not affected by this change and during the editing, the
current equipment is shown.&lt;&#x2F;p&gt;
&lt;p&gt;Other than some delays because people were busy with other features and life in
general, everything worked smoothly and efficiently.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;devblog-recap-by-dalyc&quot;&gt;Devblog Recap by @Dalyc&lt;&#x2F;h3&gt;
&lt;p&gt;Be sure to check out last week&#x27;s devblog recap by @Dalyc if you missed it!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_6SauEbyw6A&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;armor-tooltips-by-ubruntu-and-james&quot;&gt;Armor tooltips by @Ubruntu and @James&lt;&#x2F;h3&gt;
&lt;p&gt;@Ubruntu worked on item tooltips so that armors don&#x27;t show stats that have a
value of 0. This makes armor tooltips more compact and their stat benefits more
immediately apparent. New armor stats can now be added in the future without
worrying about excessive clutter to tooltips on unrelated armors.&lt;&#x2F;p&gt;
&lt;p&gt;@James made armor stats optional as far as the code is concerned which will
allow us to add more armor stats without having to add zero values to a bunch of
armor pieces that wouldn&#x27;t have a given stat.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;923419561024450560&amp;#x2F;screenshot_1640230672281.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hanging out with a mammoth. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;923404438071291904&#x2F;screenshot_1640227132693.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 150</title>
          <pubDate>Mon, 13 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-150/</link>
          <guid>https://veloren.net/blog/devblog-150/</guid>
          <description>&lt;p&gt;This week, it&#x27;s the 150th Veloren blog!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @a1phyr, @zesterer, @tygyh, @Sam, @James,
@holychowders, @xMAC94x, and @EvenMeek!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;150-devblogs-by-angelonfira&quot;&gt;150 Devblogs by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;It&#x27;s that time again; a large milestone in the number of blog posts we&#x27;ve
released! Every 50 editions tend to be close enough to a year that it can act
as a recap for everything that happened in the previous year. This milestone
doesn&#x27;t feel nearly as momentous as the 50th edition, however, there are new
achievements that are being reached.&lt;&#x2F;p&gt;
&lt;p&gt;For example, we finally had a release party that broke out of the loop of
&quot;server crashing during release party under the player load&quot;. We&#x27;ve also reached
amazingly high numbers of players on the server not during a release party,
which was around 90 people. We&#x27;ve also completed phenomenal systems that players
can interact with what we&#x27;ve aspired to have since starting development of the
game. 10,000 commits, 10,000 members on our Discord server, 9,000 members on the
subreddit, and the 7th most starred project on GitLab. There&#x27;s a lot we have going on!&lt;&#x2F;p&gt;
&lt;p&gt;Normally, I use every 50th blog post to write something much larger, but I
didn&#x27;t have a lot of time to prepare something this week. Hopefully, we can see
something large for the end of the year post. See you at episode 200 for the
next TWiV milestone!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;devblog-recap-by-dalyc&quot;&gt;Devblog Recap by @Dalyc&lt;&#x2F;h3&gt;
&lt;p&gt;Be sure to check out last week&#x27;s devblog recap by @Dalyc if you missed it!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;1KLvFVJ0_WE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;918209792500195348&amp;#x2F;screenshot_1638988531654.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A peaceful city on the water. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;922609480573792276&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 149</title>
          <pubDate>Mon, 06 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-149/</link>
          <guid>https://veloren.net/blog/devblog-149/</guid>
          <description>&lt;p&gt;This week, we hear about the plans for the upcoming Christmas holiday week.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @tygyh, @Sam, @zesterer, and
@imbris!&lt;&#x2F;p&gt;
&lt;p&gt;This week has been slower for developers as we approach the Christmas season.
However, we have something special planned for that this year!&lt;&#x2F;p&gt;
&lt;p&gt;Be sure to check out last week&#x27;s devblog recap by @Dalyc if you missed it!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;7sw-VZTEAx4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;christmas-week-by-angelonfira&quot;&gt;Christmas week by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;From the 20th to the 30th of December, we are going to be running our first
holiday event! Not only that, but on the 25th, on Christmas Day, we&#x27;ll be
hosting a Christmas party for anyone who wants to join!&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve been working on a system to add a feature flag that we can toggle when the
event starts, and this will allow us to completely change out how parts of
worldgen and assets are loaded. We have some pretty exciting stuff planned!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;917123679035486269&amp;#x2F;917899494081822741&amp;#x2F;screenshot_1638914683061.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The main features we&#x27;re going for are all about winter. We&#x27;ve got way more snow,
decorations on trees, and even ice on lakes! Lots of Christmas elves (developers
and artists) are working hard on this right now to get more assets and themed
features into the game. Here are some other ideas that have been thrown around:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Blue cheese&lt;&#x2F;li&gt;
&lt;li&gt;Guards with Christmas colored lanterns&lt;&#x2F;li&gt;
&lt;li&gt;Snowmen that spawn&lt;&#x2F;li&gt;
&lt;li&gt;Snowshoes to help players move better in the snow&lt;&#x2F;li&gt;
&lt;li&gt;Sleighs and reindeer&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Note; these ideas aren&#x27;t final, and we don&#x27;t know if we can get all of them in
before the holiday week starts. If you&#x27;ve wanted to contribute something small,
maybe now is the time! We&#x27;ve created a branch and dev channel for the work on
this event. Message me on Discord if you want to be added to that.&lt;&#x2F;p&gt;
&lt;p&gt;Also! This holiday event is the first one we have planned, but we want to work
on adding more holidays from more cultures! If you have something you celebrate,
reach out so we can figure out how we can make it happen!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;917123679035486269&amp;#x2F;917898692290314250&amp;#x2F;screenshot_1638914492370.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Out on a cold winters night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;917959426063859712&#x2F;screenshot_1638928774230.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 148</title>
          <pubDate>Mon, 29 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-148/</link>
          <guid>https://veloren.net/blog/devblog-148/</guid>
          <description>&lt;p&gt;This week, we have a new episode of the Veloren Reading Club out. We also see
some experiments with the new site system, and current work on ability
selection. @Dalyc is also back with another devblog recap!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @XVar, @aweinstock, @xMAC94x, @tygyh,
@imbris, @Treeco, @Capucho, @Sam, and @James!&lt;&#x2F;p&gt;
&lt;p&gt;Veloren is running an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;2021&#x2F;about&quot;&gt;Advent of Code&lt;&#x2F;a&gt;
leaderboard! Advent of Code is a programming challenge that takes place in the
first 25 days of December every year. Every day at 00:00 EST, a new challenge is
released. If you want to join the Veloren leaderboard, stop by the
&lt;code&gt;##advent-of-code&lt;&#x2F;code&gt; channel on Discord to get the code!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Pfau and @Sam have been working on adding ability selection.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;725508097233125407&amp;#x2F;913941867308122132&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;p&gt;There have also been ongoing experiments with the new site system, which has
been attracting a lot of attention since the first Veloren Reading Club. Below,
we can see some trials done by @James.&lt;&#x2F;p&gt;
&lt;hr&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;915113043116048394&amp;#x2F;screenshot_1638249891781.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;dev-v-log-recap-with-dalyc&quot;&gt;Dev(v)log Recap with @Dalyc&lt;&#x2F;h3&gt;
&lt;p&gt;@Dalyc is back with another TWiV recap!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;bTpK-zXH-XQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;veloren-reading-club-2-spots-and-worldgen-layers&quot;&gt;Veloren Reading Club #2: Spots and Worldgen Layers&lt;&#x2F;h3&gt;
&lt;p&gt;If you missed it, we ran another Veloren Reading Club last week! In this one, we
explore how the spots system works to place things around the world, and how the
layers of worldgen are set up.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;n8XayRvVBEs&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;915640083179274260&amp;#x2F;screenshot_1638238184140.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A sea chapel in a peculiar spot. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;912047067352924212&#x2F;screenshot_1637507747236.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 147</title>
          <pubDate>Mon, 22 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-147/</link>
          <guid>https://veloren.net/blog/devblog-147/</guid>
          <description>&lt;p&gt;This week, we hear about changes being made to dungeon difficulty. We also dive
into how skill persistence is being changed. Finally, we learn about some
proposed changes to the Site2 system, and the addition of giant mushrooms!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @xMAC94x, @Sam, @IsseW,
@UncomfySilence, @Treeco, @zesterer, @Kemper, @Pfau, and @Limofeus!&lt;&#x2F;p&gt;
&lt;p&gt;Did you miss last week&#x27;s blog? No worries, @Dalyc recorded an overview of
everything you need to know!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;HWCcCzBefEk&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;dungeon-difficulty-by-uncomfysilence&quot;&gt;Dungeon difficulty by @UncomfySilence&lt;&#x2F;h3&gt;
&lt;p&gt;I made some alterations to the dungeon mobs and loot tables to allow the dungeon
difficulty to scale a bit better until T6 (cultist dungeon). Previously, players
would be able to rush through dungeons T1-T5 even without much experience. Once
they reached T6 the insanely powerful cultists would make anything and
everything painful, primarily due to their humanoid AI. To accommodate for this
I varied and increased mobs skills based on tier, and gave them other stats to
their armor (although slightly sacrificing their overall defense).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Gnarling armor count - 7 previous being 7&lt;&#x2F;li&gt;
&lt;li&gt;Adlet-bow armor count - 39 previous being 62&lt;&#x2F;li&gt;
&lt;li&gt;Sahagin armor count - 71 previous being 88&lt;&#x2F;li&gt;
&lt;li&gt;Haniwa armor count - 96 previous being 91&lt;&#x2F;li&gt;
&lt;li&gt;Myrmidon armor count - 152 previous being 161&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Furthermore, all bosses ranging from T0 to T3 drop equipment one tier higher
than their code gear, i.e. T0 drops T1 gear. (In-game T3s now drop T3 loot and so
on).&lt;&#x2F;p&gt;
&lt;p&gt;All these factors should force players, particularly inexperienced players, into
joining groups. It should also add more grind time to &quot;complete&quot; the game as
newer players would be inclined to &quot;over level&quot; their characters to effectively
complete the next tier.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;912892869692506132&amp;#x2F;screenshot_1637541337298.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;skill-persistence-overhaul-by-sam&quot;&gt;Skill persistence overhaul by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve recently worked on an overhaul of the way that we persist skills, to allow
it to be more flexible to both future balance changes and future changes to
skills. The first change I made is that we no longer store how many skill points
you have, instead, we store the total amount of experience that you have earned.
In the future, this will allow us to adjust the amount of experience required to
earn skill points, and have your number of skill points automatically adjust to
account for it. The migration to convert does require (ab)using bit shifting to
emulate an exponential function (which SQLite does not have as a supported
function). However, so far some skill points there may be a slight error in
conversion, but it should always be less than 100 exp.&lt;&#x2F;p&gt;
&lt;p&gt;The second change is that rather than storing skills in a separate table from
skill groups, skills are now stored as an array in the table with skill groups.
In making this change, we will now also no longer need a conversion function
from each skill to a string and back again, instead, we are just serializing the
&lt;code&gt;vec&lt;&#x2F;code&gt; of skills directly, and handling the case of failing to serialize or
deserialize safely by invalidating your skills in that skill group (more on this
in a lower section).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;912892981965651968&amp;#x2F;screenshot_1637610089342.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Because of how we handle the failure case, this also allows us to no longer need
a migration when we change skills. This change was made so that we can verify
that the skills you have can still be acquired. For example, if we made changes
to which skills are a prerequisite for other skills, this will correctly not let
you have skills if you don&#x27;t have the new prerequisite. It also can handle the
case of changing the skill point cost required to unlock a particular skill,
where it will not give you the skill if we increased the cost of skill points
and you didn&#x27;t have excess.&lt;&#x2F;p&gt;
&lt;p&gt;The third change is that we now store a hash with each skill group. This hash is
currently defined from the skills available to unlock in a particular skill
group, as well as their max level. We persist the hash from when your skills
were last persisted, and then next time you log in compare that persisted hash
to a newly calculated hash, and if the two differ we invalidate your skills in
that particular skill group.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;912892789644230676&amp;#x2F;screenshot_1637617628764.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now for the largest benefit of this skill persistence overhaul; the ability to
automatically invalidate your skills. What this means is that when you load into
the game, any skills you had in the skill group are cleared, and you have the
ability to respec your skill points in that skill group as you wish. Further,
this respec only occurs within the skill tree that was invalidated (unless it
has skills that other skill trees depend on, e.g. how all of the weapon skill
trees depend on the general skill tree).&lt;&#x2F;p&gt;
&lt;p&gt;For the most part, this respec will be triggered when we make any balance
changes to skill trees both as a precaution to ensure that it is still possible
to reach your current skillset with the experience you have and the order you
acquired skills in, and as a way to allow you to potentially respec with the
changing opportunity cost of any balance changes we make. If we change the
amount of experience required per skill point, the skill points required to
unlock a skill, what skills are in a skill group, the max level of the skills in
the skill group, or the prerequisites required to unlock a particular skill, it
should trigger a respec.&lt;&#x2F;p&gt;
&lt;p&gt;When this change hits master, don&#x27;t be surprised to see all your skill points
refunded, as it was a necessary measure to take to ensure that stuff is properly
migrated to the new format.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;912892148972683335&amp;#x2F;screenshot_1637717749322.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;site2-work-and-giant-mushrooms-by-floppy&quot;&gt;Site2 work and giant mushrooms by @floppy&lt;&#x2F;h3&gt;
&lt;p&gt;Recently, @floppy has been making some test modifications to the site2 system.
These aren&#x27;t the final form and are being reviewed by the worldgen team. @floppy
has modified the spot structure to scale with plot size and prepared offsets and
options that allow generating variations of the structure. The variations from
plot size alone are quite plentiful with only the larger shrooms generating the
carved-out home. Variations could be extended and tweaked after testing in the
actual spot environment and connecting RNG.&lt;&#x2F;p&gt;
&lt;p&gt;@floppy has also been working on creating giant mushrooms. Here are the current
variations&#x2F;options:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;2 Color Schemes&lt;&#x2F;li&gt;
&lt;li&gt;offsets to &quot;grow&quot; structure differently&lt;&#x2F;li&gt;
&lt;li&gt;dents for more organic appearance&lt;&#x2F;li&gt;
&lt;li&gt;carved home&lt;&#x2F;li&gt;
&lt;li&gt;water puddle at the bottom&lt;&#x2F;li&gt;
&lt;li&gt;smaller side-mushroom&lt;&#x2F;li&gt;
&lt;li&gt;broken window&lt;&#x2F;li&gt;
&lt;li&gt;outside pool from decomposing shroom-top&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;qxpg2o&#x2F;testing_site2_generated_mushroom_structure&quot;&gt;the
video&lt;&#x2F;a&gt;,
all options are enabled giving all larger shrooms interior, water-puddle,
side-shroom etc.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;913081275408060466&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A postcard to send home! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;914297162228203520&#x2F;veloren.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 146</title>
          <pubDate>Mon, 15 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-146/</link>
          <guid>https://veloren.net/blog/devblog-146/</guid>
          <description>&lt;p&gt;This week, we see some videos of the new dynamic weather. We also hear about how
the new EXP sharing system works.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Sam, @Oolnokk, @zesterer, @XVar,
@Slipped, @imbris, @UncomfySilence, and @Socksonme!&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau is working on a new outfit for our merchants&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;907933280098222080&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;DpXwYEe_LWo&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Veloren ran its first Code Reading Club!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;dynamic-weather-by-zesterer-and-isse&quot;&gt;Dynamic weather by @zesterer and @Isse&lt;&#x2F;h3&gt;
&lt;p&gt;This week, @zesterer and @Isse worked on dynamic weather. Time for some rainy
weather!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;MZwfaohynvc&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;L-izjHwVuiY&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;exp-sharing-by-xvar&quot;&gt;EXP sharing by @XVar&lt;&#x2F;h3&gt;
&lt;p&gt;This week I implemented &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;2986&quot;&gt;EXP sharing&lt;&#x2F;a&gt;, which replaces the
previous behaviour of the entity (NPC or player) that deals the final blow
getting 100% of the EXP for a kill. This mechanic encouraged EXP stealing and
didn&#x27;t fairly reward players when multiple players or groups contributed to a
kill.&lt;&#x2F;p&gt;
&lt;p&gt;EXP on kill is now shared between damage contributors. A &quot;damage contributor&quot; is
either an individual entity, or a group - depending if the attacker is in a
group. This means that not only does the &quot;killing blow&quot; no longer get 100% of
EXP, but multiple groups and individuals all receive their fair share of EXP on
death (assuming they are still within range of the entity when it dies).&lt;&#x2F;p&gt;
&lt;p&gt;The diagram below shows a scenario where two groups of players and a solo player
contributed damage to an NPC that was killed. As you can see, the EXP is split
based on damage contribution but once it reaches a group the EXP is split evenly
to members within the group regardless of their individual damage contribution.
This ensures that all players within a group, even those playing a
support&#x2F;healer role get their fair share of their group&#x27;s EXP even though they
contributed less damage.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;909190993381822554&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 90%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Damage from a given individual or group only counts towards a kill for 10
minutes since that individual or group&#x27;s last damage to the entity - after this
period their damage contribution is removed. This avoids the list of damage
contributors growing excessively large for an entity that does a lot of combat
but never dies.&lt;&#x2F;p&gt;
&lt;p&gt;The Damage Contribution calculations implemented for this feature are also
planned to serve as the basis for further enhancements to team play and
anti-griefing measures - for example loot distribution may use the same
calculation to decide which player or group gets a drop.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;909253379287580672&#x2F;screenshot_1636853243410.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 145</title>
          <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-145/</link>
          <guid>https://veloren.net/blog/devblog-145/</guid>
          <description>&lt;p&gt;This week, we hear about some changes to the textures of dropped items. We also
see into how some concept art for larger cities in Veloren is being created.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Demonic, @Sam, @UncomfySilence,
@jon18, and @XVar!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-textures-of-item-drops-by-socksonme&quot;&gt;New textures of item drops by @Socksonme&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve recently touched up some of the textures for item drops. Instead of having
the default be &lt;code&gt;BeastMeat&lt;&#x2F;code&gt;, which isn&#x27;t really that general, it&#x27;s now &lt;code&gt;Pouch&lt;&#x2F;code&gt;.
I&#x27;ve also changed &lt;code&gt;BipedLarge&lt;&#x2F;code&gt; to use &lt;code&gt;Pouch&lt;&#x2F;code&gt;, much like how &lt;code&gt;BipedSmall&lt;&#x2F;code&gt; does,
and &lt;code&gt;Object&lt;&#x2F;code&gt; (for example, the turrets in tier 6 dungeons) now drops &lt;code&gt;Chest&lt;&#x2F;code&gt;
instead of &lt;code&gt;BeastMeat&lt;&#x2F;code&gt;. We&#x27;d eventually want to change how the item drop
textures are chosen, but as of now, they are based on the &lt;code&gt;Body&lt;&#x2F;code&gt; type of the
entity, rather than the actual items themselves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;907572252290187285&amp;#x2F;BeastMeat.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;907572405164199987&amp;#x2F;pouch.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;907572662996455424&amp;#x2F;chest.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;city-concepts-by-hannibal&quot;&gt;City concepts by @Hannibal&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Editor&#x27;s note; for clarity, this section is done entirely in MagicaVoxel, and
doesn&#x27;t represent changes to the proc gen of current villages.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I am currently developing the concept art architecture of different biomes and
races for future villages, cities, and towns. I do mockups on MagicaVoxel to
show how potential biome sites could look. So far I have done one variant of
desert biome rework and I am planning for the next few months to design the
architecture of:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Humans in plains&lt;&#x2F;li&gt;
&lt;li&gt;Elves&lt;&#x2F;li&gt;
&lt;li&gt;Danari&lt;&#x2F;li&gt;
&lt;li&gt;Orcs&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This should take me quite some time but will be a massive advancement in terms
of concept art for how Veloren architecture could look.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;909124819633700874&amp;#x2F;screenshot_1633657158130.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Model imported into Veloren&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The desert city mockup I made was imported on a Veloren test server in October
to see how it would look and to see if the scale was right and it helped me see
what could be improved in terms of design and layering. The biggest changes in
the next mockups will include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;More variants of houses and assets in general&lt;&#x2F;li&gt;
&lt;li&gt;More structures and pathed areas&lt;&#x2F;li&gt;
&lt;li&gt;Better polishing of the smaller assets&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Of course, we are a long way from having actual cities in the game but I do
think it&#x27;s important to start designing concepts now so we know what to aim for
in the long term. A small teaser of the Human Plain Architecture:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;909125317396955187&amp;#x2F;Screen_Shot_2021-11-13_at_11.58.32_AM.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;909126358809083955&amp;#x2F;Screen_Shot_2021-11-13_at_12.02.42_PM.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;909461674514341909&#x2F;screenshot_1636895330128.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 144</title>
          <pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-144/</link>
          <guid>https://veloren.net/blog/devblog-144/</guid>
          <description>&lt;p&gt;Hats were merged this week, and the server hosting section of The Book was
updated.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Slipped, @Oolnokk, @Sam,
@Evelyn, @xMAC94x, @juliancoffee, @tijnvdheuvel, @Pfau, @IsseW, @Kemper, and
@Demonic!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @LunarEclipse finished a major rewrite of the server hosting section of The
Book. Hats were also merged! Check out the images below:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;904307893749301248&amp;#x2F;screenshot_1635668610412.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;904307930617245746&amp;#x2F;screenshot_1635668537526.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;904307961470521365&amp;#x2F;screenshot_1635668391928.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;s all we have for this week! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;906695220970795068&#x2F;screenshot_1636240473511.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 143</title>
          <pubDate>Mon, 25 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-143/</link>
          <guid>https://veloren.net/blog/devblog-143/</guid>
          <description>&lt;p&gt;This week, we hear about improvements that are being made to the stealth system.
Worldgen is also getting some work done.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @IsseW, @Demonic, @zesterer, @Slipped,
@Kemper, @AngelOnFira, @Snowram, @Qiu, @antoniomuso, @Sam, @ubruntu,
@UncomfySilence, and @DoctorKompot!&lt;&#x2F;p&gt;
&lt;p&gt;This week, we hit 10,000 members on our Discord server!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stealth-by-ubruntu&quot;&gt;Stealth by @ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;Since the last blog post, I added the stealth attribute to armors. It was sort
of already there, but set to 0 on all armors. I basically added values for the
craftable armors and added the logic to make the numbers correspond to stealth
effectiveness. It can be understandably opaque what the associated number means
exactly so I want to explain it a bit here. I&#x27;m hoping to convert it to a more
understandable number like a percentage, and show more details with tooltip
information about it in the future!&lt;&#x2F;p&gt;
&lt;p&gt;Currently, the way stealth works is that your character is considered sneaking
when they are crouched down, or rolling when previously crouched. Right now
sneaking only affects the perception distances (both sight and hearing) in the
agent system, meaning that sneaking characters must be closer to NPCs before
they are detected.&lt;&#x2F;p&gt;
&lt;p&gt;The stealth stat specifically affects the perception distances of NPCs, and
here&#x27;s how:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;With no increases to the stealth stat, sneaking cuts the perception distance
in half.&lt;&#x2F;li&gt;
&lt;li&gt;Additional stealth from armor is added to the denominator of this fraction, so
&lt;code&gt;1 &#x2F; (2 + n)&lt;&#x2F;code&gt;, and this number is multiplied with the agent&#x27;s perception
distances. Reaching a percentage around 20-25% is probably enough to avoid
most confrontations.&lt;&#x2F;li&gt;
&lt;li&gt;The stealth stat is currently intended to be the highest value on hide armors,
half as much on cloth armors, and mail armors aren&#x27;t intended to have stealth
bonuses. I didn&#x27;t add the stat to rings and necklaces because those were
recently overhauled, but I&#x27;m not opposed to those having stealth bonuses as
well.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A few other things to mention about stealth:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;All agents have the same perception distances and that might change.&lt;&#x2F;li&gt;
&lt;li&gt;Using a lantern does not affect stealth yet. Caves and dungeons may require
more light sources before this changes.&lt;&#x2F;li&gt;
&lt;li&gt;I am by no means &#x27;the stealth dev&#x27;, so I won&#x27;t prevent anyone from improving
this fun game mechanic.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;903271190548873266&amp;#x2F;screenshot_1635426929782.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;worldgen-by-demonic&quot;&gt;Worldgen by @Demonic&lt;&#x2F;h3&gt;
&lt;p&gt;This is my first blog post since I&#x27;ve returned to the project. I&#x27;ve been working
on adding Spots, Sprites, Ships, and Shrubs, &quot;Holy that&#x27;s a lot of S&#x27;s&quot; to our
current world generation system. I&#x27;ve been working with @zesterer to improve
upon the current river world generation. He&#x27;s teaching me about how a bit of the
backend works.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Newly added:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Shrubs - Added to Jungles&#x2F;Forests, Savannahs, Grasslands, and Taiga biomes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Spots:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added Gnarling Tree - that can be found in jungles and forests.&lt;&#x2F;li&gt;
&lt;li&gt;Added Troll Cave - Spawns in Jungles, Forests, Grasslands, and Taiga biomes&lt;&#x2F;li&gt;
&lt;li&gt;Added Shipwreck - Spawns within lakes and coasts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Ships:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added Galleon class ship - spawns naturally or can be spawned by a Game
Moderator (Drivable)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;(WIP Un-merged) &lt;strong&gt;Sprites:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added Lilly pads and new Reeds to rivers and lakes.&lt;&#x2F;li&gt;
&lt;li&gt;Added new Ferns, Red Grass, and Flowers to Jungle, Forest, Grassland biomes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Massive thanks for most of the Assets contributed by @Gemu.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;903560033802022922&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Roaming in the wild. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;903559519819419668&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 142</title>
          <pubDate>Mon, 18 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-142/</link>
          <guid>https://veloren.net/blog/devblog-142/</guid>
          <description>&lt;p&gt;This week, we learn about some proposed changes to how Airshipper downloads
updated assets. We also learn about some changes coming to jewelry.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @ubruntu, @xMAC94x, @nwildner,
@Slipped, @UncomfySilence, @zesterer, @MHK.2012, @kaedr, @Socksonme, @KaliKatz,
@Sharp, and @imbris!&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer reworked the aurora shaders (along with how lighting at night is
handled). You can see the results below. You can read this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;TfBJOE8pRbaHVNyBMB2fBg&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;60kt915avjI&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;asset-downloads-by-christof&quot;&gt;Asset downloads by @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;Motivated by the network speed issues with Airshipper, I recently made a
proposal for incremental downloads of the game. See the discussion in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;449602562165833758&#x2F;897605984837595206&#x2F;897606117818007592&quot;&gt;this
thread&lt;&#x2F;a&gt;
for more details. Basically, this proposal will send the checksum of all the
files to Airshipper which will download only missing and updated parts of the
archive - using either individual file sub-archives or full directories as
needed. These sub-archives can be generated from a complete archive, on the fly
by a cheap server-side logic, and are fully cacheable. The assets are even
identical across architectures.&lt;&#x2F;p&gt;
&lt;p&gt;Also, I found that of the 200MB distribution file only 66MB are taken by the
daily changing binaries, the rest is typically unchanged. Further investigation
showed that the 66MB for &lt;code&gt;veloren-server-cli.exe&lt;&#x2F;code&gt; and &lt;code&gt;veloren-voxygen.exe&lt;&#x2F;code&gt; can
shrink to 40MB by using a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;Lempel-Ziv-Markow-Algorithmus&quot;&gt;more efficient
compression&lt;&#x2F;a&gt; (aka
.lzma or .xz) instead of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Deflate&quot;&gt;deflate&lt;&#x2F;a&gt; (aka
.gz or zlib). Typically we might avoid this less portable compression method in
zip files, if the archive was meant to be extracted by a different program than
Airshipper. In Airshipper, we can bundle
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lib.rs&#x2F;crates&#x2F;lzma-rs&quot;&gt;lzma-rs&lt;&#x2F;a&gt; to decompress this format (which is
also supported by 7-Zip and newer WinZip versions).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;895381646751199342&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;sneaking-by-ubruntu&quot;&gt;Sneaking by @ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I refactored character states a bit so that sneaking isn&#x27;t its own
distinct state in the &lt;code&gt;CharacterState&lt;&#x2F;code&gt; enum, but rather it&#x27;s an attribute of the
&quot;idle&quot; state. The wielding and equipping states also got a stealth variety, and
the end result is that players can pull out their weapons while sneaking. Shout
out to @Slipped for doing all the animation work.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jewelry-changes-by-doctorkompot&quot;&gt;Jewelry changes by @DoctorKompot&lt;&#x2F;h3&gt;
&lt;p&gt;Recently, I&#x27;ve been working on an update for jewelry. Existing rings are being
reworked and some new necklaces are getting added.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;900082505804312616&amp;#x2F;necklaces.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Legendary necklaces (yellow borders):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ankh of Life&lt;&#x2F;strong&gt; - Drops from mind flayer, an energy-based necklace&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Carcanet of Wrath&lt;&#x2F;strong&gt; - Drops from minotaur, gives critical power&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Epic necklaces (purple borders):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cultist Amulet&lt;&#x2F;strong&gt; - Drops from mind flayer, similar stats to the Cultist set,
well balanced&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Diamond Necklace&lt;&#x2F;strong&gt; - Craftable, similar stats to the ring, but stronger&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ruby Necklace&lt;&#x2F;strong&gt; - Craftable, similar stats to the ring, but stronger&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Emerald Necklace&lt;&#x2F;strong&gt; - Craftable, similar stats to the ring, but stronger&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Rare necklaces (blue borders):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fang Necklace&lt;&#x2F;strong&gt; - Craftable&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Haniwa Talisman&lt;&#x2F;strong&gt; - Drops from T3 dungeon boss (Golems)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Honeycomb Pendant&lt;&#x2F;strong&gt; - Craftable&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Uncommon necklaces (green borders):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sapphire, Amethyst, and Topaz Necklaces&lt;&#x2F;strong&gt; - Craftable, similar stats to the
rings&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Gold Necklace&lt;&#x2F;strong&gt; - drops, from sauroks, humanoids, and large cave monsters&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Seashell&lt;&#x2F;strong&gt; - craftable&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Gem of Resilience&lt;&#x2F;strong&gt; - (renamed from Gem of Lesser Protection) drops from T2
dungeon boss&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Common necklaces (grey borders):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pendant of Protection&lt;&#x2F;strong&gt; (used to be named Plain Necklace) Drops from T1
dungeon&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Low-Quality Necklace&lt;&#x2F;strong&gt; (basically starter item) Scratched necklace Drops
from T0 dungeon&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;898936693002997760&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A serene morning. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;898627919222546472&#x2F;screenshot_1634319966789.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 141</title>
          <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-141/</link>
          <guid>https://veloren.net/blog/devblog-141/</guid>
          <description>&lt;p&gt;This week, we hear about a crafting overhaul and the new salvage functionality
that will come with it.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @imbris, @juliancoffee, @Sam,
@xMAC94x, @IsseW, @JTriantafylos, @Pfau, @antoniomuso, @ubruntu, @devrique,
@GLawrence29, @Treeco, and @CapsizeGlimmer!&lt;&#x2F;p&gt;
&lt;p&gt;This week, Veloren hit 10,000 commits! You can read this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;eGxCtRT8SliQ_4k75o2ZQA&quot;&gt;here&lt;&#x2F;a&gt;. Several developers are
participating in Hacktoberfest contributions to Veloren; make sure to read &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;hacktoberfest-2021&quot;&gt;our
blog post about it&lt;&#x2F;a&gt; if you want to also
participate!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;898916821665738762&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Number of lines of code at this point&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@ubruntu added loot notifications for groups. When people are in a group, they
receive notifications of what other members of the group pick up. People no
longer have to ask &quot;What did the boss drop?&quot; or &quot;What was in that chest?&quot;.
@juliancoffee Fixed strange names for travelers, no more Orcs named Danari.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;crafting-updates-by-sam&quot;&gt;Crafting updates by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve begun (and almost finished) making some tweaks to how crafting works in the
backend. Crafting now works through an enum. For now, there will be two kinds of
crafting: &lt;code&gt;SimpleRecipe&lt;&#x2F;code&gt; (which works much the same as current crafting), and
&lt;code&gt;Salvage&lt;&#x2F;code&gt; (which is the dismantle recipe, but better).&lt;&#x2F;p&gt;
&lt;p&gt;For &lt;code&gt;SimpleRecipe&lt;&#x2F;code&gt;, rather than only sending over the recipe that the client is
trying to craft, it now also sends over a vector of slots that the client wants
to use to craft the recipe. In the future, this will aid in allowing a player to
specify which item they want to use in a recipe where there are multiple valid
inputs. This will be the case for modular weapons, which is one of the main
motivations for me to do all this work.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;898557257929850890&amp;#x2F;screenshot_1634275493612.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A potion is being brewed!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Also, all dismantling recipes have been removed. Instead, they now go through
the aforementioned &lt;code&gt;Salvage&lt;&#x2F;code&gt;. This works by specifying a slot that the client
wishes to salvage, and the server then checks if the item can be salvaged,
returning the salvaged items if it could be.&lt;&#x2F;p&gt;
&lt;p&gt;Salvaging will now also be done using a new crafting station, the Salvaging
Station. @Pfau has made a model for this. @Snowram has also been working on
getting the salvage output to be displayed in the tooltip of an item when you
are at the salvaging station.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;898627919222546472&amp;#x2F;screenshot_1634319966789.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flight coming in at night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;896445795837050961&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 140</title>
          <pubDate>Mon, 04 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-140/</link>
          <guid>https://veloren.net/blog/devblog-140/</guid>
          <description>&lt;p&gt;This week, we hear about some bugs that are in the game right now. We also
explore some upcoming changes to the economic system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @imbris, @Sam, @ubruntu, @a1phyr,
@Yurimomo, @flo, @sylvain_m, and @Bafon!&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer got shrubs merged, so at last most existing water issues have been
fixed and rivers should generally look better. Also, waterfalls!&lt;&#x2F;p&gt;
&lt;p&gt;@ubruntu made a small change so that the interact key can be used on campfires.
Right now it makes you sit at a campfire which activates the campfire healing
aura. This opens up the possibility that campfires open a crafting menu in the
future.&lt;&#x2F;p&gt;
&lt;p&gt;@imbris created a credits screen so attribution for various art assets
(especially the ones that require it) can be added. They also refactored
resizing a bit making it no longer produce weird behavior or Vulkan validation
errors when rapidly resizing.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;CwzuAxIpebE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A timelapse by @fisik_yum&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;network-speed-issues-by-angelonfira&quot;&gt;Network speed issues by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;Of recent, we&#x27;ve been seeing a lot more people mention they have issues with
downloading, connecting, or playing the game due to network issues. This week,
I&#x27;ve been working on examining the cause of these issues more.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;896802396330664027&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A bandwidth test on the server&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;First off, even for fast internet connections, people haven&#x27;t been able to
download updates on Airshipper at more than around 100Mbps. This issue could
come from many places, including the server network, the server filesystem, the
datacenter networking, the Airshipper client, or something more obscure.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;557222912394788884&amp;#x2F;894403407492816956&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Server bandwidth recoded when a single client is updating. Peaks around 100Mbps.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I examined some code on both the Airshipper client and server to track down
where the key points of the download are happening. I didn&#x27;t find anything that
stood out right away, such as an artificial bandwidth limit hardcoded or
anything.&lt;&#x2F;p&gt;
&lt;p&gt;I then came up with some tests to rule out areas where the issue might be
caused. I first launched a dozen or so Airshipper instances, and got each of
them to update at once. You can see the network usage in the image below. Note;
something is wrong with the metrics, since our server is capped at 1Gbps.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;557222912394788884&amp;#x2F;894405156299485254&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;However, with this graph, we can see that we are able to transmit far over the
100Mbps rate that clients are receiving. This was backed up by the fact that all
of my Airshipper clients were able to download the updates in about the same
amount of time as if it was just a single client downloading.&lt;&#x2F;p&gt;
&lt;p&gt;This increased the probability of the problem being on Airshipper&#x27;s client,
however, I quickly ruled this out by trying to manually download the updates
through my web browser. I was limited to the same speed, and Firefox can
certainly download higher speeds.&lt;&#x2F;p&gt;
&lt;p&gt;I then simulated the Airshipper server on my local machine. It uses Rocket under
the hood, so @imbris gave me a hand looking around to see if it could cause any
issues. Once I ran the tests, I did see that it allowed me to download files
locally at greater-than-gigabit speeds. At this point, it seems that the client
code is fine, the server code is fine, and the problem has to be in the network
or the server&#x27;s filesystem.&lt;&#x2F;p&gt;
&lt;p&gt;I spend some time playing with how Docker access files from its filesystem. I&#x27;m
not sure about this, but I think that if a volume is mounted into Docker, it is
accessed differently than if it was built into the image. I tried running some
tests on the server to see how it was able to access data from within the
container vs on the filesystem.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;894418961247121458&amp;#x2F;894428385827242054&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;These tests aren&#x27;t very accurate, but it does show us that it can write files
inside and outside the Docker container at about the same speed. Next, generated
a garbage file that was a gigabyte in size inside the server, and tried
downloading it through HTTP, as the client would. The download was on the same
host, and it was able to download at local speeds.&lt;&#x2F;p&gt;
&lt;p&gt;After all of this, it seems the problem is around how fast a single stream can
download data from Hetzner. I ended my investigations for the night at this
point, and sent off an email to Hetzner to see if they could help. They didn&#x27;t
know of any immediate issues, and suggested running some diagnostics from their
end.&lt;&#x2F;p&gt;
&lt;p&gt;Going forward, there are still a few more tests I want to run. One is getting a
generic file server to try and download a file from. I want to prove that we
can&#x27;t download &lt;em&gt;any&lt;&#x2F;em&gt; file from the server at more than 100Mbps. From there, I&#x27;ll
probably dive further into networking on the VM itself. Hopefully, we can see
improvements to download speeds in the future.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;896538978629607434&amp;#x2F;screenshot_1633818914502.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The lone airship. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;896010138199146496&#x2F;screenshot_1633655229457.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Hacktoberfest 2021</title>
          <pubDate>Sun, 03 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/hacktoberfest-2021/</link>
          <guid>https://veloren.net/blog/hacktoberfest-2021/</guid>
          <description>&lt;h2 id=&quot;hacktoberfest-2021&quot;&gt;Hacktoberfest 2021&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren will be participating in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hacktoberfest.digitalocean.com&#x2F;&quot;&gt;Hacktoberfest
2021&lt;&#x2F;a&gt;! This will be an opportunity to
get more developers started on the project, and help them along the way. Also,
you get a cool t-shirt if you make 4 separate pull requests!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-is-hacktoberfest&quot;&gt;What is Hacktoberfest?&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;From the website:&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hacktoberfest, in its 8th year, is a month-long celebration of open source
software run by DigitalOcean. During the month of October, we invite you to join
open-source software enthusiasts, beginners, and the developer community by
contributing to open-source projects. You can do this in a variety of ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Prepare and share your project for collaboration&lt;&#x2F;li&gt;
&lt;li&gt;Contribute to the betterment of a project via pull requests&lt;&#x2F;li&gt;
&lt;li&gt;Organize an event&lt;&#x2F;li&gt;
&lt;li&gt;Mentor others&lt;&#x2F;li&gt;
&lt;li&gt;Donate directly to open source projects&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;how-do-i-get-started&quot;&gt;How do I get started?&lt;&#x2F;h3&gt;
&lt;p&gt;First of all, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hacktoberfest.digitalocean.com&#x2F;register&quot;&gt;register on the Hacktoberfest
website&lt;&#x2F;a&gt;. You&#x27;ll need to sign
up with GitLab (and GitHub as well if you like), since all pull requests are
done through GitLab.&lt;&#x2F;p&gt;
&lt;p&gt;Next, hop into our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;discord.gg&#x2F;ecUxc9N&quot;&gt;Discord Server&lt;&#x2F;a&gt;, and go to the #hacktoberfest channel. Here, you can ask for help to get started. We&#x27;ll get you
set up with contributing, and help you find &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues?label_name=hacktoberfest&quot;&gt;an issue with the Hacktoberfest
tag&lt;&#x2F;a&gt;. As
you&#x27;re working on it, core developers will be on hand to help you understand what you
need. Feel free to ask for help!&lt;&#x2F;p&gt;
&lt;p&gt;We hope that this will help new contributors get started on the project, and
help improve their Rust skills.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;894296884347289661&#x2F;logo-hacktoberfest-full.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 139</title>
          <pubDate>Mon, 27 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-139/</link>
          <guid>https://veloren.net/blog/devblog-139/</guid>
          <description>&lt;p&gt;This week, we hear about some bugs that are in the game right now. We also
explore some upcoming changes to the economic system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @juliancoffee, @Sam, @xMAC94x, @j4n3z,
@imbris, @XVar, @Seth, @Bafon, @Capucho, @heydabop, @zesterer, @ubruntu, and
@Slipped!&lt;&#x2F;p&gt;
&lt;p&gt;@Saluki did a little bit of refactoring on some asset names so references should
be a bit more logical.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bug-searching-by-yuri-and-zesterer&quot;&gt;Bug searching by @Yuri and @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;Yuri has been working on searching for bugs. Here is a description of one bug,
written by @zesterer:&lt;&#x2F;p&gt;
&lt;p&gt;One of the mind flayers (let&#x27;s call him Dave) reduced the maximum health of
another (let&#x27;s call her Susan). When Susan&#x27;s AI code ran, she checked her health
proportion to decide what strategy to use next. But the problem is that when the
maximum health of an entity gets changed, it doesn&#x27;t change the current health.&lt;&#x2F;p&gt;
&lt;p&gt;So you had a situation where Susan&#x27;s current health &amp;gt; her maximum health. If you
calculate health as a proportion of the maximum, in that case, you end up with a
number &amp;gt; 1. So the only thing that needs to happen is that her maximum health
gets updated by Dave, and then on the next (or even the same) tick Susan runs
her AI code. And Susan was using this &amp;gt;1 proportion as a probability, which is
not valid (you can&#x27;t have a probability &amp;gt; 1, or more than certain).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;888866981766381639&amp;#x2F;screenshot_1631992793141.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;new-economic-system-by-christof&quot;&gt;New economic system by @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;I have a working prototype of the new economic system in my side branch. This
system is much more complex (e.g. compare the image below to older tech trees in
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-114&quot;&gt;devblog 114&lt;&#x2F;a&gt;), has reusable tools, building
ground limiting city population, and works even in remote biomes. It prefers
different house styles (tent, hut, wood, and stone house) and food types in
different biomes.&lt;&#x2F;p&gt;
&lt;p&gt;The next steps are: better balance between tiers (e.g. different gem&#x2F;ore types)
and making the economic situation more player visible in cities (clothing,
housing, activities).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;892529116790816799&amp;#x2F;economy.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;893855127797125120&#x2F;screenshot_1633181355018.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 138</title>
          <pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-138/</link>
          <guid>https://veloren.net/blog/devblog-138/</guid>
          <description>&lt;p&gt;This week, we hear about improvements being made to the hitbox system. There are
also fixes for how your cursor works in-game, and some changes to the health
system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @juliancoffee, @xMAC94x, @zesterer,
@Slipped, @mehmetmalli, @XVar, @kimtinh, @James, @imbris, @anomaluridae,
@ubruntu, @Capucho, @Sam, @Pfau, @Bafon, and @GiocArt!&lt;&#x2F;p&gt;
&lt;p&gt;@Snowram did some minor things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed the fact projectile initial spawn. They used to always spawn inside the
entity that fire them, now they spawn in front of it&lt;&#x2F;li&gt;
&lt;li&gt;Added a box behind the debug text so that you can finally see it when it is on
top of a cloud (transparency level follows chat setting)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;889599896850685982&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 40%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;hitboxes-by-juliancoffee&quot;&gt;Hitboxes by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;It has been a long road since I started combat balancing. It started with my
love for shooting stuff with the bow because it&#x27;s arguably the most controllable
weapon in the game, and has quite a high skill cap. An issue came up when we had
the single player map with a desert almost at spawn. You just needed to glide
from the mountain and all of us love gliding, yes? One of the most frequent
inhabitants of the desert is camels. How do hitboxes relate to Camels, you might
ask? Well, look at this picture:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888505437622771752&amp;#x2F;screenshot_1631900578894.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Camel hitbox&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;How does this happen? Well, the most obvious answer is that its hitbox is not
well defined, look at height for example. Actually, it isn&#x27;t defined at all, and
it is using fallback dimensions. That&#x27;s one of the fundamental problems we need
to solve, but there are other problems. Look at this picture with clay golem&#x27;s
hitbox:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888505769174134805&amp;#x2F;screenshot_1631900887599.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Clay Golem hitbox from eye to eye&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The height is ok, but some visual parts are clearly aren&#x27;t there, you can&#x27;t hit
the hands at all! Why it was defined like that? Well, for this we need to look
at another picture:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888506060208472155&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Clay Golem&amp;#x27;s hitbox you&amp;#x27;d see if if you were bird and playing
with debug hitboxes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;You should start to see that something is wrong. This hitbox is very imprecise,
you can&#x27;t hit his hands, but if you just hit the air in front of him, you&#x27;ll
shoot him. That&#x27;s because our hitboxes are cylinders. So if you&#x27;ll increase the
radius to be able to cover his hands, you will increase the overall cylinder
radius. And you&#x27;ll say: &quot;But no one is shooting Clay Golem like that! Just make
radius big enough!&quot;. And I agree with you. But look at the next pictures.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888506470281396234&amp;#x2F;screenshot_1631904649480.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888506626875732009&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tail hitbox&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;If we will allow you to be able to hit Archaeos tail, its hitbox will become
just huge. So basically it says: &quot;No matter how hard you try, hitboxes will
suck&quot;. Which is very sad.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s what I was trying to fix. Why do we use cylinders? It&#x27;s fast and simple.
If you want to ask the question &quot;is this point is inside or outside of the
cylinder?&quot; you need to do two things. Compare z component of point and check
that it&#x27;s less than the top and more than the bottom and calculate 2d distance
between point and cylinder: if it is less than the radius, then the point is
inside. So we want something as simple which at the same time gives us the
ability to make our hitboxes better.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve come up with capsule prisms. (I heard this idea from @zesterer). It&#x27;s a
prism with a stadium-like form as the base. This means it has the same form at
any height, contrary to spheres for example, which have a lesser radius on each
Z-slice.&lt;&#x2F;p&gt;
&lt;p&gt;The stadium-like form can be created by one segment and points around that
segment with equal distance. See? Equal distance, that&#x27;s what we love about
cylinders. Some also call it like sausage body 🤠&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888507064832385124&amp;#x2F;800px-Stadium_geometry.png&quot;
    
      style=&quot;width: 20%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Stadium where Archimedes beats Zeus&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So now if you need to calculate distance from the point to our capsule prism you
need to check the z component in the exact same way as you do with cylinders,
and then compare the 2d distance between point and line segment. It&#x27;s more
complex than the distance between points, but it&#x27;s still 2d which is still quite
easy.&lt;&#x2F;p&gt;
&lt;p&gt;It becomes more complex when you need to answer the question what is the
distance between line segments, that&#x27;s where I wanted to thank @zesterer for
this formula and @imbris for some tweaks to the formula to make it more reliable
in edge cases. In the end, I would like to show a picture of the new hitboxes
for the camel and Cyclops:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888507418684833893&amp;#x2F;screenshot_1631905100432.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888507745182044170&amp;#x2F;screenshot_1631904897757.png&quot;
    
      style=&quot;width: 60%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sausage boxes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is a backend change to our physics, but we still need to make our hitboxes
good, stay tuned! If you read this on our weekly blog, the chances are that
Husks hitboxes aren&#x27;t that bad now.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;888508146623078430&amp;#x2F;screenshot_1631903285853.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The secret of cultist dungeons. Headless Husks!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;cursor-curmudgeons-by-anomaluridae&quot;&gt;Cursor Curmudgeons by @anomaluridae&lt;&#x2F;h3&gt;
&lt;p&gt;Have you ever tried collecting a mushroom in a cave, but since you are holding
your pick axe, your cursor keeps detecting the ore (and not the fungi clearly
under your crosshairs)? Are you forced to un-equip your pickaxe first (a.k.a.
leave mining mode), in order to satisfy your fungi fanaticism?&lt;&#x2F;p&gt;
&lt;p&gt;Have you ever been in build mode, but still want to pull out your pickaxe and
start mining at the same time? Without leaving build mode? Have you noticed that
when you are trying to mine while in build mode, you often end up vaporizing
your precious ore (a.k.a. removing the block) instead of getting that loot?&lt;&#x2F;p&gt;
&lt;p&gt;Well, now you can!&lt;&#x2F;p&gt;
&lt;p&gt;The previous method did an order of precedence based upon a presumed preferred
action. It assumed building (when in build mode), was preferred over mining
(when holding your pick axe), was preferred over anything else.&lt;&#x2F;p&gt;
&lt;p&gt;The updated method takes an order of precedence based upon the nearest target
under your cursor. (It also does some refactoring to de-tangle a few things, and
separate concerns into separate abstractions.)&lt;&#x2F;p&gt;
&lt;p&gt;Big thanks to @imbris for his patience with this first-time Veloren contributor.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;health-refactor-by-sam&quot;&gt;Health refactor by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I have refactored how health works. Some of you who peeked around the ability
asset files or looked into the code may have noticed that health was scaled by a
factor of 10 compared to the value you would have expected. This was originally
done to allow for more granular health changes than whole numbers as we keep
health an integer. However, it also had the problem that it could be tedious to
remember when changing abilities or reasoning about the total amount that would
change with buffs.&lt;&#x2F;p&gt;
&lt;p&gt;To solve this health will now only retain the scaling within the health module,
and functions that externally interact with health use non-scaled values.
Further, we opted to have all external interactions with health use floats
instead of integers as in practically all cases it is more convenient to do, and
it requires fewer casts between the two. The scaling was also changed from a
factor of 10 to a factor of 256 in order to make full use of the precision
offered by floats.&lt;&#x2F;p&gt;
&lt;p&gt;Now this change was meant to be purely a backend change, so ideally no one would
have noticed any difference after the fact, however, there were a few sneaky
bits that I missed in the conversion, such as XP reward calculations, the
health stat in the inventory menu, and damage values from lava, bombs,
campfires, and fireworks. A similar refactoring will happen and is in progress
for energy, and will be started soon for poise.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;889600343170764840&amp;#x2F;SPOILER_wyvern.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A sneak peak from @Snowram, @Slipped, and @Gemu. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;888043868698841098&#x2F;screenshot_1631760632063.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 137</title>
          <pubDate>Mon, 13 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-137/</link>
          <guid>https://veloren.net/blog/devblog-137/</guid>
          <description>&lt;p&gt;This week, we break down how the 0.11 release party went and examine server
metrics.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Sam, @Capucho, @xMAC94x,
@imbris, and @Pfau!&lt;&#x2F;p&gt;
&lt;p&gt;This week, 0.11 was released! The release party was the largest yet, with 181
players on the server at once. You can read the blog post with the changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;release-0-11&quot;&gt;here&lt;&#x2F;a&gt;. If you haven&#x27;t already, check out the
trailer:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;l1oOjvaWJlw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;During the release party, some devs chatted about what new changes there were,
as well as some more technical details about the launch. You can check that out
here:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;J5Xz-vbE27Q&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;analyzing-the-release-party-by-angelonfira&quot;&gt;Analyzing the release party by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Images by @YuriMomo&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This release party was by far the best yet from the perspective of the
infrastructure team.&lt;&#x2F;p&gt;
&lt;p&gt;In previous releases, our server started having major issues as we reached our
record player counts. There were also several issues we didn&#x27;t see before having
that many players online, such as deadlocks in players connecting, or having
certain systems taking longer each tick, causing a snowball effect.&lt;&#x2F;p&gt;
&lt;p&gt;With this release however, we did not experience any of these issues. The
largest problem we found was that our entity sync system was taking too much
time, since it hasn&#x27;t been parallelized properly. But it didn&#x27;t cause larger
issues in the release party. Even with the 181 players, the server was still
operating nominally!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;886339358968381510&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Server statistics over the release party&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We ran the release party on a 48 core compute server in a Hetzner datacenter.
For &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-124&quot;&gt;the last release party&lt;&#x2F;a&gt;, we used a 32
core server. Throughout that party, we were still struggling under the load of
several systems. It&#x27;s hard to say how much this server helped improve the
performance overall, but it clearly helped with several of the larger systems.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;886339863870320721&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the image above, we can see that the heaviest systems are terrain and
physics. Each tick is supposed to be around 33 milliseconds, which will create
30 ticks per second. Terrain is taking 523 ms, while physics is taking 252 ms.
This is because they are combining work over all 48 cores to add to this time.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;886340460006756362&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above, we get a larger breakdown of the &quot;slow systems&quot; that are taking up time
on the main thread. We can see that times for the terrain and physics systems
are quite small since they&#x27;re parallelizing nicely. However, entity sync is much
higher. We can also see that it becomes a larger problem later during the
release party. This should be fixed before the next large server party.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;886340057257087006&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above, we can see our bandwidth usage. At peak, we were transmitting around 40
megabytes per second. This is about a third of what the cloud server can offer
with its gigabit internet, but we should expect it not to meet those limits, as
cloud instances share the uplink with other VMs on the same host machine. Going
forward, bandwidth is something we&#x27;ll work on improving. This is both to take
the load off the server, but make it easier for clients as well.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;community-videos&quot;&gt;Community videos&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;SqvndmDVq1Y&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;mgiBwuc6om8&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;886685893275045898&amp;#x2F;screenshot_1631386070929.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Adventurers at the release party. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;886398362868400128&#x2F;screenshot_1631404304436.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>Veloren 0.11 Release</title>
          <pubDate>Sat, 11 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/release-0-11/</link>
          <guid>https://veloren.net/blog/release-0-11/</guid>
          <description>&lt;h2 id=&quot;0-11-release&quot;&gt;0.11 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Today, Veloren is releasing 0.11. This version is 3 months in the making, and we
have a lot to show off!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this before &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;everytimezone.com&#x2F;s&#x2F;cefd9f4d&quot;&gt;18:00 GMT today (September
11th)&lt;&#x2F;a&gt;, make sure to join the release
party. To join, you can download the game for free at
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;download&quot;&gt;veloren.net&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;account&quot;&gt;create an
account&lt;&#x2F;a&gt;, then launch the game and hop on the
default server. See you there!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;l1oOjvaWJlw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;&#x2F;h3&gt;
&lt;p&gt;Below are some of the key items from the release. You can check out the full
changelog
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;e4716147a7356eb13088e7d74ace3ccdcb5cd900&#x2F;CHANGELOG.md#0110-2021-09-11&quot;&gt;here&lt;&#x2F;a&gt;.
A large emphasis in this version was making combat more dynamic all around the
world. This comes in the form of the new spot system, as well as how NPCs and
mobs can interact with the world. Read on to see what else is new!&lt;&#x2F;p&gt;
&lt;h4 id=&quot;added&quot;&gt;Added&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Added a skill tree for mining, which gains xp from mining ores and gems.&lt;&#x2F;li&gt;
&lt;li&gt;HUD debug info now displays current biome and site&lt;&#x2F;li&gt;
&lt;li&gt;Pets are now saved on logout 🐕 🦎 🐼&lt;&#x2F;li&gt;
&lt;li&gt;NPCs can now warn players before engaging in combat&lt;&#x2F;li&gt;
&lt;li&gt;Add server setting with PvE&#x2F;PvP switch&lt;&#x2F;li&gt;
&lt;li&gt;Experimental terrain persistence&lt;&#x2F;li&gt;
&lt;li&gt;The &#x27;spot&#x27; system, which generates smaller site-like structures and scenarios&lt;&#x2F;li&gt;
&lt;li&gt;Chestnut and cedar tree varieties&lt;&#x2F;li&gt;
&lt;li&gt;Shooting sprites, such as apples and hives, can knock them out of trees&lt;&#x2F;li&gt;
&lt;li&gt;Cultist raiders&lt;&#x2F;li&gt;
&lt;li&gt;Bloom Slider&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;changed&quot;&gt;Changed&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Harvester boss now has new abilities and AI&lt;&#x2F;li&gt;
&lt;li&gt;Death particles and SFX&lt;&#x2F;li&gt;
&lt;li&gt;Trades now consider if items can stack in full inventories.&lt;&#x2F;li&gt;
&lt;li&gt;The radius of the safe zone around the starting town has been doubled&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;fixed&quot;&gt;Fixed&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Crafting Stations aren&#x27;t exploadable anymore&lt;&#x2F;li&gt;
&lt;li&gt;Significantly improved the performance of playing sound effects&lt;&#x2F;li&gt;
&lt;li&gt;Campfires now despawn when underwater&lt;&#x2F;li&gt;
&lt;li&gt;Map will now zoom around the cursor&#x27;s position and drag correctly&lt;&#x2F;li&gt;
&lt;li&gt;No more jittering while running down slopes with the glider out&lt;&#x2F;li&gt;
&lt;li&gt;Camera is now clipping a lot less&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;884138091537907793&amp;#x2F;screenshot_1630865233900.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;updates-from-developers&quot;&gt;Updates from developers&lt;&#x2F;h3&gt;
&lt;p&gt;Now, let&#x27;s hear from some of the developers about this version.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;zesterer-worldgen-lead-and-core-developer&quot;&gt;@zesterer, Worldgen Lead and Core Developer&lt;&#x2F;h4&gt;
&lt;p&gt;I&#x27;m most excited about 0.11 because it finally starts to tie together some of
the grander themes and plans that we&#x27;ve always had for the game: a sense of
freedom, adventure, and place within a dynamic, open world without scripted
events or hard-coded locations.&lt;&#x2F;p&gt;
&lt;p&gt;You can see this vision beginning to materialise all across the game: the
increasingly mature crafting system, world generation, real-time simulation such
as cultist raids, etc. I&#x27;m sure that 0.12 will bring more of this vision in
abundance.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;885141629902684180&amp;#x2F;bg_12.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;slipped-animation-lead-and-core-developer&quot;&gt;@Slipped, Animation Lead and Core Developer&lt;&#x2F;h4&gt;
&lt;p&gt;I think what I&#x27;m looking forward to most this version is for the world to feel
more alive. We&#x27;ve added a ton of small-scale sites to the overworld where NPCs
live and interact with the simulation. You can find occupied igloos, hideouts,
and burrows.&lt;&#x2F;p&gt;
&lt;p&gt;With new pickup animations and collectibles, the player is encouraged to take
their time in the world and interact with it, or try to pass through stealthily.
On a grand scale, the world has looked great for a while but we&#x27;re starting to
bring real excitement to it at small scales too, by allowing the player to make
new discoveries all the time while exploring&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;884297602462539876&amp;#x2F;screenshot_1630903166427.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;sam-combat-lead-and-core-developer&quot;&gt;@Sam, Combat Lead and Core Developer&lt;&#x2F;h4&gt;
&lt;p&gt;What I like most about this version is that players must think more about what
they need to do. Previously, players really only would rush the bosses in
dungeons with maybe the occasional foray into a cave, and would &quot;loot vacuum&quot;
everything that could be picked up that they encountered. Now players often
delay going to the boss to first loot chests in the dungeons, or they may
dedicate an expedition to harvesting flax for a set of linen armor instead of
spamming the collect key as they passed by a field of flax.&lt;&#x2F;p&gt;
&lt;p&gt;There are also now cultist raiders to provide a challenge on the surface, which
will hopefully pave the way for more real-time simulation surface encounters
where players can watch their actions have a meaningful effect on the world.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;snowram-assets-aesthetics-lead&quot;&gt;@Snowram, Assets &amp;amp; Aesthetics Lead&lt;&#x2F;h4&gt;
&lt;p&gt;This release is a big step toward a dynamic world. With the inclusion of several
new locations and some promising real-time simulation usage, this is the start
of something big. I&#x27;m also very excited about the recent development of site
which will eventually allow us to simply add more complex procedurally generated
structure in the game.&lt;&#x2F;p&gt;
&lt;p&gt;About myself, I have been away for quite a bit of time which made me miss the
deadline for a new arthropod skeleton and its big batch of new species, so keep
an eye for them in the next version!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;885141632519905330&amp;#x2F;bg_10.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;aweinstock-general-developer&quot;&gt;@Aweinstock, General Developer&lt;&#x2F;h4&gt;
&lt;p&gt;I ported dungeons from sampling to CSG (site2) between 0.10 and 0.11. This
allowed adding details (like the septagonal stars and the pillar bases) more
easily, and also sped up dungeon generation since the system no longer has to
sample every block in the chunk, only blocks inside dungeon rooms. Keep an eye
out for these new detail in the release!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;875904635741806604&amp;#x2F;simplescreenrecorder-2021-08-13_17.51.44.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Taken by @KaliKatz. Say cheese!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;support-the-project&quot;&gt;Support the project&lt;&#x2F;h3&gt;
&lt;p&gt;As always, feel free to support the project on Open Collective. It allows us to
keep our servers running, and launch great release parties like the one today!&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;885518024516452362&#x2F;886071387113009224&#x2F;veloren-0-11.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 136</title>
          <pubDate>Mon, 06 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-136/</link>
          <guid>https://veloren.net/blog/devblog-136/</guid>
          <description>&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Naryadchikov, @XVar, @xeriab, @Sam, @Slipped, @khalludi, @xMAC94x, @slashplusplus, @Sharp, @juliancoffee, @ubruntu, @Snowram, @knightresspaladin, @imbris, and @Capucho!&lt;&#x2F;p&gt;
&lt;p&gt;@nomango hosted a gliding race from the town of Sist, in the highest mountain
peak of the map, to the town of Irronk at the foot of the mountain. Organizing
it was a fun experience, and in the end 5 people participated and a bunch more
watched. The winner was @Boudin, congratulations!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;883425538075656192&amp;#x2F;image.png&quot;
    
      style=&quot;width: 40%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The race contestents&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;improvements-by-juliancoffee&quot;&gt;Improvements by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve recently been working on new server setting and command!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;battle_mode&lt;&#x2F;code&gt; setting Global(PvP&#x2F;PvE) or PerPlayer(default: PvP&#x2F;PvE)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;&#x2F;battlemode&lt;&#x2F;code&gt; command which allows you to switch between your battle mode (pvp
and pve). Can be used once in 5 minutes, only in towns and only if server
enabled PerPlayer() &lt;code&gt;battle_mode&lt;&#x2F;code&gt; setting. Enabled on official server which
means no more ganking of new players!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;balance-changes&quot;&gt;Balance changes&lt;&#x2F;h4&gt;
&lt;p&gt;Chests no longer spawn on the starting floor of dungeons (and more of
them spawn in final floors). Chests now have equal chance of spawning between
different dungeon levels.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;developer-experience-changes&quot;&gt;Developer experience changes&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;VELOREN_ASSETS_OVERRIDE&lt;&#x2F;code&gt; environmental variable should help to run
servers with modified assets (should be declared as on server machine and on
client machines) and allows you to add folders with assets you want to have
at a higher priority (while keeping every other assets the same).&lt;&#x2F;li&gt;
&lt;li&gt;Refactor of server and voxygen code that interacted with skills to make it
easier to add new skills and modify existing ones. Main changes are
the &lt;code&gt;SKILL_MODIFIERS&lt;&#x2F;code&gt; constant which stores every constant used for skills
in a more declarative way to specify skill icons in voxygen code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;884577918242664498&amp;#x2F;screenshot_1630924097231.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;cultist-raiders-by-sam&quot;&gt;Cultist Raiders by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;Cultist raiders have been added. Now, cultist raiding parties will periodically
set out from cultist dungeons to raid nearby settlements for sacrifices. In
adding them, the real-time simulation system needed to be slightly expanded to allow for rtsim
entities being attached to a particular site as well as have the species,
loadout, and alignment of the rtsim entity being specified instead of just
entirely random.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;naga-by-capucho&quot;&gt;Naga by @Capucho&lt;&#x2F;h3&gt;
&lt;p&gt;Last week we merged the MR replacing &lt;code&gt;shaderc&lt;&#x2F;code&gt; with &lt;code&gt;naga&lt;&#x2F;code&gt;, but despite the MR
only having one commit and a three week merge window, the work to make &lt;code&gt;naga&lt;&#x2F;code&gt;
capable of parsing all of Veloren&#x27;s &lt;code&gt;GLSL&lt;&#x2F;code&gt; shaders and emitting &lt;code&gt;spir-v&lt;&#x2F;code&gt; took
more than a year!&lt;&#x2F;p&gt;
&lt;p&gt;The initial reasoning behind this switch was to make the lives of developers
easier. &lt;code&gt;shaderc&lt;&#x2F;code&gt; adds more requirements to the tools needed to compile
Veloren and was a bit of nightmare when trying to cross-compile to macOS in CI.
But after working with &lt;code&gt;naga&lt;&#x2F;code&gt; and integrating into Veloren, there are some other
benefits:&lt;&#x2F;p&gt;
&lt;h4 id=&quot;validation&quot;&gt;Validation&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;naga&lt;&#x2F;code&gt;, being part of the WebGPU pipeline means that it&#x27;s exposed to potentially
bad shaders that can cause issues with GPU drivers and potentially bring them
down. A validation layer is added that rejects shaders that can cause this bad
behavior. In Veloren, this is very helpful since bad shaders can go unnoticed on
developers&#x27; machine and produce bad results for end users or affect performance. In
particular, uniformity analysis has caught a handful of errors with texture
sampling that can cause undefined behavior.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;error-messages&quot;&gt;Error messages&lt;&#x2F;h4&gt;
&lt;p&gt;The error infrastructure of &lt;code&gt;naga&lt;&#x2F;code&gt; allows easy
coupling with error reporting crates like &lt;code&gt;codespan&lt;&#x2F;code&gt;. This allows for Rust-like
error reporting, but this is an area that needs more work for example hints.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;693844604226764871&amp;#x2F;883487483285876756&amp;#x2F;img-2021-05-14-221731.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;So far everything has behaved extremely well, though there are some people
reporting black worlds when using high lightning settings. The cause hasn&#x27;t
yet been identified and for most users has been working correctly. If you do see
a black world go to the graphics settings and change lightning to type &lt;code&gt;L - Cheap&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;glsl&lt;&#x2F;code&gt; frontend despite being in a pretty good state is still far from being
completed. I intend to support some of the more popular extensions to the
language, for example include directives that are for now being handled by
&lt;code&gt;glsl_include&lt;&#x2F;code&gt;. There&#x27;s also the question of optimizations that are for now
delegated to the driver, but in the future may also happen in &lt;code&gt;naga&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I really enjoyed working in &lt;code&gt;naga&lt;&#x2F;code&gt; and with the people building it (special thanks
to @kvark for reviewing and helping out in my contributions). I&#x27;ve worked on some
other things besides &lt;code&gt;glsl&lt;&#x2F;code&gt;, most recently the &lt;code&gt;spir-v&lt;&#x2F;code&gt; frontend so that in the
future we can migrate to &lt;code&gt;wgpu&lt;&#x2F;code&gt; 0.10&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;884472942891786260&amp;#x2F;screenshot_1630938649026.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;assignment-problem-by-christof&quot;&gt;Assignment problem by @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I&#x27;ve been working on solving the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Assignment_problem&quot;&gt;Assignment Problem&lt;&#x2F;a&gt; for Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;Simulating economies is not that hard to understand; you start with a
bunch of resources, define a goal (e.g. population growth) and then steer the
population to create secondary&#x2F;tertiary&#x2F;... goods to fulfill this goal. The above-mentioned &quot;assignment&quot; is the answer to the question &quot;how many
farmers&#x2F;hunters&#x2F;guards&#x2F;... do I need to achieve that goal?&quot; (or more generic: &quot;How
to assign NPCs to professions?&quot;)&lt;&#x2F;p&gt;
&lt;p&gt;The previous solution in Veloren was to assign according to the relative surplus
per produced good (called value). This worked just fine for non-merchants, as merchants trade but don’t produce goods, thus there is an upper limit in
available goods. At some point employing more and more merchants won’t give you
more of that rare good you desperately look for.&lt;&#x2F;p&gt;
&lt;p&gt;Also this was just a relative
assignment, you could not plan how long each person would need to work to
produce the needed amount of goods. On top of this, I recently added more
complications to the system: People use some tools for their work, thus these
tools are needed but not consumed. Also I wanted coal and animal dung to
potentially replace wood as fuel, introducing another tricky logic puzzle.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;884297602462539876&amp;#x2F;screenshot_1630903166427.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So I came up with the plan to define an error function and simply minimize the
quadratic sum. This sent me on a path where I learned a lot of numerical
algorithms I never took a closer look at before. A mathematician friend was my
guide on this journey.&lt;&#x2F;p&gt;
&lt;p&gt;Once the pieces come together the solution is easy and
robust; just use a matrix to calculate the necessary change in assignment from
the difference to your target in produced goods. If you also want to take stock
fill into account, just apply a nonlinear mapping of the difference to the
target before applying this matrix. This is similar to the Gauss Newton
algorithm and its generalization for not directly invertible matrices, the
Levenberg-Marquardt algorithm.&lt;&#x2F;p&gt;
&lt;p&gt;These use a matrix derivative of the error
function and invert it to compute the next step. Luckily you can phrase the
equation differently; you need the difference in input which causes a change in
output. Basically, the derivative of the input to the output (the inverse of the
normal derivative). And this matrix is easy to write down by hand; how many
people do you need to add of each profession (recursively) for an increase of
one - per good. This easy to understand concept is the true meaning of the three
multiplied matrices &lt;code&gt;(JT*J)^-1*JT&lt;&#x2F;code&gt; in the Gauss Newton algorithm.&lt;&#x2F;p&gt;
&lt;p&gt;On this journey I also tried pseudo-inversion of matrices - a mathematical
concept which defines sort of invertability for non-quadratic matrices. This
pseudo inverse is typically computed by using an SVD algorithm and gives the
result of the three matrix multiplication with less numerical error.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately this matrix also resulted in negative numbers - stealing raw
materials from other professions instead of pushing them through the whole
supply chain. And in simulation this quickly caused a general shortage of people
producing important stuff.&lt;&#x2F;p&gt;
&lt;p&gt;To get the new system ready I still have to complete the planning of merchants
and the correct mapping of in game items to economic goods. Also I would like to
modify the type of buildings, the loadout and the behaviour of the town dwellers
according to the economic situation of the town.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;884140239134789642&amp;#x2F;screenshot_1630865775592.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A cave to explore&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;883881676198010920&#x2F;screenshot_1630804161292.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 135</title>
          <pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-135/</link>
          <guid>https://veloren.net/blog/devblog-135/</guid>
          <description>&lt;p&gt;This week, we see some changes to how sprite collections work. We also hear
about some improvements to how admins can control loot tables on their servers.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Sam, @Pfau, and @Gemu!&lt;&#x2F;p&gt;
&lt;p&gt;@XVar I added a new settings pane to Airshipper to allow easy changing of the
WGPU rendering mode, the game client log level, and also a button to open the
logs directory. Airshipper 0.6 &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;airshipper&#x2F;-&#x2F;merge_requests&#x2F;21&quot;&gt;has now been
released&lt;&#x2F;a&gt;! @Capucho
finished up work to get naga merged. Expect a write-up on this next week.&lt;&#x2F;p&gt;
&lt;p&gt;You can read this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;UUIPHmtwQfSnN83hUE7Xbw?view&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;881960381973688331&amp;#x2F;screenshot_1630253205225.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;sprite-collection-by-sam&quot;&gt;Sprite Collection by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;Last week, I did some work on how sprite collections work:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added a character state for sprite collection to go through&lt;&#x2F;li&gt;
&lt;li&gt;Made attacks interrupt the character state&lt;&#x2F;li&gt;
&lt;li&gt;Required that there is a valid path between the sprite and the entity
collecting the sprite&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For the character state, this now means that there is an animation that occurs
when you go to pick up a sprite. @Slipped created the animations for this. There
is a short animation for things that can be quickly picked up such as twigs and
stones, and a longer animation for things that take longer to collect the item
from such as chests. This will eventually allow us to start adding better loot
to dungeon chests as you will actually have to defeat the enemies (or sneak past
I suppose) before looting the chest, as otherwise, they will interrupt you in
the process of looting a chest.&lt;&#x2F;p&gt;
&lt;p&gt;For requiring that a valid path exists, this means that you will no longer be
able to pick up bowls, potions, vials, and other such items through house walls.
You&#x27;ll now actually have to enter a villager&#x27;s residence to thieve their items.
It will also allow the spot system @zesterer is working on to position loot in
interesting places that can&#x27;t be grabbed without first accessing the sprite.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;881960343847444500&amp;#x2F;screenshot_1630252928176.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;loot-tables-by-ubruntu&quot;&gt;Loot tables by @Ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;I added a new variant to the &lt;code&gt;LootSpec&lt;&#x2F;code&gt; enum: &lt;code&gt;None&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;For context, server admins can already control what loot is dropped by using
&lt;code&gt;.ron&lt;&#x2F;code&gt; files in the &lt;code&gt;assets&#x2F;common&#x2F;loot_tables&lt;&#x2F;code&gt; folder. At the simplest level,
these files can contain an array of tuples specifying an item that can drop and
its associated chance. It&#x27;s a bit more powerful than that though, because the
&quot;item&quot; part of the tuple can refer to an individual item, a stackable item with
a range of possible quantities, or even another loot table. These are the
different variants specified in the &lt;code&gt;LootSpec&lt;&#x2F;code&gt; enum.&lt;&#x2F;p&gt;
&lt;p&gt;The new variant I added allows for more fine-grained control of loot drops by
allowing the &lt;code&gt;.ron&lt;&#x2F;code&gt; files to specify with the existing lottery mechanic whether
or not any loot is dropped at all. This will give server owners and game
designers more control over item progression and player economy on their
servers. The file &lt;code&gt;assets&#x2F;common&#x2F;loot_tables&#x2F;nothing.ron&lt;&#x2F;code&gt; provides an example of
specifying a loot table where no items are dropped.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;881960279779455036&amp;#x2F;screenshot_1630252858100.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A long flight. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;881960079463710792&#x2F;screenshot_1630250082549.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 134</title>
          <pubDate>Mon, 23 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-134/</link>
          <guid>https://veloren.net/blog/devblog-134/</guid>
          <description>&lt;p&gt;This week, we see the plans for the 0.11 release. RTSim sees some optimizations,
and we examine the situation with CI runners.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @XVar, @Sam, @imbris, @ubruntu,
and @flo.&lt;&#x2F;p&gt;
&lt;p&gt;@XVar added a small utility &lt;code&gt;cargo cmd-doc-gen&lt;&#x2F;code&gt; that auto-generates
documentation of the in-game commands for the book:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;commands.html&quot;&gt;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;commands.html&lt;&#x2F;a&gt;.
You can read this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;LSDC1OA8RDOgeibXHXy2kQ&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;0-11-release-prep-by-xmac94x&quot;&gt;0.11 Release Prep by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;The 0.11 release will be on Saturday, 2021-09-11, at 18:00 GMT. As usual, there
will be a feature freeze starting from 2021-09-04 18:00 GMT. We recommend
submitting critical and large MRs for review now, before the feature freeze.&lt;&#x2F;p&gt;
&lt;p&gt;This release will also have a stress test event between the feature freeze and
the release. We will be sharing further details of this later. Getting your
large MR merged before feature freeze Please mention @xMAC94x in the
&lt;code&gt;#ReleaseMRs_0.11&lt;&#x2F;code&gt; thread (in programmers) with a short summary with the
following details (the more, the better):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- What is complete
&lt;&#x2F;span&gt;&lt;span&gt;- What needs to be done
&lt;&#x2F;span&gt;&lt;span&gt;- Can your feature be partially introduced to master in its current state (as multiple MRs)?
&lt;&#x2F;span&gt;&lt;span&gt;- Do you foresee any issues with your MR and if so, which ones?
&lt;&#x2F;span&gt;&lt;span&gt;- Why should this feature be in 0.11?
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is required to align our testing and review strategies to ensure a smooth
release.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;2021-09-04 18:00:00 GMT Feature freeze — No new feature MRs will be merged.
&lt;&#x2F;span&gt;&lt;span&gt;2021-09-06 18:00:00 GMT Stress test event.
&lt;&#x2F;span&gt;&lt;span&gt;2021-09-10 10:00:00 GMT Total freeze — no new merges will be introduced unless they&amp;#39;re critical.
&lt;&#x2F;span&gt;&lt;span&gt;2021-09-10 16:00:00 GMT Release build will be compiled.
&lt;&#x2F;span&gt;&lt;span&gt;2021-09-11 12:00:00 GMT Main server hardware upgrade.
&lt;&#x2F;span&gt;&lt;span&gt;2021-09-11 18:00:00 GMT Release party!
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;881062836028211210&amp;#x2F;screenshot_1630132022984.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;rtsim-optimizations-by-ubruntu&quot;&gt;RTSim optimizations by @ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;I started working on making RTSim entities update in smaller groups because I
saw a TODO comment in the code and got nerd sniped into trying to find a
solution. The idea is that there are NPC entities that only exist when they are
in a chunk that is loaded and in view of a player, and there are also RTSim
entities that continue to simulate behavior when they are far away from players
in unloaded chunks.&lt;&#x2F;p&gt;
&lt;p&gt;Originally, every RTSim entity was being simulated during every tick, and that
didn&#x27;t have to be the case. It&#x27;s easier to tell something to move 10 feet once
than to tell it 5 times to move 2 feet, which means during each tick we don&#x27;t
have to tell as many entities to update their position. The trade-off is that
the precision of movement for simulated entities can suffer when too much time
elapses between their updates, so they could for example run past the town they
were trying to reach.&lt;&#x2F;p&gt;
&lt;p&gt;RTSim entities that are unloaded will update once every 30 server ticks, which I
believe is slightly more than once per second. RTSim entities that are loaded in
view of players are still updated every server tick so their pathfinding and
general behavior shouldn&#x27;t look noticeably different to players. In order to
keep loaded and unloaded entities in sync we need to store the time (as an f64)
that the entity was last updated, and use that to calculate the delta time which
is then needed to calculate simulated travel speed.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m satisfied with the solution because it takes advantage of the monotonically
increasing tick number that was already there and some iterator methods found in
the standard library. No new dependencies were needed and relatively few lines
of code were added to achieve some performance gains. Thanks to @zesterer and
@xMAC94x for helping me understand RTSim and timing-related things that the
solution needed to take into account.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;881614603308630106&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;RTSim tick performance before the change on the left, and after the
  change on the right (the server was also busier).&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;fixing-veloren-s-ci-runner-shortage-by-xvar&quot;&gt;Fixing Veloren&#x27;s CI Runner Shortage by @XVar&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This writeup was originally created as a document for the Meta team to look
into.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h4 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h4&gt;
&lt;p&gt;Recently, Veloren has been suffering from both a lack of available GitLab CI
runners, and quite often even when a runner is available, it has insufficient
resources and may fail jobs due to the child processes of the build being
OOM-killed by the host OS kernel. As of the time of writing, we have only 3 CI
runners (+1 dedicated MacOS runner). This document aims to determine what the
baseline resource requirements for a Veloren CI runner should be, and to propose
a route forwards.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;performance-benchmarking&quot;&gt;Performance Benchmarking&lt;&#x2F;h4&gt;
&lt;p&gt;In order to determine the effect that different numbers of CPU cores and
available RAM have on build times, a VMWare virtual machine was used to run
three different build jobs from the master branch. The host machine used has an
AMD Ryzen 3900X and 32GB RAM. The numbers presented below will be affected by
the single-threaded performance of the host machine of a given runner so not
much meaning should be taken from the absolute values, but rather the relative
difference between different resource configurations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;881616486400147518&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;blockquote&gt;
&lt;p&gt;The first line in the table represents the base-line performance for a
high-spec machine with a large amount of memory. With 16GB available, swap was
not used at all during any of the builds in this configuration.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h5 id=&quot;cpu-cores&quot;&gt;CPU Cores&lt;&#x2F;h5&gt;
&lt;p&gt;Adding additional CPU cores appears to have diminishing returns for numbers
greater than 8, however when less than 4 cores are available, performance takes
a significant hit with the unittests job taking almost twice as long when the
number of cores were reduced from 4 to 2. As is to be expected, further reducing
the number of cores from 2 to 1 results in a 50% increase in duration for the
code-quality job and a 100% increase in duration for the unittests job.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;memory&quot;&gt;Memory&lt;&#x2F;h5&gt;
&lt;p&gt;The RAM requirements for a runner vary based on the particular job, with those
that don’t involve linking executables requiring much less RAM. The code-quality
and unittests jobs use around 2GB of RAM and only really suffered when physical
memory was reduced to 1GB which meant the half of the memory for the job was
provided by swap.&lt;&#x2F;p&gt;
&lt;p&gt;The opt-linux job however requires a significant amount of memory - around 11GB
at peak. Attempting to run the job with less than 12GB available memory
(physical+swap) results in the runner jobs being OOM-killed by the kernel, and
the build failing.&lt;&#x2F;p&gt;
&lt;p&gt;As is to be expected, additional available memory above the amount required for
a given job does nothing to improve performance since the excess memory remains
unused.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;security-and-role-separation-of-runners&quot;&gt;Security and role separation of runners&lt;&#x2F;h5&gt;
&lt;p&gt;MR 2537 was merged on 20&#x2F;08&#x2F;2021 that introduces more granular runner tags to
the Veloren CI configuration. One of the primary motivations for this work was
to allow us to use runners provided by 3rd parties and contributors without this
being a security risk. For example, a rogue runner that is tasked with executing
the job that publishes artifacts for distribution via AirShipper could in theory
modify the binary before it’s uploaded back to GitLab to include malicious code
(a supply-chain attack).&lt;&#x2F;p&gt;
&lt;p&gt;With this change in, we can freely accept runners from anyone who wishes to
provide them even if they aren’t personally known by anyone on the project.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;879594375896768583&amp;#x2F;screenshot_1629781927468.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;recommendation&quot;&gt;Recommendation&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;minimum-runner-specification&quot;&gt;Minimum runner specification&lt;&#x2F;h5&gt;
&lt;p&gt;Given the above results, it is clear that the resource requirements for a runner
differ based on the job being run. Therefore there are two different minimum
requirements proposed, depending on whether the runner is configured with just
the check tag or also with the build tag.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;881616344079011890&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;While a minimum physical amount of RAM is listed, it is ideal for the total
amount of required memory to be available to avoid using swap at all.&lt;&#x2F;p&gt;
&lt;p&gt;Despite the fact that less than 4 cores would work for a runner, having runners
with any fewer causes unnecessary delays for CI jobs and inconvenience for
developers.&lt;&#x2F;p&gt;
&lt;p&gt;If any of our current CI runners have less than 4 cores available, they should
be considered for retirement should we meet our target number of runners in each
category.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;target-runner-quantity&quot;&gt;Target runner quantity&lt;&#x2F;h5&gt;
&lt;p&gt;We should aim to have at least 8 CI runners of the above specification available
to ensure prompt processing of CI jobs, with at least 4 with the build tag and
at least 2 of those being trusted to process publish jobs. There is no need for
an upper limit on runners, the more we have the more contingency we have against
runners being retired.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;next-actions&quot;&gt;Next Actions&lt;&#x2F;h5&gt;
&lt;p&gt;If there is agreement on the above, we should advertise that we need runners,
perhaps with a ping to @DevPingSquad or @Contributor and a section in the blog
until we have enough.&lt;&#x2F;p&gt;
&lt;p&gt;If we have any unused resource available on our server infrastructure, we might
consider hosting runners on it since the CPU&#x2F;memory is otherwise sitting idle.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Since this writeup was created, @AngelOnFira has added 10 runners worth of
compute, and @Sam has added 2. This resolves the situation for the time being.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;879058523412119582&amp;#x2F;screenshot_1629652804877.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An early morning glide. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;879194912749400094&#x2F;screenshot_1629679274776.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 133</title>
          <pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-133/</link>
          <guid>https://veloren.net/blog/devblog-133/</guid>
          <description>&lt;p&gt;This week, we hear about updates to the state of terrain persistence. There are
also optimizations being worked on with our real-time simulation system. A brief
overview of our server history is also included.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @alykhouzov, @ygor.souza, @Sam,
@juliancoffee, @imbris, @zesterer, @DanTheOne, @DaniilNemtsev, @xMAC94x,
@nwildner, @xeriab, @tygyh, and @klipkonn.&lt;&#x2F;p&gt;
&lt;p&gt;You can read this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;DiDftO_sTqCaPMRR4crZ5g&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;876580411327807498&amp;#x2F;screenshot_1629063467106.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;rtsim-optimizations-by-ubruntu&quot;&gt;RTSim optimizations by @ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;This is still a work in progress, but last week I worked on splitting up the
iteration of RTSim entities so that each entity is updated every n ticks
(whatever that number ends up being). Hopefully, this improves performance a
little as RTSim entities don&#x27;t need their simulated behavior to happen every
server tick when they are off-screen and away from players. This shouldn&#x27;t cause
any noticeable changes for players.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;terrain-persistence-by-zesterer&quot;&gt;Terrain persistence by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;Last week, the &lt;code&gt;min_persistent_world&lt;&#x2F;code&gt; branch was merged.&lt;&#x2F;p&gt;
&lt;p&gt;It adds an experimental terrain persistence system. When enabled, changes made
to the world with build mode will be written to disk and will not disappear on
server restart or chunk unload.&lt;&#x2F;p&gt;
&lt;p&gt;It comes with some very big caveats: the system is not intended to be a
player-facing or a general-purpose build system. It is not stable,
well-integrated into the rest of the game, nor do we guarantee support for it
moving forwards. Additionally, it is intended to be replaced entirely in the
future (with no migration) with a proper player-oriented zone-based building
system. Things can and will break!&lt;&#x2F;p&gt;
&lt;p&gt;It exists primarily as a way for server admins to add small customisation to
their worlds to improve the experience for players.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;877553031313502268&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;See &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;building.html#persistence&quot;&gt;this page&lt;&#x2F;a&gt; in
The Book for more detailed information about terrain persistence. Here are a few
ideas for things that server admins could use the feature for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Gliding courses demarcated with pillars and hoops for glider racing.&lt;&#x2F;li&gt;
&lt;li&gt;A custom spawn zone complete with crafting stations and meeting areas for
players.&lt;&#x2F;li&gt;
&lt;li&gt;Mining challenges (using mineable blocks like WeakRock and ores) that players
can partake in. Because mining is not persisted, any mined blocks will
naturally regenerate when the chunk reloads!&lt;&#x2F;li&gt;
&lt;li&gt;Custom mazes and climbing&#x2F;jumping challenges for players with rewards in the
form of chests&#x2F;ores&#x2F;etc.&lt;&#x2F;li&gt;
&lt;li&gt;Pixel artwork and sculptures dotted around the world for players to find.&lt;&#x2F;li&gt;
&lt;li&gt;Visual customisations to existing world structures like towns and dungeons
that make them more interesting to explore.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you end up making something interesting with the feature, please tell us!
We&#x27;d like to see what you come up with. Feedback is also appreciated, although
bear in mind that the feature is not supposed to be extensive or player-facing.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-brief-history-of-our-servers-by-angelonfira&quot;&gt;A brief history of our servers by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;The following was taken from a thread on the Bevy Discord about server costs.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Just happened across this thread, and although I don&#x27;t know the entire context,
I can give some interesting stats from Veloren. We used to host our main game
server out of the basement of one of our devs. But when we had release parties,
we would expect around 50 players to join. At the time, we were used to around 1
MB&#x2F;s of bandwidth per player, and so over a release party, we normally saw
around 100 GB of bandwidth used. We were hosting on Digital Ocean and AWS.&lt;&#x2F;p&gt;
&lt;p&gt;Over the last few months, we&#x27;ve been transferring all of our servers over to
Hetzner in Germany. Their bandwidth costs are pretty great for cloud servers, 20
TB&#x2F;month for any instance, and about 1.20 Euros for every Terabyte after. It is
still difficult to do NA game servers though. But for distributing our game
binary and assets, it works quite well.&lt;&#x2F;p&gt;
&lt;p&gt;A rough estimate from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grafana.veloren.net&#x2F;d&#x2F;boL6rzSGk&#x2F;airshipper?orgId=1&quot;&gt;our
dashboard&lt;&#x2F;a&gt; shows
that we get about 700 downloads per day, and our download size is around 160 MB.
So that&#x27;s about 110 GB of download bandwidth per day. We are running this on a
dedicated server Hetzner server though, which has no bandwidth cap.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;875904112892465192&amp;#x2F;simplescreenrecorder-2021-08-13_17.49.43.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Groovin with the gang. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;878100522521993216&#x2F;screenshot_1629423758514.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 132</title>
          <pubDate>Mon, 09 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-132/</link>
          <guid>https://veloren.net/blog/devblog-132/</guid>
          <description>&lt;p&gt;This week, we have several writeups from devs. We hear about the status of
modular weapons, some physics improvements, and camera clipping.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @juliancoffee, @Sam, @Snowram,
@pacmanmati, @Treeco, @lboklin, @Xeriab, @XVar, @ubruntu, @imbris, @Capucho,
@zesterer, @UMR1352, @yusdacra, @KnightressPaladin, and @ygor.souoza!&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gamedev.rs&#x2F;news&#x2F;024&#x2F;&quot;&gt;Rust Gamedev Newsletter&lt;&#x2F;a&gt; is out! You can read
this week&#x27;s meeting minutes &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;vNcK26rrQwy3xHpVaRrD3A&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@Christof is thinking about introducing Levenberg-Marquardt to the profession
re-assignment in econsim and seeing the difference in correctness. This clearly
calls out for a writeup, but he is still working on it. There will be a long
form post once it&#x27;s further along.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;work-by-ubruntu&quot;&gt;Work by @ubruntu&lt;&#x2F;h3&gt;
&lt;p&gt;I tweaked the formula that sets how much experience is required to level up in a
skill tree. The result is that lower-level characters will gain levels a little
faster, while some higher levels take a bit more, but the maximum amount of
experience required to level up is still capped at the same value (1000). I felt
this was necessary because some recent gameplay videos showed new characters
grinding for quite a while before earning their first skill point.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;875195720129478696&amp;#x2F;Screenshot_from_2021-08-11_21-43-19.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;modular-weapon-status-by-sam&quot;&gt;Modular weapon status by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;Modular weapons are in progress. Not all of this has been done in the past week,
I&#x27;ve just been lazy about throwing any updates about modular weapons into the
blog at all until now.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;All crafting mechanics work as desired&lt;&#x2F;li&gt;
&lt;li&gt;Modular weapons will now automatically resolve their quality and handedness
from their components (they previously only resolved their stats)&lt;&#x2F;li&gt;
&lt;li&gt;All modular components have been added as items (they still need models)&lt;&#x2F;li&gt;
&lt;li&gt;Names are programmatically generated from the shape of components used and the
material used to make the components&lt;&#x2F;li&gt;
&lt;li&gt;Wood models and sprites were added for 6 new types of wood that will be used
in making bows, staffs, and sceptres&lt;&#x2F;li&gt;
&lt;li&gt;Fixed loading of persisted items to properly handle items that had more than
one layer of components (and now it supports an arbitrary layer of component
nesting)&lt;&#x2F;li&gt;
&lt;li&gt;Changed specification of models for weapons both in the inventory and equipped
in the hand to work for modular weapons&lt;&#x2F;li&gt;
&lt;li&gt;Added ability for modular weapons to be randomly generated given a toolkind,
material, and handedness to allow them to be dropped as loot, given to
enemies, and offered as stock in a merchant&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;875053773481992282&amp;#x2F;screenshot_1628699511971.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Things that still need to be done before merging:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Migration to remove many of the old weapons and migrate them to modular
variants&lt;&#x2F;li&gt;
&lt;li&gt;Insert all the models for modular weapons after the rest have been made&lt;&#x2F;li&gt;
&lt;li&gt;Figure out where wood will go to prevent easy progression skips&lt;&#x2F;li&gt;
&lt;li&gt;Make recipes more interesting&lt;&#x2F;li&gt;
&lt;li&gt;Various UI&#x2F;UX improvements to the process of crafting modular weapons&lt;&#x2F;li&gt;
&lt;li&gt;Balance and stress testing to ensure nothing unexpected is broken&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;dev-tweaking-by-juliancoffee&quot;&gt;Dev tweaking by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I&#x27;ve been working on debugging UX.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;E-gui hotkey toggle, press F7 to enable&#x2F;disable e-gui debug window (you&#x27;ll
still need press F3 to enable debug mode)&lt;&#x2F;li&gt;
&lt;li&gt;Three new debug lines: Gliding ratio, Gliding Angle of Attack, and Look
Direction&lt;&#x2F;li&gt;
&lt;li&gt;Update of asset_tweak module&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Now if you compile the game with &lt;code&gt;--features asset_tweak&lt;&#x2F;code&gt; you can use &lt;code&gt;tweak!&lt;&#x2F;code&gt;
macro from the &lt;code&gt;common::assets&lt;&#x2F;code&gt; module. Here is quite a trivial example, I hope
you&#x27;ll find how to use it in your code.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;common::assets::tweak;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;i32 &lt;&#x2F;span&gt;&lt;span&gt;= tweak!(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will create an &lt;code&gt;assets&#x2F;tweak&#x2F;x.ron&lt;&#x2F;code&gt; file with (5) as its content, but
whenever you&#x27;ll call it again, it will hot-reload so you can tweak values during
play testing. This works with structs too! They need to implement &lt;code&gt;Serialize&lt;&#x2F;code&gt;
and &lt;code&gt;Deserialize&lt;&#x2F;code&gt; if you want to use default value.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;serde::{Deserialize, Serialize};
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;common::assets::tweak;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span&gt;(Clone, Deserialize, Serialize)]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;Data {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;i32&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;i32&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; default = Data { x: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, y: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;7 &lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; data: Data = tweak!(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;dimensions&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, default);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note that struct should have double parentheses (like (5) in previous example
and one pair of parentheses for the struct itself). Check examples and tests in
this module to learn more. And for small combat fixes; beams now follow the
orientation of caster (not look direction like it was before) and agents now can
correctly use it too.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;875903068691111956&amp;#x2F;screenshot_1628901923021.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;physics-improvements-by-sudoreboot&quot;&gt;Physics improvements by @sudoreboot&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I identified and resolved a mistake in the aerodynamics simulation
that improves glide ratios significantly. More specifically, the mistake was
that the lift coefficient included the glider&#x27;s reference area as a factor. This
messed with the resulting induced drag, which is a function of the (square of
the) lift coefficient and the glider&#x27;s aspect ratio. In other words, the amount
of drag from angling against the wind was much too high, and now it should be
much lower and more accurate.&lt;&#x2F;p&gt;
&lt;p&gt;I also made the orientation of the glider tend towards the camera direction
while wielding it on the ground. Mostly because it makes the state feel more
visually dynamic and interesting, but also because it makes the transition a
little more seamless.&lt;&#x2F;p&gt;
&lt;p&gt;Between @juliancoffee, @treeco and myself, we managed to come up with a way to
make the different playable species glide equally well while letting them keep
their distinguishing physical attributes, such as size and mass (both of which
were also adjusted to be more sensible). As a side-effect, hitboxes now also
very closely match the characters&#x27; models.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;camera-clipping-by-klipkonn&quot;&gt;Camera clipping by @klipkonn&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;874707658572185680&amp;#x2F;output.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;LEFT - old, RIGHT - new&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve been working on improving camera clipping. I started by reduced camera
clipping by ray casting just outside each camera corner instead of ray casting
only to&#x2F;from the center. Now the camera will automatically zoom in if the player
model becomes hidden and the target zoom is under 20.&lt;&#x2F;p&gt;
&lt;p&gt;Zooming in makes much more sense in tight environments such as in town as
otherwise it&#x27;s hard for the player to navigate. The change itself was rather
easy it was by flipping ray casting direction. With further distances, we ray cast
from camera towards player until we get out of solid blocks and place camera
there. Now in near distances, we ray cast from player to camera until we hit
solid object and then place camera in front of it.&lt;&#x2F;p&gt;
&lt;p&gt;For zoom distances greater than 20, previous behavior was kept to allow trees eg
to pass in front of camera and cause less jumps if zoomed further out. Next,
I&#x27;ll work on &quot;mode&quot; switching between near and far &quot;mode&quot; as well as on far mode
in the future as I got some great ideas from discussions.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;875054186742566912&amp;#x2F;screenshot_1628699634801.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Out for a dip. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;875032040263790592&#x2F;screenshot_1628694083138.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 131</title>
          <pubDate>Mon, 02 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-131/</link>
          <guid>https://veloren.net/blog/devblog-131/</guid>
          <description>&lt;p&gt;This week, we see some work on translation, as well as where towers are headed.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @KnightressPaladin, @Pfau, @xMAC94x,
@zesterer, @tygyh, @imbris, @lboklin, @Capucho, @Snowram, @mohs8421,
@juliancoffee, @XVar, @kilpkonn, @AngelOnFira, @aweinstock, @Fxsch, and
@Fungoid!&lt;&#x2F;p&gt;
&lt;p&gt;@juliancoffee has been working on a PvP and PvE server switch. @Dr.Dystopia
spent the week extracting methods across the codebase. @xMAC94x has been working
on translation cleanups, with a unique translation scheme. These improvements
have also increased the translation test times by 4x. Work was also done to get
this information into Grafana, which can be seen below.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;872052036257087538&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;You can check out this week&#x27;s meeting minutes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;_fGyJ9atS_2tah3qtou1fw&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;aweinstock&quot;&gt;@aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on towers (aboveground dungeons, intended to be populated with
things like mages and golems and animated books).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;870823373742162021&amp;#x2F;screenshot_1627690860819.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;870801441147740200&amp;#x2F;screenshot_1627685603417.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the process, I found that site2 structure blitting accidentally had quadratic
runtime complexity. Generation of each chunk was trying to iterate over each
primitive in the structure, instead of only the intersection of those primitives
with the chunk. This fix was merged ahead of the rest of towers, and makes
dungeons load faster.&lt;&#x2F;p&gt;
&lt;p&gt;Videos showing the performance difference:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;869714666476171304&amp;#x2F;veloren_hollowcylinder_a_vp9_20210727.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;869714682519355453&amp;#x2F;veloren_hollowcylinder_b_20210727.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;872191456931086346&amp;#x2F;screenshot_1628016925271.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Crossing the vast desert. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;873587871418839070&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 130</title>
          <pubDate>Mon, 26 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-130/</link>
          <guid>https://veloren.net/blog/devblog-130/</guid>
          <description>&lt;p&gt;This week we see some new visual changes to caves and caverns. We hear from many
contributors about what they&#x27;ve been preparing for the 0.11 release.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @imbris, @DanTheOne, @Sam,
@zesterer, @XVar, @aweinstock, @tygyh, @KK, @James, @juliancoffee,
@KnightressPaladin, and @schnippl0r!&lt;&#x2F;p&gt;
&lt;p&gt;You can check out this week&#x27;s meeting minutes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;MwR6ptZSQZuUvNd2MyiD0w&quot;&gt;here&lt;&#x2F;a&gt;. Licenses for assets was
discussed, as well as prep for the 0.11 release in early September.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;866504262140952586&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;866504183456858132&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 50%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept art by @Pfau for the mushrooms in @zesterer&amp;#x27;s caves&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@zesterer has been working on some items:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added better command parsing: arguments now support quotation and escape
characters&lt;&#x2F;li&gt;
&lt;li&gt;Fixed a variety of smaller bugs&lt;&#x2F;li&gt;
&lt;li&gt;Began work on a new cavern system&lt;&#x2F;li&gt;
&lt;li&gt;Switch the default singleplayer map to make it less punishing for new players&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;868882018585432074&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;868882025682198578&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;868882039347249212&amp;#x2F;unknown.png&quot;
    
      style=&quot;width: 80%;&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Some of the images above have the new bloom feature that is being worked on by
@imbris. It&#x27;s not merged just yet, as it is not yet togglable. @LunarEclipse worked
with @poVoq to bridge the #general channel on Discord to IRC. @Dr.Dystopia
finished resolving clippy error suppressions and began working on creating a
settings menu for the main menu. @Gemu made a whole lot of new creatures, along
with the long hinted after spiders. This includes some inhabitants of these
glowing caves:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;868882413856620574&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;upcoming-for-0-11&quot;&gt;Upcoming for 0.11&lt;&#x2F;h3&gt;
&lt;p&gt;With discussion starting around what the 0.11 release would look like,
contributors took the time to start rounding up their plans for what they wanted
to get in before feature freeze.&lt;&#x2F;p&gt;
&lt;p&gt;@Sam is working on getting modular weapons wrapped up. @aweinstock hopes to get
at least plant growth, and possibly planting plants from seeds (i.e. farming) in
before 0.11. @Snowram is aiming to implement an arthropod skeleton for species
such as spiders and beetles.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;869202382100250695&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;0-11-spot-system-by-zesterer&quot;&gt;0.11: Spot system by @zesterer&lt;&#x2F;h4&gt;
&lt;p&gt;For 0.11, I&#x27;m aiming to get the &quot;spot&quot; system ready.&lt;&#x2F;p&gt;
&lt;p&gt;Spots are a halfway house between fully-blown sites (like towns, dungeons, giant
trees, and castles) and much simpler localised structures like trees. They
support some advantages of the former (custom generation rules, entity spawning,
etc.) along with some of the advantages of the latter (better performance, a
simpler implementation, ease of development). However, they come with some
downsides too: lack of global visibility (i.e: you don&#x27;t know where they are
until you happen upon one) and size limitations. Here are some things that could
be added to the game via the spot system in the future:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Troll huts&lt;&#x2F;li&gt;
&lt;li&gt;Bandit camps&#x2F;hideouts&lt;&#x2F;li&gt;
&lt;li&gt;Animal dens&lt;&#x2F;li&gt;
&lt;li&gt;Ruins&lt;&#x2F;li&gt;
&lt;li&gt;Settlement outposts&lt;&#x2F;li&gt;
&lt;li&gt;Wells&lt;&#x2F;li&gt;
&lt;li&gt;Merchant camps&lt;&#x2F;li&gt;
&lt;li&gt;Shrines&#x2F;standing stones&#x2F;statues&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;0-11-ui-items-by-pfau&quot;&gt;0.11: UI items by @Pfau&lt;&#x2F;h4&gt;
&lt;p&gt;I will do my best to get in some UI features from my list:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Improve trading UI&#x2F;UX&lt;&#x2F;li&gt;
&lt;li&gt;Clock-like time indicator near the minimap&lt;&#x2F;li&gt;
&lt;li&gt;Different default zoom levels for the minimap modes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Other things that might be in are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Cultist slayer set, craftable with cultist gear acting as &quot;tokens&quot; at one of
the spots zesterer is working on&lt;&#x2F;li&gt;
&lt;li&gt;More lanterns&lt;&#x2F;li&gt;
&lt;li&gt;Visual rework of undead and female orc characters&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;867222086325895208&amp;#x2F;screenshot_1626425217201.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;0-11-sfx-by-princess-lana&quot;&gt;0.11: SFX by @Princess-Lana&lt;&#x2F;h4&gt;
&lt;p&gt;I am busy fixing the wind sound, the wendigo SFX, and also aiming to contribute
more SFX. The wolf and hyena sounds are ready, they just need to be added to
repo and tested locally before I&#x27;ll commit them. I might also possibly get the
dog (canine family of animals) as well. I&#x27;m also going to add a license document
for the samples that I used for some of the SFX, however the wind SFX I designed
from scratch.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;869373246699606076&amp;#x2F;Screenshot_from_2021-07-27_01-42-02_1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A beautiful fog. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;871033633748701194&#x2F;130.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 129</title>
          <pubDate>Mon, 19 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-129/</link>
          <guid>https://veloren.net/blog/devblog-129/</guid>
          <description>&lt;p&gt;This week, we see improvements to AI, new SFX, and some new icons.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @xMAC94x, @KnightressPaladin,
@juliancoffee, @Snowram, @tygyh, @zesterer, @AngelOnFira, @aweinstock, @Sam,
@Pfau, @Yurimomo, @Aylana, @Savalige, @XVar, and @holychowders!&lt;&#x2F;p&gt;
&lt;p&gt;Veloren recently hit 300k lines of code in the project! @Dr.Dystopia has been
trying to resolve all clippy error suppressions. You can read this week&#x27;s
meeting notes &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;jM9E_XyjTXKgTxm3mdTUSg&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-sfx-by-princess-lana&quot;&gt;New SFX by @Princess-Lana&lt;&#x2F;h3&gt;
&lt;p&gt;I added SFX to the Asp Animal (Creature) in game. It&#x27;s the first animal to have
SFX for all three states (to my knowledge), angry, calm, and hurt. The clips are
Royalty-Free, and have been edited to fit in as needed. Some are recordings from
other open source projects. I measured them against a few other in-game
creature&#x2F;animal sounds, and found that they sound about right at -5db.&lt;&#x2F;p&gt;
&lt;p&gt;It is my first contribution towards the development of Veloren and being part of
a team on GitLab. A lot of gratitude goes out to the people who have guided and
helped me, thank you. I am looking forward to adding my next SFX contribution
soon.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;865557262373486602&amp;#x2F;screenshot_1626434855034.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;wgpu-work-by-sharp&quot;&gt;Wgpu work by @Sharp&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working for a while now on this, but just to let you know I haven&#x27;t
disappeared! I&#x27;m doing a bunch of work directly in wgpu to improve its
performance and API for native applications (including Veloren, of course!). I&#x27;m
also removing pretty much all of the locking (except for locks that are held
very briefly for things like allocation, and locks that appear to be hard to
eliminate due to the native drivers demanding synchronization). I will probably
have a bigger post to talk about this when I&#x27;m done as it&#x27;s a fairly substantial
change.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fixes-by-aweinstock&quot;&gt;Fixes by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I rebased some MRs by @holychowders and @Savalige that were finished, and got
them merged. The former makes guards respond when villagers shout for help, and
the latter causes melee enemies (most noticeably husks) to spread out, resulting
in swarming behavior that reduces the number that can get hit by a single
fireball, and causes them to surround you.&lt;&#x2F;p&gt;
&lt;p&gt;I adjusted spawning behavior to place players aboveground when logging in, which
should eliminate the need to manually use &#x2F;home to get unstuck. I also improved
the PID controllers used for airships and re-tuned them (previously, the
integral term was incorrectly discarding old samples instead of accumulating
total error).&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, I&#x27;ve added support for hats. No hats are currently accessible
without &#x2F;give_item, but the support for them being added is there.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;856365748754710528&amp;#x2F;screenshot_1624243891767.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;856314434003402772&amp;#x2F;screenshot_1624231656560.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;icons-by-pfau&quot;&gt;Icons by @Pfau&lt;&#x2F;h3&gt;
&lt;p&gt;I worked on two icons this week:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065020878061600&amp;#x2F;865623604297203722&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New healing aura&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;864570976733495346&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Airshipper icon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I also continued the concept for the crafting window overhaul. The new crafting
window will hopefully show things like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Crafting trees (with ingredients for ingredients)&lt;&#x2F;li&gt;
&lt;li&gt;More info about ingredients (&quot;what can I craft with this?&quot; or &quot;where do I get
it?&quot;)&lt;&#x2F;li&gt;
&lt;li&gt;More user-friendly representation of armour tiers and sets&lt;&#x2F;li&gt;
&lt;li&gt;More filters&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ai-fixes-by-juliancoffee&quot;&gt;AI fixes by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;This week I worked on small AI fixes. AI now knows how to interact in this evil
world and doesn&#x27;t get stuck within three seconds waiting to be killed. Travelers
don&#x27;t hunt their target forever, and get calm after one kill. Merchants don&#x27;t
get stuck in battle trying to eat curry. Cultists target their leaps better and
not just by flying to the other end of the room. AI also now uses gliders better
which reduces their chance to die from falling.&lt;&#x2F;p&gt;
&lt;p&gt;Charge animals (wolves, mammoths, etc) and spear warriors don&#x27;t double-hit while
dashing. Wildlife spawn rules were moved to &lt;code&gt;.ron&lt;&#x2F;code&gt; configs, which opens
possibilities for easier balancing and testing.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;867399669554216990&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A successful expedition, time to celebrate!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;866808564546928660&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 128</title>
          <pubDate>Mon, 12 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-128/</link>
          <guid>https://veloren.net/blog/devblog-128/</guid>
          <description>&lt;p&gt;This week, we get to see some progress on some new character variations. We also
learn about what changes are being made to modular weapons.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Sam, @ubruntu, @tygyh,
@szabo_lambert, @a1phyr, @swrup, @knightresspaladin, @caldog20, @YuriMomo,
@Pfau, @zesterer, @juliancoffee@DixieDev, @Swagazaki, @Snowram, @aweinstock,
@XVar.&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau is making his way back to working on the project. His first bigger
contribution was adding baldness as an option for the body type 1 of Danari and
humans. Also, there are now more horn variations for Danari And 10+ beard styles
for Danari. @Pfau also added a button to the map menu to toggle @aweinstock&#x27;s
more detailed minimap mode.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;861698285815070761&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;861718408764194816&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;863435788729319424&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;You can read more about the minimap in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-120&#x2F;#minimap-by-aweinstock&quot;&gt;a previous
TWiV&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;modular-weapons-by-sam&quot;&gt;Modular weapons by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;In preparation for modular weapons, I&#x27;ve added a few stats to weapons.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Range: For melee attacks, this will obviously increase the range. For
projectile-based attacks, this increases the projectile speed. For both
shockwaves and beams, this increases the duration of the shockwave or beam
segment.&lt;&#x2F;li&gt;
&lt;li&gt;Energy efficiency: This reduces both the energy cost of activating an ability,
and the rate at which energy drains for any abilities that have an energy
drain.&lt;&#x2F;li&gt;
&lt;li&gt;Buff strength: This will affect the power of buffs and debuffs inflicted in
attacks. We are also considering having buff strength affect the strength of
buffs applied by auras instead of power.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A few weeks ago, we also had a meeting on working out some of the specifics for
modular weapons. The details from that meeting were made into an RFC and can be
found
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;blob&#x2F;master&#x2F;open&#x2F;0021-modular-weapons.md&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;862127709726179328&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A valley of grass. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;863469680982360074&#x2F;screenshot_1625937530027.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 127</title>
          <pubDate>Mon, 05 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-127/</link>
          <guid>https://veloren.net/blog/devblog-127/</guid>
          <description>&lt;p&gt;This week, we see some changes coming to the economic system, as well as food.
We hear about some network fixes, and what issues caused them.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @a1phyr, @xMAC94x, @aweinstock,
@juliancoffee, @Sam, @UMR1352, @zoli111, @AldanTanneo, @XVar, @Yusdacra, @swrup,
@steanne, @eckso, @imbris, @tygyh, @zesterer, @DaforLynx, @Slipped.&lt;&#x2F;p&gt;
&lt;p&gt;This month&#x27;s Rust Gamedev newsletter &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gamedev.rs&#x2F;news&#x2F;023&#x2F;&quot;&gt;is out&lt;&#x2F;a&gt;! You
can also read this week&#x27;s meeting minutes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;xX_VUUzRQci5eOwq0QMYDw&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@Snowram added death SFX and VFX, and made dungeon entrances spawn depend on
biomes (MR yet to be reviewed). @LunarEclipse I&#x27;ve been working on a few small
improvements to Torvus such as adding &#x2F;version and &#x2F;help commands. @juliancoffee
adjusted the yeti difficulty for beginner dungeon.&lt;&#x2F;p&gt;
&lt;p&gt;@Christof just started a redesign of the economic simulation to support new
items and game mechanics introduced in the past six months. With housing,
gliders, lanterns, ores, coal, and gems added, the new schema feels more
adequate but is still a work in progress. Making the conversion between items
and economic wares more reasonable is the major goal here.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;863376346171572224&amp;#x2F;screenshot_1625914370109.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;food-rework-by-juliancoffee&quot;&gt;Food rework by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on a food rework after consuming animations got merged, now
most of the food heals you in 5-10 seconds and starts when you sit down. We also
got a new food item which gives you two effects at the same time - Mushroom
Curry 🍛. It requires you to patiently eat it, but then gives you quick
saturation buff which restores 50 HP as well as a long-lasting regeneration
buff, which slowly heals you for more than a minute!&lt;&#x2F;p&gt;
&lt;p&gt;As for small fixes, merchants now can sell and buy most of the items at
reasonable prices (when Mushroom Curry costs more than its ingredients). They
can even buy mind flayer spell bags though quite frequently they don&#x27;t have coins
that you would want for it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;863209036988416031&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;network-improvements-by-aweinstock&quot;&gt;Network improvements by @aweinstock&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;disabling-nagle-s-algorithm&quot;&gt;Disabling Nagle&#x27;s algorithm&lt;&#x2F;h4&gt;
&lt;p&gt;In order to debug some networking performance issues, I added some
instrumentation of network requests to the client using the tracy tracing
profiler. This revealed that messages on the in-game stream (which is meant to
handle low-latency data like entity position updates and client inputs) were
being delivered in batches.&lt;&#x2F;p&gt;
&lt;p&gt;Graph showing nearly a full second of latency, after which 6 messages were
delivered at once:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;858738641882710046&amp;#x2F;2021-06-27-120031_1366x768_scrot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This turned out to be a result of not disabling Nagle&#x27;s algorithm&#x2F;enabling
&lt;code&gt;TCP_NODELAY&lt;&#x2F;code&gt;. Nagle&#x27;s algorithm maintains a buffer of small messages, only
sending a TCP packet when it&#x27;s full. This trades away latency to improve
throughput, which is the opposite of what&#x27;s desired for the in-game stream. As a
result of disabling Nagle&#x27;s algorithm, input handling and entity movement should
be smoother.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;attempts-to-improve-lossy-terrain-compression&quot;&gt;Attempts to improve lossy terrain compression&lt;&#x2F;h4&gt;
&lt;p&gt;I also tried to improve terrain compression by using 256-color palettes per
block kind. This should allow for sending terrain that&#x27;s a third of the size
(since it&#x27;s 1 byte per voxel for color data instead of 3 bytes for RGB triples),
while still being fairly high quality (since Grass has 256 shades of green, Wood
has 256 shades of brown, and so on).&lt;&#x2F;p&gt;
&lt;p&gt;The slow part of using a palette on terrain is finding the closest color to the
original color, which can be sped up relative to linear search by treating the
colors as vectors and using spatial data structures like kd-trees and R*-trees
to find nearest neighbors of a color by Euclidean distance.&lt;&#x2F;p&gt;
&lt;p&gt;While this was a success compression ratio wise (a full resolution chunk can be
stored at 6% of an in-memory chonk with quantized colors, compared to the 17% or
so of deflate or full resolution unquantized PNG), it was an order of magnitude
slower than either deflate or quarter resolution PNG (the previous best lossy
compression format, at 3% ratio, with noticeable artifacts), rendering it
unsuitable for real-time compression of terrain chunks.&lt;&#x2F;p&gt;
&lt;p&gt;Graph showing average compression time vs chunk height for a set of chunks near
a dungeon:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;860206915505881088&amp;#x2F;compression_speeds_dungeon_192.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;bugfixes&quot;&gt;Bugfixes&lt;&#x2F;h4&gt;
&lt;p&gt;I gave a few more materials non-zero prices, which resulted in most metal and
hide armor being valued by NPC merchants. Cloth isn&#x27;t being given a price yet
since cloth is considered too easy to acquire via chunk reloading, this is
intended to be addressed by modeling plant growth.&lt;&#x2F;p&gt;
&lt;p&gt;I also fixed a longstanding bug with underwater campfires, they now no longer
emit smoke or light when they get put out by being submerged underwater:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;859921494015344650&amp;#x2F;screenshot_1625091648378.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;858712022212280350&#x2F;screenshot_1624803344893.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 126</title>
          <pubDate>Mon, 28 Jun 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-126/</link>
          <guid>https://veloren.net/blog/devblog-126/</guid>
          <description>&lt;p&gt;This week, we get an overview of changes to how development will be done on
GitLab. Lots of new models were added, and we say farewell to a longtime core
developer.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Snowram, @XVar, @xMAC94x, @imbris, @tygyh,
@aweinstock, @juliancoffee, @Yusdacra, @drunkonhotcoco, @Slipped, @nwildner,
@teenjuna, @Danacus, @a1phyr, @SWilliamsGames, @zesterer, @Sam, and
@AldanTanneo!&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix did a lot in preparations for Airshipper 0.4.3:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The server now validates a lot of things before publishing, and the server and
client should now stay in sync&lt;&#x2F;li&gt;
&lt;li&gt;Windows 7&#x2F;8 support is back (unexpected or badly formatted error) courtesy of
@Capucho&#x27;s PR&lt;&#x2F;li&gt;
&lt;li&gt;Many other fixes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;@Songtonix is taking leave from the development of the project this week as
well. @Airshipper has been moved to the Veloren org on GitHub. He&#x27;ll still be
around as a player, but must focus his energy on other work and education. The
core team is very thankful for his work, and wishes him the best with his future
endeavors!&lt;&#x2F;p&gt;
&lt;p&gt;@Snowram added 2 new species to compensate for the lack of wool, an alpaca
(model by @Gemu) and a llama (model by @Snowram), also added mammoth and ngoubou
species (models by @Gemu)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;858435992221646858&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Snowram also substituted the cultist&#x27;s loadout with warlock&#x2F;warlord armour that
was unavailable for players. The cultists now look more fierce and meaner. A
buffed up version of the husk was also added for mini-boss rooms: the Husk Brute
(models by @Gemu)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;858436016671162397&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam worked on adding durations to potions and food (and this will also be
easily extendable to other item uses). What this will mean is that consumables
are no longer instantaneously used, limited only by how fast you can spam a
button. Now you will need to drink the potion or eat the food. @Slipped has made
animations for both drinking and eating.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;859768168699133952&amp;#x2F;Veloren_2021-06-26_15-44-361.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@aweinstock ported the dungeon generator from the sampling-based approach to
site2&#x27;s CSG generator, making it easier to modify.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;858446518306340884&amp;#x2F;screenshot_1624739985373.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@juliancoffee made a MR which sorts crafting tabs in logical order and splits
recipes from Dismantle and Material tabs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;858451577669156864&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-cultist-predicament-by-juliancoffee&quot;&gt;The cultist predicament by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;Mind flayers were a little worried about their cultists being too weak. Someone
even said that cultists are weaker than ants from Myrmidon dungeon! What
nonsense! Reforms were needed, everyone knew that. So best darksmiths worked on
new armour. Orichalcum? Good choice, if you want to get hit, but cultists should
be smarter than that.&lt;&#x2F;p&gt;
&lt;p&gt;Dragonscale? Better, but still has less protection. While you can hit harder
with it, you lack stamina. Sunsilk solves this issue, but only if you consider a
bunch of silk the armour. Cultists are best, they deserve to have this all! And
the darksmiths come up with the answer.&lt;&#x2F;p&gt;
&lt;p&gt;Smith&#x27;s chef-d&#x27;oeuvre gives its owner strength of any possible armour.
Mind flayer also get a better weapon with the flamethrower of such power so they
hardly can handle it themselves. But a single piece of metal and heat of fire
doesn&#x27;t win fights alone. so mind flayers gathered the best warriors and gave
them power consumed from weaker ones (so that mind flayer don&#x27;t need to waste
their corrupted spores...).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;858712022212280350&amp;#x2F;screenshot_1624803344893.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;gitlab-repository-changes-by-xmac94x&quot;&gt;GitLab repository changes by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;Veloren&#x27;s community is open and volunteer-driven. We welcome new contributors
from all walks of life in our mission to build the best game we possibly can.
Currently, we hand out &#x27;developer&#x27;-level permissions to contributors on the main
Veloren GitLab repository.&lt;&#x2F;p&gt;
&lt;p&gt;Long-term, this situation is untenable and will need reevaluating: GitLab&#x27;s
permission system is crude and doesn&#x27;t allow us to control access permissions
across branches, meaning that contributors have more permissions than are
necessary to do their work.&lt;&#x2F;p&gt;
&lt;p&gt;The obvious alternative to this workflow is to have contributors fork the
repository and contribute by upstreaming to the main repository through merge
requests. However, this comes with some disadvantages:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Collaboration between multiple contributors is harder: contributors must
decide to work on a specific lead contributors fork, and will require
permissions to do so, as well as adding the fork as a remote locally&lt;&#x2F;li&gt;
&lt;li&gt;Continuous Integration (CI), the system for testing changes to the codebase
before merge, will need to be manually set up for each fork.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For these reasons, we&#x27;re going to be trialing a third solution: a dedicated
&#x27;contributor&#x27; repository where contributors can work on features as they do on
the main repository today, but will open MRs against the main repository when
features are complete. The main repository will be used only for branches
authored by core developers, and the main branch&#x2F;release tags.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;what-this-means-for-you&quot;&gt;What this means for you&lt;&#x2F;h4&gt;
&lt;p&gt;For contributors, the change in workflow should be minimal: the only change
you&#x27;ll need to make is to switch the URL of your &#x27;origin&#x27; remote locally, and
remembering to open an MR with the main repository when you feature is ready for
review. All permissions, CI-related things, etc. will be handled by us. Shortly
after a transition period, we will deactivate the developer rights on the main
repo and ask you to switch to the &lt;code&gt;veloren&#x2F;dev&#x2F;veloren&lt;&#x2F;code&gt; repository permanently.&lt;&#x2F;p&gt;
&lt;p&gt;For developer this means you need to change the remote URL.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span&gt; remote set-url origin git@gitlab.com:veloren&#x2F;dev&#x2F;veloren.git
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We are happy to hear your feedback and questions in the respective channels 🙂&lt;&#x2F;p&gt;
&lt;h3 id=&quot;faq&quot;&gt;FAQ&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;What exactly are the security concerns?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We will publish them in a blog post once we this change is complete, to avoid
tempting potential exploits.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Will I still be able to use my Fork?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yes: the dev repo is optional. Feel free to continue forks, though we do
recommend you join the dev repository in order to make your life easier.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;I have an ongoing MR on the veloren&#x2F;veloren repository. What do I need to
do?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nothing will happen to core developers and team leads, they will keep access to
the main repo until their MR is merged or closed. If you made the change in on
your fork, this will also be the case. If you made the change on the main repo
but are neither a core developer nor a team lead, please contact me (@xMAC94x).
If you are currently working on a branch, please push that branch to the dev
repository, using the same name.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;How do I join the dev repository?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We have already invited all members of &lt;code&gt;veloren&#x2F;veloren&lt;&#x2F;code&gt; to the dev group. If
you are not yet a member, apply here:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;groups&#x2F;veloren&#x2F;dev&#x2F;-&#x2F;group_members&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;groups&#x2F;veloren&#x2F;dev&#x2F;-&#x2F;group_members&lt;&#x2F;a&gt; and ping one of the core developers.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Should I now &lt;code&gt;star&lt;&#x2F;code&gt;, &lt;code&gt;fork&lt;&#x2F;code&gt;, open issues on the &lt;code&gt;veloren&#x2F;dev&#x2F;veloren&lt;&#x2F;code&gt; repo
instead?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;No, please use our main repo &lt;code&gt;veloren&#x2F;veloren&lt;&#x2F;code&gt; as the project&#x27;s &#x27;ground truth&#x27;.
Only use the dev repo for development purposes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;How do I open Merge Requests (MRs) now?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When you open a new MR in the dev repo, it should automatically have the target
&lt;code&gt;veloren&#x2F;veloren&#x2F;master&lt;&#x2F;code&gt;. This means that the process should not differ in
practice.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;859196914334302258&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lots to explore in the caves. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;857738298952384512&#x2F;Phoenix_V_Roc.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 125</title>
          <pubDate>Mon, 21 Jun 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-125/</link>
          <guid>https://veloren.net/blog/devblog-125/</guid>
          <description>&lt;p&gt;This week, we get an in-depth view into what was required for the wgpu
integration. We see some changes to econsim, performance, and caves.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @YuriMomo, @zesterer, @Slipped, @xMAC94x,
@SWilliamsGames, @Christof, @aweinstock, @Sam, @juliancoffee, @Yusdacra,
@imbris, @DaforLynx, @donovanlank, @AngelOnFira, @Capucho, @Snowram, @Zakru, and
@Kisa!&lt;&#x2F;p&gt;
&lt;p&gt;@Sam worked on a harvester rework. It&#x27;ll have 4 unique attacks and all-new AI.
To see it, go visit your local T0 dungeon (after it merges).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;N9FRk1roT-i9ZN9yCGI4Hw&quot;&gt;This week&#x27;s meeting minutes.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lava-and-performance-by-aweinstock&quot;&gt;Lava and performance by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I added Lava to caves, which glows, and which sets you on fire when
you enter it.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;856193253933187092&amp;#x2F;veloren_lavadensity_20210620.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I also improved the performance of entity-terrain collisions (one of the main
parts of physics) by an average of 20 microseconds per frame by adding a check
for a more precise bounding box before looking up voxels in the terrain.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;854553057555775488&amp;#x2F;2021-06-15-224759_1366x768_scrot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;econsim-improvements-christof&quot;&gt;Econsim improvements @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;I finally found the mistake in the faster economy simulation code and the code
got merged - server startup should be faster by several seconds.&lt;&#x2F;p&gt;
&lt;p&gt;After that, I started &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;blob&#x2F;e0b7804c6341a690331f16b982da94d98463b560&#x2F;open&#x2F;xxxx-economy_redesign.md&quot;&gt;an
RFC&lt;&#x2F;a&gt;
about short and long-term goals. Econsim will soon get more wares and
professions to match the increased number of items, and the much more powerful
crafting recipes. Also, prices will probably get independent of loot
probabilities and become more raw material derived.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;all-about-wgpu&quot;&gt;All about wgpu&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;A section by @imbris and @Sharp, edited by @Capucho and @AngelOnFira.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;We now use the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wgpu.rs&#x2F;&quot;&gt;&lt;code&gt;wgpu&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; crate for our graphics!&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After a long journey of refactoring our rendering code for &lt;code&gt;wgpu&lt;&#x2F;code&gt;, rebasing,
refactoring new graphics features to use &lt;code&gt;wgpu&lt;&#x2F;code&gt;, updating the code across &lt;code&gt;wgpu&lt;&#x2F;code&gt;
versions, testing on a plethora of platforms, fixing miscellaneous bugs, and
rewriting parts of our CI cache generation with efforts from @Imbris, @Capucho,
@Sharp, and others we have finally
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1947&quot;&gt;merged&lt;&#x2F;a&gt; the long
awaited 129 commit branch that switches our rendering code to this new graphics
crate!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;wgpu&lt;&#x2F;code&gt; is the spiritual successor to the &lt;code&gt;gfx&lt;&#x2F;code&gt; (pre low level) crate we were
using for graphics so it sits at a similar level of abstraction. However, &lt;code&gt;wgpu&lt;&#x2F;code&gt;
provides a cleaner modern API that gives use more control and the ability to
leverage the power of modern backends including vulkan, metal, and dx12. With
&lt;code&gt;gfx&lt;&#x2F;code&gt; we only used the OpenGL backend and now with &lt;code&gt;wgpu&lt;&#x2F;code&gt; we have automatic
support for multiple backends including automatic runtime backend selection.&lt;&#x2F;p&gt;
&lt;p&gt;The currently functioning backends are vulkan, dx12, metal, and dx11 (support
for OpenGL is lost for the moment). We saw improvements in performance
especially for Windows users with decent graphics cards that previously
experienced a significant discrepancy in performance from Linux users with
similar cards.&lt;&#x2F;p&gt;
&lt;p&gt;Now that this period of refactoring has been finished, we&#x27;re excited to see the
optimizations and features we can develop on this fresh graphics API.&lt;&#x2F;p&gt;
&lt;p&gt;Much thanks to @kvark and @cwfitzgerald ❤️ for answering the questions we had
about &lt;code&gt;wgpu&lt;&#x2F;code&gt;, resolving bugs we encountered, and being extremely receptive to
issue reports and pull requests!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to all the testers who helped us track down platform-specific bugs and
make sure everything was mostly working everywhere!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Notable previous mentions of the &lt;code&gt;wgpu&lt;&#x2F;code&gt; refactor are in
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-64&quot;&gt;devblog-64&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-100&quot;&gt;devblog-100&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;presentation-modes-option&quot;&gt;Presentation modes option&lt;&#x2F;h4&gt;
&lt;p&gt;We added a new option in the graphics menu with the three presentation modes
exposed by &lt;code&gt;wgpu&lt;&#x2F;code&gt;: Immediate, Mailbox, and Fifo. Selecting Fifo or Mailbox can
be used to avoid screen tearing. Fifo corresponds to &lt;strong&gt;VSync&lt;&#x2F;strong&gt; and as such caps
the frame rate at the display refresh rate. Immediate and Mailbox both fallback
to Fifo within &lt;code&gt;wgpu&lt;&#x2F;code&gt; if that option isn&#x27;t available on the current platform.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;857287082069983252&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;gpu-timing-with-wgpu-profiler&quot;&gt;GPU timing with &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Wumpf&#x2F;wgpu-profiler&quot;&gt;&lt;code&gt;wgpu-profiler&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;While working on this refactor I discovered, via lurking on the Rust gamedev
Discord and the wgpu matrix channels, that wpgu provided an API for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;wgpu&#x2F;0.9.0&#x2F;wgpu&#x2F;struct.RenderPass.html#method.write_timestamp&quot;&gt;collecting
timestamps&lt;&#x2F;a&gt;
between sections of work on the GPU. This piqued my interest as I&#x27;ve previously
had much success identifying and optimizing our CPU bottlenecks with the use of
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;flamegraph&quot;&gt;flame graph&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wolfpld&#x2F;tracy&quot;&gt;Tracy&lt;&#x2F;a&gt; while our GPU side performance was
mostly opaque to me.&lt;&#x2F;p&gt;
&lt;p&gt;Thus, I started working on writing an abstraction to make it easier to
instrument our rendering code with timestamps. While I was in the process of
this, Wumpf released &lt;code&gt;wgpu-profiler&lt;&#x2F;code&gt;. I discovered it had everything I needed
and nicely solved the complications of identifying timestamps which I was too
focused on over-optimizing. It even included the ability to write out to a
chrome trace which was pretty neat!&lt;&#x2F;p&gt;
&lt;p&gt;So I switched to &lt;code&gt;wgpu-profiler&lt;&#x2F;code&gt;, made a
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Wumpf&#x2F;wgpu-profiler&#x2F;pull&#x2F;4&quot;&gt;PR&lt;&#x2F;a&gt; adding drop based scope
wrappers around wgpu types, and deleted all the extra code I had for this in the
Veloren codebase which was pretty satisfying. I then added scopes around all the
major portions of our rendering (essentially one for each render pass and one
for each pipeline).&lt;&#x2F;p&gt;
&lt;p&gt;To make it easy to access this new information I added a new option in the
graphics menu to enable GPU timing. The timing values can be viewed in the HUD
debug info (F3) and will be saved as chrome trace files in the working directory
when taking a screenshot. It&#x27;s mostly just supported on the Vulkan backend at
the moment so if you don&#x27;t see anything new in the debug info then the feature
isn&#x27;t available on your current backend&#x2F;platform combination. I intend to
eventually make the checkbox gray out in this case instead of having no
indication. It would be neat to plot these values over time in the future.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;857608409259049050&amp;#x2F;DeJnSmN.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chrome trace&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;857608441693470740&amp;#x2F;LUYWZMN.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;GPU timing in HUD debug info&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We can also now use tooling for profiling vulkan and dx12 such as this profiler
from AMD: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gpuopen.com&#x2F;rgp&#x2F;&quot;&gt;https:&#x2F;&#x2F;gpuopen.com&#x2F;rgp&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;857608467140444200&amp;#x2F;3pmszae.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Example RGP profile on Ryzen 3 3200U integrated graphics&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;sprite-optimization&quot;&gt;Sprite optimization&lt;&#x2F;h4&gt;
&lt;p&gt;High sprite view distances previously had a really large impact on the CPU. We
used instancing for sprites to draw multiple ones with the same model within a
single draw call. However, within a chunk there several different sprite kinds
(some with multiple variations in their models) leading to a large number of
draw calls and significant CPU overhead when trying to draw more sprites farther
away.&lt;&#x2F;p&gt;
&lt;p&gt;To reduce the number of draw calls we need to make I combined all the sprite
models into a single buffer of vertices and then used a technique called vertex
pulling to fetch the vertex data from this buffer within the vertex shader by
determining the location in the buffer from the index of the current vertex
combined with the mesh offset for the current instance.&lt;&#x2F;p&gt;
&lt;p&gt;This moved the bottleneck for sprites into the vertex shader both because this
introduced a bit more work in the shader and because sprites simply have a lot
of vertices and were no longer limited by the CPU. To help alleviate this I
converted all our quad drawing (i.e. what all our terrain, figures, and sprites
are made of) to use an index buffer to reduce the number of vertices that need
to be processed per quad from 6 to 4 (as the GPU should cache vertices with the
same index).&lt;&#x2F;p&gt;
&lt;p&gt;This helped and also led to small gains for shadow rendering times, presumably
terrain and figures also benefited but the cost of the fragment shader for those
is far greater in typical scenes. I think we can squeeze more performance out of
sprites by optimizing the vertex shader further and reducing the amount of
per-instance data. Another area where we can tackle this is reducing the
vertices used for sprites that are far off and take up only a few pixels. We
already have different LOD levels that reduce the number of vertices but we may
be able to go further and simply render 2D billboard-style sprites for these.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;reversing-the-depth-buffer&quot;&gt;Reversing the depth buffer&lt;&#x2F;h4&gt;
&lt;p&gt;One of the bigger wins from switching to &lt;code&gt;wgpu&lt;&#x2F;code&gt; is that it lets us abandon the
OpenGL depth buffer. To make a long story short, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dev.theomader.com&#x2F;depth-precision&#x2F;&quot;&gt;the standard method for
calculating depth buffers is the worst possible way to do
it&lt;&#x2F;a&gt;. They should be computed
&quot;backwards&quot; from how people normally set them up due to this taking far better
advantage of the way floating point precision works (in fact, it is nearly
&lt;em&gt;optimal&lt;&#x2F;em&gt; for floating point)!&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, since it takes some fairly involved math to realize this, the
OpenGL spec was published in a way that makes it impossible to realize the
benefits of reversed depth buffers, due to setting depth planes to go from -1 to
1 instead of 0 to 1; the conversion to 0 to 1 must then be done in the drivers
by computing &lt;code&gt;depth * 0.5 + 0.5&lt;&#x2F;code&gt;, which is pretty much the worst possible thing
you can do for floating point accuracy and negates the reversal effect. &lt;code&gt;wgpu&lt;&#x2F;code&gt;
follows the far more sensible Vulkan, Metal, and DirectX option, and sets depth
buffers from 0 to 1, enabling us to realize the effect.&lt;&#x2F;p&gt;
&lt;p&gt;The practical upshot of this is that we can set the near plane much, much closer
than before, while extending the far plane to (effectively) infinity, while
retaining better precision than before at literally every point in the whole
range (except maybe within a very tiny fraction of a block in front of the near
plane). This should help us improve clipping since it solves the most annoying
aspect of it (near plane) and also lets us render much bigger maps without
noticeable artifacts (unless you zoom all the way out).&lt;&#x2F;p&gt;
&lt;h4 id=&quot;organizing-bind-group-and-pipeline-switching&quot;&gt;Organizing bind group and pipeline switching&lt;&#x2F;h4&gt;
&lt;p&gt;To avoid redundant state changes (setting pipelines, bind groups, vertex
buffers) as much as possible. We created a series of &quot;Drawer&quot; types that wrap a
reference to the render pass and guarantee for instance that a certain pipeline
is in use. We have a top level &lt;code&gt;Drawer&lt;&#x2F;code&gt; that exists transiently during the
recording of the frame:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub struct &lt;&#x2F;span&gt;&lt;span&gt;Drawer&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;frame&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;encoder&lt;&#x2F;span&gt;&lt;span&gt;: Option&amp;lt;ManualOwningScope&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;frame&lt;&#x2F;span&gt;&lt;span&gt;, wgpu::CommandEncoder&amp;gt;&amp;gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;borrow&lt;&#x2F;span&gt;&lt;span&gt;: RendererBorrow&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;frame&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;swap_tex&lt;&#x2F;span&gt;&lt;span&gt;: wgpu::SwapChainTexture,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;globals&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;frame&lt;&#x2F;span&gt;&lt;span&gt; GlobalsBindGroup,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Texture and other info for taking a screenshot
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Writes to this instead in the third pass if it is present
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;taking_screenshot&lt;&#x2F;span&gt;&lt;span&gt;: Option&amp;lt;super::screenshot::TakeScreenshot&amp;gt;,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This hold references to bits of the render state that we need and owns the
command encoder. Then for example, there is a method to start the first render
pass that returns a &lt;code&gt;FirstPassDrawer&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Returns None if all the pipelines are not available
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;first_pass&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; Option&amp;lt;FirstPassDrawer&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; pipelines = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.borrow.pipelines.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;all&lt;&#x2F;span&gt;&lt;span&gt;()?;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Note: this becomes Some once pipeline creation is complete even if shadows
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; are not enabled
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; shadow = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.borrow.shadow?;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; encoder = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.encoder.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;as_mut&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; device = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.borrow.device;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let mut&lt;&#x2F;span&gt;&lt;span&gt; render_pass = encoder.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;scoped_render_pass&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;first_pass&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;* snip *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; });
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_bind_group&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.globals.bind_group, &amp;amp;[]);
&lt;&#x2F;span&gt;&lt;span&gt;        render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_bind_group&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &amp;amp;shadow.bind.bind_group, &amp;amp;[]);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        Some(FirstPassDrawer {
&lt;&#x2F;span&gt;&lt;span&gt;            render_pass,
&lt;&#x2F;span&gt;&lt;span&gt;            borrow: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.borrow,
&lt;&#x2F;span&gt;&lt;span&gt;            pipelines,
&lt;&#x2F;span&gt;&lt;span&gt;            globals: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.globals,
&lt;&#x2F;span&gt;&lt;span&gt;            shadows: &amp;amp;shadow.bind,
&lt;&#x2F;span&gt;&lt;span&gt;        })
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But before returning it two bind groups are set:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;        render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_bind_group&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.globals.bind_group, &amp;amp;[]);
&lt;&#x2F;span&gt;&lt;span&gt;        render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_bind_group&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &amp;amp;shadow.bind.bind_group, &amp;amp;[]);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In subsequent drawing, we can then rely on these bind groups being set (as long
as we maintain that they aren&#x27;t overridden which we accomplish by keeping all
the logic which sets bind groups (and other things) in this one module). Then
e.g. to start drawing terrain we create a &lt;code&gt;TerrainDrawer&lt;&#x2F;code&gt; setting the pipeline
and the index buffer in the process:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;draw_terrain&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; TerrainDrawer&amp;lt;&amp;#39;_, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let mut&lt;&#x2F;span&gt;&lt;span&gt; render_pass = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;terrain&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.borrow.device);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_pipeline&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.pipelines.terrain.pipeline);
&lt;&#x2F;span&gt;&lt;span&gt;        set_quad_index_buffer::&amp;lt;terrain::Vertex&amp;gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; render_pass, &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.borrow);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        TerrainDrawer {
&lt;&#x2F;span&gt;&lt;span&gt;            render_pass,
&lt;&#x2F;span&gt;&lt;span&gt;            col_lights: None,
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Such that when we draw all the chunks we only need to set the additional bind
groups and vertex buffer specific to each chunk:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;impl&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass_ref&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass_ref&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; TerrainDrawer&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass_ref&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;draw&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;data&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;pass&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;(
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;model&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;data &lt;&#x2F;span&gt;&lt;span&gt;Model&amp;lt;terrain::Vertex&amp;gt;,
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;col_lights&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;data &lt;&#x2F;span&gt;&lt;span&gt;Arc&amp;lt;ColLights&amp;lt;terrain::Locals&amp;gt;&amp;gt;,
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;locals&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;data &lt;&#x2F;span&gt;&lt;span&gt;terrain::BoundLocals,
&lt;&#x2F;span&gt;&lt;span&gt;    ) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.col_lights
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Check if we are still using the same atlas texture as the previous drawn chunk
&lt;&#x2F;span&gt;&lt;span&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;filter&lt;&#x2F;span&gt;&lt;span&gt;(|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;current_col_lights&lt;&#x2F;span&gt;&lt;span&gt;| Arc::ptr_eq(current_col_lights, col_lights))
&lt;&#x2F;span&gt;&lt;span&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;is_none&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;        {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.render_pass
&lt;&#x2F;span&gt;&lt;span&gt;                .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_bind_group&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, &amp;amp;col_lights.bind_group, &amp;amp;[]);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.col_lights = Some(col_lights);
&lt;&#x2F;span&gt;&lt;span&gt;        };
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_bind_group&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &amp;amp;locals.bind_group, &amp;amp;[]);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.render_pass.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set_vertex_buffer&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, model.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;buf&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;slice&lt;&#x2F;span&gt;&lt;span&gt;(..));
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.render_pass
&lt;&#x2F;span&gt;&lt;span&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;draw_indexed&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;..model.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;() as &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u32 &lt;&#x2F;span&gt;&lt;span&gt;&#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;4 &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;future-of-opengl-support&quot;&gt;Future of OpenGL support&lt;&#x2F;h4&gt;
&lt;p&gt;With this transition, we gain access to a lot of new graphics backends, but we
now no longer have OpenGL support. This mainly affects Linux users as support
for older Windows machines is provided through dx11. Nevertheless, we may regain
some form of OpenGL support on Linux in the future. The backend abstraction
layer for &lt;code&gt;wgpu&lt;&#x2F;code&gt; was &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gfx-rs&#x2F;wgpu&#x2F;pull&#x2F;1471&quot;&gt;recently rewritten and moved into the main &lt;code&gt;wgpu&lt;&#x2F;code&gt;
repo&lt;&#x2F;a&gt; removing a lot of the barriers
to getting an OpenGL backend working.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;shaderc-adventures&quot;&gt;Shaderc adventures&lt;&#x2F;h4&gt;
&lt;p&gt;To use our GLSL shaders with &lt;code&gt;wgpu&lt;&#x2F;code&gt; we have to compile them to SPIRV. Currently,
the only viable option for this is using shaderc. However, shaderc is a C++
dependency and thus has the potential to bring complications to the build
process which it does. Building shaderc requires &lt;code&gt;git&lt;&#x2F;code&gt;, &lt;code&gt;cmake&lt;&#x2F;code&gt;, and &lt;code&gt;python&lt;&#x2F;code&gt; to
be installed and also &lt;code&gt;ninja&lt;&#x2F;code&gt; on Windows. This adds extra steps for new
contributors looking to compile Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, shaderc introduced complications into our cross compiled CI builds
(for non Linux platforms). Cross compiling to Windows, I ran into &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;google&#x2F;shaderc&#x2F;issues&#x2F;1176&quot;&gt;this
issue&lt;&#x2F;a&gt; which I was only able to
solve by using the POSIX threads version of MinGW which necessitated
distributing some DLL files.&lt;&#x2F;p&gt;
&lt;p&gt;Cross compiling to macOS also had various issues with compiling and&#x2F;or linking
shaderc. After several attempts including trying to use prebuilt versions of
shaderc, we eventually switched to natively building on a macOS runner which was
admittedly a somewhat useful change outside of getting shaderc working as we
have had &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-windowing&#x2F;winit&#x2F;pull&#x2F;1626&quot;&gt;other&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;RustAudio&#x2F;coreaudio-sys&#x2F;issues&#x2F;48&quot;&gt;issues&lt;&#x2F;a&gt; with cross
compiling to macOS. Shaderc is also pretty massive and appears to add at least
~10 MB to our binary size. Hence, we are really looking forward to when
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gfx-rs&#x2F;naga&quot;&gt;&lt;code&gt;naga&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, a shader translator library written in
pure Rust, will be able to replace shaderc for our purposes.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;cpu-profiling&quot;&gt;CPU profiling&lt;&#x2F;h4&gt;
&lt;p&gt;Since we had a major refactor I thought it would be neat to examine the CPU
profiles of the work being done during rendering. Most of the CPU side time for
rendering appears to be spent in &lt;code&gt;run_render_pass&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;857612433221091378&amp;#x2F;DseKg57.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tracy profile showing ~2 ms to queue rendering of everything for a
  frame&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;857612452124033024&amp;#x2F;FiiWnx0.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flamegraph snippet showing where `run_render_pass` spends time&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;857612515646373888&amp;#x2F;WywPQz9.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Settings used for CPU profiling&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;future-directions&quot;&gt;Future directions&lt;&#x2F;h4&gt;
&lt;p&gt;Our future with wgpu is bright. Because its API is much closer to that of modern
graphics drivers, it should be much easier to incorporate newer hardware
features (at least if they have a little bit of cross-platform support). We also
have a great opportunity to help influence the shape of not only wgpu, but the
WebGPU specification itself, to make it better for games in general.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, having made this switch lets us focus on other rendering improvements
we&#x27;d been putting off in order not to block wgpu work (or which were blocked by
lack of wgpu), such as:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Separate the voxygen renderer module into its own crate (e.g. we can use it in
a voxel editor)&lt;&#x2F;li&gt;
&lt;li&gt;Create a small renderer engine test&#x2F;demo for rapid iteration and testing.&lt;&#x2F;li&gt;
&lt;li&gt;Rendering on multiple threads (impossible before wgpu, currently waiting on
removal of locks in wgpu).&lt;&#x2F;li&gt;
&lt;li&gt;Deferred rendering (making large numbers of unshaded point lights cheap).&lt;&#x2F;li&gt;
&lt;li&gt;Move completely to &lt;code&gt;naga&lt;&#x2F;code&gt; once it has GLSL support and can handle our shaders.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fintelia&#x2F;smaa-rs&quot;&gt;SMAA&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Improved LOD rendering (including things like trees, sites, and maybe even
some form of sprites).&lt;&#x2F;li&gt;
&lt;li&gt;Smarter and more accurate shadows with occlusion queries (useful for many
other purposes as well) and Z-partitioning.&lt;&#x2F;li&gt;
&lt;li&gt;Faster and smarter chunk updates, both for initial rendering and updates to
things like sprites, to reduce apparent load times.&lt;&#x2F;li&gt;
&lt;li&gt;More physically correct HDR, allowing us to remove various lighting hacks
(should especially help at night).&lt;&#x2F;li&gt;
&lt;li&gt;Take advantage of compute shaders and GPU-side buffer updates to speed up
CPU-limited operations.&lt;&#x2F;li&gt;
&lt;li&gt;(Maybe) explicit tiled rendering, tessellation shaders, and multiple queues,
if&#x2F;when supported!&lt;&#x2F;li&gt;
&lt;li&gt;And much, much more!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;857425571158818856&amp;#x2F;screenshot_1624496547126.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Out for an early morning dip. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;857637175579377664&#x2F;bvpjl18pxm671.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 124</title>
          <pubDate>Mon, 14 Jun 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-124/</link>
          <guid>https://veloren.net/blog/devblog-124/</guid>
          <description>&lt;p&gt;This week, 0.10 released! We hear from @Slipped about caves, plugins from
@zesterer, and other improvements by @aweinstock and @juliancoffe.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @AsumFace, @xMAC94x, @aweinstock,
@SpecificProtagonist, @juliancoffee, @Pfau, @Yusdacra, @Kisa, @XVar,
@AngelOnFira, @Cr0ss0vr, @Slipped, @zesterer, @Capucho, @jvck10, @Scott, @tygyh,
@Sam, and @Christof!&lt;&#x2F;p&gt;
&lt;p&gt;This past week, 0.10 released! At peak, there were 118 unique players online.
Read more about the release in the writeup below.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;855434556740337724&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Nomagno has been pondering the feasibility of a partial WASM port of
&lt;code&gt;veloren-server&lt;&#x2F;code&gt;, &lt;code&gt;veloren-common&lt;&#x2F;code&gt;, and &lt;code&gt;veloren-client&lt;&#x2F;code&gt;, and hopes to put some
work into it in the future. @Scott adjusted most of the NPC&#x27;s hitboxes to better
fit their models and lowered a lot of the smaller creatures&#x27; health values to
make early game easier.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;725508097233125407&amp;#x2F;852336070195544084&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Crafting exp with a different colour and an extra symbol&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;During the debugging of the meat MR, @aweinstock made a Graphviz generator that
processes the recipe book:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;851889920071041074&amp;#x2F;recipe_graph_lr.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Snowram added some new NPCs, including a roc NPC with a new tornado summoning
attack. Look out for it in the sky! @Slipped merged some rebalancing to correct
things after the armor MR made everyone stronger. Hopefully, now we have better
progression barricades for the tiers of monsters that drop the materials you
need to advance through the crafting system, by making lots of stuff stronger.
And we have a basilisk petrify attack so that&#x27;s pretty rad.&lt;&#x2F;p&gt;
&lt;p&gt;@juliancoffee worked on loading &lt;code&gt;EntityInfo&lt;&#x2F;code&gt; from assets. &lt;code&gt;EntityInfo&lt;&#x2F;code&gt; is
builder-like structure that is used to populate chunks and then server spawns
creatures from that. Now you can describe body (only random for now), loadout,
skillset, name, loot, and weapons in asset and then just load them where you
need them. Currently, it works only for single entities (so if you need to spawn
multiple entities, you are using vector for this) but this is base for things
like loading whole dungeon crowd from asset where you can specify enemies for
each room or describe what pack of animals will be spawned somewhere in
overworld.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;853014650340638720&amp;#x2F;screenshot_1623444720229.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;caves-by-slipped&quot;&gt;Caves by @Slipped&lt;&#x2F;h3&gt;
&lt;p&gt;One thing that became super clear once we decided to start adding more ores to
caves was that they were due for a tune-up. They took very little advantage of
static lighting, weren&#x27;t very deeply tied to progression and their difficulty
was a bit all over the place. However, their actual structure set up by
@zesterer was amazing and we were completely underselling that. Caves break down
to 4 points of hierarchy:&lt;&#x2F;p&gt;
&lt;h4 id=&quot;layout&quot;&gt;Layout&lt;&#x2F;h4&gt;
&lt;p&gt;This is the existing canvas. Caves can be super vertical, super wide or
frighteningly narrow. They can have platforms, glider obstacle courses, and a
ton of other things. No changes were needed for the lowest level hierarchy, it&#x27;s
already great.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;851945455309815808&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;structures&quot;&gt;Structures&lt;&#x2F;h4&gt;
&lt;p&gt;So far, caves have had some really cool stalactites for structure. We needed
more of that. First was color, there are now noisy colored floors and ceilings
in the caves, which helps break up the old gray. New caves also have different
structures depending on depth. Once you enter, there are ridges, which are huge
white scaffolds that hold up the ceiling of the cave. They cover some percent of
the ceiling at specific intervals of the cave depth, which creates clean
structures in narrow hallways and very chaotic bands of scaffold in bigger
rooms.&lt;&#x2F;p&gt;
&lt;p&gt;As you go deeper, we trigger the stalactites. Finally, at the lowest levels we
trigger pits, which can go 30 blocks deep, along with veins. Veins store the
best ores in the game, so look for orange sand and you can pickaxe through for
the ore deposits at the bottom.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sprites&quot;&gt;Sprites&lt;&#x2F;h4&gt;
&lt;p&gt;Sprites are the next level up the hierarchy. A few big changes here were making
sprite spawns width dependent so that they mostly spawn closer to the walls,
adding ceiling sprites, and adjusting the sprite glow color to be less fire-like
and more neutral. Thanks to the artists, we have different layers which use
mushroom, crystal, or orb sprites as you go deeper, and caves are very lit up
now. We also added dripping particles from the ceiling.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;852319605010464778&amp;#x2F;screenshot_1623279280820.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;enemies&quot;&gt;Enemies&lt;&#x2F;h4&gt;
&lt;p&gt;Enemies are on the top level of the hierarchy, and got rebalanced to tune
difficulty. On entry, things are still passive so new players can gather basic
ore. Next, you hit moderate enemies like asps and salamanders, to give scales
and protect the iron. After that you reach the cobalt&#x2F;coal layer, protected by
basilisks and firedrakes, upping the difficulty. Finally, the bottom layer has
ogres, cyclops, trolls, and others protecting gold, silver, and bloodstone, the
most useful ores in the game.&lt;&#x2F;p&gt;
&lt;p&gt;The next plans are to start getting into biome-specific cave themes, so look out
for that!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;plugin-tutorial-by-zesterer&quot;&gt;Plugin Tutorial by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I finally got around to writing a tutorial for the new plugin API. It&#x27;s worth
noting that the plugin API is still under heavy development, but I&#x27;ll try to
update the tutorial regularly to reflect changes.&lt;&#x2F;p&gt;
&lt;p&gt;The tutorial takes budding modders all the way from setting up the project to
packing, playing in the game, and demonstrates a series of API features.
Hopefully, this is going to accelerate activity around plugins and help us push
the API to the point that it becomes viable for community modding.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;modders&#x2F;writing-a-plugin.html&quot;&gt;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;modders&#x2F;writing-a-plugin.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;852315939407134720&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;mining-and-movement-fixes-by-aweinstock&quot;&gt;Mining and movement fixes by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I added a mining skill tree, which gives XP when mining ore (and not from
combat). Skill points in the mining skill tree can be spent on mining faster,
and on a chance to gain extra ore and gems when mining. @Scott made the icons
for the skill tree, and @Pfau helped to fine-tune the UI. @DrDystopia also
helped by refactoring &lt;code&gt;voxygen::hud::diary&lt;&#x2F;code&gt;, which made it easier for me to add
the new skill tree to the UI.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;852039235178594344&amp;#x2F;veloren_doubleore_20210609.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I also made it so that character abilities that apply forced movement (primarily
leaps and rolls) temporarily disable entity-entity pushback. This fixes a bug
with axe&#x2F;hammer leap where you couldn&#x27;t deliver the hit because you&#x27;d be pushed
away on landing from the leap before swinging the axe or hammer. This also makes
it possible to roll through creatures, which means that it&#x27;s now possible to
escape being stuck in a corner by a minotaur.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;853286222071988235&amp;#x2F;veloren_forcemove_e2e_vp9_20210612.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;0-10-release-party-by-angelonfira&quot;&gt;0.10 Release Party by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;With the release party last Saturday, lots of telemetry was recorded. In
comparison to the previous release, 0.10 went a lot smoother. Some of the devs
got into a voice chat to talk about the game&#x27;s development, and this was
streamed to Twitch. Check out the recording below!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;NMvEhymkqUw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;One of the primary metrics that we can best use to determine server health
during releases is the tick time. In the case of this release, we saw healthy
tick times of between ~40-50ms. Ideally, it would be best if they were less than
33ms, as this gives the target tick rate of 30 ticks per second. During previous
releases, we saw it go as high as 100ms, which would tend to snowball while
trying to catch up on work from previous ticks.&lt;&#x2F;p&gt;
&lt;p&gt;For the release, we used a 32 core dedicated server from Hetzner. This time, we
made use of the new AMD CPU option, which turned out to help a lot.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;855436668127805470&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As you can see, during the release party each core never really went above 30%
usage. This shows that although we can make use of parallel processing, we&#x27;re
still limited by how fast the main thread is working. A key point of future
optimizations will be to distribute work across the cores more efficiently.&lt;&#x2F;p&gt;
&lt;p&gt;Tests were done on both the 32 core AMD and Intel chips that could have been
provisioned for the dedicated server. Hetzner won&#x27;t tell us the exact chip
models that are used &quot;for security reasons&quot;, so instead we ran some of our own
tests. The tests were run with &lt;code&gt;sysbench&lt;&#x2F;code&gt;, and although they don&#x27;t exactly
represent more complex problems than just what can calculate primes better, it
still showed us some useful information:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450065987006496768&amp;#x2F;852904765347332126&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Overall, the release party went quite well. We definitely want to do a bigger
push for the next release, so we can hopefully blow past our record of 133
players on the server at once!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;855449934584348702&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;855450061752107048&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;855450310352175114&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;balance-and-ux-improvements-by-juliancoffee&quot;&gt;Balance and UX improvements by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I was recently working on some balance and UX improvements. This includes
slightly buffing the bow, staff (especially at lower stages of the game), sword,
and nerfing the hammer. Dungeon enemies were also nerfed; primarily Tidal
Warrior and NPC dashes. Also, the bow zoom is less annoying now. &#x2F;kit and
&#x2F;skill_preset were also updated.&lt;&#x2F;p&gt;
&lt;p&gt;Here is the changelog of weapons:&lt;&#x2F;p&gt;
&lt;p&gt;!!! DISCLAIMER: these values are just coefficients, which is then multiplied by
weapon power, weapon kind, skills, and other coefficients !!!&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Bow M1:
&lt;&#x2F;span&gt;&lt;span&gt;  * charge_time reduced from 1.2 to 1.0
&lt;&#x2F;span&gt;&lt;span&gt;  * damage range was changed from [20; 100] to [5; 125]
&lt;&#x2F;span&gt;&lt;span&gt;  * regen range was changed from [20; 140] to [5; 125]
&lt;&#x2F;span&gt;&lt;span&gt;  -&amp;gt; bow now shoots faster
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;- Staff M1:
&lt;&#x2F;span&gt;&lt;span&gt;  * regen was changed from 50 to 60
&lt;&#x2F;span&gt;&lt;span&gt;  * explosion effect was reworked to more smooth damage distribution over the area
&lt;&#x2F;span&gt;&lt;span&gt;  -&amp;gt; you now can get stamina to roll if you hit two enemies. You also do more AoE damage on lower stages of the game when your explosion radius isn&amp;#39;t that great
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;**Tidal Warrior**
&lt;&#x2F;span&gt;&lt;span&gt;Bubbles:
&lt;&#x2F;span&gt;&lt;span&gt;  * damage reduced twice -&amp;gt; you have more chances to not die when doing melee
&lt;&#x2F;span&gt;&lt;span&gt;Totem:
&lt;&#x2F;span&gt;&lt;span&gt;  * much longer reload time of wave
&lt;&#x2F;span&gt;&lt;span&gt;  * wave now pushes you away of totem, not upward -&amp;gt; orcs aren&amp;#39;t dying from fall damage while fighting Tidal Warrior now
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;**Dashes**
&lt;&#x2F;span&gt;&lt;span&gt;- Spear dash (T0-T4 enemies)
&lt;&#x2F;span&gt;&lt;span&gt;  * damage range was reduced from [60;160] to [10;90]
&lt;&#x2F;span&gt;&lt;span&gt;  * poise range was reduced from [45;45] to [0;25]
&lt;&#x2F;span&gt;&lt;span&gt;  * recover duration was increased from 0.5 to 0.8
&lt;&#x2F;span&gt;&lt;span&gt;- Animal Dashes (Lions, Bonerattlers, etc)
&lt;&#x2F;span&gt;&lt;span&gt;  * recover duration was increased from 0.5 to 1.0
&lt;&#x2F;span&gt;&lt;span&gt;  -&amp;gt; you now can move after getting dashed so it&amp;#39;s less likely you will get damage twice
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;**UX**
&lt;&#x2F;span&gt;&lt;span&gt;- Bow Zoom:
&lt;&#x2F;span&gt;&lt;span&gt;  * starts with 50% of charge
&lt;&#x2F;span&gt;&lt;span&gt;  * more lite zoom at the end of charge
&lt;&#x2F;span&gt;&lt;span&gt;  -&amp;gt; aiming with bow M1 is now easier
&lt;&#x2F;span&gt;&lt;span&gt;- `&#x2F;kit` command
&lt;&#x2F;span&gt;&lt;span&gt;  * new `tier-5` kit with yellow armour and tier-5 weapons.
&lt;&#x2F;span&gt;&lt;span&gt;  * kits from `tier-0` to `tier-4` were updated to match new armour update.
&lt;&#x2F;span&gt;&lt;span&gt;  * new `endgame` kit with cultist and legendary weapons, cultist rings, and gem of lesser protection
&lt;&#x2F;span&gt;&lt;span&gt;- `&#x2F;skill_preset` command
&lt;&#x2F;span&gt;&lt;span&gt;  * temporary `middle` preset with random copypasta from `max` :P. I plan to add skill presets for each tier in future.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Bug fixes
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Damage from melee weapons is now produced in the middle of swing animation, not
&lt;&#x2F;span&gt;&lt;span&gt;at the start. This solves a bug when you can hit your enemy without swing and roll
&lt;&#x2F;span&gt;&lt;span&gt;away. Now you still can cancel swing animation, but you won&amp;#39;t hit your enemy.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Melee Balance changes
&lt;&#x2F;span&gt;&lt;span&gt;- Sword:
&lt;&#x2F;span&gt;&lt;span&gt;  * first stage buildup is boosted from 0.15 to 0.1
&lt;&#x2F;span&gt;&lt;span&gt;  -&amp;gt; you start your attack faster
&lt;&#x2F;span&gt;&lt;span&gt;- Hammer:
&lt;&#x2F;span&gt;&lt;span&gt;  * base poise damage is reduced from 25 to 20
&lt;&#x2F;span&gt;&lt;span&gt;  -&amp;gt; it&amp;#39;s less likely hammer can stunlock enemies
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;855172054227877918&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Will you please listen? I&amp;#x27;m not the Messiah! ( See you next week! )&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;855102522611990559&#x2F;rfskjbbz80571.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 123</title>
          <pubDate>Mon, 07 Jun 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-123/</link>
          <guid>https://veloren.net/blog/devblog-123/</guid>
          <description>&lt;p&gt;This week, everything is wrapping up before the code freeze for 0.10. We hear
about some physics changes, and other technical stuff.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @aweinstock, @Christof, @imbris,
@Slipped, @Pfau, @Snowram, @Sam, @hqurve, @backyard_tourist, @XVar, @tygyh,
@Capucho, @juliancoffee, @Yusdacra, @Sharp, @Synis, @zesterer!&lt;&#x2F;p&gt;
&lt;p&gt;This week, lots of work was done in preparation for the 0.10 code freeze. This
is the last stretch before the full release on the 12th at 18:00 GMT. Make sure
to join the release party, as we&#x27;re super excited to celebrate what we&#x27;ve been
working on! We recently hit 2000 merged MRs on GitLab, which is made up of 8500+
commits and 280k+ lines of code.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;850398219125129256&amp;#x2F;meandering_orc.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam reworked the tidal warrior and yeti, the bosses in tier 1 and 2 dungeons.
@Capucho fixed a VRAM leak and some other graphics-related panics from after
wgpu was merged. @Vechro worked on a slight website redesign, which is going to
be pretty hard to miss if the MR gets merged before the next blog post. @Slipped
has continued to work on the armor&#x2F;meat branch merged and after working out
initial bugs people seem to mostly like it.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hot-reloading-by-juliancoffee&quot;&gt;Hot-reloading by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I created &lt;code&gt;asset_tweak&lt;&#x2F;code&gt; module in common&#x2F;assets to allow developers to tweak
values while running the game which don&#x27;t yet have RON files. To use it you
need to compile game with &lt;code&gt;asset_tweak&lt;&#x2F;code&gt; feature (it&#x27;s not a default feature
because we don&#x27;t want it used it production code) by adding &lt;code&gt;--features asset_tweak&lt;&#x2F;code&gt; to any command you use to compile game. For example (&lt;code&gt;cargo run --features asset_tweak&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;850772978295635978&amp;#x2F;how_it_began.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Example of usage:&lt;&#x2F;p&gt;
&lt;p&gt;Consider this code in &lt;code&gt;Body::dimensions()&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;Body::BipedSmall(_) =&amp;gt; Vec3::new(1.0, 0.75, 1.4)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To start hot-reload it, you need to rewrite code above like following:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;Body::BipedSmall(_) =&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span&gt;(x, y, z) = assets::asset_tweak::tweak_expect_or_create(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;biped_small_dim&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.75&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.4&lt;&#x2F;span&gt;&lt;span&gt;));
&lt;&#x2F;span&gt;&lt;span&gt;  Vec3::new(x, y, z)
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will create a file &quot;assets&#x2F;tweak&#x2F;biped_small_dim.ron&quot; with following
content:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;((1.0, 0.75, 1.4))&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Note the parentheses around, it&#x27;s important because it&#x27;s a tuple. From now you
can edit this file and each time game will call Body::dimensions() method, it
will use your values.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;voxel-minimaps-and-tornados-by-aweinstock&quot;&gt;Voxel minimaps and tornados by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I did more work on the voxel minimaps (which I&#x27;ve blogged about previously) and
they&#x27;re now merged. They can be enabled by setting &lt;code&gt;map_show_voxel_map: true&lt;&#x2F;code&gt; in
voxygen&#x27;s &lt;code&gt;settings.ron&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I also got tornados working again on Snowram&#x27;s branch once wgpu was merged
(which were an edge case since tornados use entities with no meshes, only
particles).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;850790359726555187&amp;#x2F;screenshot_1615734427437.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;physics-changes-by-sudoreboot&quot;&gt;Physics changes by @sudoreboot&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve made good progress on the glider controls rework. The character now rotates
based on the change in the relative velocity of the glider, which in conjunction
with the reworked control logic enables you to perform manoeuvres such as loops
and gliding upside-down. The strafe keys are repurposed to affect only roll
rather than direction.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;851569772167692298&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The glider now also generates forces even in glider wield state, and you can
pitch it up and down before even taking off. This allows you to take the glider
out while riding an airship and -- provided it&#x27;s going fast enough -- start
hovering (or get blown off of it if you angle it the right&#x2F;wrong way).&lt;&#x2F;p&gt;
&lt;p&gt;To implement this I had to do a fair amount of refactoring, which requires more
careful code review. For this reason (and the fact that we&#x27;re past feature
freeze) it won&#x27;t be merged before 0.10. If it ends up getting approved, we may
expect this to appear on the live server sometime after this coming release.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;851898771033161808&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A ride through the clouds. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;851904074941071371&#x2F;19ei6mg9uk371.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 122</title>
          <pubDate>Mon, 31 May 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-122/</link>
          <guid>https://veloren.net/blog/devblog-122/</guid>
          <description>&lt;p&gt;This week was Veloren&#x27;s 3rd birthday! We are getting ready for the 0.10 release
coming in two weeks.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Adam, @ygor.souza, @xMAC94x,
@aweinstock, @Pfau, @Slipped, @juliancoffee, and @tygyh!&lt;&#x2F;p&gt;
&lt;p&gt;Veloren turned 3 last week! The day varies, whether you base it on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;CubeWorld&#x2F;comments&#x2F;8m079o&#x2F;cloning_cube_world_not_as_hard_as_you_may_think&#x2F;&quot;&gt;day that
the idea was
suggested&lt;&#x2F;a&gt;
(the 25th),
or the day the name &quot;Veloren&quot; was chosen (the 28th). Either way, happy birthday to the project!&lt;&#x2F;p&gt;
&lt;p&gt;You can read this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;0ccNtrS8RJuoGI2P68Xrww&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix open sourced the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Songtronix&#x2F;veloren-server-bot&quot;&gt;Veloren testing
bot&lt;&#x2F;a&gt;. He&#x27;s also working
on a
crate to facilitate airshipper 0.5 featuring automatic retries, exponential
backoff, and an easy way to introduce file-based updates for anyone writing a
launcher in Rust. It will be fully async and based on Streams.&lt;&#x2F;p&gt;
&lt;p&gt;@Snowram added material tags to armor to help with the big progression MR,
also added 3 new troll variants with models by @Gemu.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;848598960632627260&amp;#x2F;screenshot_1622329913689.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;0-10-release-schedule&quot;&gt;0.10 release schedule&lt;&#x2F;h3&gt;
&lt;p&gt;Veloren will release 0.10 on June 12th at 18:00 GMT+0. This means that over the
next couple of weeks, we&#x27;ll be tying down loose ends of features, and going into
code freeze. Here is the planned schedule:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;2021-06-06 18:00:00 GMT+0 Feature freeze - At this point no features will be merged.
&lt;&#x2F;span&gt;&lt;span&gt;2021-06-08 18:00:00 GMT+0 Public Stability Testing with many people
&lt;&#x2F;span&gt;&lt;span&gt;2021-06-11 16:00:00 GMT+0 Fixes freeze - Nothing will be merged except game-breaking fixes
&lt;&#x2F;span&gt;&lt;span&gt;2021-06-12 09:00:00 GMT+0 Final Build
&lt;&#x2F;span&gt;&lt;span&gt;2021-06-12 12:00:00 GMT+0 Prepare a Release Server
&lt;&#x2F;span&gt;&lt;span&gt;2021-06-12 18:00:00 GMT+0 Release Party
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;847638727269416990&amp;#x2F;screenshot_1622160358741.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;bugfixes-by-aweinstock&quot;&gt;Bugfixes by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I fixed a bug with the economy where data from the economic simulation wasn&#x27;t
properly being converted to in-game prices, resulting in most towns having the
same prices for many kinds of goods.&lt;&#x2F;p&gt;
&lt;p&gt;I also implemented PID controllers to allow the AI to control airship buoyancy
properly (resulting in less intense acceleration), as well as fixed an issue in
collision resolution where players would collide with where an airship was in
the previous frame. Both of these fixes should make airships more robust to
stand on without falling through them.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;847785498953121802&amp;#x2F;screenshot_1622142335912.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Two airships, off to far lands. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;847136836563763220&#x2F;a_gathering.PNG" type="image/PNG"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 121</title>
          <pubDate>Mon, 24 May 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-121/</link>
          <guid>https://veloren.net/blog/devblog-121/</guid>
          <description>&lt;p&gt;This week, we see lots of design changes to many systems. We hear about how this
what is going on with the crafting and loot systems, as well as planned
improvements in the combat fields.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Slipped, @juliancoffee, @xMAC94x, @Sam,
@James, @sudoreboot, @aweinstock, @Pfau, @XVar, @hqurve, @imbris, and @Sharp!&lt;&#x2F;p&gt;
&lt;p&gt;You can take a look at this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;bZAin6tFQnm2HfQjiISvDg&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;@Sam removed the 2 old weapon loadout slots and added 4 new ones in their place.
With the new weapon slots, you can have up to 4 hands worth of weapons, so you
can run either 2 2h weapons, 1 2h and 2 1h weapons, or 4 1h weapons.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;845783098683031563&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;UI work by @Pfau and @R.A.B&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;845783620722360330&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A loot log&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The loot log removes the loot messages from the chat and puts them above it.
It&#x27;s scrollable and will only show recently looted items when not being
interacted with (with the older ones fading out). @aweinstock has been working
on addressing reviews on the farming and voxel minimap MRs. He&#x27;s also made a
camera zoom effect for ChargedRanged:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;845746253145047060&amp;#x2F;veloren_sniperbow_20210522.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Snowram has been learning the basics of the new site procgen by trying to make
a cemetery. The tombstone models are by @sStellar, and there is still work to go
before the final version.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;845785269919547422&amp;#x2F;unknown-17.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;846423012160307230&amp;#x2F;Mindflayer_fight_WIP.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A full fight against the Mindflayer by @WECW-KKY on a custom modded
  server.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;bow-changes-by-sam&quot;&gt;Bow changes by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I started on a bow rework, with all abilities have being replaced.
The new M1 is very similar to the old M2, in that you charge it for greater
effect, and it fires when you release. The main changes here in functionality
are that it no longer drains energy, and it now will reward energy on shots that
hit. The new M2 is called repeater like the old S1, however, it now has new
functionality. Instead of the leap and the simultaneous fire of a few arrows, it
instead will continually fire arrows with an increasing rate of fire over time
(each arrow costs energy to fire). The new S1 is a shotgun-like ability, which
fires multiple arrows with some degree of spread. With this rework come very
slightly different skills, and a reset to the bow skill tree.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;improvements-by-james&quot;&gt;Improvements by @James&lt;&#x2F;h3&gt;
&lt;p&gt;For the past few days I&#x27;ve been working on moving all body attributes to RON
files. These are body and species-specific stats like mass, height, base health,
etc. I have each attribute loading from a RON file into one compound asset (eg.
the mass.ron and base_health.ron get loaded together as one BodyAttributes
asset). The server loads the RON files and sends the body data to the client on
initial sync. This means that server owners could adjust values and not require
a modified client. To help with debugging and development, I&#x27;m planning to add
an admin command to resync body data (since the assets already hot-reload) after
the initial sync.&lt;&#x2F;p&gt;
&lt;p&gt;I also fixed a bug where NPCs would ignore you if you hit them with a projectile
from too far away. While I initially thought this was simply because they were
being attacked from outside of a set range, I discovered I had accidentally
reduced the response time for NPCs for damage from 3.1 seconds to 0.1 seconds
about a month ago. This meant that when an NPC received damage, it had 0.1
seconds to respond. If it didn&#x27;t see the target in those 0.1 seconds it would
return to idling. I returned the damage memory duration to 3.1 seconds as well
as provided a way for NPCs to path toward positions outside of the maximum
allowed pathing radius by choosing an intermediate point a set distance away. A*
pathfinding gets more and more expensive the longer your path is so hopefully we
will see some performance improvement in the agent system.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;846589880570085386&amp;#x2F;zepp.PNG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;dungeon-balancing-by-juliancoffee&quot;&gt;Dungeon balancing by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on a lite dungeon rebalance by updating minibosses at lower
tiers and adjusting loot tables at higher tiers. Now there is Deadwood in T0
dungeons instead of Bonerattler, and Rats in T1 dungeons instead of Bonerattler
pack. For making dungeon looting a bit more enjoyable I removed low tier gear
from cultist loot table and added average enemy loot to beast masters so they
don&#x27;t drop cultist gear only to have small wow effect when they do. Also each
dungeon now has unique loot from chests. Also for purpose of modification and
future reworks I added placeholder armor and loot table for each boss. For
dungeon enemies and village inhabitants I&#x27;ve added RON files to specify their
loadout.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;glider-and-physics-changes-sudoreboot&quot;&gt;Glider and physics changes @sudoreboot&lt;&#x2F;h3&gt;
&lt;p&gt;I implemented auto-glide by making auto-walk work properly while gliding. While
enabled, it will assume pitch control to take you as far as possible in the
direction you&#x27;re looking. With free-look enabled you can now spend your time
looking around at the scenery while gliding. This is a step in the direction of
making the glider more accessible to use. There will likely be a setting added
in the future to automatically toggle it while gliding.&lt;&#x2F;p&gt;
&lt;p&gt;This feature is not meant to make manual piloting obsolete, so if you find
yourself using the functionality even when you would have preferred not to,
please provide feedback to help us make it more balanced.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve specified some more appropriate masses for some species and increased the
(logical, not visual) size of some objects (which makes them a little less...
aerodynamic).&lt;&#x2F;p&gt;
&lt;p&gt;I also scaled down the resulting knockback on entities of a mass under 40 kg,
which hopefully removes the involuntary bird-golf minigame from hammer combat.
It, together with increasing the max possible drag applied to an entity per tick
(which is a necessary safeguard against very bad bugs), should prevent loot
drops from sometimes flying off into the distance when a mob dies immediately
from an attack with knockback.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;846747812410556476&amp;#x2F;1dcqi1etb6071.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;meat-and-crafting-by-slipped&quot;&gt;Meat and crafting by @Slipped&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;m finishing up a rather big MR that adds a lot of the core of Veloren&#x27;s armor
progression system. It&#x27;s sort of grown into a bit of a behemoth but I&#x27;m ok with
it in this case because I think doing this all at once is very helpful towards
building a single, cohesive system.&lt;&#x2F;p&gt;
&lt;p&gt;The goal of the MR is to get three things to work synchronously: loot, crafting,
and gear. The MR started with loot, as a simple meat MR designed to give
different animals different meat drops that you can cook in towns to help with
combat. This gave a cheaper, non-potion option to healing, and made sure there&#x27;s
always something to be gained from simple combat in the wild.&lt;&#x2F;p&gt;
&lt;p&gt;Once animals dropped appropriate meats we wanted to flesh out their loot tables
to a more finalized state, and we knew we wanted them to drop hides. So animals
now drop specific hides (animal hide&#x2F;tough
hide&#x2F;scale&#x2F;carapace&#x2F;plate&#x2F;dragon scale) depending on their type and overall
difficulty.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;846502970229129227&amp;#x2F;Wuffi.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;From here we get into crafting, since we obviously needed something to do with
these materials. So we started re-imagining the crafting system. From the hides
you can now craft leathers, and use them in different recipes, so the system
goes much deeper than simple leather scraps like before.&lt;&#x2F;p&gt;
&lt;p&gt;Making hides into leather doesn&#x27;t get you much without a final, usable product
though, so after that we started bringing in Gemu&#x27;s armor sets to finalize
progression of the &#x27;hide&#x27; armor track.&lt;&#x2F;p&gt;
&lt;p&gt;Next, covering only hide seemed a little lame so we expanded to the mail and
cloth armor tracks. These armors are craftable mainly from ingots (which can be
smelted in the new forges) and cloths (which can be spun in the new spinning
wheel, and crafted into armor in new loom stations). Next, these ores weren&#x27;t
actually accessible yet so we&#x27;ve started on a minor cave overhaul to add
distinct difficulty levels to caves, so you can fight your way through tougher
enemies to reach deeper levels with better ores for the best armor.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;846167706666926090&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Adding new plants for cloth armors is also on the progress list. The different
armor tracks need to actually do something unique, since in Veloren right now,
armors just give you armor. After a lot of back and forth, we sorted an initial
implementation:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Mail: highest armor
&lt;&#x2F;span&gt;&lt;span&gt;- Stun resistance hide: high critical hit damage
&lt;&#x2F;span&gt;&lt;span&gt;- Stealth cloth: higher energy total, higher energy rewards
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Stats have been graciously added by @Sam. Each of the tracks has six &quot;core&quot;
armors associated with it, along with possible spinoff armors later. The tracks
are considered equal (for armors of the same vertical level) but benefit
different playstyles. The game is transitioning to more of a crafting-based gear
system instead of findable gear, with the player needing to find the materials
for each set, which might require you to explore multiple areas.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;845894186456973332&amp;#x2F;screenshot_1621699267850.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Far-off ridges to explore. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;845786016232636446&#x2F;Bildschirmfoto_von_2021-05-21_13-11-38.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 120</title>
          <pubDate>Mon, 17 May 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-120/</link>
          <guid>https://veloren.net/blog/devblog-120/</guid>
          <description>&lt;p&gt;This week, we have some nice visuals to check out. We also see some updates to
the minimap.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Snowram, @James, @xMAC94x, @nwildner,
@Sharp, @Slipped, @juliancoffee, @Same, @holychowders, @Pfau, @hqurve, and
@imbris!&lt;&#x2F;p&gt;
&lt;p&gt;You can see this week&#x27;s meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;8dw3TxavS-2RxTO3T3Qa3g&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;844397669739790396&amp;#x2F;I_cant_believe_how_beautiful_this_game_is_--hi9witpc52z61.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Out of the house and through the valley, by u&amp;#x2F;Russhang&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Yusdacra packaged Airshipper for NixOS and implemented NixOS-specific
executable patching, so now it can be used on NixOS without Flatpak. Currently,
these changes are on the staging branch of Airshipper repository.&lt;&#x2F;p&gt;
&lt;p&gt;@R.A.B added a chat tab system. It allows players to select filters for
different tabs of the chat. @holychowders got NPCs to hear and respond to
sounds.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;843176472911151134&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;843176815874408448&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;minimap-by-aweinstock&quot;&gt;Minimap by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I added a minimap mode where voxel terrain data is visible on the
minimap. For each loaded chunk with some radius of the player, it builds a map
of what&#x27;s visible looking downwards from each z-level. It uses the maps to
efficiently build a composite image of the currently loaded chunks from the
ceiling above the player, in a manner that works nicely with dungeons, caves,
and houses.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;842561508562829322&amp;#x2F;screenshot_1620952676084.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I also fixed the mind flayer AI so it can summon minions at HP thresholds again,
and added a purple fireball attack that it uses when the player is out of range.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;843599106416705576&amp;#x2F;screenshot_1621198801176.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;843516373106688000&amp;#x2F;screenshot_1621157404939.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Blossoming trees. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;841464658900680714&#x2F;unknown-3.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 119</title>
          <pubDate>Mon, 10 May 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-119/</link>
          <guid>https://veloren.net/blog/devblog-119/</guid>
          <description>&lt;p&gt;This week, we take a deep dive into the recent physics overhaul with @lboklin. We also see
improvements in the moderations, translation, and skill systems.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Slipped, @xMAC94x, @juliancoffee,
@Snowram, @Pfau, @Sharp, @zesterer, @aweinstock, @aws107, @nwildner, @James,
@Danielduel, @imbris, and @Yusdacra!&lt;&#x2F;p&gt;
&lt;p&gt;At this week&#x27;s meeting, we set a release date for 0.10 to be June 5th. We have
had a ton of changes over the last few months, and we&#x27;re excited to get a formal
release together! We&#x27;ve also recently passed 1000 stars on both GitLab and
GitHub!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Sam has been reworking clay golems. @Sharp fixed shadows in wgpu,
which means that the last blocker to get it merged is OSX builds. Changes have
also been made to improve how moderators have control over a server.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;moderation-tools-by-sharp&quot;&gt;Moderation tools by @Sharp&lt;&#x2F;h3&gt;
&lt;p&gt;I just finished up a decent-sized change that allows timed bans and
non-administrator moderators (which involved a few updates to the security
model). It also switches us to a versioned settings file for editable settings
and migrates from the old format, so going forward we can add metadata and stuff
to settings files without breaking backwards compatibility. This should be the
precursor to nicer mod tool functionality.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;841237235944914954&amp;#x2F;screenshot_1620218674427.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;skills-and-translation-diagnostics-by-juliancoffee&quot;&gt;Skills and translation diagnostics by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve added &#x2F;skill_preset command which allows you to unlock pack of skills or
reset your skillset to fresh character. Currently, there is only one &#x27;max&#x27;
preset which just instantly unlocks all skills and upgrades it to max level, but
new presets can be added in &#x27;assets&#x2F;server&#x2F;manifests&#x2F;presets.ron&#x27;.&lt;&#x2F;p&gt;
&lt;p&gt;Also I created binary to run diagnostic of specific language for translators by
extracting i18n code to its own crate. With no serious dependencies, it compiles
very fast even from scratch and allows to get quick feedback on changes to
localization. For anyone who uses the &#x2F;spawn command I also have good news. I
added auto-complete of species (before it was just body kind, like
&lt;code&gt;biped_large&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;updates-by-aweinstock&quot;&gt;Updates by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I did the following this week:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added damage types (Piercing, Slashing, Crushing, Energy) to combat skills;
Piercing attacks (such as arrows) now partially ignore armor damage
resistance.&lt;&#x2F;li&gt;
&lt;li&gt;Fixed an issue where projectiles would miss entities that had terrain too
close behind them (primarily small things like squirrels from a downward
angle, or cultists next to walls).&lt;&#x2F;li&gt;
&lt;li&gt;Made merchants nametags visible at a higher distance, since players had
difficulty finding merchants in towns.&lt;&#x2F;li&gt;
&lt;li&gt;Added a pulsing red warning on the 2nd phase of a trade when one party is
trading no items, since players were mistakenly giving merchants items for
free.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;841237068478676992&amp;#x2F;screenshot_1620392386773.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;new-playable-species-by-pfau&quot;&gt;New playable species by @Pfau&lt;&#x2F;h3&gt;
&lt;p&gt;We discussed new playable species and came up with these things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The undead will get a visual overhaul to look more like Draugr from northern
mythology (Don&#x27;t worry, they will still look like undead!)&lt;&#x2F;li&gt;
&lt;li&gt;The actual new species we will introduce over the course of the next months
are:
&lt;ul&gt;
&lt;li&gt;The Aunqa: Elemental&#x2F;Geode style species with oriental features&lt;&#x2F;li&gt;
&lt;li&gt;The Morx: Bird&#x2F;Crow species with a Gothic&#x2F;Steampunk&#x2F;Pest-Doctor theme&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;(Screenshots coming whenever we got something to show off...)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;implementing-physics-and-then-glider-physics-by-lboklin&quot;&gt;Implementing physics and then glider physics by @lboklin&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;w-kYWjrU6IE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Physics in Veloren has been a long road for me. It began some time after
discovering the game late last year, when I decided the gliders could be more
than they were. How hard could some basic aerodynamics simulation possibly be?&lt;&#x2F;p&gt;
&lt;p&gt;There were a couple of false starts, a lot of refactors and changes in approach.
I submitted my first draft MR a few days before the end of last year. It began a
bit rough, with a lot of little quirks since I didn&#x27;t really understand what I
was implementing and what I wasn&#x27;t. I spent a good few weeks on controls alone.
Finding an intuitive way to control 3D movement that gives justice to the
complexity of the gliding mechanics was one of the hardest things, and making it
look and feel right was even harder.&lt;&#x2F;p&gt;
&lt;p&gt;As time went on I kept coming up with complex solutions to complex issues. At
some point I asked myself whether this one mechanic in the game justified
implementing rigid body dynamics. I decided that even if it did, I didn&#x27;t want
to bother with it then, or I would never get anything done. I wanted to reduce
the size and complexity of the MR, so I began splitting things out that wasn&#x27;t
directly related to the hardest part of glider physics, such as some much needed
refactors, basic Newtonian physics, and equations for things like drag to
replace the hacks that powered the old physics system.&lt;&#x2F;p&gt;
&lt;p&gt;So then I took some time off from working on gliding to get these prerequisite
features and changes into the game. I managed one small MR before creating
another monster that was the addition of masses, densities, basic implementation
of buoyancy, and aerodynamic drag (with all the fluid types and relevant fluid
dynamic equations). Admittedly, buoyancy didn&#x27;t really have to be part of it,
but it made contextual sense and so I added it anyway because I have no sense of
priority.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;839134640290922596&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;These massive changes more or less fundamentally broke or changed the way every
physical entity interacted with each other. Knockbacks now depended on mass and
applied impulse strength; pushback from collisions made moving some things much
less feasible while other things like campfires and turrets now slid around when
pushed; projectiles used to have their own gravity to give them a custom arc
which obviously wasn&#x27;t very compatible, so that changed as well (which required
implementing proper projectile motion prediction by enemies, which @James helped
me with). And we haven&#x27;t even gotten to the water and air interactions! If it
weren&#x27;t for @Ygor&#x27;s endless testing and feedback I would still be fixing
numerical mistakes and tweaking values to this day.&lt;&#x2F;p&gt;
&lt;p&gt;In addition to entities being assigned mass, I also gave them density. By giving
entities a density I could then use that to derive buoyancy under the
simplifying assumption that their mass is equally distributed over their height,
so as they become submersed in water their effective weight is reduced based on
the ratio of (toe) depth to their height. The gravity experienced by an entity
is &lt;code&gt;gravity * (density - fluid_density) &#x2F; density&lt;&#x2F;code&gt;, where &lt;code&gt;fluid_density&lt;&#x2F;code&gt; can be
a mix of density of air and density of water if partially submersed.&lt;&#x2F;p&gt;
&lt;p&gt;In the end, this allows things to float or sink based on this modifiable density
component. As a proof of concept, I made airships control their elevation via
modifying their density (which is the equivalent to pressure regulation in real
life) and the capability for airships to become water ships by rapidly
&quot;deflating&quot; their magical lighter-than-nothing balloon, leaving the ship with a
density more or less equal to that of a normal 18th century sailing ship.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;837300074929061900&amp;#x2F;screenshot_1619698096645.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now that entities had masses I also had to define some more accurate dimensions
for entities (which had previously only been defined using height and radius)
before I could begin to derive aerodynamic drag for them. Once everything had
dimensions along each axis, it was time to implement the drag equation.&lt;&#x2F;p&gt;
&lt;p&gt;Aerodynamics, which is a subfield of gas dynamics and more generally fluid
dynamics, are hard. It&#x27;s one of the big unsolved problems in physics, and best
we can do to make accurate predictions is through numerical methods, but we
can&#x27;t afford that in a game that isn&#x27;t (just?) a flight simulator.&lt;&#x2F;p&gt;
&lt;p&gt;We have other things to simulate and compute, so running a full-blown fluid
simulation for each and every entity in the game just to get precisely accurate
aerodynamic behaviour is not anywhere on the table, unfortunately. Thus, my
approach has been to find simplified models and analytical formulas with
empirically derived coefficients as a substitute for fluid interactions we can&#x27;t
mathematically describe.&lt;&#x2F;p&gt;
&lt;p&gt;For each body type I had to define a drag coefficient, which is an arbitrary
dimensionless constant which represents how approximately aerodynamic something
is, and a reference area to complement it. The reference area is a number
derived from the dimensions of an object in somewhat arbitrary ways, so that you
can have two of the same type of shapes but of different sizes and have it
affect the amount of drag affecting each.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;836644722432933938&amp;#x2F;screenshot_1619541960339.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Both the drag coefficient and reference area have to be looked up in scientific
literature for each type of shape, and in many cases there is more than one
convention used. For wings it is usually the planform (surface area of the wing
as seen from above), for (ellipsoidal) airships it is the square of the cube
root of its volume, and for spheres it is the projected circle area. Using the
drag coefficient and reference area together with Bernoulli&#x27;s equation gives us
the total amount of drag produced by an entity in the direction opposite to
their velocity (relative to wind, specifically, but wind velocity is currently
invariably zero).&lt;&#x2F;p&gt;
&lt;p&gt;The above was the foundation I wanted in place before getting to the juicy part:
aerodynamic lift. In comparison to lift, drag is quite easy: it&#x27;s just
&lt;code&gt;drag_coefficient * reference_area * 0.5 * fluid_density * relative_flow_velocity²&lt;&#x2F;code&gt; applied as a force in the direction of
&lt;code&gt;relative_flow_velocity&lt;&#x2F;code&gt;. The formula for lift looks the same at this level of
abstraction: &lt;code&gt;lift_coefficient * reference_area * 0.5 * fluid_density * relative_flow_velocity²&lt;&#x2F;code&gt;, but it&#x27;s applied in a direction that isn&#x27;t necessarily
perpendicular to either the wing&#x27;s chord line (the line that goes from the
leading edge to the trailing edge) nor perpendicular to the direction of flow.&lt;&#x2F;p&gt;
&lt;p&gt;This is because of an effect called downwash, which is due to vortices forming
at the wingtips that pulls the wind along in a backwards and slightly downwards
direction, producing a force called induced drag (aka drag due to lift), which
shifts the lifting force vector rearwards. The angle between the &lt;code&gt;lift&lt;&#x2F;code&gt; and
&lt;code&gt;lift - induced_drag&lt;&#x2F;code&gt; vectors is called the induced angle of attack and it can
be derived from the lift coefficient and aspect ratio of the wing.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s the lift coefficient that is the hard part. In my original attempt at
implementing aerodynamic lift, I found this simple formula derived from
something called the Thin Aerofoil Theory: it states that for an infinitely thin
2D aerofoil, the difference in lift over difference in angle of attack for small
angles (up to ~15±3° depending on model) is simply 2π, and the section lift
coefficient for the aerofoil is then 2πα, where α is angle of attack.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;832722853266456647&amp;#x2F;screenshot_1618604088573.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The &lt;em&gt;section&lt;&#x2F;em&gt; part of section lift coefficient is important, and something I
struggled to reconcile with my goal at that point, because this 2D aerofoil is
not only infinitely thin, but also has an infinite span. The significance of the
infinite span is that it entirely removes spanwise flow (and thus wingtip
vortices) from the equation, which means no induced drag. So what do we do when
gliders most definitely have a finite span and glide around in 3D space?&lt;&#x2F;p&gt;
&lt;p&gt;I did not like the idea of deriving lift using this equation by simply
multiplying the section lift coefficient by the number of aerofoil sections that
would fit along the span the wing, partly because it just felt wrong and
inappropriate, and partly because I had no solid understanding of what the
actual consequences and trade-offs would be. Maybe it would be fun anyway.. maybe
even more so than a correct model. Maybe it would feel a bit awkward but we
never realise why or what we&#x27;re missing out on. I didn&#x27;t want that. To have
players get used to erroneous behaviour and then maybe I (or someone else) comes
back to fix these flaws and upsets everyone again in the name of some pesky
realism and supposed correctness. So I went and borrowed a (really thick) book
called Fundamentals of Aerodynamics (by John D. Anderson) and spent some time
trying to learn and understand what was missing and to find out what I needed in
order to simulate lift for a &lt;em&gt;finite&lt;&#x2F;em&gt;, &lt;em&gt;3-dimensional&lt;&#x2F;em&gt; wing.&lt;&#x2F;p&gt;
&lt;p&gt;The book was very helpful, and also conveniently spoon-fed me with some useful
analytical formulas I could apply with the caveats of them only applying to
specific types of wings at limited ranges of angles of attack etc etc. In the
end I went with the most straight forward approach with the simplest solution
for finite, 3-dimensional wings that also accounts for induced drag: by
simplifying every wing shape to be perfectly elliptical, parameterised only by
span length and chord length.&lt;&#x2F;p&gt;
&lt;p&gt;With this simplification, we have a few equations that each handle slightly
different cases for increased accuracy. For higher aspect ratio we have an
equation derived from Prandtl&#x27;s Lifting-line Theory. For lower aspect ratios we
have a modification to that equation by H. B. Helmbold. For swept wings (which
we aren&#x27;t currently using) we use Küchemann&#x27;s modification to the latter. The
end result is what you can see right now on the live server (to the dismay of
some players who really liked the old hover-gliders).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;841237680263266304&amp;#x2F;screenshot_1619874603103.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The biggest caveat right now that I&#x27;m not entirely happy with but see no good
solution to (which is not to say there isn&#x27;t one!) is that I don&#x27;t know what to
do with lateral wind. The equations simply don&#x27;t account for side-slip (or yawed
orientations), because the shape of the wing is then effectively skewed from the
perspective of the oncoming wind, which changes the effective aspect ratio,
spanwise flow and vortices at each wingtip, which consequently affects the
induced drag and angular momentum in general.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of angular momentum: it&#x27;s the trickiest part of rigid body dynamics by
far, and is the reason I decided to forego that route in favour of simpler
solutions to glider handling. That is to say we don&#x27;t calculate the angular
forces at all for either glider or pilot, so the lift and drag forces do not
change the orientation of either. The character pendulum effects are a complete
hack. This is why it&#x27;s even more unfortunate that lateral wind is ignored since
it &lt;em&gt;ought to&lt;&#x2F;em&gt; have a noticeable effect on the glider&#x27;s rotation.&lt;&#x2F;p&gt;
&lt;p&gt;Aside from the issue of lateral wind, I would say the controls are the weakest
point of the glider right now. It&#x27;s something I&#x27;m currently trying to improve by
removing the assumptions about what&#x27;s up and what&#x27;s down to allow freer
maneuvers like loops and fully controlled rolls. I&#x27;m also not happy about the
magical yawing, so I&#x27;m trying to work with roll and pitch exclusively. The
heuristics for when and how to pitch and roll is turning out to be quite tricky,
so we&#x27;ll how that goes.&lt;&#x2F;p&gt;
&lt;p&gt;In the future I would like to implement different wing shapes. Tapered wings
should be quite feasible as the equations wouldn&#x27;t need much modification to
account for it. Delta wings I&#x27;m not so sure about, but it&#x27;s not out of the realm
of possibility. On the less physics-heavy side of things I would also like to
see gliders having individual dimensions (and shapes in the future; hopefully
we&#x27;ll see more aerodynamically shaped glider models too).&lt;&#x2F;p&gt;
&lt;p&gt;I also hope to have something to share on the topic of wind in the near future,
but this is all for now.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;841464658900680714&amp;#x2F;unknown-3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Two explorers, ready to set out on a quest. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;840292461397671950&#x2F;screenshot_1620390707908.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 118</title>
          <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-118/</link>
          <guid>https://veloren.net/blog/devblog-118/</guid>
          <description>&lt;p&gt;This week, we see an amazing video of the new glider changes. Work is being done
with audio, UX&#x2F;UI, economics, maps, and lots more.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @xMAC94x, @juliancoffee, @Sam,
@aweinstock, @LunarEclipse, @Slipped, @James, @Danielduel, @Nereux, @XVar, @Pfau,
@zesterer, @lboklin, @Jandre, @DaforLynx, @Snowram, @Synis, @Yusdacra, @bronson!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;w-kYWjrU6IE&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@DaforLynx added the ability for music to play exclusively in towns. This
included sifting through some of the site code, but it now works quite reliably.
As a side effect, dungeon music should no longer play where there isn&#x27;t a
dungeon! The new tracks are by @badbbad and @sharpie. And with that, pretty much
all the music that has been made for the game that can be implemented - has been
implemented!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;725508097233125407&amp;#x2F;838063902364925984&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@zesterer added custom location marking this week&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@christof created a simple spreadsheet to simulate econsim internals. GHI are
goods, LMN are professions, R is a natural resource, G as food controls the
population. Econsim is now much faster during server startup, but still debug
has some unintended differences. @Sam got the minotaur merged.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;838434948439605268&amp;#x2F;econsim_sheet.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@holychowders fixed villagers spamming messages when they see an enemy in a safe
zone, and now they&#x27;re trying to get NPC&#x27;s to be aware of sound. @DaforLynx
created and implemented SFX for the poise system. There are distinct SFX for
each level of stun, which should hopefully help the feel of combat. @James
worked on adding mountain names, lake names, and markers for both on the map.
They also worked on various AI fixes and refactoring.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;838541602816524308&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;838546150192709642&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@aweinstock worked on optimizing the encoding speed of terrain compression a bit
more. It turns out that since PNGs use a separate zlib stream for each row, wide
images encode faster than tall images:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;836427288337186826&amp;#x2F;compression_speeds_center_192.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Snowram has been working to make mounting visually pleasing, with the hope of
making it player-facing soon. @Danielduel implemented part of @aweinstock&#x27;s
proposal for a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;-&#x2F;blob&#x2F;master&#x2F;open&#x2F;xxxx-wiring_system.md&quot;&gt;Turing-complete wiring
system&lt;&#x2F;a&gt;.
Currently, the &#x2F;wiring admin command will summon a pressure plate and an arrow
emitter, such that when the pressure plate is stepped on, the arrow emitter
emits an arrow. While it doesn&#x27;t have logic gates yet, it&#x27;s likely already
advanced enough to start adding traps to dungeons.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;460500916085456927&amp;#x2F;836299697680810024&amp;#x2F;Veloren_2021-04-26_19-55-14.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;work-by-juliancoffee&quot;&gt;Work by @juliancoffee&lt;&#x2F;h3&gt;
&lt;p&gt;I have been working mostly on the UX of debugging tools and some other fixes. I
added the ability for translators to translate buff outcomes in death messages.
I&#x27;ve updated kits and split debug kit to real parts and cosmetic, added bijou to
cultist kit, and mushroom curry to potion kit (which I&#x27;ve renamed to
consumables).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;838540705524744263&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;838541329445290004&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I added checks to &lt;code&gt;&#x2F;dropall&lt;&#x2F;code&gt; command so it won&#x27;t drop Debug items on ground (and
prevent admins from giving OP things to players while clearing inventory). I
implemented &#x2F;buff command which allows cast buffs or debuffs on player (on
yourself or someone else with sudo).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;837802206777835540&amp;#x2F;screenshot_1619814848883.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Dungeoneering begins. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;838573470434459668&#x2F;Bildschirmfoto_von_2021-05-03_02-14-14.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 117</title>
          <pubDate>Mon, 26 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-117/</link>
          <guid>https://veloren.net/blog/devblog-117/</guid>
          <description>&lt;p&gt;This week, we get a deep dive into how world chunks are compressed and sent over
the network. We see updates on the packaging front, and some amazing new
creatures.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Slipped, @Sam @xMAC94x, @juliancoffee,
@zesterer, @holychowders, @aweinstock, @Pfau, @alfy, @XVar, @Snowram, @James,
@Adalovegirls, @ygor.souza, @nwildner, @lboklin, @YuriMomo, and @imbris!&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer added the ability for characters to hold their lantern when their
right hand is free (i.e: when not wielding, or when using a single-handed
weapon). @Pfau is in the process of remodelling the lanterns so they have a
handle. The swinging animation looks surprisingly realistic given that it&#x27;s
entirely &#x27;fake&#x27; (no physics is being simulated).&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;836600249261752350&amp;#x2F;uTPCRGT.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@alfy made some brand-spanking-new block and parry sound, as well as tweaked the
wind sound to be a bit more organic. @LunarEclipse made a few improvements to Torvus,
most notable is messages from Matrix are now bridged to Veloren in #ingame-chat.
A full list of changes is included in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;torvus&#x2F;-&#x2F;merge_requests&#x2F;29&quot;&gt;MR
description&lt;&#x2F;a&gt;.
@juliancoffee fixed off-by-one error in localization tests, so outdated fields
are now a more reliable way to check if a translation is up-to-date than before.&lt;&#x2F;p&gt;
&lt;p&gt;@XVar added more player-friendly error handling for network errors caused by
client&#x2F;server version mismatches. You will now get a dialog informing of a
version mismatch if a version mismatch is detected and a networking error occurs
during login after the server version is fetched. If login does succeed but
there is still a client&#x2F;server mismatch a warning banner is shown on the
character select screen.&lt;&#x2F;p&gt;
&lt;p&gt;@Snowram created a new skeleton that will fit big winged creatures. They also
made several animations for it and collaborated with @Gemu to make a phoenix
model as well as transition the existing cockatrice NPC to the new skeleton.
@Snowram also coded a combat AI for those new NPCs with the help of @James.
Daytime-specific NPCs spawns were also added.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;835518708851408896&amp;#x2F;phoenix.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;836043184462626836&amp;#x2F;bs7wfznIWy.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@juliancoffee fixed the burning debuff icon, which was previously displayed as a
question mark on the hotbar. @Christof brought English as a fallback language to
the finish line and resumed work on accelerating econsim using arrays.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;packaging-airshipper-by-frinsky&quot;&gt;Packaging Airshipper by @Frinsky&lt;&#x2F;h3&gt;
&lt;p&gt;I have kept going with packaging Airshipper. There is now a PPA available for
Ubuntu-based distributions:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;launchpad.net&#x2F;~frinksy&#x2F;+archive&#x2F;ubuntu&#x2F;airshipper&quot;&gt;https:&#x2F;&#x2F;launchpad.net&#x2F;~frinksy&#x2F;+archive&#x2F;ubuntu&#x2F;airshipper&lt;&#x2F;a&gt;.
Packages are available for Ubuntu 18.04, 20.04, 20.10, 21.04 and their derived
distros.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, I have made more packages available in my Copr repository
(&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;copr.fedorainfracloud.org&#x2F;coprs&#x2F;frinksy&#x2F;airshipper&#x2F;&quot;&gt;https:&#x2F;&#x2F;copr.fedorainfracloud.org&#x2F;coprs&#x2F;frinksy&#x2F;airshipper&#x2F;&lt;&#x2F;a&gt;)
to support more distributions. There are now builds for Fedora 32&#x2F;33&#x2F;34&#x2F;Rawhide,
Mageia 7&#x2F;8&#x2F;cauldron and openSUSE Leap 15.2. I am also planning on creating a
comprehensive page with installation instructions for each distribution, to help
new players get into the game more easily. Finally, I&#x27;ve submitted an Airshipper
flatpak for inclusion into the Flathub repository, and it recently got merged
and is now available
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flathub.org&#x2F;apps&#x2F;details&#x2F;net.veloren.airshipper&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;compression-by-aweinstock&quot;&gt;Compression by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on better compression formats for terrain chunks for sending
them over the network. This is intended to help players with poor connections be
able to play on servers in the first place, and to allow players with good
connections to comfortably set a higher view distance to load more chunks at
once. I&#x27;ve already merged a format that reduces the per-chunk space cost by 1.5x
lossless, and have a few formats on a branch that can give another 5-9x
reduction with some reduction in visual quality (but no cost to gameplay
accuracy).&lt;&#x2F;p&gt;
&lt;h4 id=&quot;terrain-and-lossless-compression&quot;&gt;Terrain and lossless compression&lt;&#x2F;h4&gt;
&lt;p&gt;Veloren only stores a very coarse heightmap of the world on disk. For a
1024x1024 chunk world, the mapfile is around 16MB, which is only 16 bytes per
chunk. Pre-generating this is an expensive step, &quot;worldgen&quot;, which simulates
geological processes including erosion.&lt;&#x2F;p&gt;
&lt;p&gt;Chunks are generated with 32x32xZ voxels of data when their location comes
within a player&#x27;s view distance (Z varies per chunk). The in-memory structure (a
&quot;Chonk&quot;) consists of a z-offset for the bottom of the chunk, a vector of
subchunks, and two default blocks for above and below the chunk. The subchunks
are 32x32x16 slices, and internally deduplicate adjacent blocks of the same
kind. These chunks tend to be a few hundred kilobytes each.&lt;&#x2F;p&gt;
&lt;p&gt;Previously, chunks were compressed the same way that most network traffic in
Veloren is, with LZ4, achieving around 25% of uncompressed size. LZ-family
algorithms accomplish compression by referencing previous occurrences of the
data within the same file. This works great for text: the string &lt;code&gt;&quot; the &quot;&lt;&#x2F;code&gt;with
spaces included occurs often in English, and a reference to a previous
occurrence of the string &lt;code&gt;&quot; the &quot;&lt;&#x2F;code&gt; can save up to 5 bytes if the instruction to
do a backreference takes less than 5 bytes. By backreferencing from the current
position, you can also compress 200 copies of the same letter&#x2F;voxel by emitting
an instruction like &quot;from 1 position backwards, copy 199 characters&quot;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;836037759915393084&amp;#x2F;screenshot_1619289030931.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;When I printed out some statistics on frequently occurring byte patterns in
&lt;code&gt;Chonk&lt;&#x2F;code&gt;s, I noticed that they had long runs of 0 bytes (which is good for LZ4),
but sparse positions of other bytes, positioned seemingly randomly in the window
size I was using. Since most of those bytes had a few common values, I tried
using deflate, achieving around 17% of uncompressed size (with a quality setting
that had a similar encoding time to LZ4). Deflate is the algorithm used by zip
and gzip, and is a mix of LZ77 and Huffman coding. Huffman coding computes
statistics on the input, and uses fewer bits to encode more common symbols. For
example, in English text, &quot;e&quot; occurs more frequently than &quot;z&quot;, but ASCII encodes
both of them as 8 bits. With Huffman coding, it&#x27;s possible to use fewer than 8
bits for &quot;e&quot; (like 3-4), and more than 8 bits (like 10-11) for &quot;z&quot;. Huffman also
synergizes nicely with LZ because the backreference instruction doesn&#x27;t to be
given a byte representation manually, it&#x27;s just another abstract symbol that
occurs with some frequency, which can get allocated a bit-sequence by Huffman
coding.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;spatial-locality-and-greyscale-pngs&quot;&gt;Spatial locality and greyscale PNGs&lt;&#x2F;h4&gt;
&lt;p&gt;LZ4 and Deflate operate on one-dimensional sequences of bytes. When applied to
voxel data, this makes a x-aligned wall compress really well (since it&#x27;s a run
of adjacent bricks of the same kind and color), but a y-aligned wall or
z-aligned pillar doesn&#x27;t correspond to a contiguous run of bytes. LZ4 and
Deflate also don&#x27;t assume much about the statistical model of the data, so they
don&#x27;t compress increasing or decreasing runs of adjacent bytes (e.g. color
gradients).&lt;&#x2F;p&gt;
&lt;p&gt;PNGs handles both of these concerns for 2d pixel data losslessly by using
delta-encoding with a packing order, such that horizontal gradients get encoded
with instructions like &quot;copy left color and add 1&quot; and vertical gradients get
encoded with instructions like &quot;copy above color and add 1&quot;. This makes the
byte stream have contiguous runs of relative positions and offsets, which then
compress well with deflate.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;835907474442944522&amp;#x2F;dungeon_9_0.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Greyscale channel of 3x3 chunks centered on a dungeon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;835907483121483817&amp;#x2F;dungeon_9_3.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Color channel of 3x3 chunks centered on a dungeon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Each 32x32x1 slice of a chunk can be treated as an image. Encoding them as
separate images per z-level would cost lots of space to image headers, so I pack
all the z-levels for a chunk into a single image. Encoding each z-level into a
square image, packed next to each other left to right, then packed as rows top
to bottom, works well for visualizing what&#x27;s going on, but wastes space if chunk
height isn&#x27;t a perfect square. Encoding a tall image, with each z-level stacked
vertically in the image, doesn&#x27;t waste any space. Additionally, flipping every
odd z-level across the y-axis improves spatial locality, which translates to
improved compression ratio and encoding speed in practice.&lt;&#x2F;p&gt;
&lt;p&gt;The gameplay-critical part of terrain (BlockKind data used for collisions, and
sprite attributes used for interactable objects like treasure and plants) are
stored in greyscale PNGs with 1 byte per voxel. This is around 1-2% of the
uncompressed Chonks, and is the best format for it I&#x27;ve made so far, though it
might be possible to do slightly better on this part with custom
space-filling-curve orderings to improve locality.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;lossy-compression-for-colors&quot;&gt;Lossy compression for colors&lt;&#x2F;h4&gt;
&lt;p&gt;The color data for blocks is much more expensive than the gameplay-critical
data. Encoding it in an RGB PNG losslessly gives 16% compression ratio (barely
better than deflated chonks).&lt;&#x2F;p&gt;
&lt;p&gt;Currently, the leading techniques for lossy compression of colors are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;256-color palette (throws away all the color info except for what&#x27;s already
knowable from the BlockKind, basically free)&lt;&#x2F;li&gt;
&lt;li&gt;low-quality JPEG (2-3% of uncompressed size, but has horrible artifacting)&lt;&#x2F;li&gt;
&lt;li&gt;Quarter-resolution PNG (3-5% of uncompressed size, but looks reasonably good,
and allows control over artifacting).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;835518640517283880&amp;#x2F;screenshot_1619273546680.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Town with 256-color PNG colors&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;835541657944457286&amp;#x2F;screenshot_1619279010749.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Town with JPEG colors&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;835538499058270208&amp;#x2F;screenshot_1619278286915.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Town with Quarter-resolution PNG and no upscaling&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;835906371500245002&amp;#x2F;screenshot_1619365962181.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Town with Quarter-resolution PNG and Lanczos upscaling&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For improving the aesthetics of the quarter-resolution PNGs, @LunarEclipse is tuning an
implementation of Lanczos interpolation, which sweeps a convolutional filter
across the image to upscale it in a way that tends to keep good edges (like road
paths) and blur bad edges (like block artifacts).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;835996841933537370&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An endless landscape in the morning. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;835518675544834098&#x2F;large_birds.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 116</title>
          <pubDate>Mon, 19 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-116/</link>
          <guid>https://veloren.net/blog/devblog-116/</guid>
          <description>&lt;p&gt;This week, we see lots of changes in the realm of network physics. New crafting
stations are being implemented, and music is getting optimized. Inventory
improvements are also being made.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @zesterer, @imbris, @Capucho,
@juliancoffee, @James, @Sam, @UMR1352, @aweinstock, @nwilder, @XVar, @Sharp,
@Yusdacra, @DaforLynx, @gGmMsS123, @Slipped, @hqurve, @Pfau, @holychowders,
@kinggred, @socherbyc, and @Frinsky!&lt;&#x2F;p&gt;
&lt;p&gt;@DaforLynx recompressed all the music and converted all sounds to the OGG format, as well
as changed the stone footstep sounds again - new ones are made by @alfy. @Sam
made safe zones remain permanently in the spawn chunk. @Sam also did some
backend work on blocking and parrying, it now just needs animations. Both will
use the same button, however, if you release the block button quickly, it will
become a parry, if you hold the block button it will remain a block.&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau and @zesterer have been working on crafting stations: sprites like anvils,
cauldrons, workbenches, and cooking pots that are required to craft certain
recipes. Hopefully, it&#x27;ll add an extra layer of depth to the crafting system.
Crafting stations are shown in the crafting menu now. Interacting with a station
opens the corresponding crafting tab.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;833283694072299540&amp;#x2F;unknown-45.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;833283694277165056&amp;#x2F;unknown-55.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@XVar added a button to sort your inventory, which toggles between 3 different
sort orders. They also fixed a bug that caused UI components to move around when
they shouldn&#x27;t, and the Diesel to Rusqlite MR was merged. @Christof worked on an
older merge request by @Ada about displaying English as a fallback translation.
After a deep dive into asset manager and its data structures @Christof came up
with a novel design that the borrow checker could agree to. It still needs some
work to get mergeable though.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;server-physics-by-aweinstock&quot;&gt;Server physics by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I added a per-player setting to switch between server-authoritative and
client-authoritative physics. With client-authoritative physics, which was
previously the default, anyone could set their position and velocity
arbitrarily, allowing them to teleport and fly. This isn&#x27;t possible with
server-authoritative physics, which makes it nice to have as an option (which
admins can force with the &#x2F;server_physics command).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;832727247282503711&amp;#x2F;screenshot_1618522070729.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Server-authoritative physics is currently less smooth, and causes you to feel
more of the latency of the connection to the server. Despite feeling less
smooth, it gives you a more accurate understanding of your position, which
prevents issues like wandering into a dungeon, thinking you&#x27;ve avoided some
attacks successfully, and then dying minutes later because your inputs arrived
too slowly. Once we get better interpolation (and possibly rollback netcode) and
server-authoritative physics is sufficiently smooth, I hope that
server-authoritative physics can be made the default mode.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;767442908767977473&amp;#x2F;834070843649949727&amp;#x2F;veloren_teleport_vp9_20210420.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Dodge roll and fireball staff previously required skill points to be spent on
unlocking melee invulnerability-frames and fireball explosions, respectively. To
make these skills more useful to new characters, I made these upgrades available
by default, and refunded the points that existing characters had spent on them.
The fireball staff now starts out with smaller explosions, but has an extra rank
of radius-upgrade and gives a bigger increase per level (15% vs 10%).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;833008585616392202&amp;#x2F;screenshot_1618675150399.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A snowy glide through the mountains. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;831321921563000902&#x2F;veloren-voxygen_PEkeDrIqpL.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 115</title>
          <pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-115/</link>
          <guid>https://veloren.net/blog/devblog-115/</guid>
          <description>&lt;p&gt;This week, lots of work has been done on combat audio. We also take a deep dive
into Veloren&#x27;s financials, as well as a newly-provisioned dedicated server.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Ceikry, @XVar, @juliancoffee,
@Sam, @VincentFoulon80, @Sharp, @Pfau, @aweinstock, @DaforLynx, @law4x, @hqurve,
@imbris, @BuildTools, @Snowram, @mdx97, @davidruizagustin2002, @ccm7676,
@UMR1352, @zesterer, @Desttinghim, @romulans, @James, and @kimamb!&lt;&#x2F;p&gt;
&lt;p&gt;This month&#x27;s Rust Gamedev blog is out, be sure to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gamedev.rs&#x2F;news&#x2F;020&#x2F;&quot;&gt;check it
out&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;@Sam overhauled loot tables to allow them to recursively reference other loot
tables in addition to items. @Destinghim added travelers back into the game and
made them follow paths. @Ceikry added a setting for resetting inputs when chat
is opened. They also added ctrl-click and shift-click info to item tooltips when
trading, and updated the book slightly. @Ceikry also improved trading sanity by
making sure the server denies active trades in the case that a player logs out
during a trade.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;831305200903782440&amp;#x2F;screenshot_1617614846849.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Ultimafounding has some plans for some new music in the next few weeks. There
is also a lot of other audio content coming in from @Flashbang, @DaforLynx,
@Aeronic, @badbbad, and @alfy. Songs have also been revamped for distribution
over biomes.&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau has been working on some new map mode button visuals. @aweinstock made
villagers, guards, and merchants able to drink potions and eat food.&lt;&#x2F;p&gt;
&lt;p&gt;@juliancoffee fixed a bug in localization tests which caused them to incorrectly
find lines of keys in &lt;code&gt;.ron&lt;&#x2F;code&gt; files. Now if tests are showing that there are some
untranslated fields, they are really untranslated and not just a false positive.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;725508097233125407&amp;#x2F;830611549826580480&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;combat-audio-by-aweinstock&quot;&gt;Combat Audio by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I extended the music system to support combat music. Previously, there was an
activity field for the soundtracks that could be either &lt;code&gt;Explore&lt;&#x2F;code&gt; or &lt;code&gt;Combat&lt;&#x2F;code&gt;,
but nothing was making use of the &lt;code&gt;Combat&lt;&#x2F;code&gt; state. With my changes, the field is
now &lt;code&gt;music_state&lt;&#x2F;code&gt;, and can be either &lt;code&gt;Activity(x)&lt;&#x2F;code&gt; or &lt;code&gt;Transition(x, y)&lt;&#x2F;code&gt;, where
x and y are in &lt;code&gt;{Explore, Combat(Low), Combat(High)}&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;830187018960502814&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The system tracks how many nearby hostile enemies there are, and heuristically
determines whether the player is in combat, and if so, how intense the combat
is, to select a track to play (and the corresponding transition snippet for that
track). Currently, the only combat music is @DaforLynx&#x27;s &quot;Barred Paths&quot;, which
plays in dungeons, but the system is general enough to support another biome,
site, and time-of-day dependent combat music.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-financials-by-angelonfira&quot;&gt;Veloren financials by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;Recently, another big push was made towards provisioning our own dedicated
server for Veloren&#x27;s general use. Currently, we have a cloud server at Hetzner
that we use to host the game server, as well as a server in Digital Ocean to
host our auth, Airshipper CDN, and some other items.&lt;&#x2F;p&gt;
&lt;p&gt;The idea of this dedicated server is that it will allow us to lay the
foundations for future federated server clusters all around the world. As the
project grows, more players will want to play on the servers, and geo-located
hardware will be necessary. Further, the number of services that Veloren makes
use of will also go up. Here is a list of some items:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Website
&lt;&#x2F;span&gt;&lt;span&gt;- Wiki
&lt;&#x2F;span&gt;&lt;span&gt;- Book
&lt;&#x2F;span&gt;&lt;span&gt;- Auth
&lt;&#x2F;span&gt;&lt;span&gt;- Airshipper CDN
&lt;&#x2F;span&gt;&lt;span&gt;- Veloren test server
&lt;&#x2F;span&gt;&lt;span&gt;- CI
&lt;&#x2F;span&gt;&lt;span&gt;- Grafana
&lt;&#x2F;span&gt;&lt;span&gt;- Prometheus
&lt;&#x2F;span&gt;&lt;span&gt;- Main game server
&lt;&#x2F;span&gt;&lt;span&gt;- Discourse
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;831337741685882940&amp;#x2F;veloren-voxygen_edNRcS9ddb.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now not all of these items need to be hosted by us, and many are distributed,
like CI. But historically these have all been hosted on donated compute from the
contributors. Lots of this can be re-deployed onto a dedicated server.&lt;&#x2F;p&gt;
&lt;p&gt;After doing an audit of how our financials are looking month to month, I created
a spreadsheet that should encompass everything. This process helped clear up a
few discrepancies:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The amount we&#x27;re paying for bandwidth from Digital Ocean will increase further
if we keep using their CDN.&lt;&#x2F;li&gt;
&lt;li&gt;A mistake was made in several previous Digital Ocean invoices, which has been
since resolved.&lt;&#x2F;li&gt;
&lt;li&gt;Many of our services are distributed over many different servers that aren&#x27;t
necessarily controlled by the Veloren core team.&lt;&#x2F;li&gt;
&lt;li&gt;We had no tracking of our monthly revenue, compared to how much we spend in
operation costs.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You can check out the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;spreadsheets&#x2F;d&#x2F;1Fk6kDsCdZLhVszXdsWUjoG4Cgc3cLbTqJgZ-gY3Ndq0&#x2F;edit#gid=0&quot;&gt;spreadsheet
here&lt;&#x2F;a&gt;.
I also created a more formal proposal and reasoning document for the dedicated
server. You can see that &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.notion.so&#x2F;Veloren-Dedicated-Server-Hetzner-AX51-NVMe-39491161e28a4d6dbd77e96c18919059&quot;&gt;document
here&lt;&#x2F;a&gt;.
Hopefully, this financial progress can help lead us to have a better handle
while we move forward on further server provisioning.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;831385645830242314&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A small fire at night&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;830519909032394802&#x2F;veloren-voxygen_QN6B90jB9X.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 114</title>
          <pubDate>Mon, 05 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-114/</link>
          <guid>https://veloren.net/blog/devblog-114/</guid>
          <description>&lt;p&gt;This week, we see lots of changes to trading systems. New sound effects are
being worked on, and new visualizations for maps are being made as well.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Sam, @xMAC94x, @theCow61, @Pfau,
@aweinstock, @HunterTParks, @1b15, @Slipped, @DaforLynx, @tonyvu0605, @Sharp,
@Christof, @Snowram, @nogajun, @VincentFoulon80, @Songtronix, @aljazerzen, and
@James!&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix Squashed&#x2F;fixed Airshipper bugs in preparation for its 0.5 release.
There is still a lot to do, but the backend is mostly figured out. @Pfau worked
on crafting window tabs with icons by @VincentFoulon80, with bug tracking and
programming support by @aweinstock and @imbris.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;828250224630693928&amp;#x2F;Bildschirmfoto_von_2021-04-04_14-49-23.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Window tabs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Gemu has been working on more gear set models, which will lead to animals being
able to drop different crafting materials which can be used to craft the new
gear. @DaforLynx has been working on more sound effects for combat. @LunarEclipse
worked on improving the readability of Torvus. @Christof created an updated 0.9
economy tree.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;828960646695223296&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The leather line-up of new gear&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James has been going through new variants of what the map could look like.
@aweinstock worked on some changes to trading. @LunarEclipse made some big improvements
to the readability of Torvus by making different message kinds from Veloren look
different on Discord as well. You can check out the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;torvus&#x2F;-&#x2F;merge_requests&#x2F;27&quot;&gt;MR
here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;830832850840059914&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Torvus readability changes. Left is old, right is new.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;sound-effects-by-daforlynx&quot;&gt;Sound effects by @DaforLynx&lt;&#x2F;h3&gt;
&lt;p&gt;I implemented more sound effects for combat using the outcome system. A sound
will emit from a struck entity when attacks connect, similar to what @zesterer
did with arrows earlier this week. The new sounds were made by @Flashbang.
Planned for the future are further diversifying the sounds based on things like
weapon used, armor worn, etc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-is-the-trading-price-calculated-christof&quot;&gt;How is the trading price calculated @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;It all starts with an economic simulation of the resources available to a town.
Each chunk counts as &lt;code&gt;terrain&lt;&#x2F;code&gt; towards the closest town (site), with the
different &lt;code&gt;biomes&lt;&#x2F;code&gt; providing different potential &lt;code&gt;goods&lt;&#x2F;code&gt;. Guards turn this into
controlled &lt;code&gt;territory&lt;&#x2F;code&gt;. The most important &lt;code&gt;good&lt;&#x2F;code&gt; is food as it determines the
maximum number of inhabitants of a town. As long as there is enough food, the
population will grow (exponentially). Of course, the recursive raw materials
needed to cook food and to produce equipment for guards create an interesting
cycle. Merchants will travel to neighboring towns and trade extra goods for
missing ones, a maximum transportation capacity per merchant considered.&lt;&#x2F;p&gt;
&lt;p&gt;The ratio between annual need and stockpile determines the local value for each
Good. This number is typically between 0.1 and 4.0 and varies between towns (due
to access to different resources).&lt;&#x2F;p&gt;
&lt;p&gt;To generate a price for a specific &lt;code&gt;item&lt;&#x2F;code&gt;, the rarity of the item (as derived
from loot tables) is translated into an equivalent amount of &lt;code&gt;good&lt;&#x2F;code&gt; (a rare
weapon translates into a large amount of &lt;code&gt;tools&lt;&#x2F;code&gt;). Here the individual weight of
a loot table is tuneable (more dangerous encounters associated with a loot table
should result in lower probability). The most common item per &lt;code&gt;good&lt;&#x2F;code&gt; is
normalized to a given amount of this ware. Only towns with a high enough extra
stock of that ware can offer rarer goods (as the equivalent can never exceed to
local unclaimed stock, currently these limits are hardly perceived though).&lt;&#x2F;p&gt;
&lt;p&gt;And last but not least the merchant will sell items at a higher cost than they
bought them for. As in real life, consumable goods (food, potions, ingredients)
achieve a better buy-to-sell price ratio than investments (armor, weapons).&lt;&#x2F;p&gt;
&lt;p&gt;PS: For coin, there is no definitive need, so it uses the starting amount per
town for an annual consumption to calculate local value. Some fortunate towns
accumulate coin from their neighbors, some towns have nothing to offer and spend
all their money on buying missing goods.&lt;&#x2F;p&gt;
&lt;p&gt;I finally created an updated 0.9 economy tree, see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-99&quot;&gt;devblog
99&lt;&#x2F;a&gt; for the much simpler old one.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;827642118695550976&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;maps-by-james&quot;&gt;Maps by @James&lt;&#x2F;h3&gt;
&lt;p&gt;Recently, I&#x27;ve worked on making the map more &quot;map-like&quot;. I&#x27;m still going through
lots of options and variants:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;828123015383351296&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;828123208242167828&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve separated this map into three layers that are all stacked on top of each
other. The first layer has hill shading, lake shores, rivers, and coastlines on
a yellowish background. The second layer is terrain color with a reduced alpha
channel. The final layer applies the contour lines and redraws the roads on top.
I&#x27;ve also given the minimap layer support.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;828151759146582036&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;trading-fixes-by-aweinstock&quot;&gt;Trading fixes by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I made more changes to trading:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;When trading with a merchant, ctrl-clicking an item will automatically
insert&#x2F;remove enough of that item to balance the trade with the current
prices. Shift-clicking will add&#x2F;remove items from a trade one at a time.&lt;&#x2F;li&gt;
&lt;li&gt;Merchants now spawn with stacks of stackable items.&lt;&#x2F;li&gt;
&lt;li&gt;The buy&#x2F;sell prices when trading with an NPC are heuristically colored: if buy
is green and sell is red, it&#x27;s probably a better idea to buy that item then
sell that item at that site.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;827967448934383676&amp;#x2F;LP_Veloren_ep5_Multiplayer.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A fight with the Mindflayer! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;827958980533944350&#x2F;screenshot_1617400898979.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 113</title>
          <pubDate>Mon, 29 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-113/</link>
          <guid>https://veloren.net/blog/devblog-113/</guid>
          <description>&lt;p&gt;This week, we have lots of work being done on optimization fronts, as well as
world improvements. We hear from several developers about what they&#x27;ve been
working on this week.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Snowram, @Sam, @zesterer, @xMAC94x,
@Capucho, @imbris, @Treeco, @XVar, @Sharp, @aweinstock, @SWilliamsGames,
@Christof, @Pfau, @Slipped, @Desttinghim, @aljazerzen, @yusdacra, @Quibble,
@Synis, @steanne, and @heydabop!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;824340312805605376&amp;#x2F;Bildschirmfoto_von_2021-03-24_18-53-27.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This week, @Sam got the Mind flayer merged. @Songtronix was working on some bot
upgrades. @YuriMomo has been keeping up with testing new features. @zesterer
overhauled clouds to make them faster and prettier. @Treeco added a command to
teleport to sites by name, and a server setting to specify the player spawn
site. @Treeco also generated a new default map, and another larger one for the
server to switch to. @XVar completed the switch from Diesel to Rusqlite, which
should make working with the database code simpler as well as provide full SQL
trace logging.&lt;&#x2F;p&gt;
&lt;p&gt;@Desttinghim added commands to define build areas. This allows admins to set up
specific areas where building can be done. Individual players can be given
permission to build in these.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;824640058145243176&amp;#x2F;screenshot_1616679562802.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;mind-flayer-by-sam&quot;&gt;Mind flayer by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;The Mind flayer has 4 new abilities. It can attack you with cursed flames, which
not only burn you, but also drain away your max health. It can create a necrotic
vortex to drain the life from surrounding creatures and replenish its own. It
can step through dimensions, to instantly teleport to you across short
distances. And it can summon husks of previous victims it has devoured to fight
for it.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;terrain-messages-by-xmac94x&quot;&gt;Terrain messages by @xMAC94x&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;825845678647410758&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Terrain messages are now handled in multiple threads. You can see a visual
improvement from the left side to the right. Especially on HIGH load, such as
release parties, this helps us stay stable. It also increases our Multi-core
usage from 69% to 71%, therefore increasing the efficiency of high CPU core
servers that we provision for large events.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;various-goodies-by-aweinstock&quot;&gt;Various goodies by @aweinstock&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;I fixed a server-side &lt;code&gt;.expect&lt;&#x2F;code&gt; failure on entity&#x2F;UID lookups when a player
disconnected during a trade.&lt;&#x2F;li&gt;
&lt;li&gt;I added coin-denominated prices to the item tooltips during a trade.&lt;&#x2F;li&gt;
&lt;li&gt;A few price-related fixes:
&lt;ul&gt;
&lt;li&gt;Glowing Remains were previously &lt;code&gt;Ingredients&lt;&#x2F;code&gt; instead of &lt;code&gt;Armor&lt;&#x2F;code&gt;, resulting
in it being 15x cheaper than the finished Mind flayer Spell bag.&lt;&#x2F;li&gt;
&lt;li&gt;Diamonds (and gems in general) were too cheap because the weights of the
loot tables containing them didn&#x27;t match rates at which the loot tables
would be rolled in-game.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;I added some steeper spiral stairs to dungeons, with a hole in the center that
can be glided down.&lt;&#x2F;li&gt;
&lt;li&gt;Airships&#x2F;birds now cast multiple rays below&#x2F;in front of them, so it&#x27;s more
likely that they&#x27;ll detect trees&#x2F;cliffs and rise in time not to get stuck.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;827360681438609468&amp;#x2F;Joe_screenshot_1617234898596.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Wating for the ride to the next village. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;825884189344792626&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 112</title>
          <pubDate>Mon, 22 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-112/</link>
          <guid>https://veloren.net/blog/devblog-112/</guid>
          <description>&lt;p&gt;This week, 0.9 released. We hear about some changes that were made during code
freeze, as well as some stats from the release party. A survey was sent out to
Veloren players and we see some responses from that.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @xMAC94x, @Slipped, @zesterer,
@VincentFoulon80, @RedlineTriad, @aweinstock, @Sharp, @imbris, @Christof,
@Snowram, @Sarra_Kitty, @DaforLynx, @TormodHellen, @Pfau, and @James!&lt;&#x2F;p&gt;
&lt;p&gt;This week Veloren 0.9 was released!&lt;&#x2F;p&gt;
&lt;p&gt;@Sam started reworking the mind flayer boss. It will have new attacks and a new
AI. Any other information about it will need to be discovered through gameplay
when it merges!@VincentFoulon80 worked on implementing three new skills:
climbing speed, climbing cost, and swimming speed. @zesterer added a pickaxe,
which can be used to collect gems and break weak rocks. @baddbad created a video
to show off some Veloren gameplay, and it is being added to the website.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;696825216868810855&amp;#x2F;825368877494960148&amp;#x2F;veloren.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@yusdacra got Nix builds working again. They switched the build to use &lt;code&gt;naersk&lt;&#x2F;code&gt;
instead of &lt;code&gt;crate2nix&lt;&#x2F;code&gt;, so there shouldn&#x27;t have be a generated file each time
Cargo.lock &#x2F; Cargo.toml changes (which also means the build files should always
work!). @AlbineAxolotl is working on some weapons based on ones from the
Philippines. Here is a kampilan:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;823765462667755531&amp;#x2F;snap2021-03-22-23-49-34.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;feature-freeze-work-by-aweinstock&quot;&gt;Feature freeze work by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;For feature freeze week, I mainly worked on bug fixes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Interpolation was mistakenly being applied to the client&#x27;s entity under
certain circumstances, causing the player to fly away at high speed or get
locked into place if they entered character select before the bug was fixed.&lt;&#x2F;li&gt;
&lt;li&gt;Mounting was temporarily broken by a physics optimization (the player
character&#x27;s orientation and the mount&#x27;s position would be updated, but the
player&#x27;s position wouldn&#x27;t be locked to the mount&#x27;s).&lt;&#x2F;li&gt;
&lt;li&gt;The Agent system (NPC AI) wasn&#x27;t correctly enabling fly mode, causing airships
and birds to just slowly hop forward along the ground instead of flying.&lt;&#x2F;li&gt;
&lt;li&gt;During the release party, under high server load, the physics system would get
a higher-than-normal delta time value for the tick, causing gravity to be
applied unevenly, manifesting in ticks where waves of people took lethal fall
damage while standing still on the ground.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also have a few fixes and features in the merge queue for once the feature
freeze ends:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Merchants previously tried to accept trades multiple times, instead of only
accepting when they haven&#x27;t accepted yet, resulting in lag and sometimes
making it to the review phase of a trade they end up rejecting.&lt;&#x2F;li&gt;
&lt;li&gt;Airships now fly properly without a health component, allowing them to be made
invulnerable. This allows enabling RtSim airships flying between towns without
players being able to hammer them out of the sky.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m adding a camera clamp angle and toggle to voxygen, to make it easier to
see horizontally when rapidly rolling and changing angle (e.g. not ending up
pointed at the floor or ceiling in the middle of combat).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;0-9-survey&quot;&gt;0.9 survey&lt;&#x2F;h3&gt;
&lt;p&gt;We put out a survey right before the 0.9 release. It was meant to gather some
insights about the player&#x27;s experience in Veloren. If you&#x27;re interested in
filling out this survey, you can do it
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forms.gle&#x2F;egxnK6nskcK8nR1R8&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825370930884378674&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825371056684007505&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825373494619144242&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825373573660803092&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There were also some open-ended questions. Here are some key insights from them:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;How well does Veloren run on your computer?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;It runs good enough for my laptop without a graphics card!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Good on the NVIDIA [computer] terrible on AMD one&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I think it uses 30-45% of my CPU which isn&#x27;t bad.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;It runs OK-ish I guess, but I struggle A LOT with high latency. FPS varies
from 30 to 40-something (with medium settings, more or less). Ping 250ish to
500-something, peaking at 700, 800, even 900 sometimes.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What are you most excited for in Veloren?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many things but you&#x27;d press me on a specific point... I would say the
possibilities. I love Dwarf Fortress for a reason. I love Cube World (alpha)
for a reason. And I am loving Veloren even more for the same reasons, but
Veloren begs to keep offering more and more. Politics, faction wars, world
generation and exploration, combat, building, the fact that all of this is
possible, the fact that it will keep improving and be refined.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;That it&#x27;s not stable and runs on main&#x2F;master. Contributors just keep adding
new cool stuff and it&#x27;s playable immediately. Very easy to get hyped about
this.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Everything, maybe most urgently noob slaughter prevention.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Adventuring and Exploring mostly! I really like the economy aspect I&#x27;ve read
about in the devlogs and would love to see some sort of Town Creation? Like
you can start your own little town and maybe send NPCs you meet during travel
there. The town expands with income&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Story quests! I really like the gameplay so far but there is nothing to do
other than grinding to your heart&#x27;s content&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;During my first experience while entering the game and making a character, I
thought this game was similar to WoW, especially since it allows the user to
choose a weapon while making the character. And since I was playing this game
with my friends, I decided to choose a role like wow, one as a tank, another
as a damage, and another as a healer. My friends and I really enjoyed this
style of play, especially When I used a hammer to throw the enemies into a
corner and we would trap it and damage it. But since the developers weakened
Sceptre in the game, my friend reacted strongly to the game developers.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;An open and communicating community that listens and adjusts to feedback,
without leaving everyone in the dark for years, only to change everything
about the gameplay, that everyone loved.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In your opinion, what is the biggest feature missing from Veloren?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;More contributors! Relating to the game... I would say world interactions.
Going both way, how the world is influenced by your actions and how your
actions will be influenced by the world.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Pets persisting between logins&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;In my opinion, the lack of a quest system is likely the biggest feature that
is currently absent.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I haven&#x27;t played very much yet, but I sort of wish that the tutorial mission
was more fleshed out in terms of explaining crafting and combat. I crafted a
couple pieces of armor with leather that I got around town and still got
destroyed immediately as soon as I went to a dungeon. Maybe that was just an
issue with my level, but I was getting 2-shotted and had trouble inflicting
any damage at all.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;NPC interaction mostly, right now the world feels a bit empty when not doing
dungeons.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;More item variety! Seeing just mushrooms and same loot models is really
disappointing for me. I love stuff, and when there is little of variety it
makes it pretty bland.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Some kind of completion mechanic, like a book for tracking all the monsters I
defeated, all the fish I fish, all the insects I catch, and more of this kind
of grind.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Combat. I don&#x27;t find it is bad right now but I think combat needs to be
improved above all of the other features. It is the top priority for me. When
I use close-range weapons, monsters always beat me cause I can see neither
their attack states nor if they hit me, so I can&#x27;t dodge.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Procedurally generated maps. Content to do between dungeons such as camps,
quests, or even a main story.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The world itself needs a little more love, it feels a little empty, I
understand there are many dungeons, its the place between the big places that
needs a little bit of love and detail.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Deferred rendering, GI, and LOD trees ;P kidding. Combat overhaul: Better
anticipatory animations, w&#x2F; SFX. Better hitboxes. Smarter AI. Sharper
movement. Combat feels clunky, and the positions&#x2F;movements of entities feel
totally disconnected from their combat actions -- lacking the tactile quality
of (say) Dark Souls. I don&#x27;t feel encouraged to &quot;get good&quot; when the game
provides no feedback (or provides false feedback). Can&#x27;t trust my eyes, and
there&#x27;s no sound. So it&#x27;s memorizing, which by itself is really boring.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Definitely quests. But also, more bosses, especially overworld bosses, and
more gear. Now that I got the complete cultist set, I kind of hit a
(temporary) dead end. I heard there are legendary items but the drop rate
seems to be kind of unfair (I know... it&#x27;s called legendary for a reason).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;0-9-release-stats&quot;&gt;0.9 release stats&lt;&#x2F;h3&gt;
&lt;p&gt;We hit a new record for most players on the server at once! At peak, 133 players
joined the server. However, the release party saw several problems. Disconnects
were happening frequently, and the latency for players was quite high. There
were also some massive spikes with incoming bandwidth. Lots of this is still
being diagnosed, and tooling is being improved to simulate environments similar
to release parties.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825375525350408213&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825375632107896832&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825375696879878154&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825375761148936251&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825375910969737287&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825379823915499580&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;825380242704826458&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;823351291493220392&#x2F;screenshot_1616369036220.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 111</title>
          <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-111/</link>
          <guid>https://veloren.net/blog/devblog-111/</guid>
          <description>&lt;p&gt;This week, we hear about many improvements to systems across the codebase.
Network and metric improvements, airships, physics, pathfinding, AI, and much
more.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Sam, @zesterer, @aweinstock,
@AngelOnfira, @James, @imbris, @Synis, @DaforLynx, @Snowram, @PersianKnight,
@Christof, @Slipped, @tukilo, @ccgauche, @BryanQuigley, and @Pfau!&lt;&#x2F;p&gt;
&lt;p&gt;This week, Veloren is preparing for code freeze as 0.9 approaches. @Snowram
added the latest batch of NPCs made by Gemu into the game. @DaforLynx updated
and moved the &quot;Getting Started&quot; new player&#x27;s guide to the Veloren Wiki (along
with other topics in the Wiki) in preparation for an influx of new (and
returning) players when 0.9 releases.&lt;&#x2F;p&gt;
&lt;p&gt;@Frinksy packaged Airshipper for Fedora and set up a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;copr.fedorainfracloud.org&#x2F;coprs&#x2F;frinksy&#x2F;airshipper&#x2F;&quot;&gt;&lt;code&gt;Copr&lt;&#x2F;code&gt;
repository&lt;&#x2F;a&gt; to help
with installing&#x2F;integrating the game. @Christof get trading merged and created
several bug fixes afterwards. @lboklin has been working on density and buoyancy,
and there are two videos you can go check out to see the progress
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;peertube.social&#x2F;videos&#x2F;watch&#x2F;c0b8d425-1697-4270-a3a4-f16273f57283&quot;&gt;(1)&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;peertube.social&#x2F;videos&#x2F;watch&#x2F;5e296636-c73e-4927-96dc-56baf0d5f445&quot;&gt;(2)&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;819462205208526858&amp;#x2F;screenshot_1614638991321.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;improvements-by-xmac94x&quot;&gt;Improvements by @xMAC94x&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;network-improvements&quot;&gt;Network Improvements&lt;&#x2F;h4&gt;
&lt;p&gt;Veloren&#x27;s backend recently had a huge network improvement. It was a complete
rewrite which allows it to easily switch the underlying protocol on an
abstracted layer. We use a technique called I&#x2F;O-Free Protocol, in which we
implement the protocol-code without the need for an actual TCP or UDP
connection, which makes testing much easier.&lt;&#x2F;p&gt;
&lt;p&gt;As a result of this, we were able to implement a MPSC backend in addition to our
current TCP backend. Which will be used in singleplayer. The MPSC backend will
reduce the load on networking while in singleplayer and thus give you more CPU
performance for higher FPS.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;821225649913331712&amp;#x2F;screenshot_1614464998382.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;metrics-improvements&quot;&gt;Metrics Improvements&lt;&#x2F;h4&gt;
&lt;p&gt;We redid the way we are tracking all different systems in Veloren. Veloren has
all kinds of systems for internal tasks, such as NPC controlling, physics, and
persistence. Before we just measured the runtime each system took, now we
additionally also track WHEN a system starts, and on how many cores it runs.
This helps us devs to get a better overview of what&#x27;s going on on the server and
where we need to improve things.&lt;&#x2F;p&gt;
&lt;p&gt;For example, you may think that a system that is only single-threaded is bad and
slow? But if it&#x27;s designed in a way to run in parallel with 7 other systems it
still behaves quite well in terms of multitasking. If a system is
single-threaded AND many other systems are waiting on it to complete, it&#x27;s a
different story though. We need to improve this by either changing the
algorithm, introducing multithreading, or change the dependency of those
systems. It also gives us a better overview of how expensive our systems are in
total.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;818775745723498556&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the image above you can see a list of all our systems, suffixed with an &lt;code&gt;s&lt;&#x2F;code&gt;
for start or &lt;code&gt;e&lt;&#x2F;code&gt; for end. You can either read the exact times when a system is
started or a have a look at the graph. For reference, the big red system is our
physics.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pathfinding-improvements-by-yakei&quot;&gt;Pathfinding improvements by @Yakei&lt;&#x2F;h3&gt;
&lt;p&gt;With school work done, I was finally able to start working on the pathfinding
rework. The current pathfinding algorithm used is the &lt;code&gt;A*&lt;&#x2F;code&gt; (A Star). While it
has plenty of benefits in a controlled environment, it is definitely lacking in
result in Veloren for multiple reasons. Primarily, AI currently can&#x27;t climb nor
fly outside of RtSim. After talking a lot with @aweinstock and @zesterer, the
goal for now is to implement a rapidly exploring random tree. This is an
algorithm tailored for exploration of the environment until a working path has
been found.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;820519558229131314&amp;#x2F;Screenshot_from_2021-03-14_12-45-59.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In theory, I finished a very crude and naive working proof-of-concept. In
practice, there are plenty of limitations that I need to remove as soon as
possible. The biggest one for now is how explored paths are stored. I am using a
K-dimension tree as the primary data structure. Nonetheless, the crate I found
does not really suit our need in many ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You can query data related to spatial points but you can&#x27;t query the actual
point. In our case, we want the coordinates, while we don&#x27;t store data.&lt;&#x2F;li&gt;
&lt;li&gt;You can&#x27;t build a path in the coordinates graph. This means I need to store
each point in the KdTree in order to query the nearest neighbor, but I need to
store it in a vector along a parent-id so that I can return a complete route
for the agent system to follow.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I ended up forking the crate and rewriting a part of the code in order to remove
some of these limitations (and I gained a 40&#x2F;45% perf increase in some of my
benchmarks). However, the graph part is not properly doable without tricks that
I wouldn&#x27;t consider long term. My plan is now to rewrite from scratch the KdTree
implementation in order to achieve better performances, more convenience for our
needs and a more Rust idiomatic code.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;input-improvements-by-sam&quot;&gt;Input improvements by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I have completely rewritten how inputs are handled by the game. Previously,
there was a struct containing a field for each input, and each field contained
data on whether the input was pressed and how recently it was pressed. Now,
inputs are represented by an enum, and an input being pressed and unpressed are
sent as separate control actions. When an action to start input is received, it
is added to a BTreeSet, and when an action to cancel an input is received, it is
removed from the BTreeSet.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;820373769897115679&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Changing inputs this way has a few advantages:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;If an input happened within the space of a tick, before it could go unnoticed
if it was pressed and unpressed within the same tick, now that input should be
recognized by the server when doing an action.&lt;&#x2F;li&gt;
&lt;li&gt;Now that inputs are collected in a BTreeSet, we can also prioritize inputs
such that certain inputs are handled before others as the BTreeSet orders the
inputs.&lt;&#x2F;li&gt;
&lt;li&gt;The amount of data synced from the client to the server is now also moderately
smaller, as less information needs to be sent&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;agent-code-update-by-james&quot;&gt;Agent Code Update by @James&lt;&#x2F;h3&gt;
&lt;p&gt;My agent code refactor got merged almost two weeks ago, but I haven&#x27;t yet
written anything about it. I refactored the agent system into a behavior tree.
Previously it was a finite state machine (FSM) with massive states and confusing
transitions hidden all over the place. It looked a little bit like a plate of
spaghetti with transitions and states all tangled up.&lt;&#x2F;p&gt;
&lt;p&gt;Luckily for me, I had written a good chunk of that spaghetti and found it
relatively palatable. The fact that the file was ~1500 lines of code and in such
a messy state didn&#x27;t exactly make it easy for other developers to work on the
agent code.&lt;&#x2F;p&gt;
&lt;p&gt;For those of you who aren&#x27;t familiar with the Veloren code base, the agent
system is what governs NPC AI. Before this refactor, an agent could be in one of
a number of states, such as &lt;code&gt;Idling&lt;&#x2F;code&gt;, &lt;code&gt;Fleeing&lt;&#x2F;code&gt;, etc. Transitions between these
states were scattered throughout the states and as overrides before and after
the bulk of the code in the agent system making the decision-making logic
difficult to follow.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;819833155871178772&amp;#x2F;screenshot_1615533673138.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finite state machines and behavior trees are the two most popular game AI code
structures. At its simplest, a behavior tree is a decision tree that determines
behavior based on a series of conditions. The end (or action) nodes represent an
agent behavior. For Veloren&#x27;s implementation, all the random information about a
specific agent pulled from the ECS is put in a tidy struct. Methods on this
struct act as the action nodes.&lt;&#x2F;p&gt;
&lt;p&gt;Now if someone wants to adjust an agent behavior they only need to find the
proper function. The decision-making process is modeled directly as a series of
if and match statements making it easy for other developers to design new
behaviors. Since the action nodes all belong in separate functions, multiple
devs can work on different behaviors at the same time without worrying much
about conflicting work. My hope for this system is that other devs will be able
to jump in and design some neat behavior for Veloren&#x27;s NPCs.&lt;&#x2F;p&gt;
&lt;p&gt;This week I made some quality of life changes for NPC interaction. Most NPCs in
the game world are created and destroyed as terrain is loaded and unloaded by
the server. The exception to this rule are the RtSim entities (short for
real-time simulation). These entities persist when unloaded and currently are
visible as the travelers that roam between towns and castles (there are also
RtSim birds that fly between dungeons).&lt;&#x2F;p&gt;
&lt;p&gt;RtSim entities have a &quot;Brain&quot; that can store information that changes their
behavior. This is where they store their destination and they now also store
memories of interactions. If you talk with a traveler (press E to interact) the
first time, it will give a generic response about its destination. The second
time, it may greet you by name if it remembers your character. If you attack a
traveler it will remember your name and attack you on sight if it runs into you
again while that memory hasn&#x27;t faded.&lt;&#x2F;p&gt;
&lt;p&gt;I also fixed some issues with merchants. Merchants should no longer wander away
while engaged in a trade with a player. When you interact with a merchant, it
will offer to trade with you (press R to send a trade invite). Additionally, the
price demands that the merchant says now appear in the chat box for players in
the near vicinity. This is helpful as the merchant chat bubble is often obscured
by the trading window. Villagers may also find your presence less tasteful if
you walk around wearing cultist armor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;airships-and-physics-by-aweinstock&quot;&gt;Airships and Physics by @aweinstock&lt;&#x2F;h2&gt;
&lt;p&gt;@zesterer and I implemented airships this week. Currently, they can be spawned
by an admin or in singleplayer with &#x2F;airship, and we plan to have RtSim airships
flying routes between towns as soon as some agent flight code is fixed (which
also affects birds). Airships can be flown by mounting them, and act like
terrain for other entities. You can climb on them, jump and glide from them,
climb stairs on them, and so on.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;820029427043663882&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;When I first added the airship model (which Pfau made, and Sarra added stairs
and a second floor to) as a normal entity to the game, it had a Box collider,
which meant you could push it around on the ground much like an item, but you
couldn&#x27;t stand on it (if you tried, you&#x27;d fall through, and push it aside). In
order to find out how to make physics work for them, I refactored the physics
system into functions (previously it had been a single ~1K line of code run
function).&lt;&#x2F;p&gt;
&lt;p&gt;In the process, I discovered that the terrain code could be made more generic:
the specific type it was using was a &lt;code&gt;TerrainGrid&lt;&#x2F;code&gt;, which is a statically sized
grid of voxels used for chunks. By changing the function to accept anything that
satisfies the trait bound T: BaseVol&amp;lt;Vox=Block&amp;gt;+ReadVol, it became capable of
also accepting Dyna models, which are the voxel models used by the figure
pipeline for entities.&lt;&#x2F;p&gt;
&lt;p&gt;By translating and rotating an entity&#x27;s collider into the reference frame of the
airship model, it became possible to support airships collisions with
floating-point positions and rotations while still using the same dense array of
integer-aligned voxels. By combining the abstract physics states it became
possible to climb both airships and terrain without interleaving the processing
of their blocks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;819716646192807976&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Once the collision was implemented, there were some more quirks with movement
which were addressed by @zesterer. He changed friction and air resistance to
make movement smoother, and to move the player along the airship with friction.
This is more accurate than what many other engines do (coordinate locking), and
makes it so that your velocity is still aligned with the airship when you&#x27;re
jumping on it or gliding from it. He also made various tweaks to the block
hopping and block snapping parts of terrain collision, which facilitate walking
uphill and downhill as if it were a curved surface despite being made of voxels.&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer also tasked me with implementing client-side interpolation for
positions, velocities, and orientations, which make airships smoother to ride in
the presence of network latency. Without interpolation, the clients assume that
if they haven&#x27;t received input from the airship in a while, it will have started
falling due to gravity. When the server corrects the client, the airship jumps
back up, which may cause the player to fall through the floor of the airship to
their death.&lt;&#x2F;p&gt;
&lt;p&gt;With position interpolation, the client predicts that the airship will keep
going at its current velocity, causing it to move smoothly even if there&#x27;s a
delay in receiving the airships inputs (and likewise with velocity interpolation
and acceleration, and orientation interpolation and rotation speed).
Interpolation is currently linear, as we tried a cubic model called Hermite
Spline Interpolation and found that it was less smooth with the settings we
tried at the latencies we tested under (although it&#x27;s intended to preserve
derivatives better than linear interpolation once well-tuned).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;818992841681797170&amp;#x2F;screenshot_1615333490179.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The physics improvements caused a few regressions in &lt;code&gt;Agent&lt;&#x2F;code&gt; and
&lt;code&gt;RtSimController&lt;&#x2F;code&gt; movement, which @Sam and @James have been helping to diagnose
and fix, due to those systems having been tuned against the old, physically
unrealistic friction and air resistance values. @imbris has also been working on
physics engine improvements such as reducing the number of allocation in the
physics code, and adding chunk based broadphase pruning for making entity-entity
collision detection faster.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s worth noting that the voxel colliders added for airships can support other
features too. Possibilities include elevators (which could be generated as an
alternative to spiral stairs), water orb attacks that cause swimming and slow
movement for entities they pass through, temporary defensive fortifications with
HP or timers, moving&#x2F;floating platforms in dungeons, and possibly even doors.&lt;&#x2F;p&gt;
&lt;p&gt;Since @Christof merged NPC merchants this week, I also made some improvements to
the trading UI; in voxygen, each player&#x27;s offer always appears on the right side
of their screen (near their inventory), and I fixed a bug that @Mog pointed out
where the crafting recipe cache wasn&#x27;t getting updated on completion of a trade.&lt;&#x2F;p&gt;
&lt;p&gt;In the process of developing a load-testing bot client for @xMAC94x, I found and
fixed a bug where character creation allowed the creation of arbitrary tools due
to a lack of server-side validation of client input.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;818015466681401354&amp;#x2F;screenshot_1615100336665.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hanging out with the gang. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;821044157299818537&#x2F;ship_tree.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 110</title>
          <pubDate>Mon, 08 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-110/</link>
          <guid>https://veloren.net/blog/devblog-110/</guid>
          <description>&lt;p&gt;This week, final changes are merged as code freeze approaches. There are updates
to the sceptre, fireworks, and economics.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Frinksy, @zesterer, @ccgauche,
@Synis, @Pfau, @Sarra_Kitty, @aweinstock, @Sam, @imbris, @Snowram,
@VincentFoulon, @Sharp, @Quibble, @James, @Slipped, @Tadabito, @XVar, and
@heyzoos!&lt;&#x2F;p&gt;
&lt;p&gt;@ccgauche and @xMAC94x have been updating the plugin ECS access to enable more
parallelisation in systems and increase general game scalability. @Sarra_Kitty
and @aweinstock made improvements to the fireworks code. @Christof has been
continuing work on economic trade, with NPCs deciding value of their trades.
@Sam has been working on (another) sceptre overhaul.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fireworks-with-sarra-kitty-and-aweinstock&quot;&gt;Fireworks with @Sarra_Kitty and @aweinstock&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;shader-code-by-sarra-kitty&quot;&gt;Shader code by @Sarra_Kitty&lt;&#x2F;h4&gt;
&lt;p&gt;I did a minor tweak on the shader code for fireworks, which gave them a proper
colorful explosion, as the particles before, did not actually have the right
colors for each firework. I also added a white-colored firework into the mix.
@aweinstock did some more substantial work on the fireworks, they now explode
into multiple bursts of color, recursively.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;818486341838831666&amp;#x2F;screenshot_1615212710612.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;recursive-fireworks-aweinstock&quot;&gt;Recursive Fireworks @aweinstock&lt;&#x2F;h4&gt;
&lt;p&gt;I extended fireworks to shoot copies of themselves recursively, to give them the
effect of staged payloads.&lt;&#x2F;p&gt;
&lt;p&gt;Both before and after, throwing a firework launches an entity with high initial
velocity that is subject to gravity. It triggers an effect when its vertical
velocity goes below 0 (i.e. it slows down due to gravity, and detonates at the
peak).&lt;&#x2F;p&gt;
&lt;p&gt;Previously, the trigger used &lt;code&gt;ServerEvent::Destroy&lt;&#x2F;code&gt; to destroy the projectile,
and &lt;code&gt;ServerEvent::Explosion&lt;&#x2F;code&gt; to make an explosion (which uses the same machinery
as the staff explosions; apparently, fireworks do 5 damage per explosion, so
they&#x27;re a reasonable anti-air weapon if you have enough of them).&lt;&#x2F;p&gt;
&lt;p&gt;I added a &lt;code&gt;ServerEvent::Shoot&lt;&#x2F;code&gt; event to shoot additional fireworks when the
vertical velocity trigger is met. The &lt;code&gt;Shoot&lt;&#x2F;code&gt; event had to be extended with a
&lt;code&gt;comp::object::Object&lt;&#x2F;code&gt; field, since it was previously only used for projectiles,
which only have triggers when they hit an entity or block, (as opposed to
fireworks, which have the vertical velocity trigger, and bombs, which trigger
when they land on a surface). Relatedly, inventory-launched fireworks don&#x27;t
currently go through &lt;code&gt;Shoot&lt;&#x2F;code&gt;, so they don&#x27;t have a &lt;code&gt;Projectile&lt;&#x2F;code&gt; component, which
means they don&#x27;t trigger when they hit a wall or entity. This can be seen at the
14 minute mark of @SavvyNik&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;WtjsSXdJjIE?t=840&quot;&gt;recent
stream&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To avoid runaway exponential growth with self-replicating fireworks, a firework
has a 25% chance to shoot 2 additional fireworks, and a 45% chance to shoot 1
additional firework. This gives a 70% chance for each firework to replicate at
least once (so you&#x27;ll get a decent show from most usages of the item), and an
average replication rate of 95% (which is less than 100%, so the show will
almost certainly stop eventually).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;820673149905403904&amp;#x2F;ezgif.com-video-to-gif.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;economic-decisions-christof&quot;&gt;Economic decisions @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;I was finally able to combine item rarity, economy&#x27;s prices, and both
inventories inside the agent code and decide whether to accept the trade or more
value is needed. Sadly the agent doesn&#x27;t yet know how to give the second
confirmation and the item rarity table needs more balancing.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;818624022186950666&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;First acceptance. Of course, all towns always need more food - if they had more
the population would grow.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;818624672236044288&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;scepter-overhaul-sam&quot;&gt;Scepter overhaul @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve overhauled the sceptre (again), it should merge in the next few days. The
projectile heal is removed and the beam is split. There is also now a skill bar
ability.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;New M1: A beam that damages enemies with a bit of life steal&lt;&#x2F;li&gt;
&lt;li&gt;New M2: A beam that heals allies, at the cost of stamina and combo&lt;&#x2F;li&gt;
&lt;li&gt;New skill bar ability: An aura that provides damage reduction to you and group
members in range for a short duration&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The skill tree for the sceptre has also been redone to account for the new
skills. You&#x27;ll have all the points that you&#x27;ve invested reset (meaning if you
earned 34 points, and spent any number of them, you&#x27;ll now have all 34 of those
points available to spend again).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;819462205208526858&amp;#x2F;screenshot_1614638991321.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fog over a village in the morning. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;820683347269124136&#x2F;hlozA6yij7Tmpt-YSZi88Mn_aJ6zUIjZyEIa5u533mI.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 109</title>
          <pubDate>Mon, 01 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-109/</link>
          <guid>https://veloren.net/blog/devblog-109/</guid>
          <description>&lt;p&gt;This week, we have many writeups. We hear from @zesterer, @Christof,
@Sarra_Kitty, @Sam, @VincentFoulon80, and @aweinstock.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Slipped, @ccgauche, @heydabop,
@xMAC94x, @imbris, @Lerg-exe, @aweinstock, @zesterer, @Snowram, @Pfau, @Timo,
@Sarra_Kitty, @nwildner, and @AngelOnFira!&lt;&#x2F;p&gt;
&lt;p&gt;As we prepare for the 0.9 release on March 20th, we&#x27;ve seen many changes getting
merged. This week @zesterer worked on a site overhaul. @Christof has been
continuing work on NPC merchants. @Sarra_Kitty has been improving the number of
models that are in the water. @Sam made many changes around buffs and combat.
@aweinstock has been continuing work on player-to-player trading, as well as
modular weapons. @VincentFoulon80 has been working on icons for skill trees.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816121094469320734&amp;#x2F;screenshot_1614648598262.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;site-overhaul-by-zesterer&quot;&gt;Site Overhaul by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been working on the new site overhaul. As part of that, I&#x27;m working on a
generator system that allows other developers to define their own structure
generation rules with a system similar to CAD-style CSG (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Constructive_solid_geometry&quot;&gt;Constructive Solid
Geometry&lt;&#x2F;a&gt;). CSG is
pretty great because it allows you to define your geometry using simple
primitives and then combine them using Boolean operators to produce new
geometry.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;815961947358887976&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This new approach comes with a few notable advantages:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It&#x27;s much easier to define your own geometry than the old sample-based API
that required a lot of boundary logic and reasoning in multiple coordinate
spaces.&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s &#x27;backend-agnostic&#x27;. Although right now we&#x27;re &#x27;rendering&#x27; the geometry
into blocks, it might be possible to render it to other outputs in the future
such as low-poly geometry for the LoD system.&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s modular and independent of the underlying structure of the building, so
you can take a CSG-style structure and adjust it to fill whatever dimensions
you require and the system can adapt accordingly&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;815961970104336394&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve also been working on the layout of sites themselves. The new site system
uses a tile-based grid for positioning &#x27;plots&#x27; (buildings, roads, etc.). Each
tile is 7x7 blocks and belongs to exactly one plot.&lt;&#x2F;p&gt;
&lt;p&gt;This system is much more flexible since plots may define their own generation
rules independently of other plots which makes modularising the generation code
much easier and lowers barriers for other developers wanting to work on world
generation.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;ll also allow us to generate sites that take almost any structure we want,
mixing and matching elements throughout history simulation as appropriate. We
could, for example, generate a town with a castle-like perimeter wall, a
fortress with a dungeon in the middle, or a port village surrounded by ruins.&lt;&#x2F;p&gt;
&lt;p&gt;Because the only thing required to tie these elements together is the plot-based
tile grid, the work required to allow different procedural elements to work
together is significantly reduced and the brunt of the work now gets placed on
the layout generator rather than the generators of the individual structures
themselves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;815961996017139712&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;trader-npcs-christof&quot;&gt;Trader NPCs @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;I modified the town spawning code to generate merchants. They wear nice colorful
armor, carry some local wares - determined by local economic numbers - and
accept trading invitations. It makes use of the recent user interface additions
by @aweinstock. Unfortunately, I will need to adjust the wares and balance the
prices before this gets ready for inclusion into the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816104653326385222&amp;#x2F;Merchant_Armor.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here is an updated merchant screenshot. A less beautiful merchant, but much
nicer wares: a bag for each, filled with armor, weapons, craft material, food,
potions. Side note: This town has spent all its coin in other markets, so they
will gladly accept coins, but if you sell items they can only offer goods in
exchange.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816452162753658940&amp;#x2F;TradeExtended.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;assets-for-water-by-sarra-kitty&quot;&gt;Assets for Water by @Sarra_Kitty&lt;&#x2F;h3&gt;
&lt;p&gt;I implemented the spawning of coral reef and kelp forest sprites in all bodies
of water at or below the world sea level. They are temperature-dependent, and
the two environments transition between each other if the climate changes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816120568247484426&amp;#x2F;screenshot_1614647989588.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Additionally, I added seagrass patches that can spawn along the coast, the grass
actually spawns in the water, but pokes out above it, so it gives a nice
transition from land to the sea. In the future, there will be more content
underwater, new mobs, generated structures, and also plants and scenery for
freshwater ponds and lakes that generate inland above sea level as well.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816120696509956146&amp;#x2F;screenshot_1614648106025.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Compared to what we had before with barren seafloor, this is a massive
improvement and makes for a lot more of a welcoming environment underwater for
players to explore. There already should be seashells scattered rarely around,
for you to find, and I plan to add more you can do to keep the underwater areas
fun and interesting, not just pretty to look at. Hopefully, we can give the
lakes and ponds inland the same treatment soon.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816120962276786186&amp;#x2F;screenshot_1614648501757.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;lots-of-work-by-sam&quot;&gt;Lots of Work by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve changed the saturation buff from food to queue. This means that only the
currently active saturation buff will tick its duration, and any inactive ones
instead wait until they are active before their duration begins to tick.&lt;&#x2F;p&gt;
&lt;p&gt;I finally integrated some sword and bow models that Gemu had created multiple
months prior. Most of the previous sword and bow models were replaced.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;817224546096382002&amp;#x2F;screenshot_1614911811442.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve also changed how auras apply buffs. Instead of applying a buff only when an
entity does not already have a buff of that kind and then applying the buff
every second, it instead applies the buff and then doesn&#x27;t tick the duration for
that buff until the entity is no longer in range of the aura.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve added a combo component to the player (and other entities). Instead of
combo melee scaling its combo only within that attack state, it instead
increases the combo in the component. Combo then resets to 0 after 5 seconds of
not increasing. This has a few advantages, but the one with the immediate effect
is that the sword, axe, and hammer can retain the advantages of having some
combo when you use an attack that isn&#x27;t combo melee or when you stop attacking
for half a second. It will also allow us to use combo for different things as
well, including the potential to use combo as a resource for some attacks.&lt;&#x2F;p&gt;
&lt;p&gt;I also fixed torvus a couple times when it broke earlier this week.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816120829985292368&amp;#x2F;screenshot_1614648430470.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;skill-tree-icons-vincentfoulon80&quot;&gt;Skill tree Icons @VincentFoulon80&lt;&#x2F;h3&gt;
&lt;p&gt;I finished implementing the new icons onto the skill tree. I also added the main
and secondary attack as dummy skill at the center of each sections (top-left and
top-right). I think these additional icons are handy to find out which skill you
will improve.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;816362671662039121&amp;#x2F;skilltree.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;trading-and-modular-weapon-update-by-aweinstock&quot;&gt;Trading and Modular Weapon Update by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;Regarding trade, I implemented the ability for each party to see the counter
party&#x27;s inventory and request items from it by dragging them into the trade
window. Since trading works on any entity with an &lt;code&gt;Inventory&lt;&#x2F;code&gt; and a
&lt;code&gt;Controller&lt;&#x2F;code&gt;, it should work with NPC merchants as soon as their AI (&lt;code&gt;Agent&lt;&#x2F;code&gt;)
emits the &lt;code&gt;Controller&lt;&#x2F;code&gt; actions corresponding to trade. I also added a coin item,
and made some finishing touches to @heyzoos&#x27;s item stack splitting MR that
allowed it to be merged.&lt;&#x2F;p&gt;
&lt;p&gt;Regarding modular weapons, I added support for making the stats of a weapon or
weapon component different based on the materials it&#x27;s made out of, so a generic
claymore blade recipe and a generic scimitar blade recipe can each make (bronze,
iron, cobalt, etc) blades of the corresponding type, which can then be added to
any hilt.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;815806064548904980&amp;#x2F;screenshot_1614572544089.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying sky-high. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;815229404917268530&#x2F;screenshot_1614436063853.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 108</title>
          <pubDate>Mon, 22 Feb 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-108/</link>
          <guid>https://veloren.net/blog/devblog-108/</guid>
          <description>&lt;p&gt;This week, we see many contributions merged as we move towards the 0.9 release.
@aweinstock gives a little insight into what modular weapons will look like.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @ccgauche, @xMAC94x, @Slipped, @Sam,
@Snowram, @Dumbeldor, @imbris, @zesterer, @Overblob, @steanne, @aweinstock,
@XVar, @clangdo, @AngelOnFira, @adalovegirls, @nwildner, @thethirdspartans,
@huettner94, @Quellus, @Synis, and @Quibble!&lt;&#x2F;p&gt;
&lt;p&gt;@Xvar has been replacing the usage of diesel with
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rusqlite&#x2F;rusqlite&quot;&gt;Rusqlite&lt;&#x2F;a&gt;, intending to make it easier
for developers to make database related changes and to improve trace logging of
SQL statements (a recent bug highlighted that this is basically impossible with
diesel). @Snowram added animation to objects and made a turret as a proof of
concept. They also added a system to make some species immune to specific
(de)buffs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;815298340685217802&amp;#x2F;screenshot_1614452647661.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@OverBlob made humanoid characters use their gliders when falling to avoid fall
damage. @TheThirdSpartan made sure that the player list is updated whenever an
admin possesses another character so that their player alias is still visible in
chat. @Sam got dual-wielding merged. It&#x27;s not yet accessible to players though
as it lacks animations @Sam also made food buffs queue.&lt;&#x2F;p&gt;
&lt;p&gt;@Sarra_Kitty helped out a bit with modular weapons by starting to separate out
the models. @Christof fixed another sign mistake in the trading code (coin got
lost during a trade) and started relative item price computation using loot
tables. This prepares the groundwork for an NPC trading prototype.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;814341947035484164&amp;#x2F;screenshot_1614224621704.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;modular-weapons-with-aweinstock&quot;&gt;Modular Weapons with @aweinstock&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;815727154058887169&amp;#x2F;ezgif.com-video-to-gif.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Recently, I implemented most of what&#x27;s needed for modular weapons (weapons made
of multiple components, e.g. swords from blades + hilts). I&#x27;ve made decent
progress on modular weapons (and have been incrementally merging it into
master). I&#x27;ll hopefully have it finished enough to demo with no purple boxes
anywhere by next week (although it may still be unattainable by players until
more crafting materials are in).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;815727632402350110&amp;#x2F;ezgif.com-video-to-gif1.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;ul&gt;
&lt;li&gt;The components have per-piece stats&lt;&#x2F;li&gt;
&lt;li&gt;They can be crafted into an item that sums the stats of the pieces&lt;&#x2F;li&gt;
&lt;li&gt;The pieces an item is made of are persisted in the database server-side&lt;&#x2F;li&gt;
&lt;li&gt;For rendering, the voxel models of the components are combined into a single
model&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;814668306577227796&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Swimming with the fishies. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;812931034537787432&#x2F;screenshot_1613888179576.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 107</title>
          <pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-107/</link>
          <guid>https://veloren.net/blog/devblog-107/</guid>
          <description>&lt;p&gt;This week, we had a general meeting to discuss the 0.9 release. Progress is
moving forward on the trade front, both for NPC simulation and for
player-to-player.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @lboklin, @AdaLovegirls, @imbris,
@aweinstock, @zesterer, @Snowram, @Slipped, @DaforLynx, @Sarra_Kitty, @Quellus,
@Quibble, and @Sam!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Songtronix got the barebones for partial downloads done.
@AngelOnFira got the repo mirror to GitHub fully working, so now any updates are
sent over once an hour. @Snowram added a new batch of NPCs made by @Gemu and got
NPC recolouring working for non-player models. The art and asset working group
also had a meeting and settled on a list of craft materials for balancing
purposes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;810934154589765682&amp;#x2F;screenshot_1613412119430.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;NPC recolouring work&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof got the inter-site trade code working and implemented a naming
recommendation by @zesterer. A general meeting was held to primarily determine
the release date of 0.9. It was decided that it would happen on Saturday, March
20th. You can read the meeting minutes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.notion.so&#x2F;General-meeting-Sunday-the-14th-6d82da8616284b5db8fd0e9ed73a2696&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;update-on-dual-wielding-by-sam&quot;&gt;Update on Dual Wielding by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve started work on dual wielding, mostly backend stuff to more easily support
it:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Weapons now have a Hands field on them
&lt;&#x2F;span&gt;&lt;span&gt;- The check for having the prerequisite skill for a skillbar ability is no
&lt;&#x2F;span&gt;&lt;span&gt;  longer hardcoded
&lt;&#x2F;span&gt;&lt;span&gt;- Handedness of the weapon automatically multiplies weapon power and speed, in
&lt;&#x2F;span&gt;&lt;span&gt;  the current iteration:
&lt;&#x2F;span&gt;&lt;span&gt;  - Two-handed weapons multiply power by 150% and speed by 75%
&lt;&#x2F;span&gt;&lt;span&gt;  - One-handed weapons multiply power by 67% and speed by 133%
&lt;&#x2F;span&gt;&lt;span&gt;- Wielding a single one-handed properly accesses its abilities (the initial test
&lt;&#x2F;span&gt;&lt;span&gt;  for dual wielding a few months ago required that 2 one-handed weapons be
&lt;&#x2F;span&gt;&lt;span&gt;  equipped to use a secondary ability)
&lt;&#x2F;span&gt;&lt;span&gt;- Dual wielding weapons gives access to skillbar abilities from both weapons
&lt;&#x2F;span&gt;&lt;span&gt;- Weapon tooltips will display the handedness of the weapons
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;810885968780984363&amp;#x2F;screenshot_1613400613799.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;player-trading-by-aweinstock&quot;&gt;Player Trading by @aweinstock&lt;&#x2F;h3&gt;
&lt;p&gt;I implemented player-to-player trading (bound to the R key by default). Trade
has two phases. In the first, either player can add and remove items from their
offers. In the second, the trade is made unmodifiable for review before
acceptance. Both players have to agree to the trade before it can be
reviewed&#x2F;accepted. The server-side component of this should be generic enough to
be usable for NPC trade. Currently, the AI just declines all trade attempts.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;810852480757399552&amp;#x2F;screenshot_1613392628654.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A valley to fly through. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;813190001013162014&#x2F;drs5no5qjjh61.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 106</title>
          <pubDate>Mon, 08 Feb 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-106/</link>
          <guid>https://veloren.net/blog/devblog-106/</guid>
          <description>&lt;p&gt;This week, we see lots of progress on different meta tasks. The GitHub mirror is
on its way to working, and Torvus is more stable than ever. @zesterer is
experimenting with giant trees, and @LunarEclipse made some changes to the AUR
packages. @Sam has been working on improvements to weapon states.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Snowram, @Sarra_Kitty, @AngelOnFira,
@SWilliamsGames, @Imbris, @PhillippMevbenkamp, @James, @Ambien, and @azymohliad!&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer has been playing around with giant trees. Hopefully, they&#x27;ll become
sites containing villagers or even small towns in time. Lots of work yet to be
done to get to that stage though. They&#x27;re 100% procedurally generated, thanks to
@ccgauche&#x27;s initial work developing the original tree generator code.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;3-Zq-yf5w0w&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Gemu is still working on basic one-handed weapons, and made a hydra concept
model. @Pascal fixed a bug where the hammer leap with a low attack speed hammer
would lead to a huge leap that caused fall damage even when on a flat surface.
@Pascal also changed the damage and duration integers to floats throughout the
ability &amp;amp; combat system to reduce typecasts.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;808303646067654696&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hydra concept by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James worked on a functional behavior tree setup that will allow for better
modularization of the agent AI code. @DaforLynx created a system that varies
cricket chirps with temperature.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;807989084840132648&amp;#x2F;shipwreck.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Relics from times long past&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;aur-improvements-by-lunareclipse&quot;&gt;AUR Improvements by @LunarEclipse&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I made some improvements to the AUR packages:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;veloren-bin&lt;&#x2F;code&gt; actually works now. I had to write wrappers for the game and the
server to make them store user data in the system-specific folders instead of
alongside the executable. (When installed as a system package, the directory
with the executable is read-only so the game just crashed before changing
that).&lt;&#x2F;li&gt;
&lt;li&gt;Veloren and &lt;code&gt;veloren-git&lt;&#x2F;code&gt; can now be compiled in a clean chroot. I tracked
down all the needed compile-time dependencies, so the builds should never fail
due to those missing.&lt;&#x2F;li&gt;
&lt;li&gt;All the packages now use the &lt;code&gt;.desktop&lt;&#x2F;code&gt;, &lt;code&gt;.metainfo.xml&lt;&#x2F;code&gt;, and the icon from
the game assets instead of custom ones. I actually had no idea those existed
until someone pointed it out in the comments.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;weapons-changes-with-sam&quot;&gt;Weapons Changes with @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been changing inventory manipulations that touch equipped slots (e.g. your
weapons and armor) to go through control actions instead of control events. What
this means is that it&#x27;ll be a bit more limited in when one can change their
loadout, no more swapping weapons from the hotbar while you&#x27;re actively swinging
a sword. Practically though, there should be very little difference observable
as currently, you&#x27;ll still be able to freely modify your loadout when not
actively attacking. Eventually, this feature could also be extended to add a
duration to changing loadout slots while wielding a weapon or something similar.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;torvus-update-by-xmac94x&quot;&gt;Torvus Update by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;Short Torvus stability update; thanks to Dumbeldor&#x27;s metrics additions for
Torvus we now can track operation easily. The change is now for 7 days
operational. Our uptime is a whopping 99,98%! Though we see some errors on
Friday between 2:00 UTC and 3:30 UTC. having those metrics is extremely
important to get reliable data and analyse whether something doesn&#x27;t work.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grafana.veloren.net&#x2F;d&#x2F;j5KisDYMk&#x2F;torvus?orgId=1&quot;&gt;Grafana dashboard&lt;&#x2F;a&gt; (the
units are in operations per second)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;808100023073767424&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-continued-mirror-issues-by-angelonfira&quot;&gt;The Continued Mirror Issues by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I spend some time re-examining our GitHub mirror problems. The mirror
had been outdated for several months; I last pushed it manually in November 2020. Historically, the mirror has worked. This stopped somewhere around the
beginning of 2020 I think. Before then, GitLab would periodically send mirror
requests as a built-in feature to our GitLab repo. This stopped once we went
over our monthly limit for LFS files being sent to GitHub.&lt;&#x2F;p&gt;
&lt;p&gt;Git is a tool that is meant for non-binary files. The version control method it
uses keeps track of line differences through each commit. This means that if you
navigate to any commit in our tree, it would have to build that commit from all
of the previous changes since the beginning of a repo.&lt;&#x2F;p&gt;
&lt;p&gt;On the other hand, binary files can&#x27;t have recorded &quot;line changes&quot;. Think of a
PNG image, or 3D model file. They&#x27;re stored in a way that changes drastically
when small changes are made. There isn&#x27;t a trivial way of breaking down the
changes with the file formats we use for our assets.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;808295315144310784&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This problem is often only seen in game development projects that use Git. In
the AAA industry, other version control tools are used instead. One of the
largest is Perforce, which takes a very different approach to version control.
Since its use case is for very large games with massive assets, its solution
doesn&#x27;t work the best for other software projects.&lt;&#x2F;p&gt;
&lt;p&gt;So if you are a game that uses Git&#x2F;GitHub&#x2F;GitLab as your version control
systems, you have to take a different approach. There are a few different ways
around this. GitHub allows you to &quot;check in&quot; files up to 100 MB. This means that
as long as we have no single asset files that are larger that 100 MB, we can
just use Git like normal, and not care about the fact that any time one of these
binary files change, it has to update the entire file in Git. Ignorance is
bliss.&lt;&#x2F;p&gt;
&lt;p&gt;However, this accrues technical debt. Each time we add a file, it gets stored
permanently in the Git history. So after checking in asset files, and updating
them over and over again, we eventually have a lot of files in the history. This
means whenever someone clones the repo, they would have to download all of these
files that have ever existed in the repo. Currently, this would mean around a
500 MB download for our entire repo.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;808295351811309598&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The alternative to the approach of checking in binary files is to use a tool
called Git LFS, or Git Large File Storage. This will instead store each binary
file as a &quot;pointer&quot; to an external server, and store the assets there. Whenever
you check out a commit, if there are any pointers in the file tree, it will
replace them with downloaded files from the LFS server. This means that you
don&#x27;t have to have all of the asset files throughout the history of the project,
but instead only the ones for the commit you&#x27;re on. It saves data for
developers, but also from the Git servers that are hosting the repo.&lt;&#x2F;p&gt;
&lt;p&gt;GitLab gives us unlimited bandwidth for LFS files, but GitHub only gives us 2 GB
per month. This means that not only will we go against GitHub&#x27;s limit as we
mirror our repo, but anyone who clones the repo from there will tick our limit.
I sent an email to GitHub asking if we could have the limit removed from the
project, but it didn&#x27;t get much useful feedback.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;807934112014139422&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So now we seem to be at an impasse. We can&#x27;t just get the LFS files to redirect
to the GitLab server that we&#x27;re hosting our files on, since GitHub forces them
to be internal. Also, there is really not a lot of documentation around this.
The use case seems to be small enough that it&#x27;s not worth GitHub&#x27;s time to look
into, even for open source projects.&lt;&#x2F;p&gt;
&lt;p&gt;However, I did find a dirty solution to get around this. I manually set up a
GitHub Action that clones the repo from GitLab, and uninstalls LFS from it. It
then checks in all of the LFS files as normal Git files, and force pushes it to
the master branch of the GitHub repo. This means that anyone cloning from GitHub
will have to download the full repo with all of the assets, but at least we have
an updated repo!&lt;&#x2F;p&gt;
&lt;p&gt;Here is what the GitHub Action looks like. I currently have it delete any GitHub
Action workflows, as a bot isn&#x27;t allowed to push them to the master branch. Each
run takes around 6 minutes, but because GitHub Actions are free for open source
projects, we can run it once an hour without any worry.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;steps&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Install git-filter-repo
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;git clone https:&#x2F;&#x2F;github.com&#x2F;newren&#x2F;git-filter-repo.git;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.&#x2F;git-filter-repo&#x2F;git-filter-repo --help
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Clone GitLab repo
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;git lfs install;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;git clone https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren.git;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Uninstall LFS
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;cd veloren;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;git lfs uninstall;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;git lfs migrate export --include=&amp;quot;*&amp;quot; --everything;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Remove workflow files
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;cd veloren;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;..&#x2F;git-filter-repo&#x2F;git-filter-repo --invert-paths --path .github --force;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Push changes
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;ad-m&#x2F;github-push-action@master
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;with&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;github_token&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;${{ secrets.GITHUB_TOKEN }}
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;branch&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;master
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;force&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;tags&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;directory&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;veloren
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;808295399399751680&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There is still more work to be done so that each job can properly run once an
hour, but this is currently the best solution I could find to the problem. I do
hope that GitHub works on making Git LFS more accessible to open source
projects, as it&#x27;s quite a necessity for open source games. GitHub has done well
in recent years to support open source projects, but this alone is one of the
largest reasons Veloren prefers GitLab to GitHub.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;808147842169700402&amp;#x2F;screenshot_1612747791141.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Beauty and the Beast. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;539518074106413056&#x2F;810526674382749786&#x2F;Screenshot_513.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 105</title>
          <pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-105/</link>
          <guid>https://veloren.net/blog/devblog-105/</guid>
          <description>&lt;p&gt;This week we hear about the progress of an attack rework by @Sam. @Christof
describes the progress on travelling merchants. @Dumbeldor describes recent
changes to Torvus.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Blob, @zesterer, @James, @imbris,
@DaForLynx, @xMAC94x, @Slipped, and @Entropy!&lt;&#x2F;p&gt;
&lt;p&gt;@Redo started working on changing some sound effects. @Gemu has been preparing a
bunch of models for one-handed weapons. @Rotsuoy is reworking the medium
quadruped animations and tweaking the models so that there will soon be prettier
grazing animals with smoother animations. @Snowram worked on adding more lights
to dungeons.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;805829076295090236&amp;#x2F;screenshot_1611874891305.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lights in dungeons by @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James is working on some basic interactions with NPCs. @Entropy has been
working on organizing the asset folder. @Capucho is trying to replace shaderc
with naga on the wgpu branch. @zesterer added snow!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;807224849637703700&amp;#x2F;snow.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Snow!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;torvus-update-by-dumbeldor&quot;&gt;Torvus update by @Dumbeldor&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;m a new contributor, and this week I added some metrics to Torvus to fix
sending messages from Discord to the Veloren server. You can check out the
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;torvus&#x2F;-&#x2F;merge_requests&#x2F;21&quot;&gt;merge request here&lt;&#x2F;a&gt;. If
everything goes well the bot will work and it will be possible to send messages
to Veloren from Discord (and vice versa) without any problem, and we will have a
lot of nice metrics at our disposal to monitor that.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;travelling-merchants-by-christof&quot;&gt;Travelling Merchants by @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I got the inter-site trade planning finally right. Now (still
invisible) merchants leave their town for a neighboring town. With wares to sell
and a plan of goods to buy, of hopefully still matching total value at the
destination market. Merchants are rated for both the actual wares they should
bring as for additional wares, which currently exceed their transport capacity.
The next step is to fully implement the trade at the destination. There was also
a worldsim meeting where we planned the implementation of behaviour trees, group
AI and moving agent code to the server.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;805527697362911262&amp;#x2F;screenshot_1612120593872.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;attack-rework-by-sam&quot;&gt;Attack Rework by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;Recently, I completely reworked how attacks functioned and how they are handled.
Before, attacks that were applied via melee, projectiles, explosions,
shockwaves, or beams handled applying the effects from an attack independently.
There was also a lot of boilerplate in how things were handled as code had to be
replicated in all 5 locations. This also meant adding or updating particular
effects were troublesome as it had to be done in 5 separate locations.&lt;&#x2F;p&gt;
&lt;p&gt;Now, each of those 5 systems has an &lt;code&gt;Attack&lt;&#x2F;code&gt; struct attached to it. What happens
now is that each of the 5 systems is only involved in determining if an attack
hits. If it does a function takes that &lt;code&gt;Attack&lt;&#x2F;code&gt; struct and creates a list of
events that are handled by the server. While making this change, I also added
support for each attack having variable critical chance and critical multiplier. Many
other various effects (such as buffs, energy rewards, knockback, life steal, and
more as needed) can also be tacked onto an attack much easier, and with more
freedom in what values are used.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;805876096079757333&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A wandering vagrant off exploring. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;805527343970910228&#x2F;screenshot_1612041532893.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 104</title>
          <pubDate>Mon, 25 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-104/</link>
          <guid>https://veloren.net/blog/devblog-104/</guid>
          <description>&lt;p&gt;This edition of TWiV marks two years of weekly blog posts! Although not as large
as the 100th post, this one is still special to me. I remember two years ago, I
had a semester off school and I wanted to start working on a side project. I had
found Veloren, and I found what at that point was a single prototype blog post.
I saw a lot of potential in the format and started releasing a new one each
week. Since then the project has changed drastically, and so many great new
things have come from it. I&#x27;m excited to see how it changes by next year!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @SWilliamsGames, @Sam, @Snowram,
@lboklin, @Slipped, @xMAC94x, @Pfau, @dryadee, @James, @imbris, @pizzaluc,
@Rotsuoy, @Acrimon, @SarraKitty, @XVar, and @nheuillet!&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau has a new art blog post, you can check it out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;new-blog-11-and-46438286&quot;&gt;here&lt;&#x2F;a&gt; @Scott fixed up
most of the NPC hitboxes to be more accurate to the models. @Sam worked on
various balancing things related to skill trees. He also added a new attack to
the golem and changed how dash ticked damage. Rather than ticking every
duration, it now ticks every distance traveled. @Sam also Worked on making
torvus (the bridge between the main server chat and discord) functional again.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;805223136920469504&amp;#x2F;interaction.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Gemu Prepared different models for all different weapon-wielding new small
bipeds. @heyzoos fixed a server message bug where &lt;code&gt;&amp;lt;?&amp;gt;&lt;&#x2F;code&gt; would appear if an
entity that inflicted bleeding on a player died before the bleeding killed the
player. They also made player spell auras only affect other players in the same
group.&lt;&#x2F;p&gt;
&lt;p&gt;Rotsuoy worked on adding more life to the savanna as so it&#x27;s not as naked.
@ccgauche got some help from @imbris with plugin API development by finding and
resolving a bug @ccgauche was stuck on for one week.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;802761039337750528&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;economics-by-christof&quot;&gt;Economics by @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;Besides playtesting the new skill system a lot during the past week, I
implemented getting neighbor sites&#x27; prices and inventories and currently code
the trade planning based on this (potentially outdated) information.&lt;&#x2F;p&gt;
&lt;p&gt;I realized that most likely a simple trade planning strategy might be sufficient
and give similar results to multi-dimensional optimization. Basically, traders
try to get the most missed wares at the cheapest place and exchange for those
wares, which are plenty here and have the highest price there.&lt;&#x2F;p&gt;
&lt;p&gt;Also, you don&#x27;t need to additionally plan selling your goods to other sites,
because they will in turn send merchants to you to buy what they need. Since
travelling has a cost there is no point in shipping extra goods to sell at low
prices.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;802653005392117771&amp;#x2F;snap2021-01-23-16-36-07.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A push daggar by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Generally, it looks like the following (potentially player visible) information
can be provided by the existing economic simulation:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Number of town inhabitants per profession&lt;&#x2F;li&gt;
&lt;li&gt;Local prices and stock amounts&lt;&#x2F;li&gt;
&lt;li&gt;Traded goods between sites (type and amount) using the in-game roads&lt;&#x2F;li&gt;
&lt;li&gt;Guarded and regularly used&#x2F;visited chunks around the town&lt;&#x2F;li&gt;
&lt;li&gt;Loaned resources to other sites&lt;&#x2F;li&gt;
&lt;li&gt;Economic conflict lines (later also effects) between sites&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;803763464832286780&#x2F;screenshot_1611702209375.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 103</title>
          <pubDate>Mon, 18 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-103/</link>
          <guid>https://veloren.net/blog/devblog-103/</guid>
          <description>&lt;p&gt;This week, we see lots of new art coming into Veloren. Skill trees have been
merged. @Christof continues his weekly writeups on economic simulation. @Yakei
talks about new improvements to CI.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @ccgauche, @XVar, @Pfau, @imbris,
@SWilliamsGames, @xMAC94x, @James, and @ubruntu!&lt;&#x2F;p&gt;
&lt;p&gt;@Rotsuoy and @Sarra_Kitty worked together to get some new items into the game.
@Sam has been going through a lot of code review for skill trees. There are new
bugs and issues to resolve now that it&#x27;s been released. @James figured out what
was causing NPCs to spam chat messages when fleeing and fixed it. @Songtronix
worked on getting partial downloads working.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-florabite-by-rotsuoy&quot;&gt;The Florabite by @Rotsuoy&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;m a new contributor and for my first big contribution I started tackling items
that didn&#x27;t have in-game models. I started working on models for critters as
well, mostly variants of existing monsters like a green dragon and forest drake.
I&#x27;ve also started working on a new monster, the Florabite, designed by my 9 year
old daughter who also loves Veloren! So you can definitely say that multiple
generations of people already adore the game!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;282295259445198849&amp;#x2F;800403746102050886&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;trade-between-sites-with-christof&quot;&gt;Trade Between Sites with @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;Starting from last week&#x27;s state of reading professions&#x2F;raw materials&#x2F;products
from a &lt;code&gt;.ron&lt;&#x2F;code&gt; file, I added uncontrolled land as a raw material and trading good
(fief&#x2F;tenure). I also added and included different types of guards for different
types of ground&#x2F;water (e.g. a Naval Guard needs more potions, but less Armor)
which then produce &lt;code&gt;Farmland&lt;&#x2F;code&gt;, &lt;code&gt;Quarry&lt;&#x2F;code&gt;, &lt;code&gt;FishingGround&lt;&#x2F;code&gt;... In turn, this
enables normal workers to access resources there, producing the raw materials
for their food.&lt;&#x2F;p&gt;
&lt;p&gt;Having different types of Guards enabled the town&#x27;s control board to (re-)assign
tasks according to changing needs. This resulted in much more people living in
the same city, due to a smarter usage of the same natural resources. Also, I
designed a concept for trading between sites that take local prices on both
sides into account. Merchants plan their wares according to the information from
the last trip and local stocks and prices, then at the distant market updated
local prices and stock amounts apply, so merchants will come back with new
information and potentially a different amount than planned for.&lt;&#x2F;p&gt;
&lt;p&gt;Coin will act as a generic ware (without other use) when direct exchange is not
desirable. Unfortunately, both the planning and the auction will involve
non-linear multi-dimensional (one dimension per ware) optimization.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;282295259445198849&amp;#x2F;800403798156640276&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New items by @Rotsuoy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;ci-improvements-with-yakei&quot;&gt;CI Improvements With @Yakei&lt;&#x2F;h3&gt;
&lt;p&gt;For my first real contribution, I decided to work on the CI. Pipelines can take
as long as an hour, which is definitely too long. The current system makes use
of a cache that is manually built into the Docker image. This has several
problems, the main one being the cache gets outdated fast when it comes to
Veloren&#x27;s rapid development.&lt;&#x2F;p&gt;
&lt;p&gt;I decided to leverage GitLab CI&#x27;s cache system to remove this factor. This
system is fairly new, or at least not as stable as we would all like it to be.
In fact, some of the main features I&#x27;ve used to reduce build time are still
broken on the last LTS version, which means I&#x27;m using a release candidate
version that was built about a week ago.&lt;&#x2F;p&gt;
&lt;p&gt;Once I overcame this first hurdle, I found out the average time spent creating
and extracting the cache for each step was very significant. This is due to the
default Go ZIP library used by the runner. I swapped this out to fastzip
with a feature flag and found negligible overhead, compared to entire multiple
minutes before.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;282295259445198849&amp;#x2F;800385525961457664&amp;#x2F;snap2021-01-17-10-25-12.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Forest Drake&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new workflow is the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The Docker image is created when dependencies are changed (either by adding,
removing, or upgrading them).&lt;&#x2F;li&gt;
&lt;li&gt;Each step, the cache is extracted to the compilation folder.&lt;&#x2F;li&gt;
&lt;li&gt;We iterate through the container cache and link each of the dependencies. This
requires some overhead, but is needed as this step will always be called after
the extraction of GitLab&#x27;s cache. This means we cannot link an entire folder.&lt;&#x2F;li&gt;
&lt;li&gt;The normal step is now executed. Cargo will now take care of only changed
source files, and compilation completes much faster.&lt;&#x2F;li&gt;
&lt;li&gt;When finished, the new cache is created if changes were detected. This
workflow means only Veloren&#x27;s modified source files will be compiled on CI.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;While these improvements have mostly been completed, we have not yet decided on
the cache policy that we will use. Recent talks with @xMAC94x and @XVar leads me
to think we would introduce a cache only created on master and used on every
branch, along with a special cache for Tarpaulin and benchmark. This policy
ensures a decent max storage size on cache, as well as reducing again overhead
on the cache by not creating a new cache on branches. We would also change
benchmark and&#x2F;or coverage behavior to manually trigger on branches as this is
the main cause of time spent in pipelines.&lt;&#x2F;p&gt;
&lt;p&gt;A lot of questions aren&#x27;t completely answered for now (the correct git clean
policy to adopt as we use fetch instead of clone, how to reduce link creation
overhead, etc.), but I think the new CI should be ready either this week or
next.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m already seeing build times reduced by around 5 to 15 minutes. Hopefully we
can stabilize runs to around 5 - 8 minutes each if we change benchmark +
coverage to manually trigger on branch which is probably as good as we can get
on this matter. My next goal will be to reduce the number of dependencies that
Veloren uses and improve linking time.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;801657551196127262&amp;#x2F;d2e39bc1b71a1863eb0d8f7635eb777b.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A short break from exploring. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;801973331750158347&#x2F;103.jpg" type="image/jpg"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 102</title>
          <pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-102/</link>
          <guid>https://veloren.net/blog/devblog-102/</guid>
          <description>&lt;p&gt;This week, skill trees were completed. We hear from @Christof about some more
work on professions. @badbbad created a new song. Lots of new models by @Gemu
and implemented by @Snowram.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @ccgauche, @XVar, @Pfau, @imbris,
@SWilliamsGames, @xMAC94x, @James, and @ubruntu!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;798668789364817990&amp;#x2F;sweet_water_.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New song by @badbbad, &amp;#x27;Sweet Water&amp;#x27;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This week, the latest edition of the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-017&#x2F;&quot;&gt;Rust Gamedev Newsletter was released&lt;&#x2F;a&gt;! @Sam finished off skill trees. It still
needs a few more visual tweaks and needs to go through code review, but then
they&#x27;ll be in the game! @Gemu modeled a lot of new creatures, and @Snowram has
been implementing them into the world. In fact, there are now over 100 total
NPCs!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;798202257249271838&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Modeling gear based on new crafting ingredients by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This week, @Acrimon and @Sharp started working on a new specification for the
multiplayer authentication mechanism. @VincentFoulon has been working on all of the icons needed for the weapon
skills. These are on their way to being implemented in the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;798245416180645898&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New skill tree icons&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;professions-by-christof&quot;&gt;Professions by @Christof&lt;&#x2F;h2&gt;
&lt;p&gt;I found the logic error (introduced by me) in the &lt;code&gt;labor_value&lt;&#x2F;code&gt; computation and
finally have reasonable economic numbers across sites! I implemented reading
professions (very much like a tech tree) from &lt;code&gt;.ron&lt;&#x2F;code&gt; files, which I&#x27;ve recently
completed. Also, I had a lengthy discussion with @zesterer about the nature of
money; I am especially curious whether and how my current idea (coins as a trade
good with a value solely determined by the things a site can buy for it) will
work out. Here is an example of what the professions &lt;code&gt;.ron&lt;&#x2F;code&gt; file looks like.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    name: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Miner&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    orders: [ (Quarry, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;), (Tools, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.1&lt;&#x2F;span&gt;&lt;span&gt;) ],
&lt;&#x2F;span&gt;&lt;span&gt;    products: [ (Stone, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;) ],
&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    name: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Fisher&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;    orders: [ (FishingGround, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;4.0&lt;&#x2F;span&gt;&lt;span&gt;), (Tools, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.02&lt;&#x2F;span&gt;&lt;span&gt;) ],
&lt;&#x2F;span&gt;&lt;span&gt;    products: [ (Meat, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;4.0&lt;&#x2F;span&gt;&lt;span&gt;) ],
&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    name: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Hunter&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Hunter operate outside of uncontrolled areas and resemble guards
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; due to the low number of products we tune down the Armor,Tools,Potions in comparison
&lt;&#x2F;span&gt;&lt;span&gt;    orders: [ (Armor, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.1&lt;&#x2F;span&gt;&lt;span&gt;), (Tools, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.1&lt;&#x2F;span&gt;&lt;span&gt;), (Potions, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;), (Woodland, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;4.0&lt;&#x2F;span&gt;&lt;span&gt;) ],
&lt;&#x2F;span&gt;&lt;span&gt;    products: [ (Meat, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;4.0&lt;&#x2F;span&gt;&lt;span&gt;) ],
&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;798201792919502858&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Basilisk by @Gemu. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;450064928720814081&#x2F;795763308056805376&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 101</title>
          <pubDate>Mon, 04 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-101/</link>
          <guid>https://veloren.net/blog/devblog-101/</guid>
          <description>&lt;p&gt;This week, we start 2021 off with lots of progress. Skill trees are completed
and working towards code review, lots of new models are being worked on, and
larger systems like economic simulation are pushing forward.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @a1phyr, @xMAC94x, @VincentFoulon,
@Nobbele, @zesterer, @XVar, and @Acrimon!&lt;&#x2F;p&gt;
&lt;p&gt;In last week&#x27;s &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-100&quot;&gt;behemoth blog post&lt;&#x2F;a&gt;, we didn&#x27;t
cover lots of the contributor work that was going on. @VincentFoulon has started
working at refactoring localization code to clean up the file and folder
structure of it. @Sam has completed the skill trees for hammers, bows, staffs,
and sceptres.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;793485466875723796&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Gnarlings by @Pfau and @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@ubruntu is nearly done adding RTSim birds that fly around the world. @Pfau
created a skill tree layout generator, and worked on gnarlings. The concept
drawings were worked on by @Gemu. @Scott has been working on improving the look
of the wiki.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;795332627413598248&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;water-models-by-sarra-kitty&quot;&gt;Water Models by @Sarra_Kitty&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been continuing to work on more models for coral and seaweeds. I added
several more variants of coral, and a seashell item on my branch. You can find
them scattered about on the sand on the reefs! The next step for these is to
make their spawning temperature dependent, so coral reefs will spawn in warm
water, and kelp forests in colder seas.&lt;&#x2F;p&gt;
&lt;p&gt;I like the idea of having a distinction between fresh water and saltwater in the
game as well, so that freshwater lakes and ponds can have things like
waterlilies and pondweed in them, and save the coral for seas and the ocean
proper. Currently, there exists no such system in the game, but I think it&#x27;s
something to think about!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;795316129634582548&amp;#x2F;screenshot_1609688116062.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;work-on-economic-simulation-by-christof&quot;&gt;Work on Economic Simulation by @Christof&lt;&#x2F;h3&gt;
&lt;p&gt;Thanks to @imbris I was able to significantly reduce the code needed to load
additional (economic) data on demand once a tooltip is displayed (over a site in
the map window). But apart from getting a better understanding of the
complexity, (i.e. anything short of a full political+military+site
building+economy simulation will need manual tweaking to give reasonable
prices), I didn&#x27;t make much progress in the last two weeks. In the example
below, Trig is lacking access to Wood&#x2F;Logs to grow further (high value, low
stock; and has an excess of Fish).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;795549732759273532&amp;#x2F;Trig.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;skill-trees-by-sam&quot;&gt;Skill Trees by @Sam&lt;&#x2F;h3&gt;
&lt;p&gt;I just finished the general combat skill tree. This means that the old level and
XP system has been thrown out. The UI is now mostly hooked up for purchasing
skills. Finally, the last of the stuff I needed to do for database persistence
and the migration is done.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;796745252853514250&amp;#x2F;shot_20210107_152734.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A pieceful village. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;793714069097021470&#x2F;screenshot_1609306444645.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 100</title>
          <pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-100/</link>
          <guid>https://veloren.net/blog/devblog-100/</guid>
          <description>&lt;p&gt;This week we have the 100th edition of This Week in Veloren! We have writeups
from many contributors, making this the longest edition yet.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @XVar, @Acrimon, @nwildner, @Pfau,
@SarraKitty, @Slipped, @Pfau, @Snowram, @Entropy, @zesterer, and @Frinksy!&lt;&#x2F;p&gt;
&lt;p&gt;This week we have a unique blog post. It&#x27;s our 100th edition! For this blog, we
had to make it the &lt;strong&gt;biggest&lt;&#x2F;strong&gt; one yet. We have writeups from 20 of Veloren&#x27;s
developers, artists, composers, and other contributors. Because of this, here is
a table of contents with all of the topics. Enjoy!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#preface-by-angelonfira&quot;&gt;Prologue by @AngelOnFira&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#a-veloren-short-story-by-zesterer&quot;&gt;A Veloren Short Story by @zesterer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#ui-progress-by-pfau&quot;&gt;UI Progress by @Pfau&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#glider-physics-by-slipped&quot;&gt;Glider Physics by @Slipped&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#lunareclipse-s-veloren-journey&quot;&gt;@LunarEclipse&#x27;s Veloren Journey&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#modeling-with-gemu&quot;&gt;Modeling with @Gemu&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#modeling-with-snowram&quot;&gt;Modeling with @Snowram&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#work-by-xvar&quot;&gt;Work by @XVar&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#combat-improvements-by-james&quot;&gt;Combat Improvements by @James&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#starting-with-audio-by-badbbad&quot;&gt;Starting with Audio by @Badbbad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#network-analysis-by-xmac94x&quot;&gt;Network Analysis by @xMAC94x&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#the-state-of-graphics-and-ui-by-imbris&quot;&gt;The State of Graphics and UI by
@Imbris&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#skill-trees-by-sam&quot;&gt;Skill Trees by @Sam&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#procedural-trees-by-ccgauche&quot;&gt;Procedural Trees by @CCGauche&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#new-website-design-by-songtronix&quot;&gt;New Website Design by @Songtronix&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#why-veloren-is-special-to-me-by-christof&quot;&gt;Why Veloren is Special (to me) by
@Christof&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#getting-into-rtsim-by-ubruntu&quot;&gt;Getting into RTSim by @Ubruntu&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#finding-veloren-by-yusdacra&quot;&gt;Finding Veloren by @Yusdacra&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#new-developer-experience-by-entropy&quot;&gt;New Developer Experience by @Entropy&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#looking-to-the-graphical-future-by-sharp&quot;&gt;Looking to the Graphical Future by @Sharp&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;#combat-system-design-by-silentium&quot;&gt;Combat System Design by @Silentium&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;preface-by-angelonfira&quot;&gt;Preface by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;I joined the Veloren project in January 2019. I was intending on making a very
similar project myself, and in doing research, I stumbled across Veloren. I knew
some Rust at the time; enough to solve the kinds of problems you&#x27;d find on
HackerRank or Advent of Code. So I looked for other areas that I could
contribute, and found TWiV. There was only a single post that had been made at
the time, and it dated to a few months prior.&lt;&#x2F;p&gt;
&lt;p&gt;So I started writing the blog. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-1&quot;&gt;At first&lt;&#x2F;a&gt;, it
there was just an art and programming section. Around the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-12&quot;&gt;12th
edition&lt;&#x2F;a&gt;, we saw the first writeup. More
structure started being added to the blog, and more content was coming in from
contributors. We saw concept art, ideas in prototyping phases, new systems being
described, and much more.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;794681087132565535&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We&#x27;ve seen many great benefits from the blog: people have found out about the
project, aspiring developers have seen something they could contribute to, and
it&#x27;s created discussion around many elements of the project. Further, it&#x27;s been
great seeing what others have been working on in a curated format.&lt;&#x2F;p&gt;
&lt;p&gt;So here&#x27;s to the progress that has been made over the last 100 weeks, and here&#x27;s
to another 100 🍻&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-veloren-short-story-by-zesterer&quot;&gt;A Veloren Short Story by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;You start your journey in a town named Mosswall. The town is small, but it has
most of the essentials: a fletcher, a carpenter, a small open-air market, and a
tavern. You realise that you have a few pieces of gold about your person so you
decide to visit the market. Since you appeared to start in a small square, you
do so via a narrow cobbled street, lined with houses. Townsfolk walk past and
greet you as you go.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;793003650401828885&amp;#x2F;screenshot_1609137037432.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Once you reach the market, you find several merchants flogging their wares. You
walk over to the nearest: she&#x27;s selling weapons, telling you that her swords
came from a blacksmith in Cliffheim, a dwarf settlement to the north. Curious
you pull out your map: sure enough, you can see Cliffheim nestled amongst the
foothills of a mountain several days walk to the north. You like the look of
this sword: it is sturdy and simple, with a leather grip. You feel that it&#x27;ll
serve you well.&lt;&#x2F;p&gt;
&lt;p&gt;Satisfied, you pay the merchant, and she thanks you for your business. Curious
about what you might need next for your adventure to truly begin, you enter the
tavern on the opposite corner of the marketplace. It&#x27;s dark and quiet, much as
you&#x27;d expect from such a small town. The only light comes from a fireplace set
into the wall and sunlight coming in through the window.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788096684345393172&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There are a few travellers at the bar (as implied by their heavy backpacks and
light travel armour). You walk over to one and ask them where they&#x27;re visiting
from. They say they&#x27;ve come from the west, a lakeside village known as
Feastloch. The town had recently been having trouble with some of the wildlife:
trolls from the northern mountains had expressed interest in the village&#x27;s
plentiful supply of fish and had invaded the town. Most of the inhabitants had
been forced to flee. Those that remain are asking for adventurers to help them
fend off the trolls.&lt;&#x2F;p&gt;
&lt;p&gt;You bid the traveller farewell and they thank you for your company. This seems
to you like an opportunity to make a name for yourself as good as any, so, after
visiting the market for some food supplies, you make your way down the road that
heads out of town. Cobble gives way to gravel, and gravel gives way to dirt:
eventually, you find yourself wandering through an oak forest.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;787790597116788756&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There is birdsong and flowers, and a slight breeze in the air. The path
continues for an hour&#x27;s walk until you come to a fork in the road. A sign near
the fork reads &#x27;Feastloch, south-west. Cliffheim, north&#x27;. Encouraged by your
progress, You set off to the west. The terrain begins to change. Broad oak trees
give way to sparse pine, and the grass dulls.&lt;&#x2F;p&gt;
&lt;p&gt;The air chills and the wind picks up as you climb to the crest of a hill.
Staring down into the mist, you see the mirror-like surface of a lake,
scattering the early evening sun across the valley. Smoke rises from the
chimneys of a dozen houses on the lake&#x27;s northern shores. This must be
Feastloch.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;788538023591280660&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Some distance ahead you spot a figure walking the path. As the figure
approaches, he yells a greeting, and asks you where you&#x27;re headed. You tell him
that you&#x27;re travelling to Feastloch. He shakes his head and tells you that the
trolls have taken the village for their own. An unprepared traveller like
yourself would surely struggle to take them on. Undeterred, you tell him that
you intend to free the village from the trolls. He protests, but wishes you well
and hands you a flask of liquid, telling you that it&#x27;ll heal you if you get
hurt.&lt;&#x2F;p&gt;
&lt;p&gt;You reach the outskirts of the village in time to hear a bellowing roar from the
direction of the village hall. Carefully, you make your way toward the noise,
taking care to remain hidden behind trees and marsh reeds. The bellowing
continues, and you catch sight of an enormous troll attempting to break through
the wall of the village hall.&lt;&#x2F;p&gt;
&lt;p&gt;Thinking quickly, you dig through your bag. Amongst other items, you find a
flash bomb: just what you need. The troll roars once more and you throw it
toward the village hall. It&#x27;s well-aimed: it hits the ground next to the troll,
exploding with bright light and flames. The huge beast jumps in surprise and
runs away into the tree line behind the town, dropping its huge club as it does
so. You have scared away the troll, and obtained a heft club in the process!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ui-progress-by-pfau&quot;&gt;UI Progress by @Pfau&lt;&#x2F;h2&gt;
&lt;p&gt;As the only developer mostly working on UI design and UI frontend for Veloren I
found myself contributing to two different branches lately.&lt;&#x2F;p&gt;
&lt;p&gt;For the inventory upgrade branch, we needed to rethink and resort some of the
bag elements, add a completely new system to expand the inventory view, and fit
in new slots for bag items. Additionally, this involved planning out the game
design of this exciting new feature and organizing some test runs. And this was
just my (small) part in this. Everything going on &quot;below the surface&quot; took weeks
for @XVar to fully flesh out until we could even think about UI.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;794124043686248468&amp;#x2F;screenshot_1609404295955.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another very interesting new feature I was involved in was skill trees. These
first required a more or less fully automated way to generate a layout. Then,
the developer (@Sam) writing the underlying systems just has to place simple
button widgets onto the pre-generated layout and make them trigger events on
pressing them. One can basically put in some values at the top of the file and
the code below creates just the right amount of background elements and places
them based on a certain ruleset. Working on this was really cool as it felt like
creating a 2D level generator.&lt;&#x2F;p&gt;
&lt;p&gt;All of this is especially amazing to me because I started out with just knowing
a bit of CSS and LUA when I joined the Veloren Team in 2018. My last CS class
dated all the way back to around 2008 when I started to learn graphic design. My
origins are actually in the World of Warcraft UI modding community, which you
may or may not recognize in some of the Veloren UI elements 😉&lt;&#x2F;p&gt;
&lt;p&gt;~Pfau&lt;&#x2F;p&gt;
&lt;h2 id=&quot;glider-physics-by-slipped&quot;&gt;Glider Physics by @Slipped&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m working on an animation branch by @lboklin that adds realistic glider
physics to the game. While the master setup only allows for turning with the
glider, this adds aerodynamics that will simulate the movement down to details
like air density and surface area of the aerofoil to calculate drag&#x2F;lift and
track pitch, yaw, and roll. You can pull back on the glider to enter a slow
glide or lower yourself to the ground. Push forward on the glider to go into a
fast dive. Banking properly allows for a ton of fun movement, even in tight
spaces. The player is also now a lot more responsive to the movement, getting
pinned to the glider at high speeds and hanging freely when coasting.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;8WWVe1cIu7I&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;lunareclipse-s-veloren-journey&quot;&gt;@LunarEclipse&#x27;s Veloren Journey&lt;&#x2F;h2&gt;
&lt;p&gt;I joined the project soon after @zesterer created the Discord server. I offered
to help set it up and that&#x27;s how I got involved. At the time I had very little
programming experience, so I was open to learning any tools others would choose
to develop the game with. After Rust was chosen as the language we would use, I
started reading the official Rust book. It wasn&#x27;t until the engine rewrite when
I started working on the actual codebase. By that time I had read about half of
the book, and with &lt;em&gt;a lot&lt;&#x2F;em&gt; of help from @zesterer, I took on the task of writing
the networking code.&lt;&#x2F;p&gt;
&lt;p&gt;The API was really simple - the server would have a &lt;code&gt;PostOffice&lt;&#x2F;code&gt;, which would
receive connections represented as &lt;code&gt;PostBox&lt;&#x2F;code&gt;. The client would call
&lt;code&gt;PostBox::new(address)&lt;&#x2F;code&gt; which would connect to the server, and again yield a
&lt;code&gt;PostBox&lt;&#x2F;code&gt; instance. After that, utilizing the connection was as simple as
calling &lt;code&gt;.send(data)&lt;&#x2F;code&gt; and &lt;code&gt;.receive()&lt;&#x2F;code&gt; on the &lt;code&gt;PostBox&lt;&#x2F;code&gt;. Unfortunately, while it
passed the unit tests I wrote, it didn&#x27;t actually work. I couldn&#x27;t find the
issue, so @zesterer took over and managed to make it work. The overall
architecture didn&#x27;t change for quite a long time though, so I was a bit proud of
at least getting that right. I learned a lot along the way as well, especially
about multithreading and sharing data between threads.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;791353768155021362&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For some time after that, I contributed more minor things, or helped with things
unrelated to the actual code. Even at times when I didn&#x27;t contribute much to the
actual game I&#x27;ve always been around on the discord server. I&#x27;ve dipped my toes
into the world of voxel art - I actually created one model that is still in game&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the wheat model. At some point I learned how to create packages for Arch
Linux, and have been maintaining a few for Veloren ever since
(&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aur.archlinux.org&#x2F;veloren&quot;&gt;&lt;code&gt;veloren&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aur.archlinux.org&#x2F;veloren-bin&quot;&gt;&lt;code&gt;veloren-bin&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, and
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aur.archlinux.org&#x2F;veloren-git&quot;&gt;&lt;code&gt;veloren-git&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;My biggest contribution was probably adding controller support. I initially
started working on it around 0.3, but lost motivation for a while, and ended up
starting from scratch sometime before 0.5. While it took me some time, I
actually pulled through that time, and controller support was included in the
0.6 release. It required me to learn about multiple in-game systems like
settings, the input system, and the code consuming the input events (that was
especially the case for analog inputs like joysticks, since before the game only
supported key press&#x2F;release events with the exception for mouse movement).&lt;&#x2F;p&gt;
&lt;p&gt;I used the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;gilrs&#x2F;0.7.0&#x2F;gilrs&#x2F;&quot;&gt;&lt;code&gt;GilRs&lt;&#x2F;code&gt; library&lt;&#x2F;a&gt; to handle the
low-level implementation details, and after familiarizing myself with the
examples I started plugging it into Veloren. There are 3 input types recognized
by Veloren a controller can provide: &lt;em&gt;(&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;v0.6.0&#x2F;voxygen&#x2F;src&#x2F;controller.rs#L283&quot;&gt;check out the code
here&lt;&#x2F;a&gt;)&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Button&lt;&#x2F;code&gt; - binary input - like with a keyboard a button can either be pressed
or not pressed, but nothing in-between&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;AnalogButton&lt;&#x2F;code&gt; - analog input which can be represented by a number between
&lt;code&gt;0.0&lt;&#x2F;code&gt; and &lt;code&gt;1.0&lt;&#x2F;code&gt; - usually those would be for example triggers.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Axis&lt;&#x2F;code&gt; - analog input which can be represented by a number between &lt;code&gt;-1.0&lt;&#x2F;code&gt; and
&lt;code&gt;1.0&lt;&#x2F;code&gt; - an example of that would be one axis of a joystick.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For the purpose of configuring key bindings, each of them is represented by an
&lt;code&gt;enum&lt;&#x2F;code&gt; containing two variants:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Simple(GilX)&lt;&#x2F;code&gt; where &lt;code&gt;GilX&lt;&#x2F;code&gt; is an &lt;code&gt;enum&lt;&#x2F;code&gt; provided by the library representing
all Buttons&#x2F;Axes it recognizes&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;EventCode(u32)&lt;&#x2F;code&gt; is used for inputs to which &lt;code&gt;GilRs&lt;&#x2F;code&gt; assigns the &lt;code&gt;Unknown&lt;&#x2F;code&gt;
variant of the aforementioned &lt;code&gt;GilX&lt;&#x2F;code&gt; &lt;code&gt;enum&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;793810111641681970&amp;#x2F;sick_party.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Due to the way the raw events from &lt;code&gt;GilRs&lt;&#x2F;code&gt; are converted to the Veloren-specific
types, for example &lt;code&gt;Button::Simple(GilButton::Unknown)&lt;&#x2F;code&gt; will never match any
button press, as all events corresponding to unknown buttons are represented by
the &lt;code&gt;Button::EventCode&lt;&#x2F;code&gt; variant. It&#x27;s similar for the &lt;code&gt;AnalogButton&lt;&#x2F;code&gt; and &lt;code&gt;Axis&lt;&#x2F;code&gt;
&lt;code&gt;enum&lt;&#x2F;code&gt;s.&lt;&#x2F;p&gt;
&lt;p&gt;This can be used to our advantage, as instead of using additional &lt;code&gt;Option&amp;lt;T&amp;gt;&lt;&#x2F;code&gt;
wrappers in the key-mapping code, we can use the &lt;code&gt;Simple(GilX::Unknown)&lt;&#x2F;code&gt;
variants to signify not binding an action to any key. While this might seem
confusing, I think it&#x27;s a pretty neat solution, and I made sure to place
comments informing about this in the relevant places of the codebase.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s move on to the actions the inputs can correspond to. As you might expect,
there are 3 types of actions depending on the input type. But in addition to
that, they are divided into menu actions and game actions. The names are
self-explanatory, the actions a controller can be bound to in menus are
completely different than in-game actions.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;793714069097021470&amp;#x2F;screenshot_1609306444645.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now let&#x27;s talk about
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;v0.6.0&#x2F;voxygen&#x2F;src&#x2F;controller.rs#L11&quot;&gt;settings&lt;&#x2F;a&gt;.
As you can see, there are key-maps for each input type, one for the menu inputs
and one for the game inputs. In addition to that, you can configure dead zones
per-input, invert some axes, adjust the in-game camera pan sensitivity and
sensitivity of the menu mouse emulation (more on that later).&lt;&#x2F;p&gt;
&lt;p&gt;Those were some of the more interesting things about the controller support
system, if you&#x27;re interested in learning more about it, you can look at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;750&#x2F;diffs&quot;&gt;the
merge request&lt;&#x2F;a&gt;.
Most of the magic happens in &lt;code&gt;controller.rs&lt;&#x2F;code&gt; and &lt;code&gt;window.rs&lt;&#x2F;code&gt;. Some of the code
has changed by now, but most of what I&#x27;m talking about here stayed the same.&lt;&#x2F;p&gt;
&lt;p&gt;Now let&#x27;s talk about some things related to controller support that I didn&#x27;t
implement. First off, a graphical configuration interface. Implementing it
requires knowledge about the graphical parts of Veloren, which I haven&#x27;t touched
to this day. The other thing was proper menu navigation - with a controller the
most natural way is to have one element be highlighted, and move the selection
with a joystick. That would require a lot of work though, as it would probably
require major changes to the way the GUI is handled, so I settled for mouse
emulation, which while not optimal, was a much simpler solution to implement.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;785643325918019634&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Since implementing the above, the biggest thing I&#x27;ve worked on was planning a
screenshot and trailer competition which was supposed to take place around the
0.8 release, but it turned out to require much more time than I had anticipated
to properly prepare, so I have put that project on hold for now. I might take
another shot at it in the future. No promises for now though ;)&lt;&#x2F;p&gt;
&lt;p&gt;To finish up, I&#x27;ve learned a ton while working on the project and met lots of
amazing people. I would like to thank everyone involved in making Veloren what
it is today - a promising game, and an amazing community. I look forward to
seeing what the future brings us!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;modeling-with-gemu&quot;&gt;Modeling with @Gemu&lt;&#x2F;h2&gt;
&lt;p&gt;When I first found Veloren, I was a bit anxious to join and hadn&#x27;t even
considered being able to contribute. After I joined the Discord, I noticed the
art section channels, which sparked something that made me want to try after
all. After I posted my first model attempt, the nice reception kept me motivated
to make more. By now, I have made many models that are present in the game
through the help of others. The continuous support I&#x27;ve received kept me going,
and I plan to contribute just as much next year as well.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;793988941657276446&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The biggest thing I&#x27;ve worked on was probably the creature model rework. I
proposed the remodelling of the animal models at the time, which I took upon
myself. Lately, I haven&#x27;t been able to contribute much, due to being busy. I
made a few voxel models of item drops, like crafting materials such as wood,
ores and gems. When the new model-skeleton for smaller bipeds was introduced
however, I got a surge of inspiration and made a bunch of models for demihuman
creatures alongside others. As all dungeons were generally occupied by humanoid
NPCs for now, I&#x27;m definitely looking forward to the diversity this will add to
the content.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;785182838513205248&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;modeling-with-snowram&quot;&gt;Modeling with @Snowram&lt;&#x2F;h2&gt;
&lt;p&gt;Heya! It has been a year since I have discovered Veloren and its awesome
community. This year has been crazy and I&#x27;m proud to have taken part in this
adventure.&lt;&#x2F;p&gt;
&lt;p&gt;I started to contribute to Veloren by creating some NPC models. Learning how to
make them has been a really good learning experience as it was the first time I
played with voxel modeling. After delving into the process to add these new
species into the game, I discovered how to make skeletons and animations for
them. At first, it was a time-consuming process but we achieved to make the
workflow easier and easier to allow for complex animations. Now I am working
with the art team to make voxels come to life and integrate them into the
ecosystem.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;788085099576950875&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There are now almost 100 different species and we are only starting since new
skeletons are often getting added. I have also started to learn some Rust basics
to be more involved in the development process. So far I added some simple
features like a weapon speed stat or allowing items to have buffs. For the
future, I&#x27;d like to progress further and finally overcome the steep learning
curve. The year to come will be very exciting and I&#x27;m eager to see what comes
next!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work-by-xvar&quot;&gt;Work by @XVar&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m XVar - Technical Architect for a UK-based software company by day, Veloren
developer by night (and often weekends...). I first came across Veloren on
Reddit, it seemed like a pretty neat project and I&#x27;d been looking for a more
substantial project to improve my Rust skills with, so I joined the Discord and
more or less jumped straight in. At that point my Rust experience was fairly
limited, comprising of a mostly finished Gameboy emulator and not much else.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bringing-clippy-back&quot;&gt;Bringing Clippy Back&lt;&#x2F;h3&gt;
&lt;p&gt;My &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1054&quot;&gt;first MR&lt;&#x2F;a&gt; came
about when I ran &lt;code&gt;cargo clippy&lt;&#x2F;code&gt; and was faced with hundreds of warnings,
rendering &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust-clippy&quot;&gt;Clippy&lt;&#x2F;a&gt; completely useless
within the Veloren project due to the noise of the vast number of existing
warnings. Cue me adding hundreds of Clippy suppressions to get to a baseline of
0 warnings and creating a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;issues&#x2F;587&quot;&gt;tracking
issue&lt;&#x2F;a&gt; that to this day still
needs completing. Although many of those initial suppressions still exist,
following this MR we added a zero-tolerance policy for Clippy warnings to our CI
pipeline so Clippy continues to be a valuable tool (especially to developers new
to Rust) within the project.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;794338100943781888&amp;#x2F;screenshot_1609455086621.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;persistence-overhaul&quot;&gt;Persistence Overhaul&lt;&#x2F;h3&gt;
&lt;p&gt;Following this MR I made numerous bug fixes and minor changes before coming
across an issue that I considered myself fairly well qualified to deal with -
Veloren&#x27;s database persistence. At this point, Veloren had only had persistence
for character data for a few months - a vast improvement over the previous
complete lack of it but a fairly brittle implementation. With item data stored
in the database as serialized JSON including a copy of the actual item
definition itself this led to serious issues whenever item definitions were
changed leaving &quot;legacy&quot; items in existing inventories and loadouts with only
newly created items having the new properties from the asset files.&lt;&#x2F;p&gt;
&lt;p&gt;The solution to this was to rework the database schema to only store the ID of
item definitions rather than copies of the entire item, as described in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1bTI-SuHI-EG1IZwUc879yVxJjdP8etQFVNUv141ghbQ&#x2F;edit?usp=sharing&quot;&gt;this
RFC&lt;&#x2F;a&gt;.
As well as removing the issue of &quot;legacy&quot; items requiring complex JSON
migrations whenever item definitions were changed I also introduced the concept
of &quot;every item can be a container&quot; - more on that later. The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1342&quot;&gt;persistence
MR&lt;&#x2F;a&gt; was a bit of a
beast, with development ongoing between August 2nd and September 18th with 77
commits total including an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;5dea8fb23a15e38905438666a5c98000a3fd6c74&#x2F;server&#x2F;src&#x2F;migrations&#x2F;2020-08-16-130513_item_persistence&#x2F;up.sql&quot;&gt;800 line database
migration&lt;&#x2F;a&gt;
to extract all of the existing JSON blobs into the new database schema. @Sharp&#x27;s
input and collaboration on this MR proved to be invaluable particularly with
regards to ideas on how to make the database schema even more robust.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;793989070144667658&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;has-the-server-crashed&quot;&gt;&quot;Has the server crashed?&quot;&lt;&#x2F;h3&gt;
&lt;p&gt;Anyone who spent more than a few days in #general on Discord prior to December
2020 will have been familiar with the frequent questioning from players of why
the server just went down following the merge of an MR and the automatic server
restart. That&#x27;s to be expected when you&#x27;re faced with an obscure networking
error out of the blue, after all. Seeing this happen so often prompted me to
investigate how we could give players warning of an upcoming restart, and it
turned out our Docker infrastructure included all the required components
already due to our use of Watchtower for pulling docker image updates.&lt;&#x2F;p&gt;
&lt;p&gt;Watchtower by default sends SIGTERM to the watched container (in this case
Veloren-server-cli) - which results in the server instantly going down. However,
it also supports sending custom signals to processes rather than straight up
killing them. I made use of this by &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1423&quot;&gt;adding functionality to
Veloren-server-cli&lt;&#x2F;a&gt;
which starts a two minute timer upon receiving a SIGUSR1 signal. For these two
minutes global chat messages are sent to all connected players informing of them
of the pending restart, before the server is finally shut down after the two
minutes expire.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, this feature didn&#x27;t work as intended for a further two months as
I kind of forgot about it after it went in and there was &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1580&quot;&gt;a
bug&lt;&#x2F;a&gt; in our Dockerfile
that prevented the SIGUSR1 signal from actually reaching the Veloren server
process. Once this fix went in though, the calls of &quot;has the server crashed?&quot;
were instantly silenced.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;788069901163298866&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;inventory-loadouts&quot;&gt;Inventory &#x2F; Loadouts&lt;&#x2F;h3&gt;
&lt;p&gt;After completing the persistence MR I vowed to avoid tackling such a large task
for a while, so naturally, a month later I began work on a complete refactor of
inventory&#x2F;loadout handling.&lt;&#x2F;p&gt;
&lt;p&gt;For as long as I&#x27;ve been part of the project, players have had a fixed 36-slot
inventory with no way to upgrade the size of their inventory. Numerous
discussions were had (and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1419&quot;&gt;aborted
prototypes&lt;&#x2F;a&gt; were made)
before we settled on implementing inventory upgrades with 4 new bag slots in the
loadout.&lt;&#x2F;p&gt;
&lt;p&gt;Not only will this allow players to carry many more items than today, but it
also introduces the concept of items acting as containers that hold other items.
Every item that&#x27;s in a slot other than the basic 18 slots of the the inventory
itself will actually be &quot;inside&quot; the equipped bag item that provides that slot.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;787861695262490704&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This functionality won&#x27;t have much of an impact when it&#x27;s first merged, but
it&#x27;ll allow for some interesting possibilities in the future. For example, if
weight is added to items combined with overburdening you might want to quickly
drop a specific bag of stuff on the ground in order to run faster and escape
imminent death.&lt;&#x2F;p&gt;
&lt;p&gt;The requirement to have 4 loadout slots that could all hold the same kind of
item (bags) necessitated refactoring to remove the previous design restriction
of a 1:1 mapping between &lt;code&gt;ItemKind&lt;&#x2F;code&gt; and &lt;code&gt;EquipSlot&lt;&#x2F;code&gt;. This not only allowed us to
implement the 4 bag slots, but after this MR is merged you&#x27;ll notice that you
can equip a ring on both hands rather than the previous single ring slot.&lt;&#x2F;p&gt;
&lt;p&gt;This change hasn&#x27;t merged yet, but it should be merged in early January 2021 😁
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;45215779&quot;&gt;Pfau&#x27;s blog post&lt;&#x2F;a&gt; has more info on the
UI changes related to this change too.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;closing&quot;&gt;Closing&lt;&#x2F;h3&gt;
&lt;p&gt;While 2020 has been a pretty crap year by all accounts, I&#x27;ve had a blast working
on Veloren and seeing it evolve over the past six months. I still don&#x27;t consider
myself a Rust expert by any means but working with it consistently has not only
massively increased my productivity in the language, but also I frequently find
myself thinking about problems from a different angle when working in other
languages too due to Rust&#x27;s disallowance of data races and such.&lt;&#x2F;p&gt;
&lt;p&gt;Seeing all the work ongoing with world-gen, the transition to &lt;code&gt;wgpu&lt;&#x2F;code&gt; and iced,
the huge improvements to combat and the beginning of a plugin framework all make
me excited to see what&#x27;s next for Veloren and I think the game has a bright
future in 2021 and beyond.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788058603226660944&amp;#x2F;screenshot_1607955260379.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;combat-improvements-by-james&quot;&gt;Combat Improvements by @James&lt;&#x2F;h2&gt;
&lt;p&gt;Hi there! My name is James and I have been contributing to Veloren since August,
where @Sharp was kind enough to let me volunteer my hardware to fix an NVIDIA
shader bug. I have mostly worked on combat and AI code. For anybody who would
like to contribute but is a little timid about it due to little experience or
anything else, I encourage you to jump on in! The devs are very friendly and
have helped me a lot.&lt;&#x2F;p&gt;
&lt;p&gt;My first major contribution was adding additional skills to the hammer, axe, and
bow. @Sam (combat lead) graciously wrote a guide for adding skills. With help
from many of the other devs I managed to add two new character states to allow
for charged melee attacks and ranged projectile bursts. This was my first time
working on a project larger than a few files and was quite overwhelming
initially.&lt;&#x2F;p&gt;
&lt;p&gt;Since then, I have had fun programming humanoid NPCs to attack with all of their
newfound skills. We currently use a state machine to determine NPC behavior. The
only NPC programmed to use multiple attacks when I added these skills was the
stone golem, which uses a timer and proximity to target to determine attack. I
began by implementing human attacks in this manner as well. When NPCs were first
added to Veloren, they were designed to take the same inputs as player
characters (as far as the code is concerned).&lt;&#x2F;p&gt;
&lt;p&gt;Minimizing the difference between players and NPCs is part of our attempt to
heighten immersion in our simulated game world. Using an arbitrary timer works
against this purpose and can make NPC attacks too regular and predictable. Since
the humanoid NPCs use the same attacks as players with the same energy costs, I
transitioned the conditions for firing the different attack skills to energy
cost with a little bit of RNG to simulate stress-induced, split-second decision
making.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788082318152826890&amp;#x2F;yump_Sat-Dec_5340_11.13.49.png.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Currently, humanoid NPC attacks tend to be a little over-aggressive and in some
cases play better than most players with the same weapon. I intend to give NPCs
varying skill and adeptness with weapons to make combat against AI feel more
like PVP. Before working on more considerations with the AI code, I plan to
transition the state machine to a behavior tree for better control in the new
year (assuming no one else does it before I get to it).&lt;&#x2F;p&gt;
&lt;p&gt;I also got to work with @Slipped on some animal attacks. Currently, testing AI
code to get it just right can be time-consuming with having to recompile after
every change to see how it plays. I hope to modularize the code better with the
switch to a behavior tree and perhaps move some tactic components into RON
files.&lt;&#x2F;p&gt;
&lt;p&gt;After working with combat for a while, I ventured into the land of audio. I play
several instruments IRL but had no experience with audio software or coding. The
first step was to allow for biome specific music. The biome of each chunk is
stored in the terrain metadata. Querying that information was fairly simple. I
then worked on some rather convoluted biome transition code before we decided to
let the songs play to their end.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788088110877507584&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Biomes, as defined in the code, are simply labels applied to chunks that meet
certain temperature, altitude, humidity, etc. conditions. I tweaked these values
a little to match the world gen. At the time, the soundscape of Veloren was
being discussed. It was quite empty. Luckily for me, @zesterer had implemented a
&quot;blocks of interest&quot; system that selects certain blocks from the loaded terrain
to emit particles. These are used for falling leaves, beehives, fireflies, and
fireplaces.&lt;&#x2F;p&gt;
&lt;p&gt;I repurposed the system to emit sound effects from blocks. The sound effects can
be emitted at different times of day allowing for leaf blocks to emit bird calls
during the day and owl hoots at night. @Daforlynx worked on and provided me with
a wind loop. I created a non-spatial ambient sound manager and set it up to play
the wind sound at varying volumes depending on the altitude and tree density. In
the future, this will likely be tied to weather simulation.&lt;&#x2F;p&gt;
&lt;p&gt;As more people play Veloren, we hear all kinds of feedback. Many people asked
for a passive health regen. Most of the core devs do not like the idea of a
passive health regen for many reasons. To help the player situation out, I made
campfires regen health when a character sits nearby. To accomplish this, I
developed an aura system to apply buffs to nearby entities. While relatively
bare-bones right now, this system will allow for things like poisonous gas
vents, enchantments, and more.&lt;&#x2F;p&gt;
&lt;p&gt;Most recently, I have been working on a poise system to complement Veloren
combat. In many old school RPGs, combat is little more than firing off different
attacks while the character remains stationary. In Veloren, we hope to develop a
more dynamic combat system that rewards player skill with regards to movement
and weapon skill use. The addition of i-frames for melee attacks to the
roll&#x2F;dodge was a major first step. The poise system will govern stuns and
take-downs. With this system weapons have a poise damage stat in addition to
regular power. This makes some weapons better for stunning while having lower
DPS allowing for more play styles.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788754610322931722&amp;#x2F;Screenshot_14.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Armor also will have a poise damage reduction stat. The exact balancing details
are not sorted out yet, but the general idea is as follows. Character entities
have a poise component similar to health. Different species have different base
poise values. When poise is lowered below a predetermined fraction of the total
(tentatively 50%) the entity enters a stunned state, interrupting their attack
and affecting movement. The stunned entity&#x27;s poise immediately resets to 100%.
The further below the initial stun level, the larger the effects on the stunned
entity.&lt;&#x2F;p&gt;
&lt;p&gt;I am still experimenting with knockback as well. This system motivates the
attacker to save up heavy attacks for when the defender is most vulnerable and
provides further impetus to avoid being hit. With the addition of @Sam&#x27;s skill
trees I believe we will be well on our way to a fun, competitive combat system.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;starting-with-audio-by-badbbad&quot;&gt;Starting with Audio by @Badbbad&lt;&#x2F;h2&gt;
&lt;p&gt;I found Veloren at a point when I had a lot of motivation to write music for
open-world games but I couldn&#x27;t find an outlet to fulfill it. Finding Veloren
community amazed me, how so many talented and hard-working people can team up
for a passion project so organized and well-directed. I was immediately hooked
by the concept, downloaded the game, and played. 5 hours later I already was
done writing the track &quot;Between the Fairies&quot; and sent it to #audio. And today
I&#x27;m one of the team leads of the audio team.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren really helped me learn to enjoy the process and cherish the progress
step by step. It also showed me that people with passion and talent are a huge
force, that can build an entire game only by volunteers! (that&#x27;s crazy)&lt;&#x2F;p&gt;
&lt;p&gt;Currently, I&#x27;m making and implementing sound effects for a free-to-play game
called &quot;Tadpole Tales&quot;. You can check out some more of my work
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tomerbarnea.myportfolio.com&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. It&#x27;s more than exciting to be a
part of this community, and I&#x27;m looking forward for our future!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788891993190301706&amp;#x2F;screenshot_1608156863922.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The walls of Gronk Keep must be fascinating&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;network-analysis-by-xmac94x&quot;&gt;Network Analysis by @xMAC94x&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;follow-up-performance-analysis-from-devblog-93&quot;&gt;Follow-up Performance Analysis from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-93&quot;&gt;devblog-93&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;When I wrote this article it had the working title &quot;how to make sure that the
next release party can handle 100 players&quot;. During the investigation, I dived
deep into the Veloren source code and found multiple regions that have
difficulty scaling. The server only needs a single bad scaling component which
is enough to slow down everything. I was even happier to actually see 100 people
on our latest party. In its current state, none of the devs could dream of it
scaling so well. Anyway, I owe you some physics and networking details.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-we-calculate-physics&quot;&gt;How we Calculate Physics&lt;&#x2F;h3&gt;
&lt;p&gt;Physics in this context describes handling positions, velocities, and hitboxes.
We break it up into 2 parts: first, we do entity &amp;lt;&amp;gt; entity collisions. then we
do terrain collisions and apply the movement.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;entity-entity-collisions&quot;&gt;Entity &amp;lt;&amp;gt; Entity Collisions&lt;&#x2F;h4&gt;
&lt;p&gt;For this, we iterate over all entities. Technically, only those with position
and velocity except for mounted entities and projectiles. For each of these
entities, we check if it collides with another entity. We skip entities checking
against themselves, other mountings, projectiles, beams, and shockwaves.
Therefore we draw a cylinder hitbox around the entity. If we detect a collision
we adjust the velocity so that our entity moves away from the collision.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;entity-terrain-collisions&quot;&gt;Entity &amp;lt;&amp;gt; Terrain Collisions&lt;&#x2F;h4&gt;
&lt;p&gt;For this, we iterate over all entities (technically only those with position and
velocity except for mounted entities). We then apply movement parameters
(gravity, friction, water physics) to the entity. Then we try to apply the
resulting velocity in small steps, which doing collision checks with the
terrain. Therefore we draw a rectangular hitbox around the entity.&lt;&#x2F;p&gt;
&lt;p&gt;I used &lt;code&gt;tracy&lt;&#x2F;code&gt; (see the previous devblog) to analyse the bottleneck of our physics
coding. The more players are spread around the server, the more entities are
loaded. The entity &amp;lt;&amp;gt; entity code scales very badly, as it needs to check each
entity with each entity. For 1000 entities we have 1.000.000 checks. During load
the server often has 3000 entities loaded, resulting in over 9.000.000 checks.
In order to speed this process up we do a quick-check where we approximately
some parameters, so quickly skip far apart entities, though this check is far
from optimal. Additionally, we parallelize this calculation to profit from
multiple cores.&lt;&#x2F;p&gt;
&lt;p&gt;This is our main bottleneck for &amp;lt; 30 players, it will draw resources and burn
CPU time (which costs us server host money to keep the server tick time at 30
TPS).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;788895206882803733&amp;#x2F;screenshot_1608157242726.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;overview-of-new-network-backend&quot;&gt;Overview of new Network Backend&lt;&#x2F;h3&gt;
&lt;p&gt;Our old code had many bottlenecks that got fixed within the last 2 months.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We used to actively wait for new players to connect, actually creating a
&quot;laggy&quot; tick, that can take up to half a second. We only do this for the auth
token check currently, but plan to even put this in a background task.&lt;&#x2F;li&gt;
&lt;li&gt;We send a big message on a single channel for all kinds of communication which
got compressed always. We started to split this up in multiple channels, so we
can process PING messages independently of CHUNK messages or GAMESTATE
messages. Also we can apply compression algorithms more carefully and save
some CPU time.&lt;&#x2F;li&gt;
&lt;li&gt;We no longer need to serialize the same message multiple times if we want to
send it to multiple participants. This massively saves CPU time on the server.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In the future, we will apply separation into multiple channels even more
carefully and optimize our ECS format, to reduce bandwidth usage by 75%
profiting users with slow internet connections.&lt;&#x2F;p&gt;
&lt;p&gt;I would like to take this opportunity on this special 100th blog to thank all
contributors, artists, players, developers, musicians, and translators for their
time and dedication spend on Veloren. There are 1000 different faces, and each
of you is doing your unique but essential part for this project!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-state-of-graphics-and-ui-by-imbris&quot;&gt;The State of Graphics and UI by @Imbris&lt;&#x2F;h2&gt;
&lt;p&gt;We have two major transitions in the crates (Rust libraries) being used for
rendering and UI respectively. For rendering, we are switching from &lt;code&gt;gfx&lt;&#x2F;code&gt; to &lt;code&gt;wgpu&lt;&#x2F;code&gt; and for UI we are switching from &lt;code&gt;conrod&lt;&#x2F;code&gt; to &lt;code&gt;iced&lt;&#x2F;code&gt;. One of the shared
motivations for these switches is to move to crates that are being more actively
developed.&lt;&#x2F;p&gt;
&lt;p&gt;The old &lt;code&gt;gfx&lt;&#x2F;code&gt; crate is pretty much inactive since the GFX team moved on to
developing the much lower level &lt;code&gt;gfx-hal&lt;&#x2F;code&gt; and &lt;code&gt;wgpu&lt;&#x2F;code&gt; which is closer to the old
&lt;code&gt;gfx&lt;&#x2F;code&gt; crate&#x27;s level of abstraction. While &lt;code&gt;conrod&lt;&#x2F;code&gt; is more mature than &lt;code&gt;iced&lt;&#x2F;code&gt;
and is still maintained to an extent, updates are infrequent and there doesn&#x27;t
appear to be a significant driving force to fix the current missing features and
rough edges.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;789554284613206036&amp;#x2F;screenshot_1608309568512.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;wgpu-transition&quot;&gt;Wgpu transition&lt;&#x2F;h3&gt;
&lt;p&gt;Currently, we just use the &lt;code&gt;gfx&lt;&#x2F;code&gt; OpenGL backend. &lt;code&gt;wgpu&lt;&#x2F;code&gt; automatically supports
multiple backends including more modern backends such as Vulkan, dx12, and
metal. Hopefully, this should allow us to eke out more performance. The &lt;code&gt;wgpu&lt;&#x2F;code&gt;
rewrite is currently fairly complete, mainly with shadow rendering needing to be
fixed as well as interpolation of LoD texture sampling. There are, however, a
few other issues to consider:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;drawing into shadow cubemap textures&lt;&#x2F;li&gt;
&lt;li&gt;OpenGL support&lt;&#x2F;li&gt;
&lt;li&gt;Shaderc&#x2F;SPIR-V&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;shadow-cubemaps&quot;&gt;Shadow Cubemaps&lt;&#x2F;h4&gt;
&lt;p&gt;We use cubemaps to render point light shadows. Previously, we could render to
all the faces using a single draw call via a geometry shader that duplicated
vertices and selected a separate face of the cube for each duplicate. However,
&lt;code&gt;wgpu&lt;&#x2F;code&gt; doesn&#x27;t provide support for geometry shaders so this isn&#x27;t possible. To
get around this we have to have a separate render pass for each face where we
render all the terrain into that face. This works but potentially has an impact
on performance.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;opengl-support&quot;&gt;OpenGL Support&lt;&#x2F;h4&gt;
&lt;p&gt;Currently, we target OpenGL 3.3 with the goal that people on old machines should
still be able to play Veloren. Unfortunately, OpenGL support from &lt;code&gt;wgpu&lt;&#x2F;code&gt; is very
limited and only exists on Linux&#x2F;MacOS due to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;servo&#x2F;surfman&#x2F;issues&#x2F;202&quot;&gt;complications with surface
creation&lt;&#x2F;a&gt; and I don&#x27;t know what the
minimum required OpenGL version would be and&#x2F;or how much overhead there is to
emulate the modern API of &lt;code&gt;wgpu&lt;&#x2F;code&gt; for older OpenGL versions. One thing that will
help us is that there is also support for &lt;code&gt;dx11&lt;&#x2F;code&gt; which should cover many of our
Windows users on older machines without dx12.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;789596890185990154&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;shaderc-usage&quot;&gt;Shaderc usage&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;wgpu&lt;&#x2F;code&gt; consumes shaders compiled into SPIR-V. To get the SPIR-V shaders from our
GLSL shaders we have to use &lt;code&gt;shaderc&lt;&#x2F;code&gt; which is a non-rust dependency that
introduces additional friction to getting compilation of Veloren set up. A
potential workaround for this that many projects use is to precompile the
shaders to spirv and track those in git along with the GLSL source files. This
will make shader hot-reloading more complicated as we can currently just change
the shaders and save them and the game will recompile them automatically. A
potential middle-ground would be to include a new feature in &lt;code&gt;voxygen&lt;&#x2F;code&gt; that
enables the use of &lt;code&gt;shaderc&lt;&#x2F;code&gt;&#x2F;hot-reloading which is off by default that graphics
developers can enable as needed. We could even have it enabled in the
distributed version of the game if there are no complications for compiling in
the CI with &lt;code&gt;shaderc&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;iced-transition&quot;&gt;Iced transition&lt;&#x2F;h3&gt;
&lt;p&gt;As I think I wrote in a previous post, we have fully transitioned the main menu
and character selection screen to using &lt;code&gt;iced&lt;&#x2F;code&gt;. All that remains is to covert
the HUD however this contains much more UI code than both the menus combined.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;&amp;gt; tokei -f voxygen&#x2F;src&#x2F;hud&#x2F;
&lt;&#x2F;span&gt;&lt;span&gt;----------------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;span&gt;----------------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;span&gt; Language                Files        Lines         Code     Comments       Blanks
&lt;&#x2F;span&gt;&lt;span&gt; Rust                       22        14609        12811          994          804
&lt;&#x2F;span&gt;&lt;span&gt;-----------------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;slots.rs               185          160            1           24
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;spell.rs               114           86            9           19
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;minimap.rs             465          387           39           39
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;social.rs              602          549           33           20
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;esc_menu.rs            182          162            6           14
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;overitem.rs            144          108           22           14
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;overhead.rs            603          519           53           31
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;group.rs               838          764           51           23
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;map.rs                 820          724           67           29
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;util.rs                183          154            3           26
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;chat.rs                568          482           45           41
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;popup.rs               243          212           12           19
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;item_imgs.rs           192          166           13           13
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;skillbar.rs           1020          905           94           21
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;bag.rs                 930          848           57           25
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;crafting.rs            514          465           30           19
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;buffs.rs               515          466           23           26
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;img_ids.rs             402          309           40           53
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;hotbar.rs              118          102            4           12
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;buttons.rs             408          388            8           12
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;settings_window.rs    2832         2486          167          179
&lt;&#x2F;span&gt;&lt;span&gt; voxygen&#x2F;src&#x2F;hud&#x2F;mod.rs                2731         2369          217          145
&lt;&#x2F;span&gt;&lt;span&gt;-----------------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;span&gt; Total                      22        14609        12811          994          804
&lt;&#x2F;span&gt;&lt;span&gt;-----------------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some of this code is reusable but most of it is &lt;code&gt;conrod&lt;&#x2F;code&gt; specific UI code. In
order to break this down into surmountable bytes, we will need to have a way to
incrementally transition the hud code. The first step is implementing a custom
&lt;code&gt;iced&lt;&#x2F;code&gt; widget that can manage a list of windows to allow easily laying out a HUD
like UI. This can then be drawn alongside the conrod hud. Then we can
reimplement each major portion of the hud as one of these windows (e.g. the map
screen, the chat, the skill bar, etc).&lt;&#x2F;p&gt;
&lt;p&gt;One other thing we will need to keep an eye on is the performance of text
widgets. Unlike &lt;code&gt;iced&lt;&#x2F;code&gt;, &lt;code&gt;conrod&lt;&#x2F;code&gt; requires an ID for every widget. It is nice to
not have manage IDs when writing &lt;code&gt;iced&lt;&#x2F;code&gt; UIs; however, in our &lt;code&gt;conrod&lt;&#x2F;code&gt; rendering
backend, IDs are used for caching text rendering information for efficient
lookup. &lt;code&gt;conrod&lt;&#x2F;code&gt; itself also keeps &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;PistonDevelopers&#x2F;conrod&#x2F;blob&#x2F;23629f26de1a217f3f35a5f71e0566a8054d4d38&#x2F;conrod_core&#x2F;src&#x2F;widget&#x2F;primitive&#x2F;text.rs#L74&quot;&gt;some state associated with each text
widget&lt;&#x2F;a&gt;
which allows it to identify when the text is changed or when previous
computations can just be reused.&lt;&#x2F;p&gt;
&lt;p&gt;There is a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hecrj&#x2F;iced&#x2F;issues&#x2F;553&quot;&gt;proposal&lt;&#x2F;a&gt; for &lt;code&gt;iced&lt;&#x2F;code&gt;
retain information about the widget tree between frames which could be helpful
for this issue. We could also create a custom widget that grants IDs for text
either managed by the user like in &lt;code&gt;conrod&lt;&#x2F;code&gt; or automatically derived (e.g. using
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;raphlinus.github.io&#x2F;rust&#x2F;druid&#x2F;2020&#x2F;09&#x2F;25&#x2F;principled-reactive-ui.html#stable-identity&quot;&gt;&lt;code&gt;#[track_caller&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;)
or perhaps we will find some other way to efficiently cache and retrieve this
state.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;fontdue&quot;&gt;Fontdue&lt;&#x2F;h4&gt;
&lt;p&gt;On the topic of text there is another crate that I have been considering
transitioning to at some point. &lt;code&gt;fontdue&lt;&#x2F;code&gt; is the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mooman219&#x2F;fontdue#performance&quot;&gt;fastest text renderer&lt;&#x2F;a&gt;. Currently, we use
&lt;code&gt;glyph_brush&lt;&#x2F;code&gt; which currently uses the &lt;code&gt;ab_glyph&lt;&#x2F;code&gt; rasterizer crate (a rewrite
from the developer of &lt;code&gt;rusttype&lt;&#x2F;code&gt; which &lt;code&gt;glyph_brush&lt;&#x2F;code&gt; used to use). While
&lt;code&gt;fontdue&lt;&#x2F;code&gt; is much faster than other rasterizers, &lt;code&gt;glyph_brush&lt;&#x2F;code&gt; provides a glyph
and layout cache which we would need to find or implement to be able to use
&lt;code&gt;fontdue&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;791358016418349066&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;skill-trees-by-sam&quot;&gt;Skill Trees by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;For the past month and a half, I have been working on skill trees, and they are
finally beginning to near completion. Skill trees will completely replace the
current leveling system where you get a few points of max health every level. In
my branch, I will be adding a general combat skill tree, as well as a skill tree
for each of the six weapon kinds. Each skill tree will have its own experience
bar and skill points (which can be considered somewhat equivalent to levels).&lt;&#x2F;p&gt;
&lt;p&gt;Skills will naturally be purchased with skill points, and the amount of
experience required to get a skill point will always be constant and will not
scale with the number of skill points earned. Currently, skill trees for each of
the six weapons are done, support for prerequisite skills is done, leveled
skills are done, and database persistence for skills is done. The general combat
skill tree, UI for skills, functionality for refunding skills, balance testing
the skill trees, and creating database migration templates still need to be done
before skill trees can be merged.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;791404112049995786&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;procedural-trees-by-ccgauche&quot;&gt;Procedural Trees by @CCGauche&lt;&#x2F;h2&gt;
&lt;p&gt;I wanted to add procedurally generated trees to Veloren since the current ones
have to be created manually. I’ve started iterating on tree designs. The main
problem while developing was Veloren&#x27;s compile times. It took about 2 minutes
for each change, plus 1 minute to get in-game. To solve this, I designed a
wrapper for Rust and Java Minecraft plugin and used a custom Minecraft server to
lower this time to around 3 seconds. This helped speed up prototyping a lot. The
first ones were T shaped as you can see:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;789916495505391636&amp;#x2F;2020-12-19_19.05.33.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I decided to work on a leaf growth algorithm and obtained a very symmetric
trees. This first algorithm was simulating realistic leaf growth with variables
like sun exposure, position, and precipitation:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;790328238474788944&amp;#x2F;2020-12-20_22.21.12.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Then @zesterer came to help and together we designed a new branch generation
algorithm! After lots of work, iterations, and optimizations we were able to
generate very unique, good looking, and fun to climb trees! The leaf algorithm
has been updated to match performance constraints. We removed all the original
variables and instead added a health parameter that is different for each branch
and based on the soil and sun exposure. I also revised the branch generation
algorithm to use vector projections that reduced block updates and managed to
give a 5000% improvement.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;791320681798959124&amp;#x2F;screenshot_1608735934388.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There is still a lot of optimizations to do so the game can generate trees at
chunk load. @zesterer and I are working on interpolation to reduce the number of
computations for leaves gen. You can’t see it on the graph but on the 5th
iteration, we are at 7ms for branches and 130ms for leaves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;794639920567156764&amp;#x2F;GUUAqba.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Special thanks:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;@zesterer | Help for branch algorithm and optimization ideas&lt;&#x2F;li&gt;
&lt;li&gt;@Sharp, @zesterer | Code reviewing&lt;&#x2F;li&gt;
&lt;li&gt;@Pfau | For the general tree design&lt;&#x2F;li&gt;
&lt;li&gt;@Pfau, @Gemu, @Treeco, @Slipped, @James, @Sarra_Kitty, @Scott, @XVar, and
@Snowram | For the tree design corrections&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;new-website-design-by-songtronix&quot;&gt;New Website Design by @Songtronix&lt;&#x2F;h2&gt;
&lt;p&gt;We can&#x27;t hide the fact that our website isn&#x27;t the prettiest one. It works
perfectly fine but also misses a lot of links, information, and content. So I&#x27;ve
been prototyping a new website you can check out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;songtronix.com&#x2F;veloren.net&quot;&gt;here&lt;&#x2F;a&gt; or just take a look here:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;793407297279229962&amp;#x2F;veloren.net.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;It is pretty bare-bones right now, but there will be things added like a feature
section (combat, vision, general gameplay aspects and what makes Veloren
special) and a lot more. Suggestions are welcome! Furthermore it&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;blog&#x2F;devblog-100&#x2F;%22https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;590304034175451166&#x2F;793407294523179008&#x2F;veloren.net-mobile.jpg%22&quot;&gt;fully
responsive&lt;&#x2F;a&gt;
too. And as a side note, the green download buttons are not Linux exclusive
don&#x27;t worry. They adjust based on your OS automatically.&lt;&#x2F;p&gt;
&lt;p&gt;The layout is pretty good although I&#x27;m still tinkering around to maybe match the
feeling of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;songtronix.com&quot;&gt;my website&lt;&#x2F;a&gt; more as I like the background
and look of it. Let me know what you think!&lt;&#x2F;p&gt;
&lt;p&gt;Now onto other work which I haven&#x27;t mentioned that much in the blogs:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;793407284717027358&amp;#x2F;about.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;793407289351733268&amp;#x2F;status.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;793407286982606878&amp;#x2F;files.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;A while ago I wrote a Discord bot that allows you to control the Veloren server
it manages (which I&#x27;m able to pay for with the help of my patrons - thank you!).
You can adjust&#x2F;view all settings including downloading the database,
switch&#x2F;update a branch of your choosing as long as it&#x27;s on the main repository
and view the logs live! As it seems it greatly improved the speed of development
or rather testing of new features so it serves its purpose well.&lt;&#x2F;p&gt;
&lt;p&gt;As it&#x27;s the 100th edition of the blog a lot of time has passed! When I started
on Veloren, I was a Rust beginner and I hadn&#x27;t worked on anything open-source
related at all. Now I&#x27;m the UX working group lead, I&#x27;ve revamped &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&quot;&gt;the
book&lt;&#x2F;a&gt;, redesign the website, created a test server
with a Discord bot, wrote
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;players&#x2F;airshipper.html&quot;&gt;Airshipper&lt;&#x2F;a&gt;, and I&#x27;ve learned
so much during that time and continue to do so!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-veloren-is-special-to-me-by-christof&quot;&gt;Why Veloren is Special (to me) by @Christof&lt;&#x2F;h2&gt;
&lt;p&gt;Watching this year’s news covering more and more Rust I decided to take a look
into this new language, to augment two decades of professional C++ experience.
So I started following the weekly Rust newsletter, which brought me to &quot;This
Month in Rust Game Dev&quot; where Veloren showed up with beautiful screenshots.
After reading some chapters of the Rust book, I then looked for an open-source
project to gain practical experience and remembered this promising project.&lt;&#x2F;p&gt;
&lt;p&gt;The sheer size of Veloren’s codebase was intimidating at first, so I was more
than happy to get a shorter tour around the concepts by reading the few hundred
lines of teloren source code. This let me quickly become familiar with the
tooling and enabled me to add some small patches to teloren. From there on I got
more confident to not break anything when modifying Veloren’s code. Of course, I
initially stayed more with databases which I already had gathered experience in
beforehand.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;791499986104877076&amp;#x2F;screenshot_1608776445012.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Up to now, I have seen a significant portion of the code and mostly feel at home
with it. To me the codebase is clean and most times easy to understand, with the
exception of the &lt;code&gt;conrod&lt;&#x2F;code&gt; UI. Dwelling into the code taught me a lot of Rust
idioms, of course most in-depth when modifying the code and from the valuable
feedback on merge requests. Also, I found that Rust indeed makes it easy to
change unknown code; once it compiles the most basic problems are solved. From
my experience, a C++ project with that many contributions by non-core developers
would suffer from significant quality issues.&lt;&#x2F;p&gt;
&lt;p&gt;Most of the complex code is yet less visible to players (procedural world
generation, erosion, economic simulations) but form a good basis for future in
game features. And I fully agree that Veloren is one of the most beautiful open
source games around.&lt;&#x2F;p&gt;
&lt;p&gt;The community has always felt welcoming to me and I still haven’t figured out
how the main developers manage to read and even answer the huge number of
messages in the Discord server. Just judging from the number of participants
online (at times more than 2000), I see that Veloren is a very active project. I
can tell that contributing artwork, e.g. voxel models, is a low bar and a very
satisfying experience. The project team and players are really persistent at
celebrating beginners&#x27; contributions and thus I have high hopes that the next
year in Veloren will be as bright as what I have seen from this one.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;getting-into-rtsim-by-ubruntu&quot;&gt;Getting into RTSim by @Ubruntu&lt;&#x2F;h2&gt;
&lt;p&gt;Congrats to the Veloren community on the big 💯&lt;&#x2F;p&gt;
&lt;p&gt;I started playing Veloren about 4 months ago, around the 0.7 launch. It already
feels like a completely different game today than it did when I started my first
character. With some big branches in active development, the game will feel
completely different again soon. I really like that Veloren is under constant
development and there’s so much active discussion around it.&lt;&#x2F;p&gt;
&lt;p&gt;I’m happy to see Veloren getting more popular, and also getting more and more
talented contributors. As someone who contributes code, I like that Rust was the
chosen language for the project. Rust is my favorite programming language and I
find Veloren to be a very approachable large Rust codebase. Rust has amazing
tooling and offers the compile-time checks so that new changes I make likely
won’t introduce catastrophic bugs that cause players to set the game aside and
wait until a patch is released.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;787363569460707398&amp;#x2F;screenshot_1607792415839.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Speaking of contributing code, I’ve recently been experimenting with the real
time simulation (RTSim) code. It started with the idea that the game has
travelers, and the game has birds that can fly, so why not turn some of the
travelers into birds and make them fly? I posted some screenshots of birds in
the air and got some positive feedback so I kept working at making this a
feature in the game. It also sparked some discussion around the RTSim
implementation in general and how we can move it forward as a core part of
Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;The 0.8 release was a lot of fun. It was exciting to see over 100 players
online, and to form a dungeon party with about 15 of them to raid one of the
highest difficulty dungeons. Afterwards there were some discussions around
issues that only MMORPGs usually deal with. If some people consider Veloren an
MMO now then that’s great news to me, because I personally love the dungeon
party experience of MMOs.&lt;&#x2F;p&gt;
&lt;p&gt;Happy 100th blog post Veloren. I’m excited to see what’s to come in 2021.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;finding-veloren-by-yusdacra&quot;&gt;Finding Veloren by @Yusdacra&lt;&#x2F;h2&gt;
&lt;p&gt;I found Veloren while I was searching for projects that use Rust about 1.5 years
ago. I wanted to see if the language was mature enough for me to pick it up, as
I wanted something that could potentially replace C# and C++ for my use cases. I
was pretty surprised to see such a video game project existed, and it was build
on Rust, which was the perfect candidate for me to see how the language was
practical. The community was very welcoming and I got up to speed to do my first
contributions, most of which were low hanging fruits fit for a beginner to the
codebase.&lt;&#x2F;p&gt;
&lt;p&gt;As time passed, I moved onto my own projects, but I&#x27;m still maintaining the Nix
expressions and Turkish translation. Compared to 1.5 years ago, I now feel
pretty confident with my Rust code, it was not too hard to get into, but also
provided enough challenges, while also being fun to write. And it&#x27;s all thanks
to Veloren and it&#x27;s community!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;791694071545724938&amp;#x2F;screenshot_1608791099639.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;new-developer-experience-by-entropy&quot;&gt;New Developer Experience by @Entropy&lt;&#x2F;h2&gt;
&lt;p&gt;Honestly, I started working on Veloren with literally no programming knowledge
whatsoever, so when someone said &quot;this is an easy fix but we’re all too busy!&quot; I
took the opportunity to just... go for it I guess. It’s been definitely a new
experience, but going from &quot;I looked at the code and it might as well be Latin&quot;
to &quot;I actually kinda understand what’s going on here&quot; has been real satisfying
and encouraging.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;looking-to-the-graphical-future-by-sharp&quot;&gt;Looking to the Graphical Future by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;Recently I&#x27;ve been working on the &lt;code&gt;wgpu&lt;&#x2F;code&gt; branch. My most recent change was
switching to reversed depth buffers which lets us theoretically avoid all
clipping while extending views far enough to see for hundreds of kilometers with
better quality than we have now.&lt;&#x2F;p&gt;
&lt;p&gt;The biggest system I&#x27;ve worked on is still initial worldgen (erosion). The
project is far from finished, but being able to use realistic simulation
techniques to produce rivers, mountains, hills, and valleys that actually feel
real and don&#x27;t just feel like noise has been incredibly rewarding. However,
I&#x27;ve also touched a lot of the graphics stack, in particular in helping add
level of detail (LoD) and shadows to the world, which really helps make its
scale look visually breathtaking.&lt;&#x2F;p&gt;
&lt;p&gt;I didn&#x27;t know much of anything about graphics when I started working on Veloren,
but doing more with it has given me a real appreciation for the math behind it
as well as how shaders work and how to write code that&#x27;s efficient for the GPU.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m really looking forward to Veloren continuing to become more immersive in
many different ways. For worldgen to improve further, especially in terms of
large scale structure (i.e. mountains no longer randomly popping up everywhere
using tectonic and glacier simulations, much larger worlds), performance
improvements (many are now available to us after switching to wgpu, including
potentially thousands of dynamic lights with deferred rendering), and more. I
will especially be happy when upcoming work simulating economics, NPC history,
and human structures start to become better integrated into the game, together
with graphical improvements to things like LoD that reveal more of the world.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;792134441253994536&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;combat-system-design-by-silentium&quot;&gt;Combat System Design by @Silentium&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren’s combat system is a combination of dedicated programmers and many hours
worth of game design meetings. It’s not finished, and it won’t be for some time,
but it’s a fantastic start. The Game Design group has seen many people come and
go, but the current team is very capable. The core mechanics for our combat
prototype is looking extremely promising, and I’m so excited to see the rest of
our vision come to life. I have so many people to thank for contributing to the
design and development work that has gone into the current Veloren combat
system.&lt;&#x2F;p&gt;
&lt;p&gt;Cheers, -Silentium&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;790605156294983700&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Watching the full moon. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;792104753881546803&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 99</title>
          <pubDate>Mon, 21 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-99/</link>
          <guid>https://veloren.net/blog/devblog-99/</guid>
          <description>&lt;p&gt;This week we see new models coming into the game. We hear from @Christof about
how economic simulation is being done for different items.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Slipped, @XVar, @lboklin, @BenoitduGarreau,
@imbris, @Frinsky, @Entropy, @xMAC94x, @jiminiycrick, @zesterer, @ccgauche,
@Pfau, and @HiggsTardigradeTau!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Pfau posted another edition of his Veloren art blog, you can check
it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;blog-no-10-45215779&quot;&gt;here&lt;&#x2F;a&gt;. @ccgauche has
been putting in a lot of work into procedurally generated trees. They are also
working on the new backend of the plugin API.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;792468471908007936&amp;#x2F;screenshot_1608407755451.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Procedural trees by @ccgauche&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@AlbinoAxolotl made serpent carnyx and brass boumbek models. @Scott worked on
some bigger updates to the wiki. @Sam got the axe skill tree finished up. @XVar
has the inventory&#x2F;loadout overhaul nearing completion. The UI changes can be
seen in @Pfau art blog. @Sarra_Kitty worked on several new glider variants and
learned how to use Git for the first time. @Slipped animated stuns and staggers
for the poise system that @James implemented. Next, @Slipped will be moving on
to making the system fun to use.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;790332635330773002&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Current state of the wiki&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;economic-simulation-by-christof&quot;&gt;Economic Simulation by @Christof&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-98#economic-simulation-update-by-christof&quot;&gt;Last week&lt;&#x2F;a&gt;, we
saw that prices are determined by supply and demand. But if you happen to be an
adventurer coming back from a dungeon where you risked your life to loot better
weapons and armor, you&#x27;ll also end up with some less potent spare items in your
inventory and want to exchange them for new food and potions.&lt;&#x2F;p&gt;
&lt;p&gt;Typically there are two solutions to this within a program:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Handcrafted, neatly balanced hardcoded prices (with some spatial or temporal
variation)&lt;&#x2F;li&gt;
&lt;li&gt;Economy simulations&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Depending on the situation, the first shows a tendency to either feel too random
or too fixed. On the other hand, getting a simulation that works well enough is
a considerable piece of work. A core question that emerges is; why would a
person living a happy life in a town that farms crops ever want to exchange your
spare armor and weapons for their food, as only food offers a direct value to
feed the family?&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;790332498848645130&amp;#x2F;snap2020-12-17-17-13-26.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Serpent Carnyx by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This question has left me puzzled for some time as I wanted to find a way to
determine an exchange rate between armor and food to create reasonable prices
for trade. In June, @zesterer created the second generation of economic
simulation (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-72&quot;&gt;see TWiV-72&lt;&#x2F;a&gt;) which calculated the
need for different professions among a town’s population and the exchange rates
between sites. But an exchange price for wheat and meat does not suit
adventurers that well as they will hardly be able to provide these goods in
exchange.&lt;&#x2F;p&gt;
&lt;p&gt;The idea I followed to get prices for martial equipment is to restrict access to
natural resources by a concept of a controlled area. The more area a town
controls the more natural resources it has access to. Subsequently, the more
secondary and tertiary goods it can produce, the more mouths can be fed. With
this in mind, we can get some exchange rate between armor and food, as one
controls the available amount of the other. The current production chart of this
model looks as follows:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;792427342546993172&amp;#x2F;economy.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Rectangles show professions, ellipses show goods. Natural resources (which are
collected from surrounding areas) are colored in green, produced goods in
orange. The numbers indicate the number of goods needed and produced by a single
person. There are two special nodes at the bottom: “Everyone” literally means
any inhabitant of a town and “controlled area” corresponds to patches on the map
allocated in radial order by the amount of guards employed. So each town will
have its own pattern of surrounding natural resources, depending on its location
in the world.&lt;&#x2F;p&gt;
&lt;p&gt;An economic simulation step (see &lt;code&gt;tick_site_economy&lt;&#x2F;code&gt;) looks like this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;demand&lt;&#x2F;code&gt; is the sum of the goods (including food) needed by all the workers
(and non-working people)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;supply&lt;&#x2F;code&gt; is the sum of produced goods (taking last step’s availability of
resources into account)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;marginal_surplus&lt;&#x2F;code&gt; is supply - demand (indicates whether stock is increasing
of decreasing)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;surplus&lt;&#x2F;code&gt; is stock + &lt;code&gt;marginal_surplus&lt;&#x2F;code&gt; (the amount of missing (negative) or
unneeded (positive) goods)&lt;&#x2F;li&gt;
&lt;li&gt;relative good &lt;code&gt;value&lt;&#x2F;code&gt; is a smoothed exponential function of the relative
amount of missing resources&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;labor&lt;&#x2F;code&gt; is redistributed according to the smoothed sum of the value of the
produced goods&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;labor_productivity&lt;&#x2F;code&gt; is the minimum of the relative availability of resources
from (last step’s) stock&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;materials_cost&lt;&#x2F;code&gt; is the sum of (last step’s) &lt;code&gt;labor_value&lt;&#x2F;code&gt; of the resources
consumed, per produced unit&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;labor_values&lt;&#x2F;code&gt; is the sum of materials cost and wage cost (fixed 1.0 per
worker), per unit&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As the last step, some of the stock decays and is then replenished by naturally
grown resources. The population is easily simulated by a death rate of 0.5% and,
only if there is enough food to feed the inhabitants, a natural birth rate of
5%.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;790334471307395094&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New glider by @Sarra_Kitty. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;789917438443388928&#x2F;screenshot_1608401302816.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 98</title>
          <pubDate>Mon, 14 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-98/</link>
          <guid>https://veloren.net/blog/devblog-98/</guid>
          <description>&lt;p&gt;This week, lots of work is being done on many systems. We hear from @Christof
about some economic simulation debugging. Work on a modding system has also
kicked off.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Pfau, @ccgauch, @zesterer, @Snowram,
@Yusdacra, @Sam, @xMAC94x, @nahua, @Entropy, @DaforLynx, @TheJackiMonster,
@VincentFoulon, @XVar, @lboklin, @Slipped, and @HiggsTardigradeTau!&lt;&#x2F;p&gt;
&lt;p&gt;The yearly &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2020&#x2F;12&#x2F;16&#x2F;rust-survey-2020.html&quot;&gt;Rust
survey&lt;&#x2F;a&gt; results are
out for 2020! @Snowram changed model offsets to be editable from RON files so
that they can changed in real-time in the game. @Scott created a range of gems
that will replace the shiny gem. @Moschopper got their first MR merged. It
changes the way delta time is calculated so characters don&#x27;t teleport after brief
lags.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;789921816020779038&amp;#x2F;opengl-rotating-triangle.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@lboklin converted the Nix files to use &quot;flakes&quot; (which is an experimental Nix
feature). This can allow people to install Veloren Voxygen by running &lt;code&gt;nix profile install gitlab:veloren&#x2F;veloren&lt;&#x2F;code&gt;, which uses the latest commit to the
master branch (more instructions in nix&#x2F;README.md in the Veloren repository).
Note that we have kept backwards compatibility, so even if you can&#x27;t enable the
feature (I recommend you to enable it and use it!) you will still be able to use
&quot;legacy&quot; Nix commands with the Nix files.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;788064538200768532&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Entropy has been preparing a crafting overhaul, starting by defining a whole
bunch of items. @Sam made skill trees persist in the database. He also completed
the sword skill tree. @Pfau has been working on many items, including skill
trees, bag UI, a prompt dialog, and group member position indicators. @zesterer
spent some time this week setting up water reflections for LoD water. This makes
mountains off in the distance look much more realistic!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;788125550526070855&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@zesterer and @ccgauche spent a few days working on the initial implementation
of a plugin system that would allow modding Veloren through both server-side and
client-side mods. Mods would be written in a variety of languages (Rust probably
being the only officially supported one for a long time) and then compiled to
Wasm, executing in a sandbox. This means that mods can be automatically sent
over the network when you connect to a server without risk. The plugin API is
still in its infancy and will no doubt go through many, many changes and
refactors until we&#x27;re ready to announce it as being ready for use, but before
then we hope to encourage discussion about modding and get people excited about
writing plugins for Veloren!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;789931718789693500&amp;#x2F;teleport.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A new movement ability that is being worked on by @Offspec&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;economic-simulation-update-by-christof&quot;&gt;Economic Simulation Update by @Christof&lt;&#x2F;h2&gt;
&lt;p&gt;This week, I debugged infinite prices (and material costs) in the economic
simulation. I found that it came down to hyperinflation caused by high costs on
natural resources. This caused increased food prices, which in turn caused
increased labor costs to secure natural resources, and it repeats. I masked
natural resources from the production of Guards (securing them) once an increase
in controlled area will no longer provide more of this good. Then I changed the
produced amount of natural resources (by Guards) to reflect the annual
replenishment instead of a minimal placeholder and the prices got stable.&lt;&#x2F;p&gt;
&lt;p&gt;This is quite understandable as the labor and material cost of guards gets
distributed among more resources. I see that the overall economic system needs
rebalancing of material input and production output, to get a better overview I
plan to add economic values to the tooltip in the map window. Thus I am
currently working on getting dynamic tooltips on settlements into the map window
- to quickly check the economic situation in different sites (with different
access to natural resources).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;788116902001508392&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying through the valley to the ocean. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;785708304160653343&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 97</title>
          <pubDate>Mon, 07 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-97/</link>
          <guid>https://veloren.net/blog/devblog-97/</guid>
          <description>&lt;p&gt;A new edition of This Month in Rust Gamedev is out. The worldgen WG had a
meeting. Lots of progress was made on systems all around the codebase.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @XVar, @Sam, @James, @imbris,
@ubruntu, @xMAC94x, @Yusdacra, @Stu, @iOddishGX, @AngelOnFira, and @Weldar!&lt;&#x2F;p&gt;
&lt;p&gt;This week, a new edition of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-016&#x2F;&quot;&gt;This Month in Rust
GameDev&lt;&#x2F;a&gt; was released!
@Songtronix worked on preparing for Airshipper 0.4.2. @lobster gave a hand by
improving font readability. There was a worldgen meeting that looked at where
worldgen should be worked on in the future. @imbris and @Capucho rebased the
wgpu branch and made some progress on it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;787059001996738581&amp;#x2F;screenshot_1607719136875.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam worked on adding support for skills to have levels, and began moving the
configuration of things to RON files. @Valtameri is working on the wiki and
adding many weapons and items to it. They are also adding pages explaining the
weapon types and their three different attacks as well.&lt;&#x2F;p&gt;
&lt;p&gt;@James added an aura system to allow entities to supply radial buffs to
surrounding entities. Currently, it is only used at campfires. You can now sit
next to one to slowly regenerate health! In the future auras will also be able
to affect terrain and environment parameters like temperature. @James also began
work on a poise system to govern stuns and take downs.&lt;&#x2F;p&gt;
&lt;p&gt;@Christof removed the old copy of the economic simulation (which still got
executed even though it was never used) and started implementing adaptive access
to natural resources (more military personnel secures a larger area around a
town). Thus you get an economic value to military and thus to weapons and armor,
resulting in market prices relative to food items.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;787111654700613712&amp;#x2F;screenshot_1607731330157.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;worldgen-meeting-by-zesterer&quot;&gt;Worldgen Meeting by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;On Saturday, we held a world generation meeting. I&#x27;m keenly aware that the world
generation code can be intimidating and unfriendly to new contributors. For this
reason, we made sure to focus the meeting around introducing the concepts that
currently exist in the worldgen code, what direction we&#x27;re likely to push them
in, and then thoughts about what aspects should be prioritised. No hard
decisions came out of the meeting (I plan to leave such things to a follow-up
meeting) but hopefully it acted as a route for contributors to develop an
interest in world generation and think about where we might go with it in the
future.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;786944703341658132&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;As the sun rises on an empty ocean, you think to yourself... where is my boat? See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;784918554825850880&#x2F;screenshot_1607208848545.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 96</title>
          <pubDate>Wed, 02 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-96/</link>
          <guid>https://veloren.net/blog/devblog-96/</guid>
          <description>&lt;p&gt;This week, Veloren 0.8 was released! We take a look at how the release went, and
some of the feedback. We also hear from &#x2F;u&#x2F;o11c about some of their experience
on large multiplayer projects.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Yusdacra, @ubruntu, @Nicknakin,
@XVar, @azymohliad, @AngelOnFira, @imbris, @Sam, @Snowram, @Treeco, @zesterer,
@timsueberkrueb, @Pfau, @DaforLynx, @James, and @Slipped!&lt;&#x2F;p&gt;
&lt;p&gt;0.8 was released last weekend! There is a new article on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gamingonlinux.com&#x2F;2020&#x2F;11&#x2F;inspired-by-the-likes-of-cube-world-open-source-rpg-veloren-has-the-biggest-update-yet&quot;&gt;GamingOnLinux&lt;&#x2F;a&gt; about
the Veloren 0.8 release. This was our biggest release ever, and it amazed the
entire core team that so many people came out. @ubruntu has been working on
small bug fixes and is currently working on adding chat commands for inviting,
kicking, promoting, and leaving a group. @Snowram worked on adding and animating
fish.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;782883839747424286&amp;#x2F;screenshot_1606724359059.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof asked around for help on how to die less quickly in combat against bow
wielding bandits, and then collected the answers into a beginner&#x27; hint section
of the book. They also started to work on a minimum viable solution for selling
inventory items that you gather over time and buying stuff you need instead.
@Christof also got teloren, Veloren&#x27;s terminal frontend, working on 0.8.0.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;783078866071715860&amp;#x2F;Teloren2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam worked on abilities being automatically greyed out when you have
insufficient energy. Previously, the UI had hardcoded values it checked, leading
to some abilities greying out at incorrect values since they were checking
outdated numbers. @Sam also fixed a bug with the leap potion of the bow&#x27;s
skill bar ability, and did a few miscellaneous combat tweaks. These primarily
affected energy regen of melee weapons, and the bow&#x27;s primary attack.&lt;&#x2F;p&gt;
&lt;p&gt;@Yusdacra improved the Nix dev environment so now it has a Cachix setup meaning
that Veloren dependencies can be stored globally and everyone can benefit since
they won&#x27;t need to compile the same stuff again. It now also sets up git-lfs
automatically, adds a direnv setup, and includes nixGL commands for non-NixOS
users. This means they can actually run Voxygen now, since OpenGL programs on
non-NixOS compiled via Nix is problematic. The Voxygen package now includes a
.desktop file too.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;veloren-0-8-launch&quot;&gt;Veloren 0.8 Launch&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren launched 0.8 this weekend! This launch includes some massive new systems,
as well as a multitude of other changes. Here is a small part of the changelog,
but make sure to check out the full changes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#080-2020-11-28&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- New level of detail feature, letting you see all the world&amp;#39;s terrain at any view distance.
&lt;&#x2F;span&gt;&lt;span&gt;- Point and directional lights now cast realistic shadows, using shadow mapping.
&lt;&#x2F;span&gt;&lt;span&gt;- Added leaf and chimney particles
&lt;&#x2F;span&gt;&lt;span&gt;- Some more combat sound effects
&lt;&#x2F;span&gt;&lt;span&gt;- Beehives and bees
&lt;&#x2F;span&gt;&lt;span&gt;- Fireflies
&lt;&#x2F;span&gt;&lt;span&gt;- Fullscreen modes now show two options (exclusive and borderless)
&lt;&#x2F;span&gt;&lt;span&gt;- Added banlist and `&#x2F;ban`, `&#x2F;unban`, and `&#x2F;kick` commands for admins
&lt;&#x2F;span&gt;&lt;span&gt;- A new dungeon boss (venture there and discover it yourself)
&lt;&#x2F;span&gt;&lt;span&gt;- Adaptive stride setup for more dynamic run behavior
&lt;&#x2F;span&gt;&lt;span&gt;- Several new animals
&lt;&#x2F;span&gt;&lt;span&gt;- Buff system
&lt;&#x2F;span&gt;&lt;span&gt;- Flight
&lt;&#x2F;span&gt;&lt;span&gt;- Persistent waypoints (start from the last camp fire you visited)
&lt;&#x2F;span&gt;&lt;span&gt;- Ambient SFX emitted from terrain blocks
&lt;&#x2F;span&gt;&lt;span&gt;- Initial implementation of real-time world simulation
&lt;&#x2F;span&gt;&lt;span&gt;- Travellers that explore the world
&lt;&#x2F;span&gt;&lt;span&gt;- Innumerable minor improvements to world generation
&lt;&#x2F;span&gt;&lt;span&gt;- Aurora Borealis (localised entirely within the kitchen)
&lt;&#x2F;span&gt;&lt;span&gt;- Block-based voxel lighting
&lt;&#x2F;span&gt;&lt;span&gt;- Animals now have customized attacks and AI
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;782322785015037992&amp;#x2F;screenshot_1606589044080.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Launch party!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This was not only the biggest update to Veloren yet, but also the biggest launch
party. At the peak, there were 112 players online. This gave us a lot of insight
into how scaling works. Here are some quick facts:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;5 minutes before the release party, we had to restart the server as we forgot
to increase the player cap past 40.&lt;&#x2F;li&gt;
&lt;li&gt;We used a 32 core dedicated server from Hetzner. Although we had 128GB of ram
on the server, we only used around 5GB.&lt;&#x2F;li&gt;
&lt;li&gt;The release party had the peak number of players 30 minutes after it started.&lt;&#x2F;li&gt;
&lt;li&gt;Normally, release parties go for around 2 hours before we get down to fewer
than 10 players. This time, we went down to 30 players after two hours, and
hovered there for around 24 hours.&lt;&#x2F;li&gt;
&lt;li&gt;We used around 100GB of bandwidth for the launch.&lt;&#x2F;li&gt;
&lt;li&gt;The server cost around 4 Euros, or $4.84 USD for the 7 hours it was up.&lt;&#x2F;li&gt;
&lt;li&gt;Players started reporting higher latency and some rubber-banding issues at the
peak player count, but it was still playable.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;783752594853068880&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;783757821186408528&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;783759918678802492&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;783752814093664286&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;783757647182561322&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We learned a lot from the release, and got a ton of important feedback. The most
important item is how balance works for new players entering the spawn town. It
was very difficult to spawn in and make it out of the initial area alive. There
were also a lot of comments about how we could work on other character balance
in the future.&lt;&#x2F;p&gt;
&lt;p&gt;From the stress test and release, we found many areas that need improvement on
the scalability side. Our main game thread struggled a lot, which implies that
we aren&#x27;t assigning tasks to other threads as much as we need to be. Further,
there are lots of improvements to be made within physics, AI, and other
compute-heavy tasks. We also need to work on how we are sending data over the
network to players. There are likely massive gains we can make, which would
allow bandwidth to be improved significantly.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-people-are-saying-about-the-launch&quot;&gt;What People Are Saying About the Launch&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;gamingonlinux&quot;&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gamingonlinux.com&#x2F;2020&#x2F;11&#x2F;inspired-by-the-likes-of-cube-world-open-source-rpg-veloren-has-the-biggest-update-yet&quot;&gt;GamingOnLinux&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Release party just now was chaos, in a good way :) I think there were around
100 players fighting a giant dragon&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;- Julius&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Installation was super-smooth though, totally unexpected. It&#x27;s just ~125MB, I
expected something measured in GB. But then, makes sense, voxels + procgen...&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;- riidom&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Going to snag this for my boy to check out. He was watching all 15 minutes and
really liked what he saw. Great to hear this in Rust!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;- techieg33k&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Looks amazing. Definitely the most impressive FOSS RPG project that I have
seen to date (no offense to Flare).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;- nate&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The timing of this release is funny for me because I just played the game with
my kids yesterday before I knew there was a big update. I was pleasantly
surprised to see a lot of things added to add interest to what was a more
empty game. We used the Airshipper launcher which updated the game and then we
played on a local server that was launched by browsing to the installation
folder and running the server-cli program.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;- 14&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;782322818737242132&amp;#x2F;screenshot_1606589037284.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;reddit&quot;&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;k2j2kh&#x2F;the_veloren_08_release_party_is_happening_this&#x2F;&quot;&gt;Reddit&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Veloren is shaping up beautifully, can&#x27;t wait to see what&#x27;s to come.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;- &#x2F;u&#x2F;SmurfTaters&lt;&#x2F;p&gt;
&lt;h2 id=&quot;idea-drop-by-u-o11c&quot;&gt;Idea Drop by &#x2F;u&#x2F;o11c&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Context: On a Veloren 0.8 release post to Reddit, &#x2F;u&#x2F;o11c gave some insight
from their own development experience. Although not all of it will be the path
that Veloren takes, the points are valuable nonetheless.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;LPT: don&#x27;t ban botters too harshly, you want to get them to work for you. Also,
be aware that people will use a bot client just because they want to avoid some
particular pain point with the official client. So, steal their patches. Finally
... no matter what you do, you will never block all bots. So instead focus on
making sure bots don&#x27;t ruin people&#x27;s fun.&lt;&#x2F;p&gt;
&lt;p&gt;Also a random dump of other things I&#x27;ve learned, mostly from doing everything
the wrong way (some items already filtered because I saw you did them right
already, but I admit I haven&#x27;t looked hard yet):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Never use TCP. ISPs will rudely inject RSTs into long-running streams, and you
can&#x27;t realistically ask people to install a firewall rule to drop them.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Likewise, always encrypt everything. QUIC made life easier but there are
numerous alternates. Multiple streams are probably overrated.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Always have a &quot;frontend&quot; server that proxies client connections from the
start; this allows transparently moving them to a different backend server
when they move between in-game regions (which is essential for scalability).
You cannot rely on clients to successfully connect to a second server
themselves. Not all players need to use the same frontend server either. Load
typically isn&#x27;t an issue, but this may be useful for working around crappy ISP
peering in some countries.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Think about ways players can organize:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A friend is a one-way, individual, relationship. There should be
user-labeled levels of friends (&quot;rivals&quot; might be a level).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Some of this should sensibly be viewed from a web interface, not just
in-game&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;A guild is a large long-term group of many players, possibly with ranks.
Sometimes it would be convenient if it&#x27;s possible to join multiple guilds,
but not too many.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;A party is a small short-term group of players intending to do combat
together; they may or may not be part of the same guild.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In practice, people often treated them as long-term. I suspect that it
would be smart to systematically discourage that (e.g. by automatically
breaking parties on logout ... but perhaps adding them to a &quot;recently
partied&quot; friend group so that people can re-party them easily), and
encourage creation of guilds.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Most dungeons can reasonably be set to take (or even create&#x2F;enforce) a
single party, but particularly large dungeons might not, since it&#x27;s hard
to keep track of too many people.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;People might cooperate in combat even without joining a party&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;People or parties might compete in combat (&quot;kill-stealing&quot;)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Make sure people who play support get XP&#x2F;loot appropriately&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Figure out (in-world) instancing so that guilds&#x2F;individuals can have private
space, multiple groups can run a dungeon at once if enabled, ...&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Figure out how accounts can have multiple characters, how that interacts with
friendship and server privileges, and what happens when they are deleted.
Please do it in a sane way, I still have nightmares of that code ... (hint:
&quot;character id&quot; should almost always be what is used, &quot;account id&quot; might not
even exist at all except as a database-internal detail)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It may even be feasible to share accounts between official servers and
third-party servers, but this may cause concerns about identity leaking if
not done carefully&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;782389238372368434&amp;#x2F;screenshot_1606588775076.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Consider eliminating username&#x2F;passwords entirely in favor of public and
private keys; invent a system of securely sharing an account between your
computer and your phone that is immune to user error. (computer to phone is
easy enough with a QR code, but you need two-way communication - if you think
you don&#x27;t, you don&#x27;t understand the problem yet. Perhaps use the server as
mediator? Should each device have its own private key that the server
aggregates into a single account?)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;If you allow in-app signup, someone will spam you and create millions of
accounts and waste both storage and namespaces. Use a web browser so it can do
it with captchas etc.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Always make sure each logical packet&#x27;s size is known directly (this will
generally not be the same as underlying UDP packets). This allows both
skipping of totally-unknown packets, and size increase of existing packets.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It may be useful to have a special packet that says &quot;wait for the next N
packets (or bytes?) together before handling any of them&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Have a &quot;display a message&quot; packet that works no matter what the state of the
client (on the login screen, in-game, ...). Possibly they should include a
text domain (I favor client-side translation - just send the MO files as part
of your updates (remember to include the fallback language-without-country
stuff if you download only needed languages); that way, the client can log the
not localized version; multiple languages in a single process is hard anyway).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This should be distinct from &quot;display message in chat&quot; (which may be
translated if it&#x27;s from the server, but set no text domain if it&#x27;s from a
player), &quot;display message in NPC dialog&quot; (also translated). Support for
formatting and pluralization must be included.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;You will have at least 3 text domains involved (client, server code, server
script), might as well make it unlimited (different scripts (dungeons?) or
even different parts of the server code might have different text domains) -
think about people running a fork.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Make &quot;connection to the server&quot; a separate class than &quot;info about the player&quot;,
even though they both need to point to the other (Rust will probably fight you
here too - neither owns the other (connection is owned by the event loop;
player is owned by the map), but the former limits the latter&#x27;s lifetime). The
latter should not even exist until auth&#x27;ed (no more &quot;spoof or eventual segv&quot;
if you don&#x27;t tape up all the holey ducts).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;782604311498588171&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Player shops are best done with special server support, not pure scripting or
client hacks based on the trade dialog. Trust me, it has been tried.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;As a rule, always limit things by configuration-file policy, not code (user
name length, packet size&#x2F;buffer&#x2F;throughput; in particular, not having a hard
inventory limit removes a lot of special cases in scripts)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Make a &quot;transaction&quot; script command to gain&#x2F;lose items at once and handle
failure cleanly (consider stacking and equipment)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Have a general-purpose &quot;object inventory&quot; class that gets reused sanely, with
a special UI for moving objects between them arbitrarily. Don&#x27;t specially
implement player inventory, player storage, chest inventory, monster
inventory, ...&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A few cases are special, but should still share a lot: shops (have prices
and maybe randomness too?), equipped items (know what slot they&#x27;re equipped
in - note, I&#x27;m increasingly leaning toward equipment-separate-from-inventory
as opposed to equipment-as-part-of-inventory; really only the &quot;transaction&quot;
script command should care), mob drops (might be random, maybe combining sub
inventories?) - maybe use &quot;struct of arrays&quot; rather than &quot;array of struct&quot;?
I wish languages gave support to that.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Make everything stackable if all properties match (padding bits are evil;
upgrade slots are tricky), even if you want it to display unstacked (Rust
probably helps you here)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Large arrays are slow! we&#x27;ve all played games like that. At the very least,
if you display by category you should consider storing it by category.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Whenever you have jagged &quot;array of arrays&quot;, be sure all the arrays share an
allocation to keep the cache happy (also applies to set&#x2F;map contents). E.g.
load item definitions in the order given, then make a map pointing to them
(Rust might fight you here, but with split arrays you probably don&#x27;t have
usable references anyway). Packet dispatch similar since IDs should be chunky.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Lots and lots of &quot;hard typedef&quot;s for all the IDs&#x2F;indices floating around where
pointers are inappropriate.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Consider what happens to a &quot;high-score list&quot; if a character is deleted (and
possibly recreated) (merge this into the other list&#x27;s entry about charid).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;XML is a wonderful thing if you keep it away from humans.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;782606371979788298&amp;#x2F;screenshot_1606658019462.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Cave exploring at night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;783735702793224212&#x2F;sq9u8h3bea261.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 95</title>
          <pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-95/</link>
          <guid>https://veloren.net/blog/devblog-95/</guid>
          <description>&lt;p&gt;This week, the code freeze for 0.8 is in progress. We see some progress gifs
from @Timo and @James.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Christof, @Snowram, @Treeco,
@imbris, @Pfau, @Sam, @Knarkzel, @ubruntu, @xMAC94x, @James, @Slipped, and
@XVar!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Knarkzel fixed an issue with campfires and other entities
duplicating. @Snowram worked on changing dungeon spawns and layouts depending on
their level. @Songtronix put a lot of work into Airshipper, releasing 0.4.1.
@Christof added cave entrance icons and and names to the map. @zesterer merged
the worldsim branch after long last. He also added voxel lighting so that
certain blocks can emit to the area surrounding them. You can now see in towns
at night!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;780573161720119336&amp;#x2F;CaveNames.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Cave entrence icons by @Christof&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam worked on some backend changes to how loadouts are built to make assigning
a weapon less hacky and to allow armor to be better specified. @Pfau, @Treeco,
and @zesterer added a lot
of UI map functions.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;780581217858224148&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;particle-improvements-by-timo&quot;&gt;Particle Improvements by @Timo&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;782397191775453194&amp;#x2F;video-2020-11-20_17.59.01.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;782397201916887070&amp;#x2F;video-2020-11-20_18.56.30.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;782397198137950238&amp;#x2F;video-2020-11-20_20.32.55.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;animal-attacks-and-ai-by-slipped-and-james&quot;&gt;Animal Attacks and AI by @Slipped and @James&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;782397159164346368&amp;#x2F;maneater.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;782397161052045342&amp;#x2F;lavadrake.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;782397050415087636&amp;#x2F;kelpie.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;780285618290688000&amp;#x2F;screenshot_1606098502736.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Just you and the clouds. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;782399369135390720&#x2F;lnq42r8ywp061.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 94</title>
          <pubDate>Mon, 16 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-94/</link>
          <guid>https://veloren.net/blog/devblog-94/</guid>
          <description>&lt;p&gt;This week we have a lot of content. Lots of work has been done in preparation
for the upcoming 0.8 launch. @zesterer goes over lots of the work he&#x27;s been
doing on many systems. @imbris talks about the transition work from conrod to iced.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @Knarkzel, @imbris, @xMAC94x,
@zesterer, @XVar, @Treeco, @JasonLee, @Pfau, Yusdacra, @CapsizeGlimmer, and
@Slipped!&lt;&#x2F;p&gt;
&lt;p&gt;Veloren will be speaking at MiniDebConf this weekend! It will be at 18:30 GMT+0
on Sunday, the 22nd of November. You can find out more about it
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mdco2.mini.debconf.org&#x2F;talks&#x2F;8-community-game-development-in-rust-a-biopsy&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;@Eden made a new song for the ocean biome. @Knarkzel fixed a bug where you could
spam special attacks on certain weapons while out of stamina. @Snowram added
some new animals and made overworld spawns saner with the help of @zesterer&#x27;s
new spawning system. Hopefully, this should be ready real soon. @Snowram also
made a slight correction to NPC stats so they don&#x27;t fire beams from their chest
or their crotch. @Gemu modeled the animals that @Snowram put in.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;779043046792626266&amp;#x2F;screenshot_1605764656810.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Christof developed a hotfix for broken persistence, which then got replaced by
a much better solution the next evening. @Christof had a lengthy discussion with
@zesterer about the complex economic simulation in Veloren. @Christof hopes to
make NPCs at least talk about local prices and stock amounts in the next few
weeks.&lt;&#x2F;p&gt;
&lt;p&gt;@Sam moved all weapon abilities from code to &lt;code&gt;ron&lt;&#x2F;code&gt; files, which allows for them
to be more modifiable as tweaking values won&#x27;t require a complete recompile.
@Sam also began work on skill trees. There was already a skeleton of a system
implemented by @XVar which allowed for multiple skill groups, and for skills to
be associated with each. To that, @Sam made it so that XP is properly split
between skill groups, and so that skill points are automatically earned when
reaching a threshold of XP.&lt;&#x2F;p&gt;
&lt;p&gt;@XVar continued to work on the modular inventory&#x2F;loadout feature and got
sidetracked into refactoring a lot of how &lt;code&gt;Loadout&lt;&#x2F;code&gt; is used externally around
the codebase. @James and @Slipped worked on a bunch of cool animal attacks and
AI for them.&lt;&#x2F;p&gt;
&lt;p&gt;@James also added a biome specific music system which can weight songs based on
their likelihood to play in a given biome. They made it possible to have cave
and dungeon specific songs and added a bunch of ambient SFX by emitting SFX from
blocks. They removed the &lt;code&gt;SfxEvent&lt;&#x2F;code&gt; bus in the ECS in favor of simply playing
the SFX from voxygen, where the code is already, and finally added a wind SFX
system.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;778969277184737290&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-8-release-schedule&quot;&gt;0.8 Release Schedule&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren will be releasing 0.8 next weekend, on the 28th. To prepare for this,
the project will go into code freeze on the 24th. Keep an eye out for the
stability testing; we need lots of people to find potential bugs in the version
we&#x27;ll release!&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;2020-11-24 18:00 Feature freeze - At this point no features will be merged
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-25 18:00 Public Stability Testing with many people
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-26 18:00 NEW - relaxed 0.7 throwback event
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-27 18:00 Fixes freeze - Nothing will be merged except gamebreaking fixes
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-28 09:00 Final Build
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-28 12:00 Prepare a Release Server
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-28 18:00 Release Party
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;veloren-screenshot-trailer-competition&quot;&gt;Veloren Screenshot &amp;amp; Trailer Competition&lt;&#x2F;h2&gt;
&lt;p&gt;In this upcoming event, we will be reaching out to the community to create a
trailer for the release of Veloren 0.8! The idea is simple, the winning video
will be used as the official trailer for the game. If recording or video editing
isn&#x27;t your strong suit, don&#x27;t worry! We will also be running a screenshot
competition with multiple categories alongside it. The winning trailer and
screenshots will be used to promote the game. More details on the event to come
in the following weeks, so stay tuned!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;778718247616905246&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;chest-of-goodies-by-zesterer&quot;&gt;Chest of Goodies by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve been working on the initial implementation of &lt;code&gt;rtsim&lt;&#x2F;code&gt;, a server-side
component that allows tens of thousands of NPCs to be simulated simultaneously
across the world without being within the player&#x27;s view distance. While the
initial implementation&#x27;s use is quite simple (just a few thousand travellers
walking between sites in the world) in the long term I&#x27;m planning to use this
for economic simulation, demographic change, simulates wars, battles, migration,
and more.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also been doing more work on the cloud shaders. Part of that included
implementing upscaling so players with less powerful computers can run the game,
albeit at a lower internal resolution. I&#x27;ve also been implementing HDR
rendering. It also allows players with slightly better hardware to render the
scale at a fractional higher resolution, allowing them to get some of the
advantages SSAA with a smaller performance hit. Additionally, I&#x27;ve reimplemented
the Level of Detail &#x27;fake voxel&#x27; effect in a way that much more closely fits
patterns visible on actual voxels and reduces the artifacts that previously
appeared. I&#x27;ve also added a secret feature for 0.8.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;779356424705671218&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve also been working on the game&#x27;s map with @Pfau. Together, we&#x27;ve got it to
the state where sites are now shown on the map as icons that can be clicked
rather than the original &#x27;brown spot on LoD&#x27;. In worldgen, I&#x27;ve made adjustments
to the game&#x27;s tree spawning algorithm. It now uses a Whittaker map to determine
appropriate tree biome placement, something that generally results in much more
interesting spawn patterns, along with adding a new birch forest kind.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also removed the old Snow Pine forest kind and replaced it with fully
procedural snow. This means that trees can be partially covered with snow at the
borders of a snowy area and also that any kind of tree can have snow cover (this
is often visible on oaks and birch trees that are close to the tree line). I&#x27;ve
also added procedural sand dunes to deserts to improve their look and am working
on adding soil undulation in forests where tree roots would bind together soil,
causing the ground to be less smooth.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;iced-transition-by-imbris&quot;&gt;Iced Transition by @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;I finally merged the first step of the iced transition. A core part of the MR is
a custom iced renderer built on top of voxygen&#x27;s rendering abstraction. This
gives us flexibility by allowing us to control the details of how the UI is
rendered. It also makes it easier to implement novel custom widgets that might
need special rendering code as well as allows us to control the types used to
specify fonts and styling.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;779170236435136512&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Furthermore, by going through voxygen&#x27;s rendering abstraction, we don&#x27;t have to
worry about whether the UI renderer is compatible with the rest of the rendering
stack. This allows transitions to the voxygen rendering backend (e.g. to wgpu)
without having to switch up which crates we are using for the UI. Much of the
code for the iced renderer is based on what we were using to render the conrod
UI primitives (except with iced we now get to define our own primitives).&lt;&#x2F;p&gt;
&lt;p&gt;This MR converted the main menu and the character selection screen UIs to using
iced. The HUD UI code continues to use conrod as it would be a fairly massive
undertaking to convert especially all at once. My current plan is to have an
incremental conversion of the HUD by setting up a system to route events to the
two UI systems based on which one is currently focused and&#x2F;or under the mouse
with one of them being drawn on top of the other.&lt;&#x2F;p&gt;
&lt;p&gt;In the process of switching the main menu and char selection to iced some key
fixes and improvements were made:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Passwords are no longer limited in length by the size of the input box&lt;&#x2F;li&gt;
&lt;li&gt;Tabbing between login fields was added&lt;&#x2F;li&gt;
&lt;li&gt;Language selection was added to the main menu&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;778658393619038248&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This week I also merged several fixes&#x2F;improvements:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where projectiles created with speeds &amp;gt; 80 m&#x2F;s would appear to
veer up from the aimed direction when aiming downwards. Code which limited the
negative z velocity after applying gravity would cause the direction of the
projectile&#x27;s velocity to change. I switched this to just make gravity not be
able to increase the negative z velocity past this limit while allowing
existing non-gravity related velocities to remain unclamped. Eventually, we
may add a global velocity limit which could replace this specific limit here,
we could also look into tweaking air friction to produce a suitable terminal
velocity (although care will need to be taken to ensure that this interacts
nicely with other stuff like jumping physics).&lt;&#x2F;li&gt;
&lt;li&gt;Made changing the UI scale in-game propagate properly when going back to the
main menu.&lt;&#x2F;li&gt;
&lt;li&gt;Fixed a panic related to a invalid aspect ratio when minimizing the window
before the game starts up by adding the same aspect ratio validity check used
by the Camera when changing the aspect ratio to the function which initially
creates the Camera.&lt;&#x2F;li&gt;
&lt;li&gt;Made voxygen save the currently selected character for each server so that the
character will still be selected when you return to the char selection menu
instead of having the first on no character selected. Also made voxygen
automatically select newly created characters.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;779683050782064660&amp;#x2F;unknown-60.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Something special in the sky. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;777300698701889566&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 93</title>
          <pubDate>Mon, 09 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-93/</link>
          <guid>https://veloren.net/blog/devblog-93/</guid>
          <description>&lt;p&gt;This week, we hear from @xMAC94x about analyzing performance issues in Veloren,
as well as how we have fixed it in preparation for the 0.8 release. We also
present the 0.8 release schedule, and the important times to join in on the
server.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Slipped, @zesterer, @xMAAC94x, @Sam,
@James, @cpetig, @imbris, @AlKabir, @TheBoredProgrammer64, @Snowram, @Pfau, and
@Ubruntu!&lt;&#x2F;p&gt;
&lt;p&gt;The monthly Rust Gamedev newsletter for October &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-015&#x2F;&quot;&gt;was
released&lt;&#x2F;a&gt;! @zesterer
worked on removing legacy code, speeding up terrain generation, and improving
tree spawning and deserts. @Ubruntu and @James worked on improving sneaking and
rolling so that you can get closer to enemies before being detected.&lt;&#x2F;p&gt;
&lt;p&gt;@Christof completed waypoint persistence. Now, the last waypoint is the player&#x27;s
starting point. @Sam did some work on the backend that caused some bugs, and
fixed some bugs. @AngelOnFira recorded the Veloren talk for MiniDebConf, which
is coming up on the 22nd.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;776423406752497714&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;0.8 is scheduled to release on the 28th of November. There will be pre-release
testing on the server at 18:00 GMT+0 on the 25th and 26th, and the full release
party will take place at 18:00 GMT+0 on the 28th! Here is the release schedule:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;2020-11-24 18:00:00 GMT+0 Feature freeze - At this point no features will be merged.
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-25 18:00:00 GMT+0 Public Stability Testing with many people
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-26 18:00:00 GMT+0 NEW - relaxed 0.7 throwback event
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-27 18:00:00 GMT+0 Fixes freeze - Nothing will be merged except gamebreaking fixes
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-28 09:00:00 GMT+0 Final Build
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-28 12:00:00 GMT+0 Prepare a Release Server
&lt;&#x2F;span&gt;&lt;span&gt;2020-11-28 18:00:00 GMT+0 Release Party
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;performance-analysis-with-xmac94x&quot;&gt;Performance Analysis with @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;I wrote a couple of articles this week. They reflect on how we&#x27;ve been doing
with server performance, especially during releases.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;analysis-tools&quot;&gt;Analysis Tools&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;prometheus.io&#x2F;&quot;&gt;Prometheus&lt;&#x2F;a&gt; is a monitoring tool that I&#x27;ve talked about
quite often. It runs in the background with every veloren-server (even when you
host it yourself). It theoretically allows for a Prometheus&#x2F;Grafana server to
attach to it, as long as you set up port forwarding.&lt;&#x2F;p&gt;
&lt;p&gt;You can gather real-time statistics about the CPU or hard drive usage of your
server. We also included Veloren info:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;number of players connected&lt;&#x2F;li&gt;
&lt;li&gt;number of chunks loaded&lt;&#x2F;li&gt;
&lt;li&gt;number of entities&lt;&#x2F;li&gt;
&lt;li&gt;incoming chunk requests&lt;&#x2F;li&gt;
&lt;li&gt;detailed network stats per player&lt;&#x2F;li&gt;
&lt;li&gt;server tick time&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The fact that it&#x27;s always running with almost no performance hit allows us to
perform analysis anytime, especially during events like the release party. Those
big events have unusual constellations (e.g. many players) that developers don&#x27;t
see when introducing a feature. Bigger events are the perfect occasion to see if
your code scales.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wolfpld&#x2F;tracy&quot;&gt;Tracy&lt;&#x2F;a&gt; is an awesome performance analyser
that got included in Veloren by @imbris and is even mentioned &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;contributors&#x2F;developers&#x2F;performance-analysis.html#tracy&quot;&gt;in our
book&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You can compile the Veloren server with Tracy support and you will get an
executable that you can attach the Tracy GUI to. It records server ticks and
their respective timing. It can tell us how many milliseconds we spend in which
function and even better you can define spans in the code and it will be even
more detailed. Tracy even has GPU and memory measurement features, although I
haven&#x27;t used them so far.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;776951979070849034&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;release-party-statistics&quot;&gt;Release Party Statistics&lt;&#x2F;h3&gt;
&lt;p&gt;Our high score of concurrent players on the server at a release party so far was
&lt;em&gt;53&lt;&#x2F;em&gt;. However, the server is still far away from its full potential. We released
the Prometheus stats from 0.7 release party &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-81&quot;&gt;in a previous blog
post&lt;&#x2F;a&gt;. As you can see, it includes the averages
of our server tick. Veloren uses a 30 tick server, so we do 30 ticks per second.
Since &lt;code&gt;1s&#x2F;30 = 33.3ms&lt;&#x2F;code&gt;, 33ms is our time budget per tick. The server can spend
it on multiple tasks such as handling messages, generating terrain, and
calculating physics. However, if the server did not finish within 33ms we are
running behind. We are becoming laggy. For the release party the average was
around &lt;code&gt;280ms&lt;&#x2F;code&gt;...&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;744294726316064880&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Prometheus metrics from 0.7 release party&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So we need to make improvements! These are the detailed tick times:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;message handling: 80ms&lt;&#x2F;li&gt;
&lt;li&gt;handle server events: 60ms&lt;&#x2F;li&gt;
&lt;li&gt;terrain: 42ms&lt;&#x2F;li&gt;
&lt;li&gt;state tick: 35ms&lt;&#x2F;li&gt;
&lt;li&gt;entity sync: 35ms&lt;&#x2F;li&gt;
&lt;li&gt;new connections: 10ms&lt;&#x2F;li&gt;
&lt;li&gt;terrain sync: 7ms&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Since the 0.7 release, we improved &lt;code&gt;message handling&lt;&#x2F;code&gt; by a large factor. Though
it still can be parallelized. We estimate that we&#x27;ve cut the time in half.
&lt;code&gt;Handle server events&lt;&#x2F;code&gt; probably wasn&#x27;t updated and is still quite a bottleneck.
As those events are handled in a single thread, we need to find a better way to
scale here.&lt;&#x2F;p&gt;
&lt;p&gt;There was a recent change by @zesterer which sped up &lt;code&gt;terrain generation&lt;&#x2F;code&gt; by
more than 100%. The &lt;code&gt;state tick&lt;&#x2F;code&gt; includes the physics simulation, which is quite
slow. It can probably reduce down to 10ms. New connections are no longer handled
at all as part of the active game loop, they are handled in a separate thread.
This allows longer TCP disconnects to not cause issues.&lt;&#x2F;p&gt;
&lt;p&gt;Next week I will write in-depth about what was wrong with physics and how to
make use of our new network backend. I will also use more images, promised :)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;777534957479919646&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;smoother-frames&quot;&gt;Smoother Frames&lt;&#x2F;h3&gt;
&lt;p&gt;Let&#x27;s leave the performance optimisations and talk about scheduling. Scheduling
is crucial for every game because you have to define exactly when to render a
frame or do physics calculation. If your pattern is irregular, the perceived
framerate is much lower and users notice lag.&lt;&#x2F;p&gt;
&lt;p&gt;Therefore every game has a &lt;code&gt;Clock&lt;&#x2F;code&gt;. The clock tries to keep the framerate
constant, e.g. at 60 FPS for voxygen or 30 FPS for the server. If a tick is a
bit slower the clock will sleep for a short time to smoothen out the curve.&lt;&#x2F;p&gt;
&lt;p&gt;Until now we used a clock that tried to compromise for slow ticks, it tried to
calculate the average speed and sleep so long that we reach our framerate. The
problem with that algorithm is when spikes occur. You can see below that after a
lag spike, there are heavy fluctuations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;777542614006235136&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Ignore the timing on the image, it refers to something else&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We see a gigantic lag spike at the beginning (2nd large red spike) which takes
over 200ms. To compensate the server tries to make 10 faster ticks. Now the tick
time is too fast and the server slows down. It makes 10 slower ticks. After 60
ticks we are back to normal. The whole wave took 2s and is noticeable by the
user.&lt;&#x2F;p&gt;
&lt;p&gt;So what can we improve? First of all, we need to get rid of the lag spike in
general. That would be ideal, but is not always possible. So we have to find a
better way of handling them. Imaging we just had a lag spike, what should the
server do next? Or a better question; imagine you just froze for 2 seconds, what
is the best thing to do now? Does it help when the server speeds up for 300 ms?
No, the server should just continue normally, and smoothly. We want to get rid
of the ripple through the tick times and get back to a &lt;em&gt;stable&lt;&#x2F;em&gt; tick ASAP.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;777544830535729172&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New clock&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new algorithm simply tries to keep the tick time constant. It can&#x27;t prevent
the lag, but it also can&#x27;t help. It just goes back to work.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, we now use a feature suggested by @imbris. Imagine our
calculations for a tick took 9ms, we want our full tick to take 33ms, so we need
to sleep for 24ms. Till now, we told the operating system: wake me up in at
least 24ms. This could mean we were woken up after the 24ms, resulting in small
imperfections of the tick time. Our new approach is, to only sleep for 23.8ms
and actively waiting the last 0.2ms. This takes almost no performance, as the
waiting time is so short (0.2ms), but it greatly stabilizes our tick time to
33ms.&lt;&#x2F;p&gt;
&lt;p&gt;I hope you not only notice these effects on the server, but also with your
frames being delivered (just a bit) more smoothly than before :)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;776146915904847922&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Campfire at night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;774771303210680340&#x2F;screenshot_1604776236598.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 92</title>
          <pubDate>Mon, 02 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-92/</link>
          <guid>https://veloren.net/blog/devblog-92/</guid>
          <description>&lt;p&gt;This week we hear from @ubruntu about being a first-time contributor. We also
have a community spotlight with @Kalculate.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Pfau, @Fausk, @Sam, @ubruntu, @imbris,
@Bbenton91, @zesterer, @YuriMomo, @Tadabito, @Adam, and @BottledByte!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;771851916950634496&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Veloren was just accepted to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mdco2.mini.debconf.org&#x2F;talks&#x2F;8-community-game-development-in-rust-a-biopsy&#x2F;&quot;&gt;speak at
MiniDebConf&lt;&#x2F;a&gt;
in late November! This week, @ubruntu implemented applying buffs on projectiles.
Now bow attacks cause the bleed debuff just like melee weapons. @zesterer made
some subtle improvements to clouds. @Fausk rewrote some item descriptions. @Sam
worked on some backend combat improvements.&lt;&#x2F;p&gt;
&lt;p&gt;@Slipped worked with @Snowram to continue the long-overdue process of purging a
huge chunk of the animation codebase. @TBG has been working on some small issues
with the help of @Sam. @Snowram added the ability for consumables to cause buffs
and effects.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;772872657078845498&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The diff for the animation codebase&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@XVar is starting some early work on inventory upgrades. This will ditch the
&quot;bag space as a stat&quot; concept and instead base it on equippable loadout items
providing slots. A backpack could give you a large number of inventory slots,
while a toolbelt would give a small number. But when you drop or store the bag,
all the things that were in its slots would stay inside it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;first-time-contributing-by-ubruntu&quot;&gt;First Time Contributing by @ubruntu&lt;&#x2F;h2&gt;
&lt;p&gt;Hello! My name is Bryant, and my nickname in Discord is @ubruntu. A few days ago
I made my first code contribution to Veloren, which added the bleed debuff to
bow attacks. I’m not going to pretend I jumped in the code by myself and opened
a merge request in a day. The hardest part was getting started.&lt;&#x2F;p&gt;
&lt;p&gt;Three months ago I joined the Discord channel after reading about the project on
Reddit. At first, I wasn’t thinking about contributing at all. I just wanted to
experience the game, and follow in Discord about what it will become. It’s
almost embarrassing, but my character on the official server is level 96. Like,
why am I enjoying a pre-alpha game so much?&lt;&#x2F;p&gt;
&lt;p&gt;So one day @Sam, the combat team lead, mentioned in #general how it would be an
easy task to improve bows by adding a bleed debuff to their attacks, and he
listed a couple of files where the change to add a bleed debuff would be. He
offered to help anyone that wanted to take on the work so I said I was
interested in trying it out. It took me a few tries to get my coding set up
right for the project. There were some steps to setting up my IDE and GitLab
fork but in hindsight, that stuff wasn’t too difficult.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;771822130807177256&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I can’t say enough how helpful @Sam was. I sent him an empty code block from a
match expression and said I had no idea what to do. He told me what was needed
and how to do it, and for the rest of the night he was immediately responsive
when I had questions. By noon the next day the code was reviewed, merged, and
deployed on the official server.&lt;&#x2F;p&gt;
&lt;p&gt;Now is a great time to contribute to the project. There are plenty of
opportunities for addressing issues, moving the game forward on the roadmap, and
rethinking how we do what’s already there. I think everything I’ve coded so far
requires only the first 8 chapters of the Rust book, so anyone looking to
contribute code shouldn’t feel like they have to become code masters first.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;771813151058034688&amp;#x2F;screenshot_1604082738945.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;community-spotlight-kalculate&quot;&gt;Community Spotlight: @Kalculate&lt;&#x2F;h2&gt;
&lt;p&gt;Hi, @Kalculate here! I&#x27;m a Software Engineer by trade, a league axe thrower, and
I&#x27;ve always wanted to build games. I honestly spend more time thinking about the
design and systems inside of games than I actually spend playing them. To me,
games have an incredible capacity to inspire and propel people to follow their
own progression in life and being a part of something like that is a deep
personal dream. I originally found out about Veloren on Reddit. So far, I&#x27;ve
worked on NPCs and combat implementations.&lt;&#x2F;p&gt;
&lt;p&gt;I bought Cube World when it became available years ago and saw so much potential
in it. I thought it was insane that 2 people were working on it and one guy
built the absolutely gorgeous map that generates in a way that had me
enraptured. Veloren is the promise of a new, endless adventure where we could
see engaging gameplay on top of the deceptively simple (and charming) voxel
graphics.&lt;&#x2F;p&gt;
&lt;p&gt;I want to be able to help the core maintainers build out the design of the game
by being a part of the design team. I&#x27;m also very excited to be working in Rust
and building a game with other passionate people, so I intend on contributing
code as often as I can, on top of answering questions and being active in the
Discord channel. On top of that, I also think I could help by documenting design
changes along to way to keep a good image of what kind of game Veloren could be
at the end of the tunnel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;772098378590715954&amp;#x2F;screenshot_1604152306090_merged_with_1604152317131.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Resting at night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;771848689752866826&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 91</title>
          <pubDate>Mon, 26 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-91/</link>
          <guid>https://veloren.net/blog/devblog-91/</guid>
          <description>&lt;p&gt;This week, we have lots of writeups. @Sam talks to us about the buff system.
@Adam is working on designing an improved alignment system to improve hostility
calculations between entities. @xMAC94x wrote about the CI issues we&#x27;ve been
having for the past few months, and what has been done to resolve them.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Sam, @Bbenton91, @imbris, @Adam,
@Capucho, @AngelOnFira, and @zesterer!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @James has been working on a way for SFX to be mapped to blocks. This
will be used for ambient sounds like crickets, birds, etc. This system is still
in the works. @LunarEclipse has been working on updating information about Veloren on
the IGDB, which Twitch uses to categorize its games.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;771405608158232626&amp;#x2F;screenshot_1603986673242.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Pfau created 2 new sets of armour, finished the buffs UI, and added the first
underwater sprites. This week he&#x27;ll create box art for Twitch, draw some ring
concepts, and add more underwater sprites. @Sam has been doing a lot of work on
the buff system. @Gemu finished up some sword models, and is working on a few
new animal models to improve biome diversity.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;buffs-by-sam&quot;&gt;Buffs by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;Hey, @Sam here. Recently I&#x27;ve been working on player buffs. Buffs are separated
into several components:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kind&lt;&#x2F;code&gt;: the main identifier of what a buff is. It is used to construct what
effects the buff has. Kinds could include bleeding, enflamed, crippled, and
stunned.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;data&lt;&#x2F;code&gt;: contains data common to all buffs. Currently consists of the buff
strength and the buff duration, but may expand later to include other fields.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;effects&lt;&#x2F;code&gt;: what effects the buff has. The currently implemented effects are a
health change over time (so this covers both damage and healing), and changing
max health.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;time remaining&lt;&#x2F;code&gt;: time remaining on the buff. It is different from the
duration stored in data though because the duration in data is static and
references the initial duration.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;categories&lt;&#x2F;code&gt;: a list of descriptors to the buff, such as physical, heat,
environmental, etc. They don’t currently have a use, but will be used later
when spells and other abilities are added that may have effects such as:
immune to all heat-related debuffs, or something similar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;source&lt;&#x2F;code&gt;: what applied the buff. If it’s a player, this can be used to award
XP if something dies due to damage over time effect.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;770805194685546506&amp;#x2F;screenshot_1603843756954.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Buffs will not stack, but instead the strongest buff of each kind will apply its
effects, and the other buffs of that kind remain &quot;inactive&quot;. While inactive,
they still tick down their duration, and will replace the stronger one if it
decays before the weaker one.&lt;&#x2F;p&gt;
&lt;p&gt;Note that the stacking of buffs applies to buff kinds and not buff effects, so
for example, you can be under multiple damage over time effects, such as
bleeding, enflamed, and poisoned, you just cannot be under the effects of
multiple bleeding debuffs.&lt;&#x2F;p&gt;
&lt;p&gt;The branch that added buffs was primarily focused on getting a buff system into
the game. Now that it has merged you won’t notice to much difference yet.
Currently, the only buff you will encounter for now is a bleeding debuff, which
has a 10% chance to be inflicted by melee attacks. However, more buffs are on
the way. Specifically, food is being reworked to provide a regenerative buff
instead of an instant health restoration.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;770035473979932672&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;alignment-and-hostility-by-adam&quot;&gt;Alignment and Hostility by @Adam&lt;&#x2F;h2&gt;
&lt;p&gt;This week I began looking into how we could refactor the alignment system to
support more complex scenarios. I haven&#x27;t any solution in place yet, but I&#x27;m
going to provide a bit of background on the problem itself.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;current-state&quot;&gt;Current State&lt;&#x2F;h3&gt;
&lt;p&gt;The alignment system as we have it is just a simple enum:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub enum &lt;&#x2F;span&gt;&lt;span&gt;Alignment {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Wild animals and gentle giants
&lt;&#x2F;span&gt;&lt;span&gt;    Wild,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Dungeon cultists and bandits
&lt;&#x2F;span&gt;&lt;span&gt;    Enemy,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Friendly folk in villages
&lt;&#x2F;span&gt;&lt;span&gt;    Npc,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Farm animals and pets of villagers
&lt;&#x2F;span&gt;&lt;span&gt;    Tame,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Pets you&amp;#39;ve tamed with a collar
&lt;&#x2F;span&gt;&lt;span&gt;    Owned(Uid),
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Passive objects like training dummies
&lt;&#x2F;span&gt;&lt;span&gt;    Passive,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;However, this is too restrictive, even for simple ownership. Imagine something
is &lt;code&gt;Owned&lt;&#x2F;code&gt;: despite having the &lt;code&gt;Uid&lt;&#x2F;code&gt; of the owner, we don&#x27;t have the information
about who that owner is hostile to. If we wanted to have owned entities to
divert to the owner&#x27;s hostility, then we would then need to pass possible
owners&#x27; hostility information for both entities when we wanted to check
hostility. And then what happens if those owners are also owned? You can start
to see that this current implementation needs to be more robust. From here I
will outline what the system needs to be able to do.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;769900139719819294&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;system-requirements&quot;&gt;System Requirements&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;System needs to support dynamic Settlement hostility. A world may have any
number of settlements, but an aligned entity may only be aligned to one
settlement at a time.&lt;&#x2F;li&gt;
&lt;li&gt;System needs to support racial hostility. An aligned entity always has a
race. Races have varying hostility toward other races.&lt;&#x2F;li&gt;
&lt;li&gt;System needs to support individual hostility. An aligned entity may have
overrides for specific other entities. For instance, if a neutral NPC is hit
by a player entity, that NPC should be able to become hostile to that player
entity.&lt;&#x2F;li&gt;
&lt;li&gt;System needs to support ownership. An aligned entity may be owned by another
entity. If an entity is owned, it may or may not want to divert to the
owner&#x27;s hostility.&lt;&#x2F;li&gt;
&lt;li&gt;A reputation system may or may not be implemented. If it is, this system need
to be able to incorporate that.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;analysis&quot;&gt;Analysis&lt;&#x2F;h3&gt;
&lt;p&gt;An additional requirement that I want to achieve is a single lookup between
entity &lt;code&gt;Uid&lt;&#x2F;code&gt;s, something like:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;hostility.is_hostile_to(Uid)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So we do not need to pass in the other information that an entity may or may not
have, such as &lt;code&gt;Ownership&lt;&#x2F;code&gt; or &lt;code&gt;Settlement&lt;&#x2F;code&gt; data whenever we want to check
hostility.&lt;&#x2F;p&gt;
&lt;p&gt;Looking forward, we will likely have many components (i.e. &lt;code&gt;Race&lt;&#x2F;code&gt;, &lt;code&gt;Settlement&lt;&#x2F;code&gt;,
&lt;code&gt;Ownership&lt;&#x2F;code&gt;) that will affect one entity&#x27;s hostility to another. Because we
don&#x27;t want to require hostility checks to ask for all these different
components, how do we manage all these memberships when these components are
updated?&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;768254230888316958&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So really, this problem boils down to two challenges:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;How do we effectively manage the hostility of an entity given the various
sources of that determine it, without requiring developers to remember to
update hostility any time they update those other sources?&lt;&#x2F;li&gt;
&lt;li&gt;How do we keep the hostility check call as simple as possible? Ideally
&lt;code&gt;entity_a_hostility.is_hostile_to(entity_b)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;In the next few weeks, hopefully we can find some resolution to these questions!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fixing-ci-by-xmac94x&quot;&gt;Fixing CI by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;Two months ago we broke our CI. This included documentation generation and code
coverage. We lost information on how our test coverage was doing and our
documentation was frozen. Fixing it required some fiddling with various public
crates and some communication with external maintainers. We even found a bug in
Rust itself while doing so.&lt;&#x2F;p&gt;
&lt;p&gt;Long story short, we needed to switch our Docker CI image from debian9 to Ubuntu
18.04 as the &lt;code&gt;git lfs&lt;&#x2F;code&gt; package was causing problems on Debian, and newer
versions require a higher &lt;code&gt;glibc&lt;&#x2F;code&gt; version. We had to upgrade the Rust toolchain
as this fixed a problem in macro handling which caused a big in the
documentation cargo doc.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;768075821121273926&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;To fix tarpaulin we had to fix multiple errors. First of all, &lt;code&gt;wayland-client&lt;&#x2F;code&gt;
0.23 was causing problems so we had to update this to 0.27. However, we depend
on some crates which have not done this update, so we did it ourselves. As
&lt;code&gt;glutin&lt;&#x2F;code&gt;, &lt;code&gt;winit&lt;&#x2F;code&gt;, and &lt;code&gt;conrod&lt;&#x2F;code&gt; are quite dependant on each other. &lt;code&gt;packed_simd&lt;&#x2F;code&gt;
also had a problem that was fixed. The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;issues&#x2F;77529#issuecomment-709289919&quot;&gt;RustC compilation
problem&lt;&#x2F;a&gt;
we found isn&#x27;t yet fixed, so I introduced a workaround in our affected &lt;code&gt;vek&lt;&#x2F;code&gt;
code.&lt;&#x2F;p&gt;
&lt;p&gt;All in all, many things broke - I hope we can simplify our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&quot;&gt;custom clone
repos&lt;&#x2F;a&gt; in the future: &lt;code&gt;winit&lt;&#x2F;code&gt;, &lt;code&gt;vek&lt;&#x2F;code&gt;, &lt;code&gt;gfx-rs&lt;&#x2F;code&gt;,
&lt;code&gt;rusttype&lt;&#x2F;code&gt;, and &lt;code&gt;conrod&lt;&#x2F;code&gt; can hopefully all be replaced with &lt;code&gt;iced&lt;&#x2F;code&gt;. Now our CI
is faster, down from 55 mins to 35 for a full run. I will look at it further
after I do some performance fixes for Veloren 🙂&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;769333594907738163&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The mountains to explore. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;769567991032971294&#x2F;screenshot_1603549437301.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 90</title>
          <pubDate>Mon, 19 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-90/</link>
          <guid>https://veloren.net/blog/devblog-90/</guid>
          <description>&lt;p&gt;This week, we see how some of the combat animations are improving. @zesterer
gives us an in-depth look into the new and improved cloud system.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Slipped, @xMAC94x, @jiminycrick, @Snowram,
@UMR1352, @Sam, @zesterer, and @imbris!&lt;&#x2F;p&gt;
&lt;p&gt;@James has continued work on new attacks for the bow and axe. There is a new M1
combo for the axe, but it hasn&#x27;t been merged just yet. @Sam and @imbris worked
on the buff system that was started by @BottledByte over a month ago. It&#x27;s
almost ready to merge! @Namp007 contributed Dutch translations, which are on
their way to being merged.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;768525209980239962&amp;#x2F;hammer.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New hammer attack&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@James is also working on biome specific soundtracks. They were recently made
possible along with separating ambient sounds from music. However, this probably
won&#x27;t be merged to master for a while until we have decided on a way to blend
between biomes and have it work more efficiently.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;768525223095566346&amp;#x2F;axe.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;cloud-improvements-by-zesterer&quot;&gt;Cloud Improvements by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;In current nightly builds of Veloren, we have clouds. I introduced clouds almost
a year ago, to mixed responses. Although most people enjoy the more &#x27;realistic&#x27;
clouds that the game has, a common complaint is that they don&#x27;t fit the voxel
style of the game so well.&lt;&#x2F;p&gt;
&lt;p&gt;Although I appreciate and understand this perspective, I personally believe that
the core reason for this nervousness about clouds lies in the uncanny way they
look. It&#x27;s clear that we aim for realism, but they often fall short. I&#x27;m also
determined to see clouds take a bigger role in Veloren&#x27;s atmospheric look and
feel.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;749157944712626236&amp;#x2F;screenshot_1598682646615.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There are a few reasons for this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Our current technique uses an optimised form of raymarching that only works
within a very narrow plane. As a result, clouds often appear as a thin layer
to players close to the ground.&lt;&#x2F;li&gt;
&lt;li&gt;The lighting and shader overhaul a few months ago &#x27;broke&#x27; their appearance
because much of the existing code fudged physical properties with magic
constants in a rather unprincipled way.&lt;&#x2F;li&gt;
&lt;li&gt;Clouds don&#x27;t have effect lighting. This means that they feel disconnected from
the world; a backdrop to fill space in the sky rather than an interactive part
of the world.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I felt it was time to resolve this situation. First and foremost it gave me an
excuse to put off more pressing work refactoring and improving the world
generation and simulation code, but it also provided an opportunity for me to
revisit the clouds (I&#x27;ve always felt that they don&#x27;t live up to their
potential).&lt;&#x2F;p&gt;
&lt;p&gt;I started by adapting the existing code. I figured that it might be possible to
enhance the shaders by playing with magic constants until something that looked
better appeared. I did have a little luck with this, as shown below.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;743827036333670440&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;These new clouds still didn&#x27;t solve the underlying problems, however. I put
things to the side for about 2 months.&lt;&#x2F;p&gt;
&lt;p&gt;Last week, I came back to them. I decided to almost entirely rewrite the ray
marching code. Where previously we calculated very narrow bounds within which
ray marching occurred, I removed those bounds and allowed rays to sample the
entire sky. However, it quickly became clear that this was too expensive to be
viable in the long term.&lt;&#x2F;p&gt;
&lt;p&gt;To alleviate the issue, I began experimenting with ways to more cheaply compute
the procedural noise required to create the cloud density field. I found that
with a few careful tricks I could tease shapes that felt realistic out of the
code with just a fraction of the cost of the previous cloud code. I also
discovered a very cheap way to compute low quality 3D noise several times faster
than conventional techniques for generating noise in shaders using a small tiled
2D monochromatic texture and some careful interpolation.&lt;&#x2F;p&gt;
&lt;p&gt;The next thing I did was to move the location that cloud shaders were applied.
On current nightly builds, cloud shading is computed in the fragment shader for
all models (sprites, figures, terrain, LoD, the skybox, etc.). Although we&#x27;ve
been careful to optimise our draw order as much as possible, overlapping
fragments still meant that we were calculating cloud shading for fragments that
simply didn&#x27;t get shown on the screen.&lt;&#x2F;p&gt;
&lt;p&gt;To alleviate this, I moved cloud shading to the post-processing shader by
extracting the depth buffer and using it as a texture input. I then used the
inverse view&#x2F;projection matrices, along with the depth from the depth buffer, to
reconstruct the world position for each fragment (thanks to @Sharp for helping
me fix a persistent bug along the way). I could then do cloud shading on only
fragments that appear on the screen.&lt;&#x2F;p&gt;
&lt;p&gt;With these techniques, combined with a few extra mathematical shortcuts, I was
able to make &#x27;floor-to-ceiling&#x27; cloud tracing viable. Here are the results:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;766011756551602216&amp;#x2F;screenshot_1602697104584.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I still wasn&#x27;t happy with it. Although having clouds appear at multiple z levels
was a serious improvement on what was there before, I still felt that they
didn&#x27;t look appropriately realistic. To alleviate this, I ended up tearing up
most of the raymarching code to rewrite it in a way that more closely mirrored
how light scattering occurred in real life.&lt;&#x2F;p&gt;
&lt;p&gt;Although it&#x27;s not a perfect representation of reality (a lot of calculations are
still rough approximations of physical parameters), the end results speak for
themselves. The new code...&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Uses the trapezium rule to approximate the integration of cloud density with
respect to distance over the course of projected rays&lt;&#x2F;li&gt;
&lt;li&gt;Includes a (poor) approximation of Rayleigh scattering, making distant objects
appear much further away than they looked before&lt;&#x2F;li&gt;
&lt;li&gt;Has multiple graphical settings: None, Minimal, Low, Medium, and High. Minimal
clouds should be fast enough for almost any hardware.&lt;&#x2F;li&gt;
&lt;li&gt;Tracks cloud shadows on terrain; skies can look overcast now!&lt;&#x2F;li&gt;
&lt;li&gt;Incorporates moving mist&lt;&#x2F;li&gt;
&lt;li&gt;Performs significantly better than the currently nightly&#x27;s cloud code on lower
settings&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Since clouds are now shaded in a (more) physically accurate way, they also
continue to look good under differing environmental conditions. No hackery was
required to make them look good during sunrise, sunset, or night: the results
just fall out as a natural consequence of calculating them in a more accurate
way!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;767849217594753064&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;767892350935760906&amp;#x2F;screenshot_1603150193274.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;767719247928492082&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;767519044525228046&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;767719416036196352&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new clouds are not yet on the latest nightly build. There are still a few
minor issues to address and it has not yet been fully reviewed. With any luck,
they should be landing in the game within the next week or so.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;768525221820629042&amp;#x2F;bow.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New bow attack. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;467861553178345502&#x2F;766402176134152202&#x2F;screenshot_1602794861401.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 89</title>
          <pubDate>Mon, 12 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-89/</link>
          <guid>https://veloren.net/blog/devblog-89/</guid>
          <description>&lt;p&gt;This week we hear from @Sam about a staff overhaul. @Pfau gives us an update on
how UI changes are coming, and some concepts for future consideration.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Pfau, @Imbris, and @XVar!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;staff-overhaul-by-sam&quot;&gt;Staff Overhaul by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;I have a staff overhaul that&#x27;ll be in-game shortly.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634708532318437395&amp;#x2F;766433512944435200&amp;#x2F;staff1.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new M1 will be an explosive projectile similar to the old third ability. It
will do a smaller amount of damage, and will restore energy on hitting an enemy.
It will also be affected by gravity.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634708532318437395&amp;#x2F;766433517949026374&amp;#x2F;staff2.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new M2 will be a flamethrower-like attack. It uses the same beam system as
the healing sceptre M1, however with a much wider cone, and a faster tick rate.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634708532318437395&amp;#x2F;766433518988951612&amp;#x2F;staff3.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new 3rd skill will be a radially directed fire shockwave. It&#x27;ll have a short
range though.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-skill-bar-and-buffs-visuals-pfau&quot;&gt;New Skill Bar and Buffs Visuals @Pfau&lt;&#x2F;h2&gt;
&lt;p&gt;Hello, Pfau here. Recently I&#x27;ve mostly worked on UI-Code and visuals, 3D models,
and 2D pixel art for Veloren. Normally you’d find my (free!) blog entries on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;pfau&quot;&gt;my
Patreon&lt;&#x2F;a&gt; but this week it’s time to get you guys
an update in the Veloren general blog. I’ve been working on finally implementing
the UI concepts I showed off some months ago.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;766303614040801330&amp;#x2F;1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept, not functional UI!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We are working on switching our UI library from conrod to Iced, however it is
being held up as Iced still lacks some features needed for Veloren. Once it is
ready, these looks will be implemented concurrently to the switch. Why am I
bringing this up then? While working out a concept to display the player’s buffs
and debuffs I realized that I needed a way to save vertical space to not block
the view on the game world.&lt;&#x2F;p&gt;
&lt;p&gt;Our current skill bar visuals are around a year old and still the same as in
version 0.3. The health and stamina bar (previously the mana bar) had options to
show different colours for &quot;focus&quot; and &quot;rage&quot;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;766303662958968872&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;While this bar has good overall visibility of objects it isn’t really made to
save vertical space or add any new parts. So how do keep our currently used
space, add buffs, and get a style fitting the other current UI elements? Like
this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;766303685885952040&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This new skill bar design merges our current style with the features shown in
the concept while only making our skill bar 2px vertically taller than the one
we currently use. It has:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Blobs&quot; for the experience-bar to see more easily at how much % experience you are
currently.&lt;&#x2F;li&gt;
&lt;li&gt;A display of the current level&lt;&#x2F;li&gt;
&lt;li&gt;Smaller health bars to make room for buffs&#x2F;debuffs above them&lt;&#x2F;li&gt;
&lt;li&gt;Left and right mouse button icons to indicate what the middle slots do&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We are currently hard at work integrating buffs into the UI. The groundwork and
functionality is done so you can expect the feature to be added to master in the
next weeks. Here are some images of the working buffs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;766066124767887390&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;766066686553358336&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is me testing the sorting logic and placing. These little squares are fully
animated. They show the remaining time in little clock-like slices. And start
flashing when their remaining duration is below 10s. The maximum amount shown is
22 per side (internally there can be more)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;730853425868308541&amp;#x2F;766050945423245352&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;...this happens without a limit and sorting being messed up!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;765022043099889684&amp;#x2F;screenshot_1602465631048.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Exploring a large cave system. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;764981035313528832&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 88</title>
          <pubDate>Mon, 05 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-88/</link>
          <guid>https://veloren.net/blog/devblog-88/</guid>
          <description>&lt;p&gt;This week, we get a deep dive into the modelling process by @Gemu. A new edition
of This Month in Rust Gamedev is out.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @XVar, @Sam, @pablosoler, @Pfau,
and @Sharp!&lt;&#x2F;p&gt;
&lt;p&gt;The September edition of &quot;This Month in Rust Gamedev&quot; is out! Check it out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-014&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. @XVar has been
working on inventory slot upgrades which will allow players to obtain and craft
items that increase their number of inventory slots. @Pfau has been helping out
with the UI for this.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;761034580689813504&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;761057301255553034&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;761040133737807912&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Work on the bag UI&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;gemu&quot;&gt;Gemu&lt;&#x2F;h2&gt;
&lt;p&gt;Hello! Gemu here from the assets &amp;amp; visual design team. I&#x27;m responsible for the
majority of Veloren’s creature models so far. Even though I have no experience
animating and coding, the modelling itself is more of my jam. The rest is done
by other wonderful contributors such as @Snowram and @Slipped. In this section,
I&#x27;ll explain a bit about this process.&lt;&#x2F;p&gt;
&lt;p&gt;One important part of voxel modeling is the style you’re setting. Veloren has a
semi-realistic style, while being slightly stylistic. Because of this, it’s
fairly straightforward modeling non-fictional animals. When modelling animals,
references are very important. Using references, modelling the animal is all
about making directly what you see, rather than making what you know by heart.&lt;&#x2F;p&gt;
&lt;p&gt;To make the model stand out, recognising the unique traits of the animal and
stressing those parts in the model will make the animal model stand out more,
especially within the stylized limitations of voxels.&lt;&#x2F;p&gt;
&lt;p&gt;For fictional animals, there is no &quot;correct&quot; reference. Which means there’s an
entire world of possibilities for these creatures! Aside from creating your
entirely made-up creature, there are of course famous fantastical creatures that
everyone likes to see. This includes dragons, trolls, golems, you name it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;762645533876813824&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Treant by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;What’s most fun about modeling these is that you have to find the balance
between recognisability and own interpretation. This can be done using the same
method as for making real animals, by pinpointing their more characteristic
property and experimenting on that aspect. A golem, being a man-made construct
of stone, could look like a typical man-made stone structure such as a castle,
for instance. From that point, it basically comes down to trial and error, until
the model comes out close to what I had envisioned.&lt;&#x2F;p&gt;
&lt;p&gt;For the model to be functional, it is of course important that it fits the body
rigging animations within the game, or the “skeletons” so to speak. There are
various skeletons, such as that of various quadrupeds of various sizes, or
bipedal creatures, for instance. While modeling, it’s important that the various
individual body parts will fit corresponding ‘bones’ within the skeleton, to
make the animation work.&lt;&#x2F;p&gt;
&lt;p&gt;Sticking to these separate bones, I model every body part individually, then
piece them together to see if they fit well together. It’s good to keep in mind
that for a quadruped to look good while running, there has to be enough space
between the front and back legs, for instance.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;762645670070059078&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Raptor by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As the creature will move and bend its body, body parts need proper attachment
points to one another. If the attachment points between body parts are solely
flat surfaces, jarring gaps might appear whenever the creature moves.&lt;&#x2F;p&gt;
&lt;p&gt;However, trial and error is prevalent within this branch as well, as we
continuously find newer and cooler ways to animate the animals. Seeing the
models come to life within the world of Veloren has been an amazing experience
so far.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;761338895081668658&#x2F;screenshot_1601587685925.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 87</title>
          <pubDate>Mon, 28 Sep 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-87/</link>
          <guid>https://veloren.net/blog/devblog-87/</guid>
          <description>&lt;p&gt;This week lots of work has been done on Veloren infrastructure. @Sharp discusses
some recent optimizations he made to chunk compression. @Sam talks about the
current state of the healing sceptre.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sharp, @imbris, @XVar, @nwildner, @xMAC94x,
@Slipped, @Snowram, and @zesterer!&lt;&#x2F;p&gt;
&lt;p&gt;A stress test party was held last weekend to test how the game server would work
with limited resources. We gathered a lot of data from a few different crashes.
@Sharp worked on some massive improvements to how we store chunks, resulting in
~7x in chunk memory. @lobster worked on adding SFX and particles for leveling
up, death, and voxel destruction. @Sam worked on a sceptre rework.&lt;&#x2F;p&gt;
&lt;p&gt;@xMACx and @AngelOnFira have been working on big changes to the Veloren server
infrastructure. This included getting the main game server into a datacenter, as
well as exploring technologies that will help us scale our services in the
future. They have also been re-examining CI to see where potential improvements
could be made.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;760171262802001920&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@xMAC94x and @AngelOnFira hard at work this week on cloud
  infrastructure for Veloren&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;sceptre-rework-by-sam&quot;&gt;Sceptre Rework by @Sam&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;761037230722252840&amp;#x2F;sceptre2.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The sceptre rework completely changes how both abilities on the sceptre
function. The new M1 skill is a beam, and while active, it hits all entities
within the beam two times per second. When an enemy is hit, they take damage,
and you gain energy and a bit of health. When an ally is hit, they are healed
but it costs energy.&lt;&#x2F;p&gt;
&lt;p&gt;The new M2 skill is an explosive projectile. Similar to the M1, it both damages
enemies and heals allies. The projectile functions similarly to the current 1st
ability on the staff, however it has gravity and slower projectile speed.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;761037233020469288&amp;#x2F;sceptre1.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;memory-optimizations-by-sharp&quot;&gt;Memory Optimizations by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;This week, I fixed some bugs in worldgen that saw a huge (~7x) reduction in
chunk memory. This should hopefully reduce crashes due to Out Of Memory (OOM)
when people have high view distances. The underlying cause for the order of
magnitude blowup was that we were not choosing the &quot;default&quot; block type
effectively for most chunks, resulting in lots of extra space used for
completely identical blocks even though the format supports compressing these a
lot.&lt;&#x2F;p&gt;
&lt;p&gt;So my change was to explicitly find the highest frequency compressible block in
each subchonk and use that as the default, after chunk generation is done. Which
resulted in the big win. There is still more to do there, but this is a good
start.&lt;&#x2F;p&gt;
&lt;p&gt;Realistically, I think we should have swap enabled. We need to be able to handle
situations where our estimates on average chunk size were off. Swap would allow
us to mitigate OOM crashes. This is because we can&#x27;t really predict an upper
bound to chunk memory usage it right now.&lt;&#x2F;p&gt;
&lt;p&gt;That doesn&#x27;t mean we&#x27;re going to stop improving memory usage. The fix I made was
low hanging fruit, but it&#x27;s hard to notice if you don&#x27;t start from a root cause
analysis like &quot;how much do memory do I think chunks should take?&quot;. Then you can
look at the metrics and see if there is a large discrepancy. Otherwise, it&#x27;s
hard to say how much space chunks &quot;should&quot; take up. Which is kinda the issue
here.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;759527283349913620&amp;#x2F;screenshot_1601155195033.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There are lots of potential areas where we could find large speedups. What I&#x27;m
trying to do right now is simplify and disentangle all the different systems we
have running. That way, we know how they&#x27;re scheduled and they aren&#x27;t
interfering with each other. Then we can get clean benchmarks and actually
understand how much time each system is consuming and how it scales.&lt;&#x2F;p&gt;
&lt;p&gt;Right now a lot of the CPU metrics are just hard to interpret because of how
much interference there is between different systems. We know physics shows up
high in the profiler, but when @imbris profiled it separately, its scheduling
pattern didn&#x27;t make any sense in isolation. So that means there&#x27;s stuff going on
we don&#x27;t understand.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;759526906298892318&amp;#x2F;screenshot_1601155686911.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Disentangling isn&#x27;t about improving measurement tactics, but rather rearranging
how our systems run so we have better control over the resources involved. This
includes spawning fewer threads, using precise worker pools, pinning to cores,
etc. Also, simplifying protocols that involve communication or synchronization
between systems. This can lead to nondeterminism that is difficult to diagnose.
Solutions for this include fewer channels, queues, and mutexes. We also need
more deterministic communication (function calls or fork&#x2F;join parallelism), and
much more tightly controlled I&#x2F;O.&lt;&#x2F;p&gt;
&lt;p&gt;For all of this, there isn&#x27;t one simple thing we have to do. However, here are
some paths that can be taken:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Making better use of the ECS&lt;&#x2F;li&gt;
&lt;li&gt;Explicitly controlling worker pools (rather than using globals)&lt;&#x2F;li&gt;
&lt;li&gt;Moving to libraries that don&#x27;t spawn pools behind our backs&lt;&#x2F;li&gt;
&lt;li&gt;Passing config parameters from server and client start so the application can
be aware of how many resources it&#x27;s supposed to take up&lt;&#x2F;li&gt;
&lt;li&gt;Splitting up all our tasks into logical sets&lt;&#x2F;li&gt;
&lt;li&gt;Replacing synchronous with asynchronous I&#x2F;O in networking contexts&lt;&#x2F;li&gt;
&lt;li&gt;Separating out systems that don&#x27;t need to block the game server from systems
that do&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Again, these options will help to disentangle systems and make it easier to
isolate specific issues. Memory is a lot easier to analyze for issues like this,
except for some stuff like fragmentation or overcommit. This is because it&#x27;s
often pretty tightly bound to whatever requests the memory, at least in Rust
with strict ownership. So it&#x27;s &quot;easy&quot; to reason about those resources even in a
very tangled up app, in Rust. But no such guarantees exist for CPU or I&#x2F;O
resources, or for contended access to memory. Well, we already knew chunks were
using a lot of RAM. What we didn&#x27;t know is how much they were supposed to be
using. Which isn&#x27;t something Valgrind or any other automated tool can
necessarily tell you.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;759157358214643732&amp;#x2F;screenshot_1601067456868.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Unfortunately, there are so many factors that can affect runtime performance,
that I don&#x27;t think metrics alone are going to help resolve CPU and I&#x2F;O issues.
At best they can vaguely point us to areas of the app (like physics) that look
slow, but they won&#x27;t tell us why.&lt;&#x2F;p&gt;
&lt;p&gt;There are indicators that could tell us that there was jitter in areas like page
faults, instruction throughput, and memory bandwidth. But since we already know
all that stuff is contended I don&#x27;t think it would reveal too much useful
information to us right now. It&#x27;s like science, you have to have an actual
hypothesis first if you want to gain real knowledge from metrics.&lt;&#x2F;p&gt;
&lt;p&gt;Right now we have no hypothesis for how long systems like physics should be
taking except for &quot;not that long&quot;. So it&#x27;s hard to say what part is surprising.
And then there are other times we measure that seem short... are they
realistically short? Are we even measuring them correctly? It&#x27;s really hard to
say, especially with so many threads being assigned to the same core. Hence,
disentangling is currently the best path forward.&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;759492004131504169&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 86</title>
          <pubDate>Mon, 21 Sep 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-86/</link>
          <guid>https://veloren.net/blog/devblog-86/</guid>
          <description>&lt;p&gt;This week we see a large number of visual changes. We hear from @Sam about their
work on beam collisions and attack animations. @Slipped gives us an update on
movement and models.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sam, @zesterer, @Slipped, @Henil, @Sharp,
@scottc, @imbris, @droogmic, @Pfau, @martin-t, @Snowram, @xvar, and @xMAC94x!&lt;&#x2F;p&gt;
&lt;p&gt;This week, the stone golem was merged! This will give dungeons a proper boss.
@Pfau has been working on many visual overhauls. @Sam has done a ton of work on
keyframes, animations, and beam collisions. @AngelOnFira and @xMAC94x have been
working on the preliminary steps for the evolution of Veloren&#x27;s server
infrastructure. This will first start with moving the game server to a Hetzner
data center, and then exploring ways to host our many services efficiently.&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer overhauled the format of &lt;code&gt;Block&lt;&#x2F;code&gt;. There aren&#x27;t that many visible
changes yet, but in time it&#x27;ll allow more interesting underwater entities. It
tracks fluids independently of terrain sprites so that terrain sprites can
appear underwater without air bubbles.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;756854768650944622&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Overhaul of the settings window, new language tab&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;psa-privilege-escalation-bug&quot;&gt;PSA: Privilege Escalation Bug&lt;&#x2F;h2&gt;
&lt;p&gt;This week the Veloren core developers identified a critical bug that permits
privilege escalation to admin by unprivileged players on Veloren servers. The
bug does not permit access to the underlying system the server is running on
(your computer is fine, but people may gain admin privileges in-game) and does
not exploit undefined behaviour. The bug affects multiplayer servers that have
authentication enabled.&lt;&#x2F;p&gt;
&lt;p&gt;The bug has been patched on the master branch of the game. This bug affects all
versions of Veloren from 0.5 up until commit 98c82408 (Tue Sep 22 16:27:04 2020
+0000). We advise anybody running their own Veloren server, public or otherwise,
to upgrade to the latest nightly version. Those using the Airshipper launcher
will automatically receive an update that fixes the bug.&lt;&#x2F;p&gt;
&lt;p&gt;If you run a Veloren server and would like more information on how to mitigate
this bug, please message us.&lt;&#x2F;p&gt;
&lt;p&gt;We do not currently have knowledge of this bug being used in the wild. If you
have information that suggests otherwise, please message us.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;animation-changes-by-slipped&quot;&gt;Animation Changes by @Slipped&lt;&#x2F;h2&gt;
&lt;p&gt;This week, we merged some animation changes largely thanks to @Snowram putting
in a ton of work to clean my mess. The gist is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The &quot;critter&quot; body is now deleted (it proved pointless).&lt;&#x2F;li&gt;
&lt;li&gt;All those critters were given fresh new models and moved over to
&lt;code&gt;quadruped_small&lt;&#x2F;code&gt; which is much more fleshed out (thanks to @Gemu).&lt;&#x2F;li&gt;
&lt;li&gt;We also built in a pacing system for animals, only implemented on
&lt;code&gt;quadruped_medium&lt;&#x2F;code&gt; for now. Now, instead of just jumping between two different
run gaits at different speeds, they actually move through a full, proper
sequence, with no hard transitions, a bit like the picture below shows.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;757494924433162311&amp;#x2F;animal-gait-animation-stephen-cunnane-thumbnail.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Each leg&#x2F;foot complex runs at an independent, controlled phase depending on the
speed of the run. Basically, they start in a walk by moving lefts and then
rights together, then go into a sort of cross gait, then they go full gallop
with fronts then backs. All while also upping the amplitude of the movement
itself with increased speed. This is so slow movement is gentle while fast
movement is more intense.&lt;&#x2F;p&gt;
&lt;p&gt;The finer details are not super apparent because it&#x27;s pretty subtle. But the
general, visible result is it looks way more natural at varying speed, and also
solves an old issue where the animal sorta studders in the transition between
gait 1&#x2F;2. So a good baseline is merged, and just needs a little ironing out in
the coming weeks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;757495110308069406&amp;#x2F;screenshot_1599091866706.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;attack-updates-by-sam&quot;&gt;Attack Updates by @Sam&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Thanks to @Sam we have keyframes now. Attack animations are now broken into
buildup, swing, recovery stages. We can customize the animation duration of
each, and because they&#x27;re normalized we can simply change those durations and
the animations will adjust themselves to fill whatever time we give them.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This also allows us to do things like change the attack speed of a different
type of sword with no additional work. It will perfectly time swing sounds and
swing movement in line with the actual damage portion of the attack, so that all
feels correct without needing to fiddle with alignment to specific animation
points (and then having it break if the attack parameters change). So keyframes
are great. Keep reading to hear what else @Sam has been working on!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;- @Slipped&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;o_sBhxT1_e0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;hr&gt;
&lt;p&gt;The sword overhaul reworked how the original two abilities of the sword
functioned, and also introduced a third skill to the sword.&lt;&#x2F;p&gt;
&lt;p&gt;The first skill previously was known as triple strike, and used to be on both
the axe and the sword. It worked by progressing through three strikes, each
increasing in damage. However, there was a lot that was hardcoded for this
character state, and the extent of being able to modify it on weapons was
adjusting the base damage, and determining whether you needed to hold down M1 or
time your clicks.&lt;&#x2F;p&gt;
&lt;p&gt;Now as combo melee, it has become significantly more flexible. The most notable
difference is that it supports more (or less) than three strikes. In addition to
this, the damage of each strike is no longer determined by a hardcoded
multiplier on the base damage, but can instead be individually modified.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;756855081294495795&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New loading screen background images and art&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In addition to this, other parameters such as attack duration, knockback, range,
and attack angle can now be modified on a per strike basis. Further, combo melee
allows for damage, attack speed, and energy regen to scale as you build combo
while you remain in the combo melee state.&lt;&#x2F;p&gt;
&lt;p&gt;The second skill is still a dash. Though if any of you only recently started
playing you may not have known it was supposed to be a dash. The dash broke some
time ago with an update to how physics is handled since it initially stopped
when it thought that it was touching an entity.&lt;&#x2F;p&gt;
&lt;p&gt;Now, aside from fixing the issue the previously dash had, I also changed how
dash functioned. Dash now continuously drains energy based off of how long you
are in the state, you can hold down M2 to dash as long as you have energy, and
the damage and knockback scale to a maximum value in the first portion of the
charge.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;756856025377800303&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Button to randomize appearance and name by @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The third skill the sword has actually uses the same state that the axe M2 does,
spin melee. However, it is modified so that it has a fixed number of spins, and
can’t just be held down. In addition to this, forced forward movement was added
to this spin (which the first and second skills also make use of). However,
despite the slight changes made to spin melee to accommodate sword, you’ll still
have the classic axe spin physics of ignoring gravity.&lt;&#x2F;p&gt;
&lt;p&gt;In addition to reworking or adding the skills to the sword, an additional change
was made with all of the above abilities. Specifically, when you’re wielding a
sword you can immediately cancel any of the above attacks with any other attack
or a roll. This was done to bring combat using the sword closer to its intended
theme of being relatively fluid in combat.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;756855204682530857&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;FPS counter in the graphics settings&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;beam-collisions-by-sam&quot;&gt;Beam Collisions by @Sam&lt;&#x2F;h2&gt;
&lt;p&gt;The upcoming sceptre rework introduces a new system for dealing damage; the beam
system. This system works by making a beam segment with a particular origin and
orientation, and then projects a spherical wedge from the origin in the
direction of the orientation. However, to do this I had to create collision code
just for it, which was particularly tricky since every other system of collision
detection in Veloren is either 2D, or one of the objects is a point.&lt;&#x2F;p&gt;
&lt;p&gt;Since entities are currently represented by a cylinder, I broke the code for
spherical wedge-cylinder collision detection into 3 parts:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Within the same z-range as the cylinder&lt;&#x2F;li&gt;
&lt;li&gt;Directly above or below the cylinder&lt;&#x2F;li&gt;
&lt;li&gt;Everything else&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The first case, handling the same z-range as the cylinder, was the easiest to
handle. I simply converted it to a two-dimensional case, and then checked that
the cylinder (projected as a circle in 2D) was within the range of the beam
segment, and then I did a check that any portion of the circle was within the
max angle of the beam segment.&lt;&#x2F;p&gt;
&lt;p&gt;I then also needed to make a check outside the x-y plane so that you couldn’t
aim above or below an entity and still hit it, and I just did a simple check in
the r-z plane to see that any portion of the cylinder was within the angle of
the beam’s orientation.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;758359251596083210&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Case 1&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For the second case, handling collision above or below the cylinder, things
became somewhat more complicated. I didn’t check exactly if the sphere center
was directly above&#x2F;below the cylinder, but rather if the line between the center
of the sphere and cylinder passed through either endcap of the cylinder. From
there the check to see if the cylinder was in range was simple.&lt;&#x2F;p&gt;
&lt;p&gt;Then, to check if the cylinder is within the max angle, I find both the angle
between the lines from the sphere center to the point on the connecting line
that passes through the endcap and the opposite edge of the sphere, and between
the lines from the sphere center to the point on the connecting line that passes
through the endcap, and the bottom edge of the cylinder. I then use whichever is
largest, add it to the max beam angle, and then compare that new angle to the
angle between the connecting line and the beam orientation. Although this does
overestimate the angle of the beam to some degree, I considered it good enough.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;758359327349932082&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Case 2&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For the third case, handling collision from anywhere else, things became even
more complicated. The range check was done by using a point on the edge of an
endcap on the cylinder closest to the beam origin, which was still relatively
simple.&lt;&#x2F;p&gt;
&lt;p&gt;However, for the angle check, I would not only need to do the angle check I did
for the second case, but also check for the angle between each of the two side
positions on the endcap of the cylinder and the connecting line. This is because
it then has the potential to be larger than the angle check I did in case 2.
However, since it’ll be symmetrical I can just use half of this angle between
the two side positions. I then use whichever of these three angles is largest,
add it to the max angle of the beam, and compare it to the angle between the
line between the sphere and the close edge of the cylinder endcap and the beam
orientation.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;758359591725301830&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Case 3&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In all of these cases, I only use a single position on the cylinder for the
range check to avoid the same beam segment hitting the same entity multiple
times. However, the angle check takes into account the whole cylinder. And with
these three cases, we now have beam collisions!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;756885706428645406&amp;#x2F;unknown-2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New boss was merged! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;756619939070083192&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 85</title>
          <pubDate>Mon, 14 Sep 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-85/</link>
          <guid>https://veloren.net/blog/devblog-85/</guid>
          <description>&lt;p&gt;This week, we have a new art blog by @Pfau. @xMAC94x goes into detail on how we
measure networking statistics.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94, @Sharp, @tylerlowrey, @Imbris,
@Slipped, @TheThirdSpartan, and @mttmartin42!&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau is back at the Veloren art blogs! You can check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;art-blog-no-7-41635011&quot;&gt;No. 7
here&lt;&#x2F;a&gt;. @Capucho is still
trudging through the magic that in WGPU. @Awkor has been doing work on an
inventory autosort proof of concept. @James is Working on new hotbar skill for
the axe and a new m2 for the hammer (moving current m2 to the hotbar). @Sam is
working on a sword overhaul.&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix wrote a discord bot (@Veloren) to control his testing server. It
includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Switching branches easily&lt;&#x2F;li&gt;
&lt;li&gt;Querying the status of the server (updating, compiling) at any time&lt;&#x2F;li&gt;
&lt;li&gt;Downloading the database&lt;&#x2F;li&gt;
&lt;li&gt;Viewing server settings&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;755116616202715221&amp;#x2F;snap2020-09-14-13-22-27.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Retouch of a repeating crossbow by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;improved-server-metrics-to-improve-server-performance-by-xmac94x&quot;&gt;Improved Server Metrics To Improve Server Performance by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;The first step of optimizing Veloren&#x27;s server code is to know what runs the
slowest. If we were to optimize less impactful areas, they wouldn&#x27;t impact the
end-user as much. We are using Prometheus metrics to gather data in real-time
from our main server.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;756066293911912516&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;With some recent additions, we are now able to get the following metrics:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chunks requested from the server&lt;&#x2F;strong&gt;: every time a client asks for a chunk we
will see how the server reacts. We can see if it need to compute the chunk or
if it can just send a chunk which is already loaded because another player is
already there.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Chunk generation&lt;&#x2F;strong&gt;: when a chunk needs to be generated it is queued. This
metrics will help us to see if this queue is getting bigger over time or if it
remains at a healthy size.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Active players&lt;&#x2F;strong&gt;: players online is now split into players connected and
disconnected. This makes it easy to detect single events and even lets us
detect when a client joins in the same time other leaves. The online players
will be calculated with the difference. For disconnect, we now also track the
event (i.e. Gracefully Close, Timeout, Network error). Though currently, under
some conditions a network error is thrown for what is actually a graceful
close.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;State timings&lt;&#x2F;strong&gt;: Even deeper look at our engine&#x27;s &lt;code&gt;State&lt;&#x2F;code&gt; timings. Before we
only had a total time for our entire state. Now we can get the state timings
based on each subsystem. It shows that physics likely needs the next
optimisation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;theory-of-continuous-prometheus-metrics&quot;&gt;Theory Of Continuous Prometheus Metrics&lt;&#x2F;h3&gt;
&lt;p&gt;Metrics are generated every tick, but are actually only polled by the Prometheus
server every 2 seconds. This means we only get a metric for every 60th tick.
There are now multiple ways to handle this, especially in relation to timing
data. Until now, we have always exported the last tick&#x27;s timing. This meant we
got 100% accurate timings on 1 out of 60 ticks, and no timing information on the
remaining 59 ticks. We just had to assume that all the other 59 ticks are
probably the same as this one tick. But we have no way of knowing if the tick we
received was part of the 95th percentile, meaning much faster or slower than the
rest. This information is important, as super slow ticks are the ones that cause
lag.&lt;&#x2F;p&gt;
&lt;p&gt;Another way to tackle this problem is by summing up the timings. We can still
poll the data every 2 seconds (60 ticks). So we get the total time spend for our
all of these ticks, but aggregated together. However, just take the average and
assume each tick was just 1&#x2F;60 of that value. Or if there is a slow tick and 59
fast ticks, there is no way of knowing.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;755118258906202213&amp;#x2F;snap2020-07-02-13-55-55.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A Steppesman&amp;#x27;s recurve bow by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For this case, Prometheus has histograms. They provide buckets for different
time ranges, lets say &amp;lt;1ms, 1-5ms, 5-10ms, &amp;gt;10ms. With Histograms, each tick
will increase a number in its corresponding bucket. So if we have a super fast
tick, it will increase the number in the &amp;lt;1ms bucket. if we have a super slow
tick we increase the number in &amp;gt;10ms. We will be using a combination of BOTH.
summing up all ticks AND histograms in the future to detect the average time we
spend in a certain part of our code as well as make sure, that we don&#x27;t have any
spikes causing lags.&lt;&#x2F;p&gt;
&lt;p&gt;Altogether, these new techniques will allow us to get much better telemetry
about the outliers. Often it&#x27;s hard to make networking work well purely from
what seems to be best in theory. Veloren&#x27;s application is unique in many ways,
and so we will have to keep striving to analyze how it runs from the data.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;756333024576012409&amp;#x2F;screenshot_1600394223144.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Deer by the river. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;467073814208053248&#x2F;754844029036003328&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 84</title>
          <pubDate>Mon, 07 Sep 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-84/</link>
          <guid>https://veloren.net/blog/devblog-84/</guid>
          <description>&lt;p&gt;This week, lots of small updates were made. Airshipper 0.4.0 was released! We
take a look at a photo gallery of what has been going on.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @imbris, @DoctaRay,
@TheThirdSpartan, @zesterer, @notoria, @Pfau, @Sharp, @Capucho, @termac, @law4x,
and @scottc!&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-013&#x2F;&quot;&gt;August edition&lt;&#x2F;a&gt; of
the Rust Gamedev Newsletter is out! We also hit 5000 commits on our GitLab repo!
We also have 5000+ members on our Discord, and most importantly, less than 450
crate dependencies!&lt;&#x2F;p&gt;
&lt;p&gt;@Capucho got the new &lt;code&gt;server-cli&lt;&#x2F;code&gt; merged and it is working on the WGPU branch.
@TheThirdSpartan worked on personalizing chat messages, and added more detailed
death messages. @Pfau interacted a lot with the active players to see what could
be improved in the short term. Hopefully, these can be addressed in the next few
weeks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;753315261612032060&amp;#x2F;screenshot_1599674599847.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Treehouse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@zesterer has been working on improving the developer workflow surrounding
sites. He wants to make them faster to generate, and more accessible to other
devs. @Sam created a system that can handle beam-like attacks. He and @Slipped
are doing some research on how to implement keyframe animations. More on this in
the coming weeks. @DoctaRay refactored how fullscreen toggling works.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;compilation-breakdown-by-angelonfira&quot;&gt;Compilation Breakdown by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;I was reading &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;nnethercote&#x2F;2020&#x2F;09&#x2F;08&#x2F;how-to-speed-up-the-rust-compiler-one-last-time&#x2F;&quot;&gt;an
article&lt;&#x2F;a&gt;
about speeding up Rust compilation. It then led me to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;nnethercote&#x2F;2019&#x2F;10&#x2F;10&#x2F;visualizing-rust-compilation&#x2F;&quot;&gt;another
article&lt;&#x2F;a&gt;
that was more specific to visualizing how fast Rust compiled your program. In
the context of Veloren, this could be quite useful. We are dependent on over 500
crates, and clean builds take often around 20 minutes on most computers. A
breakdown of what takes the longest could help improve compile times.&lt;&#x2F;p&gt;
&lt;p&gt;This particular visualization came from just adding &lt;code&gt;-Z timings&lt;&#x2F;code&gt; to cargo build.
Specifically, &lt;code&gt;cargo +nightly build -Z timings&lt;&#x2F;code&gt;. Nightly is required, as it is
an unstable feature. This creates an HTML file that you can open in the browser.
You can download it
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;449654102553788417&#x2F;752868394138599539&#x2F;cargo-timing-20200908T114615Z.htm&quot;&gt;here&lt;&#x2F;a&gt;
if you&#x27;d like to take a look at it yourself. If you want to read more about the
timings flag, you can read the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;nightly&#x2F;cargo&#x2F;reference&#x2F;unstable.html#timings&quot;&gt;documentation on
it&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;753317533037363280&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Input information&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above is some of the preliminary information. We can see what binaries and
libraries we&#x27;re building by default. We can also see how many items have to be
compiled from scratch, the &quot;dirty units&quot;. I&#x27;m using a CPU with 16 threads, so
the total compile time is significantly lower than what we would see on our CI
runners, or other contributors&#x27; computers.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;753316157846585454&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Unit compilation timeline&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Next, I took a look at all of the individual compile jobs that took more than 13
seconds. Most jobs take significantly less, so this only shows the 27 most
impactful of the 509 jobs. &lt;code&gt;veloren-voxgen&lt;&#x2F;code&gt; is a good benchmark to look at, as
it&#x27;s the final unit that has to link any previous dependency units. This cannot
be done concurrently. Anything that approaches the amount of time
&lt;code&gt;veloren-voxgen&lt;&#x2F;code&gt; takes should really be looked into.&lt;&#x2F;p&gt;
&lt;p&gt;Looking at this graph, we also see that each job has a blue section and a purple
section. The purple represents the amount of time that a unit is spending on
codegen. The blue is the rest of the time, presumably waiting for dependencies
to be ready.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;753317394528862208&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here we have another breakdown of the timing of each unit. We can see how much
time it took just for codegen, as well as the features it was compiling.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;753316499313131661&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, we can see a graph of CPU usage over the entire process.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;752769415946436608&amp;#x2F;unknown-6.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Happy Birthday to @Gemu this week! See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;753336526720598127&#x2F;I7K0KVZRM8Hx8oJFyMGhDAN5TcN011kMkl2DVhkNKu8.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 83</title>
          <pubDate>Mon, 31 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-83/</link>
          <guid>https://veloren.net/blog/devblog-83/</guid>
          <description>&lt;p&gt;This week, lots of small updates were made. Airshipper 0.4.0 was released! We
take a look at a photo gallery of what has been going on.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Songtronix, @Pfau, @Sharp, @xMAC94x,
@imbris, @termac, @black-silence, @AngelOnFira, @scottc, @zesterer, and
@notoria!&lt;&#x2F;p&gt;
&lt;p&gt;This week, Airshipper 0.4.0 Released. Lots of small updates were made, which can
be seen in the section below. @Gemu and @Slipped worked on improving
the way quadrupeds run. New weapons were modeled by @Gemu and @Pfau. A healing
sceptre is being worked on by @Sam and @Pfau. Lots of balancing changes were made so that the game
would be easier for new players. This was an effort by @Scott, @Snowram,
@Savvynik, and @Pfau.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;1H7yEnXS3YU&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Loot tables are now species independent. @Sharp has been
working on small tasks, including driver debugging, moving figure meshing to the
background, refactoring config data out of Rust, and significantly improving the
speed of terrain collision detection.&lt;&#x2F;p&gt;
&lt;p&gt;Notable changes to Airshipper 0.4.0:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Uses the same font as Veloren&lt;&#x2F;li&gt;
&lt;li&gt;Option to retry if download&#x2F;install failed&lt;&#x2F;li&gt;
&lt;li&gt;Offline support&lt;&#x2F;li&gt;
&lt;li&gt;Screenshots, logs, game saves all centralized in profile folder&lt;&#x2F;li&gt;
&lt;li&gt;No more terminal window floating around if you just want to play&lt;&#x2F;li&gt;
&lt;li&gt;And a ton more...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;photo-gallery&quot;&gt;Photo Gallery&lt;&#x2F;h2&gt;
&lt;p&gt;This week, we don&#x27;t have any writeups, but we do have a lot of images!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;749951790551662602&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Beehives&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;749951841676034090&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Nice rivers&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;750032797237903380&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;750032941815431238&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New bow models and animals by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;750791305986179192&amp;#x2F;running.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Work by @Slipped and @Gemu to improve adaptive running for quadrupeds&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;750063433856319609&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New Velorite weapon by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;750066047209439352&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Improved head size on female orcs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;730853425868308541&amp;#x2F;749387248788570152&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;750797124773478480&amp;#x2F;m1.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New healing scepter M1 that will heal allies and damage enemies. Colours done by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;750797218394538044&amp;#x2F;m2.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The M2 for the scepter will be an explosive projectile that damages enemies. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;750796091393441893&#x2F;2RLqbNOxeoH9NFph8-UlBA0Cgv77gLD_apK0J3ZywN4.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 82</title>
          <pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-82/</link>
          <guid>https://veloren.net/blog/devblog-82/</guid>
          <description>&lt;p&gt;This week, we had the 0.8 intro meeting. We hear from @Ellinia about the process
being used to create sound effects for the game.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @xMAC94x, @Pfau, @james, @imbris,
@sovareign, @Songtronix, @Sam, @rdbaker, @AngelOnFira, @Sharp, @Spyros,
@T-Dark0, and @marius!&lt;&#x2F;p&gt;
&lt;p&gt;@Felixader has been working on lore for cities, cultures, and races. New colours
were merged in this week, with help from @zesterer and @Pfau. @Pfau also
rebalanced the behaviour of monsters, improved loot tables, and made lots of
small UI and UX fixes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;747431314449367080&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tooltip borders now fit the UI theme and you can see account names in
  the social menu by hovering&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Capucho was working on wgpu a bit, however there were some compiler blockers
preventing continued work.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;0-8-intro-meeting&quot;&gt;0.8 Intro Meeting&lt;&#x2F;h2&gt;
&lt;p&gt;This weekend, we held a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;187xtMIXdOl43lUprSIad09FNmAs4kSIVfbjwtGdG0NY&#x2F;edit?usp=sharing&quot;&gt;0.8 intro
meeting&lt;&#x2F;a&gt;.
This included the normal discussions of what we want to see for the version,
summed up into a &quot;definition of 0.8&quot;. We also examined what we achieved since
0.7, and what we missed out on.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;completed&quot;&gt;Completed&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LoD!&lt;&#x2F;li&gt;
&lt;li&gt;Networking?&lt;&#x2F;li&gt;
&lt;li&gt;More advanced UI&lt;&#x2F;li&gt;
&lt;li&gt;Combat feedback&lt;&#x2F;li&gt;
&lt;li&gt;Particle systems&lt;&#x2F;li&gt;
&lt;li&gt;SFX&lt;&#x2F;li&gt;
&lt;li&gt;Animations&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;didn-t-do&quot;&gt;Didn’t do&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Quests&lt;&#x2F;li&gt;
&lt;li&gt;Interactions in settlements&lt;&#x2F;li&gt;
&lt;li&gt;Story&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;746533362050662491&amp;#x2F;screenshot_1598051720773.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;definition-of-0-8&quot;&gt;Definition of 0.8&lt;&#x2F;h3&gt;
&lt;p&gt;As a player, I want more interactions with settlements and NPCs. I want to be
able to see a mountain off in the distance and be told to go there and complete
a task. I want to feel like I’m a part of the world around me, and making a
difference.&lt;&#x2F;p&gt;
&lt;p&gt;While in combat, I want to feel like I synergize with the players around me. I
want to team up, and be able to use my unique skills to be a valuable member of
the team. I want to be more immersed in what I hear and see.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;budget&quot;&gt;Budget&lt;&#x2F;h3&gt;
&lt;p&gt;We also examined what a budget for Veloren might look like. Since we are
receiving donations on open collective, we want to come up with a healthy
pipeline making use of the funds, and transparently tracking them. The primary
item we want to secure is infrastructure. We will be getting a server, likely
from Hetzner, that will allow us to run CI, the game server, as well as other
services we use. You can see the budget
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;spreadsheets&#x2F;d&#x2F;1E9Kf2BNkrxw8g4PnoujOaOPxk0T80qlQ3o1caBc1Qg8&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;audio-with-ellinia&quot;&gt;Audio with @Ellinia&lt;&#x2F;h2&gt;
&lt;p&gt;The Audio Team has been busy filling Veloren with many of the SFX that help make
a game feel immersive and provide the player with tactical feedback while
exploring. When done right, this kind of work should typically go largely
unnoticed or taken for granted (that means we have done our job!). But we
thought it would be fun to peel back the curtain a bit on some of Veloren&#x27;s
newest sounds.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;747856953509675139&amp;#x2F;747859429415845968&amp;#x2F;SFX_Project_Example.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Eden and I have been gathering Foley recordings in a DIY isolation booth
constructed with rockwool insulation absorption panels and utilizing an Audio-Technica AT-2035 condenser microphone. We&#x27;ve done plenty of mixing and
synthesizing plugins in FL Studio as well. SFX that are on their way into
Veloren are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;new level up sound&lt;&#x2F;li&gt;
&lt;li&gt;swinging and slashing sounds for the sword, axe, hammer, dagger, shield, and
staff&lt;&#x2F;li&gt;
&lt;li&gt;projectile sounds for the bow and a fire shot for the staff&lt;&#x2F;li&gt;
&lt;li&gt;experience gained sounds&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Further down the timeline are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;snow footsteps&lt;&#x2F;li&gt;
&lt;li&gt;swimming&#x2F;splashing&lt;&#x2F;li&gt;
&lt;li&gt;climbing&lt;&#x2F;li&gt;
&lt;li&gt;dive roll&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;When approaching the design of a sound, I often will get right into Veloren and
just think about it from a player&#x27;s perspective. Sometimes it&#x27;s easy as swinging
a toy sword in front of a microphone (and adding a knife scrape to it in post).
Other times I have to get a little more creative. For example, the upcoming roll
SFX I have been working on has been a trial of rolling myself, a pile of
clothing wrapped around a hammer, and various other items in an attempt to get a
satisfying combination of body &#x27;thunk&#x27; and armor&#x2F;clothing rustling as the
character hits and rolls on the surface.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;747856953509675139&amp;#x2F;747860460942000248&amp;#x2F;EWX7MJ2SUfWv.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;A lot of sound effect design for me is thinking about how something sounds
within the physics of real-world acoustics. For example, when planning a sound
for an action that carries the player character or another in-world entity away
from a starting position (like the roll), you have to think about how higher and
lower frequencies behave. Lower frequencies are stretched out longer than higher
frequencies. Think about hearing an annoying neighbor&#x27;s subwoofer. The wall or
the space between you and their home&#x2F;apartment is often enough to deaden those
higher and mid-range frequencies, but the low-end makes its way to you still. So
when designing something like the roll effect, I apply a low-pass filter to
automatically begin to muffle some of the higher frequencies of the sound. This
adds to the perception of movement within the sound.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;747291354454818956&amp;#x2F;screenshot_1598238491117.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Cloudy mountains at night. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;744635568675094578&#x2F;screenshot_1597605278738.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 81</title>
          <pubDate>Mon, 17 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-81/</link>
          <guid>https://veloren.net/blog/devblog-81/</guid>
          <description>&lt;p&gt;This week 0.7 was released! However, not everything went well with the release
party, and @xMAC94x wrote a section on that. @Sharp&#x27;s colossal branch is getting
merged at long last. The description of all the changes is below.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Rdbaker, @Pfau, @Songtronix,
@Slipped, @yusdacra, @imbris, @zesterer, @WelshPixie, @scottc!&lt;&#x2F;p&gt;
&lt;p&gt;We had our largest release party yet, with a peak of 57 players concurrently!
Although Veloren has been in feature freeze and locked down quite a lot, there
was still a lot of work done! @LunarEclipse updated the AUR packages to 0.7. @Sam is
working on a new boss, and focusing on a shockwave attack that it will have.
@imbris is helping with collision detection on the shockwave, and @lobster is
working on particles for it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;746010175688802364&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It&amp;#x27;s been a long road, but the time has finally come to merge @Sharp&amp;#x27;s behemoth branch. Read more below for all the details!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Ellinia got a good amount of SFX work done. @DoctaRay added borderless and
exclusive fullscreen options. @lobster got the particle MR merged right before
the 0.7 release. This included fireworks items, which used the bomb item as a
template.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;745098696924069948&amp;#x2F;screenshot_1597715749478.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-7-release-party-statistics&quot;&gt;0.7 Release Party Statistics&lt;&#x2F;h2&gt;
&lt;p&gt;With the 0.7 release this past weekend, we held our largest release party yet!
Unfortunately, not everything went smoothly. Be sure to check out the section
below by @xMAC94x to read more about this. Here are the stats from the rest of
the party though!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;744294666668605510&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;744294726316064880&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;744294842829504553&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;744294955157028974&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;744295047620460604&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;90% uptime... or was it? Read more to find out&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-7-release-party-kick-disaster-by-xmac94x&quot;&gt;0.7 Release Party Kick Disaster by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;Last Saturday we had our 0.7 release party. A release party is usually a 2-3
hour-long event where we celebrate a new release, play around, and have fun.
Preparation for such a party usually starts a week before and the last 48 hours
we were all focused on preparing the release build, testing, setting up a server
to handle ~40 players. The server started at 18:00 GMT+0 within 5 minutes we had
53 players coming online! One minute later I had to kill the server as it froze.
(see A) Suddenly the whole event changed. From what was going to be a fun party
changed to focus on stability for the next 3 hours.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;745672258688778330&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-problem-part-1&quot;&gt;The problem (part 1)&lt;&#x2F;h3&gt;
&lt;p&gt;It took us about 15 minutes of investigation to figure out what was happening.
We noticed players suddenly dropping, all at once. But the server didn&#x27;t
restart. This was bothersome, a crash would give us a clear error message, but
we had nothing. I had 2 thoughts: networking or new bug introduced in the
feature freeze period. Networking hasn&#x27;t been changed for a month, so I was
pretty sure it&#x27;s unrelated. We saw that try to connect, but their requests
weren&#x27;t picked up by the server. We also noticed that our metrics are still
available but didn&#x27;t update.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;countering-the-crash&quot;&gt;Countering the &quot;crash&quot;&lt;&#x2F;h3&gt;
&lt;p&gt;In order to find a quick solution, we did multiple things simultaneously. As a
team, we discussed and tried to analyse the process as well as attach a debugger
to the process. We also started to build a local version of Veloren to apply a
potential fix. At this point we were 30 mins in the release party already (see
B). 10 minutes later we had a compiled local build and to pure luck, the server
was stable for 30 mins (see C). During this time we achieved the most players
simultaneously on the server at 57. We attached the gdb debugger to collect
backtraces once the bug occurred again (see D). We were still pretty unsure what
caused it, as we haven&#x27;t seen such a bug outside this party.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;744258826017964143&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Emergency mitigation meeting&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;end-of-the-party-without-a-fix&quot;&gt;End of the party without a fix&lt;&#x2F;h3&gt;
&lt;p&gt;The party ended after a total of 3 hours (see E) with the remaining 15 players
transferring to the official Veloren server hosted by me. Sadly we didn&#x27;t have a
fix for the &quot;crash&quot; yet.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;analysing-the-backtraces&quot;&gt;Analysing the Backtraces&lt;&#x2F;h3&gt;
&lt;p&gt;Analysis was pretty hard as we didn&#x27;t have debuginfos enabled, so I collected
new backtraces on the official server. I found that 2 threads doing something
with the same &lt;code&gt;std::sync::Mutex&lt;&#x2F;code&gt; which made me think it might be actually
related to a Deadlock. That would fit the pattern we saw (main thread didn&#x27;t
update metrics, but we didn&#x27;t crash). With debuginfos I found the problem:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;Thread &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;(Thread &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0x7fa0a9b37c40 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;LWP 19872&lt;&#x2F;span&gt;&lt;span&gt;)):
&lt;&#x2F;span&gt;&lt;span&gt;...
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;5  &lt;&#x2F;span&gt;&lt;span&gt;std::sync::condvar::Condvar::wait () at src&#x2F;libstd&#x2F;sync&#x2F;condvar.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;200
&lt;&#x2F;span&gt;&lt;span&gt;...
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;10 0x000055a1ffe16733 &lt;&#x2F;span&gt;&lt;span&gt;in futures_executor::local_pool::run_executor (f=...) at &#x2F;home&#x2F;b-server&#x2F;.cargo&#x2F;registry&#x2F;src&#x2F;github.com-1ecc6299db9ec823&#x2F;futures-executor-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.3&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;src&#x2F;local_pool.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;83
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;11 &lt;&#x2F;span&gt;&lt;span&gt;futures_executor::local_pool::block_on (f=...) at &#x2F;home&#x2F;b-server&#x2F;.cargo&#x2F;registry&#x2F;src&#x2F;github.com-1ecc6299db9ec823&#x2F;futures-executor-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.3&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;src&#x2F;local_pool.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;317
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;12 &lt;&#x2F;span&gt;&lt;span&gt;veloren_server::events::player::handle_client_disconnect (server=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0x7ffd0ddc6490&lt;&#x2F;span&gt;&lt;span&gt;, entity=...) at server&#x2F;src&#x2F;events&#x2F;player.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;84
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;13 0x000055a1ffdcd7df &lt;&#x2F;span&gt;&lt;span&gt;in veloren_server::events::&amp;lt;impl veloren_server::Server&amp;gt;::handle_events (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;=&amp;lt;optimized out&amp;gt;) at server&#x2F;src&#x2F;events&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mod&lt;&#x2F;span&gt;&lt;span&gt;.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;105
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;14 0x000055a1ffdd8354 &lt;&#x2F;span&gt;&lt;span&gt;in veloren_server::Server::tick (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0x7ffd0ddc6490&lt;&#x2F;span&gt;&lt;span&gt;, _input=..., dt=...) at server&#x2F;src&#x2F;lib.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;400
&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;15 0x000055a1ffcb4e9e &lt;&#x2F;span&gt;&lt;span&gt;in veloren_server_cli::main () at server-cli&#x2F;src&#x2F;main.rs:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;56
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;the-problem-part-2&quot;&gt;The problem (part 2)&lt;&#x2F;h3&gt;
&lt;p&gt;That backtrace told us a lot about what was going on:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Thread 1&lt;&#x2F;code&gt; is the main thread, the one that was doing the critical phase of
the server. See line #14.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;wait()&lt;&#x2F;code&gt; in line #5 tells us that it&#x27;s waiting for an event to happen.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;handle_client_disconnect()&lt;&#x2F;code&gt; in line #12 gives us the exact thing what we are
trying to do: it&#x27;s in line &lt;code&gt;server&#x2F;src&#x2F;events&#x2F;player.rs:84&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So lets look at the source code:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;84&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Err(e) = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;block_on&lt;&#x2F;span&gt;&lt;span&gt;(participant.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;disconnect&lt;&#x2F;span&gt;&lt;span&gt;()) {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;85&lt;&#x2F;span&gt;&lt;span&gt;:   debug!(
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span&gt;:     ?e,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;87&lt;&#x2F;span&gt;&lt;span&gt;:     &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Error when disconnecting client, maybe the pipe already broke&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;88&lt;&#x2F;span&gt;&lt;span&gt;:   );
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;89&lt;&#x2F;span&gt;&lt;span&gt;: };
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The error seems to be blocking on the &lt;code&gt;client.disconnect()&lt;&#x2F;code&gt; function. This
function is there to cleanly shutdown a client after they disconnect or are
kicked. It should try to send all relevant info to them and once this is done
close the connection. For some reason, it took way to long (I haven&#x27;t analyzed
why yet) and blocks the main thread sporadically.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;745037385611608084&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New armor set by @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;the-solution&quot;&gt;The solution&lt;&#x2F;h3&gt;
&lt;p&gt;Resolving the error was quite easy once we isolated it. We just move the
teardown to another thread. In a background thread this can take as long as it
wants without interrupting any player again. Further investigation will show why
it takes so long:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Aug 19 08:15:43.126  WARN veloren_server::events::player: disconecting took quite long elapsed=2.534882113s
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 08:16:20.984  WARN veloren_server::events::player: disconecting took quite long elapsed=3.543180779s
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 08:28:19.724 DEBUG veloren_server::events::player: disconecting took elapsed=23.553655ms
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 08:29:38.784 DEBUG veloren_server::events::player: disconecting took elapsed=21.045099ms
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 08:35:02.043 DEBUG veloren_server::events::player: disconecting took elapsed=25.217615ms
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 08:37:39.406 DEBUG veloren_server::events::player: disconecting took elapsed=19.948233ms
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 09:19:16.508  WARN veloren_server::events::player: disconecting took quite long elapsed=23.326647409s
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 11:29:26.872  WARN veloren_server::events::player: disconecting took quite long elapsed=18.663718063s
&lt;&#x2F;span&gt;&lt;span&gt;Aug 19 12:00:04.742  WARN veloren_server::events::player: disconecting took quite long elapsed=972.050707757s
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see often the disconnect is done within 25ms, but sometimes it
requires multiple seconds, or even up to 15 minutes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sharp-s-lighting-and-world-changes-branch&quot;&gt;@Sharp&#x27;s Lighting and World Changes Branch&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;The following is the description of @Sharp&#x27;s massive branch as it is being
merged into master. It covers LOD, shadow maps, greedy meshing, new lighting,
world size refactoring, and other performance fixes.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pretty much a Veloren fork at this point. Here&#x27;s a high-level overview of the
changes. At a high level, this MR incorporates roughly two groups of changes.&lt;&#x2F;p&gt;
&lt;p&gt;The first group consists of new game features: more flexible map sizes, level of
detail terrain, shadow maps, and a new lighting engine. This is &quot;feature work&quot;
that (mostly) only adds new things to Veloren, and mostly shouldn&#x27;t affect old
stuff.&lt;&#x2F;p&gt;
&lt;p&gt;The second big group of changes are those addressing the fallout from all the
new features. These include performance fixes of various sorts: the addition of
multiple graphics options and optimization of the cheap ones to avoid work,
switching all voxel models to use some variant of greedy meshing, switching over
much of our CPU-side vector math to exploit SIMD instructions (coinciding with a
fork of &lt;code&gt;vek&lt;&#x2F;code&gt;), and a rewrite of how the UI handles text rendering (coinciding
with updates to our fork of &lt;code&gt;conrod&lt;&#x2F;code&gt;). Making Veloren&#x27;s hardcoded colors appear
correct under the new lighting engine also required considerable changes.&lt;&#x2F;p&gt;
&lt;p&gt;The second category of changes often heavily touches code owned by other people,
including frequently modified code &quot;owned&quot; by a handful of people, so I
recommend that this code be reviewed particularly carefully.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;744646358622929058&amp;#x2F;screenshot_1597607885578.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;&#x2F;h3&gt;
&lt;p&gt;At a high level (each will be described in more detail below):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The world map has been refactored
&lt;ul&gt;
&lt;li&gt;The world size is no longer hardcoded&lt;&#x2F;li&gt;
&lt;li&gt;The map generation code was made generic to allow using it outside of the &lt;code&gt;world&lt;&#x2F;code&gt; crate&lt;&#x2F;li&gt;
&lt;li&gt;On world creation, we now compute &lt;em&gt;horizon maps&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;The way we pass the world from the server to the client has been updated&lt;&#x2F;li&gt;
&lt;li&gt;Artifacts related to image rotation were fixed&lt;&#x2F;li&gt;
&lt;li&gt;Multiflow rivers were enabled&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to the world map, various
incidental fixes and optimizations were required&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;The new &lt;em&gt;level of detail&lt;&#x2F;em&gt; feature was added
&lt;ul&gt;
&lt;li&gt;A new LOD terrain rendering step was added to the pipeline&lt;&#x2F;li&gt;
&lt;li&gt;The LOD terrain quality was made configurable via a graphics setting&lt;&#x2F;li&gt;
&lt;li&gt;Horizon maps were used to cast shadows from LOD chunks on both LOD and
non-LOD terrain&lt;&#x2F;li&gt;
&lt;li&gt;A &quot;voxelization&quot; effect was incorporated into rendered LOD terrain to make
it blend better into the world&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to LOD, various incidental fixes
and optimizations were required&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Veloren&#x27;s lighting has been completely overhauled
&lt;ul&gt;
&lt;li&gt;A semi-accurate index of refraction was assigned to our materials&lt;&#x2F;li&gt;
&lt;li&gt;A new, more realistic, physically-based approach to lighting was used using
solar panel light exposure&lt;&#x2F;li&gt;
&lt;li&gt;We attempt to compute &lt;em&gt;realistic light attenuation&lt;&#x2F;em&gt; in water using its real
material properties&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to LOD, various incidental fixes
and optimizations were required&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Point and directional lights now cast realistic shadows, using &lt;em&gt;shadow
mapping&lt;&#x2F;em&gt;
&lt;ul&gt;
&lt;li&gt;Point light shadow maps were added to the rendering pipeline, using geometry
shaders and &lt;em&gt;seamless cube maps&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Directional light shadows were added to the rendering pipeline, using LISPSM
together with disabling &lt;em&gt;depth clamping&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Shadow-only&quot; chunks and NPCs were added to prevent shadows from models
behind you from disappearing.&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to shadow maps, various incidental
fixes and optimizations were required.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;744635568675094578&amp;#x2F;screenshot_1597605278738.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The addition of shadow maps, LOD terrain, and the new lighting all led to
significant performance degradation, on top of other changes happening in
master. Therefore, a large number of performance improvements were also needed:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The graphics options were made much more flexible and configurable, and
shaders were optimized
&lt;ul&gt;
&lt;li&gt;New options were provided for how to render lights and shadows&lt;&#x2F;li&gt;
&lt;li&gt;Graphic setting storage and configuration were overhauled to make adding new
features easier&lt;&#x2F;li&gt;
&lt;li&gt;Shaders were rewritten to utilize GLSL&#x27;s preprocessor to avoid overhead&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to providing additional rendering
options, various incidental fixes and optimizations were required.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Voxel model creation was switched to use &lt;em&gt;greedy meshing&lt;&#x2F;em&gt;
&lt;ul&gt;
&lt;li&gt;A new voxel meshing method, greedy meshing, was added&lt;&#x2F;li&gt;
&lt;li&gt;Uses of the older meshing methods were migrated to use greedy meshing&lt;&#x2F;li&gt;
&lt;li&gt;New restrictions were added to terrain, figure, and sprites to future proof
them for further optimizations&lt;&#x2F;li&gt;
&lt;li&gt;Most positions are now relative to either chunk or player position for
better precision&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to greedy meshing, various
incidental fixes and optimizations were required&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Animation and terrain math was switched to use SIMD where possible
&lt;ul&gt;
&lt;li&gt;Fixes were made to vek to make its SIMD feature usable for us&lt;&#x2F;li&gt;
&lt;li&gt;The interface and types used in bone animation were changed in various ways&lt;&#x2F;li&gt;
&lt;li&gt;Redundant code generation for body animation is now partly taken care of by
a macro&lt;&#x2F;li&gt;
&lt;li&gt;Animation code was modified to use vek&#x27;s SIMD representation where possible&lt;&#x2F;li&gt;
&lt;li&gt;Terrain meshing code and shadow map math were also modified to use vek&#x27;s
SIMD representation&lt;&#x2F;li&gt;
&lt;li&gt;SIMD instruction generation was enabled&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to greedy meshing, various
incidental fixes and optimizations were required&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;The way we cache glyphs was completely refactored, fixed, and optimized
&lt;ul&gt;
&lt;li&gt;Our fork of &lt;code&gt;conrod&lt;&#x2F;code&gt; was optimized in various ways&lt;&#x2F;li&gt;
&lt;li&gt;Our fork of &lt;code&gt;conrod&lt;&#x2F;code&gt; now exposes whether a widget was updated during the
current frame&lt;&#x2F;li&gt;
&lt;li&gt;Our use of the glyph cache was rewritten for correctness&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;text cache&lt;&#x2F;em&gt; was introduced that lets us skip remeshing glyphs that have
not changed&lt;&#x2F;li&gt;
&lt;li&gt;Various changes were made to reduce pressure on the glyph cache, with more
planned&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to the glyph cache, various
incidental fixes and optimizations were required&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Colors were changed to keep Veloren&#x27;s look consistent with master
&lt;ul&gt;
&lt;li&gt;Some older tree models were brought back&lt;&#x2F;li&gt;
&lt;li&gt;All hardcoded colors were extracted and made hot-loadable.&lt;&#x2F;li&gt;
&lt;li&gt;Hardcoded colors were fixed to conform to Veloren&#x27;s style.&lt;&#x2F;li&gt;
&lt;li&gt;Color models were fixed to conform to Veloren&#x27;s style.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A detailed description of the involved changes follows.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;743797510526599168&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;world-map-information-was-refactored&quot;&gt;World map information was refactored&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The world size is no longer hardcoded. All functions dependent on world size
now take a &lt;code&gt;WorldSizeLg&lt;&#x2F;code&gt;, which holds the base 2 logarithm of each actual
world dimension and is guaranteed to maintain certain properties (outlined in
&lt;code&gt;common&#x2F;src&#x2F;terrain&#x2F;map.rs&lt;&#x2F;code&gt;). Additionally, many utility functions that
utilize the world size were moved into &lt;code&gt;common&lt;&#x2F;code&gt; as well (mostly
&lt;code&gt;common&#x2F;src&#x2F;terrain&#x2F;mod.rs&lt;&#x2F;code&gt;). Finally, the world map format was updated in
order to store its size explicitly, with a migration path from the old format
that should work whenever the old formatted map was a square (practically
always). See &lt;code&gt;world&#x2F;src&#x2F;sim&#x2F;mod.rs&lt;&#x2F;code&gt; for these changes.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;The map generation code was made generic to allow using it outside of the
&lt;code&gt;world&lt;&#x2F;code&gt; crate. The parts of the map generating code that do not need to query
the world were moved over to &lt;code&gt;common&#x2F;src&#x2F;terrain&#x2F;map.rs&lt;&#x2F;code&gt;, allowing them to be
used from the client without creating a dependency on &lt;code&gt;world&lt;&#x2F;code&gt;. The rest of it
was turned into helper functions in &lt;code&gt;world&#x2F;src&#x2F;sim&#x2F;map.rs&lt;&#x2F;code&gt;, which can be
passed as closures to the generic map generation code to complete its
construction. This also means that colors are now passed in separately to the
map generation function. See &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-78&quot;&gt;devblog 78&lt;&#x2F;a&gt; for
more details.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;On world creation, we now compute &lt;em&gt;horizon maps&lt;&#x2F;em&gt;. See the function in
&lt;code&gt;world&#x2F;src&#x2F;sim&#x2F;util.rs&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Given a height map and a plane intersecting that height map, our horizon maps
allow us to encode enough information to reconstruct shadows for each point on
the height map using only the &lt;em&gt;horizon angle&lt;&#x2F;em&gt; (the angle at which the sun
starts to become visible). As Veloren&#x27;s sun only covers one plane, this is
sufficient for encoding sun shadows for LOD terrain, by encoding two angles
per chunk (one for each 90 degrees the sun covers). We can also use this for
the moon, if we want, since the moon follows the same path. Additionally, we
store the &lt;em&gt;height&lt;&#x2F;em&gt; of the furthest occluder, to try to make the shadows
volumetric; so this means 4 bytes in total for each chunk.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;744606258094407770&amp;#x2F;screenshot_1597598335211.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Support for horizon maps has been merged into the map functionality in common
as well.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The way we pass the world from the server to the client has been updated.
Rather than passing the prerendered map, we instead pass three maps with
values for each chunk; one with the color information, a second with altitude
information, and a third with horizon map information. We then reconstruct the
map on the client, together with some additional information we send from the
server (like the sea level and maximum height). See &lt;code&gt;common&#x2F;src&#x2F;msg&#x2F;server.rs&lt;&#x2F;code&gt;
for a detailed description of the format of &lt;code&gt;WorldMapMsg&lt;&#x2F;code&gt;, and
&lt;code&gt;server&#x2F;src&#x2F;libr.rs&lt;&#x2F;code&gt; and &lt;code&gt;client&#x2F;src&#x2F;lib.rs&lt;&#x2F;code&gt; for details of the map
construction and parsing.&lt;&#x2F;li&gt;
&lt;li&gt;Artifacts related to image rotation were fixed. See the commit message for
commit SHA &lt;code&gt;cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e&lt;&#x2F;code&gt; for a detailed
explanation. This involved changes to shaders, the addition of a new type of
graphic (also reflected in the graphic cache) that allows specifying a border
color (which automatically makes the associated texture immutable), and some
related fixes. I reproduce the first two paragraphs of the MR description as
well:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Fix map image artifacts and remove unneeded allocations.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Specifically, we address three concerns (the image stretching during
&lt;&#x2F;span&gt;&lt;span&gt;rotation, artifacts around the image due to clamping to the nearest
&lt;&#x2F;span&gt;&lt;span&gt;border color when the image is drawn to a larger space than the image
&lt;&#x2F;span&gt;&lt;span&gt;itself takes up, and potential artifacts around a rotated image which
&lt;&#x2F;span&gt;&lt;span&gt;accidentally ended up in an atlas and didn&amp;#39;t have enough extra space to
&lt;&#x2F;span&gt;&lt;span&gt;guarantee the rotation would work).
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Multiflow rivers were enabled. This does not really need to be part of this
MR, and would be easy to revert, but since it seemed to provide a nice
improvement it&#x27;s currently packaged with it. We already computed multiple
outflows from each chunk for erosion purposes long before this MR. However, we
never modified river rendering to be able to handle this case (just a single
downhill river flow is complex enough!) so this was not exposed when deciding
which chunks were rivers.&lt;&#x2F;li&gt;
&lt;li&gt;In the process of making changes related to the world map, various incidental
fixes and optimizations were required. Some examples of fixes include making
sure terrain is never lowered to below sea level (to make the shadow maps
report correct values), fixing map altitudes and colors to understand things
like cliffs and &quot;block level&quot; coloring (that doesn&#x27;t exist on the column
level), and fixing a crash bug when rendering images for the UI where source
pixels are strongly rectangular. Some examples of related performance fixes
include avoiding allocating a fresh vector for all the maps (i.e. copying it
over to change the format from &lt;code&gt;[u32; n]&lt;&#x2F;code&gt; to &lt;code&gt;DynamicImage&lt;&#x2F;code&gt; and then copying
again to convert to &lt;code&gt;RgbaImage&lt;&#x2F;code&gt;), and instead using the &lt;code&gt;gfx::memory::slice&lt;&#x2F;code&gt;
function to accomplish the same thing. These sorts of changes are spread all
around the code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;745872958655823912&amp;#x2F;screenshot_1597900246559.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;a-new-lod-terrain-rendering-step-was-added-to-the-pipeline&quot;&gt;A new LOD terrain rendering step was added to the pipeline&lt;&#x2F;h4&gt;
&lt;p&gt;This includes the addition of a new scene, &lt;code&gt;voxygen&#x2F;src&#x2F;scene&#x2F;lod.rs&lt;&#x2F;code&gt;, a new
pipeline &lt;code&gt;voxygen&#x2F;src&#x2F;render&#x2F;pipeline&#x2F;lod_terrain.rs&lt;&#x2F;code&gt;, and new shaders
&lt;code&gt;assets&#x2F;voxygen&#x2F;shaders&#x2F;lod-terrain-vert.glsl&lt;&#x2F;code&gt; and
&lt;code&gt;assets&#x2F;voxygen&#x2F;shaders&#x2F;lod-terrain-frag.glsl&lt;&#x2F;code&gt;, as well as associated changes to
the renderer in &lt;code&gt;voxygen&#x2F;src&#x2F;render&#x2F;renderer.rs&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The main idea behind our initial approach to LOD was to take the world data we
now get from the server (altitude, color, and horizon mapping).&lt;&#x2F;p&gt;
&lt;h4 id=&quot;in-the-process-of-making-changes-related-to-lod-various-incidental-fixes-and-optimizations-were-required&quot;&gt;In the process of making changes related to LOD, various incidental fixes and optimizations were required&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Some previously computed values were turned into shader uniforms for better
prediction on weak processors.&lt;&#x2F;li&gt;
&lt;li&gt;Calls to power or trig functions were removed or replaced with
multiplications, where possible.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;voxel-model-creation-was-switched-to-use-greedy-meshing&quot;&gt;Voxel model creation was switched to use &lt;em&gt;greedy meshing.&lt;&#x2F;em&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;veloren-specific-considerations&quot;&gt;Veloren-specific considerations&lt;&#x2F;h4&gt;
&lt;p&gt;We explicitly designed the greedy meshing system with figures and sprites in
mind. In both cases, we want to be able to &lt;em&gt;efficiently&lt;&#x2F;em&gt; pack many different
models into the same texture, especially in cases where we know we will either
not be removing any of the grouped-together from the models from the texture, or
will remove all of them at once (so they can be packed into some specific
subtexture).&lt;&#x2F;p&gt;
&lt;p&gt;For sprites, since we know every model in advance and never intend to deallocate
them, we currently pack them all as efficiently as possible into one giant
texture atlas. However, in the future, we might opt to pack them slightly less
efficiently in exchange for shrinking the sprite vertex size. For figures, we
pack all the textures for each &lt;em&gt;model&lt;&#x2F;em&gt; into the same atlas. This is a global
texture atlas used for every sprite, and for figures which is why we have the
ability to mesh multiple models to the same texture area (using the simple
texture atlas allocator) without requiring intermediate vector allocations.&lt;&#x2F;p&gt;
&lt;p&gt;This is accomplished by delaying the time when we actually write the color and
light data to the texture until &lt;em&gt;after&lt;&#x2F;em&gt; all the model vertices have been meshed;
then, we can just allocate the whole color&#x2F;light array at once, making the atlas
we use an exact fit. In computer science-y terms, we accomplish this delay by
not continuing to create the texture data after we perform the initial greedy
meshing (without texture information). Instead, we construct a &lt;em&gt;continuation&lt;&#x2F;em&gt;.
That is, a function that, when called, will execute the rest of the computation.
In Rust terms, this continuation is a &lt;code&gt;FnOnce&lt;&#x2F;code&gt; closure that takes the
&lt;code&gt;ColLightsInfo&lt;&#x2F;code&gt; that it is supposed to write to as context.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;745893779554304060&amp;#x2F;screenshot_1597903618311.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;in-the-process-of-making-changes-related-to-greedy-meshing-various-incidental-fixes-and-optimizations-were-required&quot;&gt;In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Matrix multiplications in the shader were reduced for figure data&lt;&#x2F;li&gt;
&lt;li&gt;Vertex &quot;waves&quot; for fluid data were removed&lt;&#x2F;li&gt;
&lt;li&gt;Terrain &quot;bending&quot; near edges was removed&lt;&#x2F;li&gt;
&lt;li&gt;Scaling was fixed to make sure empty space was not introduced in a space
previously occupied by a block. It was also changed to take ownership of its
voxel data, rather than sharing it, to let it be used with meshing&lt;&#x2F;li&gt;
&lt;li&gt;Rust&#x27;s nightly version was bumped in order to use the &lt;code&gt;array_map&lt;&#x2F;code&gt; function,
which lets us reuse more code between the simple map and &lt;code&gt;FigureModelCache&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;references&quot;&gt;References&lt;&#x2F;h3&gt;
&lt;p&gt;I tried to cite sources in many cases where I needed features from elsewhere but
I am particularly grateful for the following resources, especially where they
have accompanying source code. I linked all of them that are accessible to the
public (those that are not were obtained through legal means).&lt;&#x2F;p&gt;
&lt;p&gt;Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time
Shadows. A K Peters&#x2F;CRC Press (T&amp;amp;F), 20160419.&lt;&#x2F;p&gt;
&lt;p&gt;Lloyd,B. 2007. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gamma.cs.unc.edu&#x2F;papers&#x2F;documents&#x2F;dissertations&#x2F;lloyd07.pdf&quot;&gt;Logarithmic perspective shadow
maps&lt;&#x2F;a&gt;. PhD
thesis, University of North Carolina.&lt;&#x2F;p&gt;
&lt;p&gt;Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gamma.cs.unc.edu&#x2F;papers&#x2F;documents&#x2F;dissertations&#x2F;lloyd07.pdf&quot;&gt;Light space perspective
shadow
maps&lt;&#x2F;a&gt;. In
Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.&lt;&#x2F;p&gt;
&lt;p&gt;Pharr, Matt, et al. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gamma.cs.unc.edu&#x2F;papers&#x2F;documents&#x2F;dissertations&#x2F;lloyd07.pdf&quot;&gt;Physically Based Rendering: From Theory to
Implementation&lt;&#x2F;a&gt;.
Third edition, Morgan Kaufmann Publishers&#x2F;Elsevier, 2017.&lt;&#x2F;p&gt;
&lt;p&gt;mikolalysenko. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;0fps.net&#x2F;2012&#x2F;06&#x2F;30&#x2F;meshing-in-a-minecraft-game&#x2F;&quot;&gt;Meshing in a Minecraft
Game&lt;&#x2F;a&gt; 0 FPS, 30 June
2012&lt;&#x2F;p&gt;
&lt;p&gt;blackflux. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blackflux.wordpress.com&#x2F;2014&#x2F;02&#x2F;23&#x2F;meshing-in-voxel-engines-part-1&#x2F;&quot;&gt;Meshing in Voxel Engines – Part
1&lt;&#x2F;a&gt;
Blackflux.Com, 23 Feb. 2014&lt;&#x2F;p&gt;
&lt;p&gt;I am also especially grateful to Khronos, Wikipedia, and Stack Overflow for
answering many of my specific questions while writing the MR.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;745108008257847326&amp;#x2F;screenshot_1597717958495.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The most interesting bag. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;744300878915305632&#x2F;screenshot_1597519830937.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 80</title>
          <pubDate>Mon, 10 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-80/</link>
          <guid>https://veloren.net/blog/devblog-80/</guid>
          <description>&lt;p&gt;This week we prepare for the 0.7 release. With the code freeze, we don&#x27;t have
too many new features to talk about, but we get a rundown on particle timing
from @lobster.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @yusdacra, @Songtronix, @scottc, @Imbris,
@IBotDEU, @Slipped, @nepo, @zesterer, @Pfau, @xMAC94x, @Varpie, @Sharp,
@AngelOnFira, @Sam, @Silentium, @BottledByte, and @JudgeGriesa!&lt;&#x2F;p&gt;
&lt;p&gt;0.7: &quot;The Progression Update&quot; is releasing this weekend! In this version, many
changes have been made to combat, animations, worldgen, and a lot more systems.
The release party will be happening this Saturday at 18:00 GMT+0. Come join us
on the main server to check out all the new changes!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;743231985438294127&amp;#x2F;a_solemn_quest.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A Solemn Quest by @Eden&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@nepo added Dullahan into the game with help from @Slipped and @Snowram. The
model was created by @Gemu. @lobster wrote a basic scheduler for particles, so
we have emitter-like functionality. @PlaneCat has been working on adding a
weapons guide to the book. @Slipped merged swimming improvements including
controlling and animations. @zesterer added @WelshPixie&#x27;s furniture models into
the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;743476365055098941&amp;#x2F;swimming.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Swimming improvements&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;particle-timing-by-lobster&quot;&gt;Particle Timing by @lobster&lt;&#x2F;h2&gt;
&lt;p&gt;Since we got rid of our ECS particle emitter component, we also lost our timing
mechanism to generate particles at the correct time. Which means our particle
spawn rate is now tied to the framerate. So if the frame rate stutters, it can
cause changes in particle density or other weird visual artifacts.&lt;&#x2F;p&gt;
&lt;p&gt;To fix this we need to track the last time a particle was created for any given
effect, so we can have consistent timing between particles. And because we have
a lot of particles, reducing the work done per-particle is important because it&#x27;s
multiplied 10,000 times or more, which can have a big performance impact.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;743164971193467031&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New furniture by @WelshPixie&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Since many particles are generated using the same or similar timings, we can
optimise this by putting all particles that spawn at the same rate into
frequency buckets. So now instead of tracking last created time for a single
particle, we can do it per frequency.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;_ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.scheduler.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;heartbeats&lt;&#x2F;span&gt;&lt;span&gt;(Duration::from_millis(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; spawn a smoke particle
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; ...
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Accumulates heartbeats to be consumed on the next tick.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;HeartbeatScheduler {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Duration = Heartbeat Frequency&#x2F;Intervals
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Instant = Last update time
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; u8 = number of heartbeats since last update
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; - if it&amp;#39;s more frequent then tick rate, it could be 1 or more.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; - if it&amp;#39;s less frequent then tick rate, it could be 1 or 0.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; - if it&amp;#39;s equal to the tick rate, it could be between 2 and 0, due to
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; delta time variance etc.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;timers&lt;&#x2F;span&gt;&lt;span&gt;: HashMap&amp;lt;Duration, (Instant, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u8&lt;&#x2F;span&gt;&lt;span&gt;)&amp;gt;,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;impl &lt;&#x2F;span&gt;&lt;span&gt;HeartbeatScheduler {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; updates the last elapsed times and elasped counts
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; this should be called once, and only once per tick.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;maintain&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(frequency, (last_update, heartbeats)) in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.timers.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;iter_mut&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; the number of frequency cycles that have occurred.
&lt;&#x2F;span&gt;&lt;span&gt;            *heartbeats =
&lt;&#x2F;span&gt;&lt;span&gt;                (last_update.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;elapsed&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;as_secs_f32&lt;&#x2F;span&gt;&lt;span&gt;() &#x2F; frequency.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;as_secs_f32&lt;&#x2F;span&gt;&lt;span&gt;()).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;floor&lt;&#x2F;span&gt;&lt;span&gt;() as &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u8&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Note: we want to preserve incomplete heartbeats, and roll them
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; over into the next tick.
&lt;&#x2F;span&gt;&lt;span&gt;            *last_update += frequency.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;mul_f32&lt;&#x2F;span&gt;&lt;span&gt;(*heartbeats as &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; alternatively expressed as: now - remaining_partial_heartbeat_time
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; returns the number of times this duration has elasped since the last
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; tick:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; - if it&amp;#39;s more frequent then tick rate, it could be 1 or more.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; - if it&amp;#39;s less frequent then tick rate, it could be 1 or 0.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; - if it&amp;#39;s equal to the tick rate, it could be between 2 and 0, due to
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; delta time variance.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;heartbeats&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;frequency&lt;&#x2F;span&gt;&lt;span&gt;: Duration) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u8 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.timers
&lt;&#x2F;span&gt;&lt;span&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;entry&lt;&#x2F;span&gt;&lt;span&gt;(frequency)
&lt;&#x2F;span&gt;&lt;span&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;or_insert_with&lt;&#x2F;span&gt;&lt;span&gt;(|| (Instant::now(), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;742251532464029746&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The newly added cultist hammer by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another advantage to this approach is now we now have a larger and more
consistent batch of particles that can further avoid memory fragmentation (dead
particles wasting memory) by grouping even more particles with the same lifespan
together. They can then be more efficiently arranged and uploaded to GPU, by taking
advantage of bulk operations such as replacing an entire slice of memory with
another set of particles.&lt;&#x2F;p&gt;
&lt;p&gt;But the downside to this approach is that all effects with the same frequency
will be in sync and might look weird on the screen. But this is not an issue for
effects that have a fast particle spawn frequency, because it&#x27;s imperceptible to
most humans. But for particles that have slow spawn rates, such as 100ms and
above, it starts to become noticeable.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;741236103432110080&amp;#x2F;Screenshot_from_2020-08-07_09-10-15.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Dullahan standing tall. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;743237391195701430&#x2F;tExhCDQ1RaVsXRupvh26D9bn95XSLw3GvuBDWZqIUGw.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 79</title>
          <pubDate>Mon, 03 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-79/</link>
          <guid>https://veloren.net/blog/devblog-79/</guid>
          <description>&lt;p&gt;As 0.7 is wrapping up, we see some bigger systems getting ready to be merged. We
hear from @Slipped about progress on animations. @Songtronix also gives us an
update on Airshipper 0.4.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @JudgeGriesa, @imbris,
@Songtronix, @BottledByte, @Sharp, @StansTec, @Shandley, @Sam, @Slipped,
@Snowram, and @VZIKL!&lt;&#x2F;p&gt;
&lt;p&gt;This week, the inaugural episode of the Rust Gamedev podcast aired. It was an
interview with the Veloren team! Be sure to check it out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rustgamedev.com&#x2F;episodes&#x2F;interview-with-team-veloren&quot;&gt;here&lt;&#x2F;a&gt;. We&#x27;re on
the final stretch to the 0.7 release, which will come out on the 15th. Veloren
also recently passed 1000 merge requests, big milestones this week! @Du has been
continuing work on the concept of a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;octarus.com&#x2F;veloren&#x2F;Main_Page&quot;&gt;Veloren
wiki&lt;&#x2F;a&gt;. Contributions to it are welcome to
help speed up its development.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;kbNNDyvc6rQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;The first Veloren speedrun, from level one
  to killing a Cult Leader. Can you beat it?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Felixader has been hard at work on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;writing&#x2F;-&#x2F;blob&#x2F;master&#x2F;Veloren%20-%20Lore%20Design%20Bible.md&quot;&gt;Lore
Bible&lt;&#x2F;a&gt;,
it has reached over 61 pages! Be warned, it has spoilers that are eventually
supposed to be discovered throughout the game. @BottledByte worked to remove
hardcoded weapons, so that adding new content doesn&#x27;t require recompiling.
@JudgeGriesa is working on the translation to Latin American Spanish. @w3yden
added item names displaying if they are in pickup range.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;740391671857938562&amp;#x2F;ukao9wrv60e51.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Work on the cave systems&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Zesterer has been hard at work with a few different tasks. He&#x27;s added
stalactites to caves and improved castles significantly. He also is working on
an &quot;outcome&quot; system so the client can listen to world events and produce
particle effects or sound effects when certain things happen. @Zesterer also
worked on a bunch of minor pathfinding improvements. NPCs won&#x27;t tend to jump off
things now, and they&#x27;re also more reliable at navigating complex structures.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;740245602616606790&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Color changes. Left is base colours, right is adjusted colours&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;740518559150637056&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Current state of groups&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;airshipper-0-4-progress-by-songtronix&quot;&gt;Airshipper 0.4 Progress by @Songtronix&lt;&#x2F;h2&gt;
&lt;p&gt;In my recent sprint, I&#x27;ve added a ton of small tweaks to Airshipper which will
be released with 0.4 and can be viewed
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Songtronix&#x2F;Airshipper&#x2F;pull&#x2F;69&quot;&gt;here&lt;&#x2F;a&gt;. One thing to mention
is that it will allow you to retry in case of an error instead of having to
restart the launcher. Furthermore, it will now place &lt;em&gt;everything&lt;&#x2F;em&gt; into the
profile folder including screenshots, logs, game saves to avoid the deal of
playing hide and seek and guess where a file has gone.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;739829751405084722&amp;#x2F;airshipper-0.4.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Airshipper 0.4 (WIP)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;While these are great quality of life improvements this isn&#x27;t the main feature
0.4 will introduce. In the next few weeks (hopefully before 0.7 release but no
promises) I&#x27;ll try to add profile support, both server and client side.&lt;&#x2F;p&gt;
&lt;p&gt;This will involve quite a lot of work as the server will need to expose an
improved API which is aware of the difference between stable (0.7, 0.6, 0.5) and
nightly releases. It will also need a way for me to add a new release as
currently, I can&#x27;t automatically detect it. On the interface front, thanks to
ongoing work for a different project I&#x27;ve gained enough knowledge to quickly set
up a fancy but moderate UI to create&#x2F;edit&#x2F;delete profiles. Though wiring it up
to make it work will be a different story.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;739816706737831946&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Work on boss monsters by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;animation-and-movement-updates-by-slipped&quot;&gt;Animation and Movement Updates by @Slipped&lt;&#x2F;h2&gt;
&lt;p&gt;Hi all!&lt;&#x2F;p&gt;
&lt;p&gt;Wanted to give a short update on where I&#x27;ve put some of my focus going into 0.7
release. I&#x27;m trying to focus on cleaning up a few areas and making some
improvements that should really compliment a lot of the other recent work that
has gone into the game. First, Snowram, Gemu, and I were able to merge another
quadruped rewrite this week, this time focused on the &lt;code&gt;quadruped_small&lt;&#x2F;code&gt; body.
This was similar to a rewrite we did earlier for the two larger quadruped
bodies. There is some pretty great stuff in it, including new models,
reimaginings of the old models, rewrites of the run and idle animations, and the
addition of some of the more fancy techniques like orientation tilt.&lt;&#x2F;p&gt;
&lt;p&gt;One other neat addition specifically to this body is a variable called &lt;code&gt;spring&lt;&#x2F;code&gt;,
which is species-specific (we can customize for any animal that uses the
&lt;code&gt;quadruped_small&lt;&#x2F;code&gt; skeleton). This variable allows for a bounce factor in the run
animation. That enabled us to add rabbits and frogs, which hop as they run, and
it&#x27;s a pretty convincing result!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542712513767145484&amp;#x2F;740336528462577765&amp;#x2F;screenshot_1596580330874.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Hippity hoppity, rabbits and frogs now have this property!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This MR also added new mobs to other bodies that aren&#x27;t exposed to the player
yet, including a wendigo and troll addition to the &lt;code&gt;biped_large&lt;&#x2F;code&gt; body. We&#x27;re
working towards making the &lt;code&gt;biped_large&lt;&#x2F;code&gt; body suitable for Veloren&#x27;s first real
bosses (outside of placeholder bosses that are scaled-up versions of existing
enemies). More on that in the next week or so as we try to progress on boss
preparation, including custom attacks and animations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542712513767145484&amp;#x2F;740335508919681044&amp;#x2F;screenshot_1596580124456.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, I&#x27;m hoping to improve some of the movement in Veloren in an upcoming
MR. The work I&#x27;ve done so far includes a better climb mechanic that allows you
to slide down quickly, along with improved swimming so you can dive down
properly rather than waiting for gravity. We definitely want to make exploring
the depths a big theme of Veloren and this is one of the steps to get there.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;740391721598189618&amp;#x2F;evapo3gu7zd51.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Work on castles. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;740411825035673630&#x2F;BsSp54L.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 78</title>
          <pubDate>Mon, 27 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-78/</link>
          <guid>https://veloren.net/blog/devblog-78/</guid>
          <description>&lt;p&gt;This week has seen lots of progress from lots of developers. @Sharp gives us
some perspective into refactoring the world dimension constant.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @imbris, @yusdacra, @Sam,
@Snowram, @lausek, @Pfau, @Slipped, and @T-Dark!&lt;&#x2F;p&gt;
&lt;p&gt;@Ellinia has been working on some SFX with help from @Eden. @lausek worked on
German translations and refactoring auth. @lobster has been cleaning up the
number of draw calls for particles and added an option to disable them
completely. @Pfau was working on adding a UI for the group system implemented by
@imbris. He was also working on a social window overhaul. @zesterer has been
working on caves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;738488317158359165&amp;#x2F;secondar-attack.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Secondary bow attack by @Sam&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam added a new secondary attack to the bow. They are also completing work on
diverse weapon stats. @Capucho threw together &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren-status.herokuapp.com&#x2F;server&#x2F;server.veloren.net&quot;&gt;a small
site&lt;&#x2F;a&gt; to display
info about the official Veloren server. @Felixader finished a format spec draft
to follow when writing quests. @XVar integrated imgui-rs into Veloren as a test
for flexible debug UIs. It&#x27;s still in the air if it will be fully integrated.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;737654838137061476&amp;#x2F;screenshot_1595809943919.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Quadruped rework by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@T-Dark worked on the character alias substring filter. This will help server
owners ban certain works from character names. @Sharp did a lot of work to
support arbitrarily sized maps. @Snowram helped with the latest animation
rework. @Gemu reworked all of the small quadruped animal models. @Songtronix
figured out where the auth 500 error came from. @Capucho has been revamping the
server cli.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;737821309068640296&amp;#x2F;imgui.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Debug UI test by @XVar&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;refactoring-world-size-by-sharp&quot;&gt;Refactoring WORLD_SIZE by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;For at least as long as I&#x27;ve been part of Veloren, we&#x27;ve had a global variable
called &lt;code&gt;WORLD_SIZE&lt;&#x2F;code&gt; that determined the size of the map at compile time.
Initially, it was only used in a handful of places localized to WorldSim,
however, mostly due to me, we ended up using it all over the place. In my
branch, it was even starting to creep into the client. This was due to
generating the map directly on the client, rather than just using an image (for
complicated reasons I don&#x27;t want to go into).&lt;&#x2F;p&gt;
&lt;p&gt;Obviously, that was not good, since a client couldn&#x27;t even host a map of a
different size from the server. And it also meant that hosting maps of different
sizes from the default required code changes and recompiles. No test server
could keep a different-from-default-size map, which a lot of people wanted. It
wasn&#x27;t just laziness that was stopping me from doing this refactor, though. We
also have several invariants on the world map size. For example, each chunk
dimension has to be a power of 2, the product of the chunk dimensions must fit
in a usize, each block dimension must fit in an i32, each chunk dimension must
fit in a u16, no chunk dimension can exceed 2^14, and so on.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;737699903106580500&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Catoblepas model by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And, since doing arithmetic around WORLD_SIZE is on the critical path for a lot
of performance-sensitive stuff, I wanted to make sure that if we switched to
using dynamic values, we did it in a way that we could (in theory) recover the
performance we lost due to missed compiler optimizations.&lt;&#x2F;p&gt;
&lt;p&gt;So, my solution was to create a new type, &lt;code&gt;MapSizeLg&lt;&#x2F;code&gt;, storing the number of
bits for each dimension. The type verifies at construction time that all
invariants are satisfied, so for any instance of that type we can freely assume
all of those invariants. We can also encode those as optimized methods and
functions that operate only on values of that type, enforcing that code
practices good hygiene and doesn&#x27;t accidentally mix non-world-map-size values
in.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;737664474449838120&amp;#x2F;screenshot_1595943286553.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A rectangular map in the new format&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Not only that, since we verify the invariants on construction, in the future if
we need to we can use unsafe LLVM assertions or integer arithmetic in order to
let the compiler perform the same optimizations it would have in the constant
case (outside of stuff like constant folding of course). So this design both
simplifies a lot of existing code (making it much more robust to issues like
overflows, since we have consistent methods we call for given operations), and
ensures that we can claw back any performance we lose.&lt;&#x2F;p&gt;
&lt;p&gt;Ultimately it was a lot of work--the diff was about 2.5k lines--but it made the
next step easy: updating our map format. This is actually the first time we&#x27;ve
updated the format since its inception, but it was built from the get-go to
support forward migrations, so the process was pretty straightforward. For maps
without dimension information, we make an educated guess at the actual
dimensions. We do this by insisting that the map dimensions be the square of a
power of 2 in order to perform the migration, and if they are we assume the map
is actually square with that dimension.&lt;&#x2F;p&gt;
&lt;p&gt;For new maps, we directly save the real dimension information. We also include a
&quot;continent scaling hack&quot; that&#x27;s used as a factor to our world generation and is
usually based on world size, to help keep outputs consistent with the initial
map that was generated without sacrificing flexibility. Because the migrations
occur automatically and in memory, no changes to any existing files are
required. Just like before, you can set a map in your &lt;code&gt;server_settings.ron&lt;&#x2F;code&gt;, but
unlike before this will work for maps of arbitrary size with no code changes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;736942479785328704&amp;#x2F;screenshot_1595771110863.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the end, we have zero remaining instances of WORLD_SIZE, and only one use of
its replacement. The replacement is a default map size for use in the initial
generation, which can be updated to produce maps of different size. In the
future, when generation is more stable, we will provide hooks so that modifying
code to set this value, along with other generation parameters, is not needed to
produce a new map.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, since I thought it was cool: we exploit Rust&#x27;s new ability to panic in
constants to make sure that the default map size respects the invariants we
mentioned, at compile time. If our validation function fails when initializing
the constant, we will panic! This is the kind of extra assurance that makes me
love Rust 🙂&lt;&#x2F;p&gt;
&lt;p&gt;In fact, the refactor itself did not (appear to) introduce any new bugs at
runtime! Only two runtime issues surfaced, and both of them were due to writing
the migration too hastily. For me, this really illustrates why Rust is such a
powerful tool for collaborative development.&lt;&#x2F;p&gt;
&lt;p&gt;First, Rust&#x27;s design makes abusing global variables difficult, pushing coders
towards a much cleaner design. In a language with a pervasive global mutable
state, I might have been tempted to try to just make the world size updatable
somehow, but that would&#x27;ve been a big mistake.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;738166605368000543&amp;#x2F;screenshot_1596063020527.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Secondly, being able to perform large-scale refactors on a widely shared
codebase without introducing significant bugs is really important for avoiding
tech debt, especially on a fast-moving project like Veloren. I&#x27;ve used a lot of
languages in my career, and Rust is the only one where I can routinely perform a
large refactor without breaking tons of existing code. While some have IDEs that
make refactoring faster than it is in Rust (for now, anyway), in none of them
has refactoring been as &quot;safe&quot; as it is in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;This is not an accident. From day one, Rust&#x27;s mission has been to provide strong
mechanisms for enforcing strict isolation boundaries; mechanisms powerful enough
to actually enforce the invariants that occur in large, real-world programming
projects. Ownership, eschewing exceptions and global state, explicit type
annotations at function boundaries, mutex poisoning, explicit casts, floats
lacking Ord, and so on are all aimed squarely at this target. It&#x27;s not just
about type safety, it&#x27;s about working as hard as humanly possible to avoid
footguns. And it only works because the whole community buys into it.&lt;&#x2F;p&gt;
&lt;p&gt;So, while refactoring may not be the most &quot;sexy&quot; kind of programming out there,
for me it&#x27;s where Rust really shines through 🙂&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;738163980257853540&amp;#x2F;screenshot_1596062354346.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sun setting on the mountains. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;735214211759865856&#x2F;screenshot_1595359066529.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 77</title>
          <pubDate>Mon, 20 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-77/</link>
          <guid>https://veloren.net/blog/devblog-77/</guid>
          <description>&lt;p&gt;This week we hear about @lobster&#x27;s progress on particles. @AngelOnFira
discusses multithreading gamedev.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @AngelOnFira, @Sharp, @Pfau, @imbris,
@Menko1437, @zesterer, @Slipped, @Sam, @xMAC94x, @T-Dark0, @yusdacra,
@Songtronix, @lausec, and @PatatasDelPapa!&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix has been doing lots of work on Airshipper. He also ran the first UX
working group meeting! @YuriMomo has been doing lots of UX work. @Felixader has
been working on the city, town, and village descriptions for the brushwood
elves. @imbris merged the winit upgrade, which consisted of a monumental amount
of work.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;735487717235753020&amp;#x2F;fishing.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Beginning of the fishing animation by @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@XVar is working on an RFC proposal with @Sharp to improve how persistence
works. Primarily the goal is to figure out how to deserialize items from
inventories and loadouts. @lausec improved some German translations and fixed a
bug where you could mount pets from very far away. They&#x27;re also working on
allowing admins to join a server even if they aren&#x27;t on the whitelist. @Gemu
modeled around 50 new axes and hammers to go with more diverse weapon drops.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;particle-improvements-by-lobster&quot;&gt;Particle Improvements by @lobster&lt;&#x2F;h2&gt;
&lt;p&gt;@lobster is still working on improving particles. Recently, they scrapped the
particle emitter component, because particles are a visual representation of the
already existing game state. It&#x27;s better to use the existing game state than to
create an unnecessary duplicate state. It would have eventually lead to state
desynchronization bugs, as well as a waste of memory.&lt;&#x2F;p&gt;
&lt;p&gt;@lobster also scrapped the configurable particle idea, because of performance
concerns with uploading data to the GPU. Instead, we upload the bare minimum for
the particle instance to function, in addition to some particles having
different context dependencies. There isn&#x27;t a nice way to have a generic config
that will allow for use of those dependencies in any meaningful way. Instead, we
can write shaders, which are hot-loadable and more flexible because they allow
for data values like a config to be able to also have expressions, statements,
and use the context dependencies that are passed in etc. Basically, it&#x27;s the
same as animation code, except instead of bones, there are vertices, instances,
and fragments. GLSL instead of Rust.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;733630340089905162&amp;#x2F;screenshot_1594981422323.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;cpu-workloads-by-angelonfira&quot;&gt;CPU Workloads by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Earlier this week I saw &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;opensource&#x2F;comments&#x2F;hs99i0&#x2F;distribute_cpu_workloads_to_multiple_cores_in&#x2F;&quot;&gt;a
post&lt;&#x2F;a&gt;
on &#x2F;r&#x2F;opensource asking if a piece of software could distribute single core
games over multiple core. I wrote this long-winded reply.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I think this is actually quite a good question. The short answer is no, a piece
of software is bound to how it handles computation. For a longer answer, I
should mention that although I&#x27;ve been exposed to some of these topics, I
haven&#x27;t implemented them myself, and so I&#x27;m open to corrections or further
details. My experience comes from an open source game I&#x27;m contributing to,
Veloren. The programming language we use, Rust, allows us to make quite good use
of multiple CPU cores to their full capabilities.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;735494052644126760&amp;#x2F;speed.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;First, it&#x27;s important to know why it&#x27;s difficult for code to work on different
cores, or threads, or more fundamentally, processes. The key factor this comes
down to is the idea of &quot;thread safety&quot;. At the ground level, many larger program
architectures break down to how the variables manipulated in them. If I have a
variable, and I allow multiple pieces of running code to access it, then I&#x27;m
very likely to make mistakes with how this variable is used. There are a few
questions to be asked about this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;If a thread deleted this variable, do other threads know that it was deleted?&lt;&#x2F;li&gt;
&lt;li&gt;Did a thread read the variable before another thread updated it? If so, was
that the right order that I wanted?&lt;&#x2F;li&gt;
&lt;li&gt;What if one thread overwrites an update that another thread just made to it?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;These questions are not easy to answer without guarantees, like the ones that
Rust provides:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;If multiple threads try to have &quot;ownership&quot; of a variable at the same time,
the program won&#x27;t compile.&lt;&#x2F;li&gt;
&lt;li&gt;Once the &quot;owner&quot; of a variable goes out of scope, that variable is also
deleted. No one else except the owner would expect it to be still there.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Further, there are some other ways that Rust helps you:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Variables are immutable by default. This means that if you don&#x27;t explicitly
allow a variable to be changed, you can be sure that it won&#x27;t change under
your nose, and that you can rely on it being the same.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;735494340163665930&amp;#x2F;screenshot_1594986609043.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;When a game is only using 1 thread, it doesn&#x27;t have to worry about any of this.
Will anyone change this variable before I use it next? No, because only I can
change it. What if the variable is deleted? Well, that&#x27;s my fault and no one
else&#x27;s.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;This next section is purely speculation on my part, I don&#x27;t have any industry
experience.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Next, why don&#x27;t AAA games make use of these extra cores? A primary reason is
that the engines these games uses are often very large and have many moving
parts that prevent them from changing their core architecture. It would require
a fundamental overhaul to introduce functionality that would allow it to
distribute the workload to multiple threads. Further, lots of research into
distributed and parallel computing was still going on while these engines were
being created.&lt;&#x2F;p&gt;
&lt;p&gt;On top of this, AAA games are quite used to working within hardware constraints.
This is because when you are leading a game&#x27;s development, you need to
explicitly tell each team how much compute or graphics processing time they are
allowed to use each frame. For AAA games on consoles, this is even more clear.
Each PS4 has the exact same CPU and GPU, so you can be sure that if you run the
game at the required 30 fps, anyone else will be able to as well. Back when
these engines were being created for PC games, many computers only had one core,
one thread. If you&#x27;re suddenly telling these teams that they have double the
compute power across two threads, or maybe 4 times on a different CPU, it
wouldn&#x27;t really change the engine that has to cooperate with consoles.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, many games are not actually CPU bound. It is often the graphics card
that is the limiting factor. Some tasks are best suited for each type of
processing. For example, rendering lighting at each pixel is great for a GPU
that has thousands of &quot;dumb&quot; cores. AI pathfinding that requires a lot of
&quot;smarter&quot; compute is best on CPU. This doesn&#x27;t hold true for all games, but it&#x27;s
much easier to improve algorithm runtime for CPU tasks than it is for GPU, which
intrinsically has to do work on 1920*1080 = 2073600 pixels each frame.&lt;&#x2F;p&gt;
&lt;p&gt;Anyways, I hope that most of this is correct and helpful. I&#x27;ll send it to my
team as well and add any edits if there is anything that is very out of place.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;735491595859787816&amp;#x2F;screenshot_1595091768804.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Many mountains to explore. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;735447097364578395&#x2F;agnpLcH.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 76</title>
          <pubDate>Mon, 13 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-76/</link>
          <guid>https://veloren.net/blog/devblog-76/</guid>
          <description>&lt;p&gt;This week we see lots of progress on UI as the crafting screen is coming
together. @lobster gives us an overview of their progress on the particle
system. @xMAC94x gives us a tutorial on how to get started writing translations
for people who know other languages.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @xMAC94x, @XVar, @yusdacra,
@Fexii, @Songtronix, @Sam, @gSpera, @.c, and @Slipped!&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau has released another &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;art-blog-no-6-39181384&quot;&gt;art
blog&lt;&#x2F;a&gt;. @Goldenrevolver is
working on implementing opening and closing doors. @Kalculate is working on
fixing a UI bug with the language selector. @Pfau finished the first
implementation of the crafting UI alongside @zesterer. @Pfau is now working on
groups with @imbris.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;732618223739994192&amp;#x2F;fire-particles.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;WIP particle system. Check out the writeup to see how it&amp;#x27;s
  progressing!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam has been working on diversifying creatures by changing how much health they
have, how much damage they do, and how much XP they give. They are also working
on adding a protection stat to armor, which will reduce incoming damage. @Fexii
added a free-fly camera mode for debugging purposes. @Sharp has been doing some
cleanup on his LoD&#x2F;lighting branch to prepare it for merging.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;732612436871348294&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;732612454470647938&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;732612475849277610&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;732613398243704902&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Crafting preview&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;particle-system-by-lobster&quot;&gt;Particle System by @lobster&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;731840484317724692&amp;#x2F;732229747886653532&amp;#x2F;particles_beginning.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve been working on creating an ECS particle emitter component. It can be
configured and attached to an entity, like smoke trail emitter component on a
fireball entity, or a campfire entity. Below you can see what types of
parameters we can currently change on particles:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; spawn X particles per Y, that live for Z, at W location
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub struct &lt;&#x2F;span&gt;&lt;span&gt;ParticleEmitter {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;count&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u8&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;frequency&lt;&#x2F;span&gt;&lt;span&gt;: Duration,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;initial_lifespan&lt;&#x2F;span&gt;&lt;span&gt;: Duration,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;initial_offset&lt;&#x2F;span&gt;&lt;span&gt;: (Vec3&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;, Vec3&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; range; upper-lower
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;initial_scale&lt;&#x2F;span&gt;&lt;span&gt;: (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;initial_orientation&lt;&#x2F;span&gt;&lt;span&gt;: (Vec3&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;, Vec3&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;),
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; ... WIP ...
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; initial_velocity etc
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And then I implemented a system that handles the emitting of particles and the
particle lifecycles, for each of the emitter components. Below we can see what
some of the math looks like when rendering particles:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;Mat4::identity()
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; initial rotation
&lt;&#x2F;span&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;rotated_x&lt;&#x2F;span&gt;&lt;span&gt;(rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_orientation.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span&gt;x * std::f32::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_orientation.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt;x * std::f32::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  ))
&lt;&#x2F;span&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;rotated_y&lt;&#x2F;span&gt;&lt;span&gt;(rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_orientation.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span&gt;y * std::f32::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_orientation.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt;y * std::f32::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  ))
&lt;&#x2F;span&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;rotated_z&lt;&#x2F;span&gt;&lt;span&gt;(rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_orientation.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span&gt;z * std::f32::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_orientation.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt;z * std::f32::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  ))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; initial scale
&lt;&#x2F;span&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;scaled_3d&lt;&#x2F;span&gt;&lt;span&gt;(rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_scale.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    particle_emitter.initial_scale.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  ))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; inition position
&lt;&#x2F;span&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;translated_3d&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    pos.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; relative to parent entity
&lt;&#x2F;span&gt;&lt;span&gt;    + Vec3::new(
&lt;&#x2F;span&gt;&lt;span&gt;      rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(particle_emitter.initial_offset.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span&gt;x, particle_emitter.initial_offset.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt;x),
&lt;&#x2F;span&gt;&lt;span&gt;      rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(particle_emitter.initial_offset.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span&gt;y, particle_emitter.initial_offset.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt;y),
&lt;&#x2F;span&gt;&lt;span&gt;      rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(particle_emitter.initial_offset.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span&gt;z, particle_emitter.initial_offset.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt;z),
&lt;&#x2F;span&gt;&lt;span&gt;    ),
&lt;&#x2F;span&gt;&lt;span&gt;  )
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;732621543208910879&amp;#x2F;fire-particles.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is only a very basic implementation without many optimisations. I am using
instancing and trying to avoid communication between the CPU and GPU, which is
expensive. So once the particles are configured and uploaded to the GPU it&#x27;s
best to let them be independent, without further communication from the CPU.
However, this means the particle having a fixed trajectory.&lt;&#x2F;p&gt;
&lt;p&gt;There are many optimisations to be made around efficiently managing particles
regarding the hardware properties and limitations. This includes buffer
management and scheduling.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;we-need-your-help-for-translations-this-is-how-it-s-done-by-xmac94x&quot;&gt;We need your help for translations, this is how it&#x27;s done (by @xMAC94x)&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;732601248276152390&amp;#x2F;Coaches-We-want-you-image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is a tutorial on how to extend Veloren with new languages. It is targeted
for everyone who wants to enjoy Veloren in their native language. In Veloren we
are using the &lt;code&gt;i18n&lt;&#x2F;code&gt; technique to translate text in the game. For every
language, there is a file in
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;tree&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;i18n&quot;&gt;&lt;code&gt;assets&#x2F;voxygen&#x2F;i18n&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren developers tend to only update the English version when they add a new
feature. Other languages are not updated by us developers. We simply don&#x27;t speak
all the languages to be able to do this. So rather we need your help, if you are
a native speaker and have good English knowledge you can check what needs to be
updated in your language to include the latest features.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-missing-translations&quot;&gt;Fix Missing Translations&lt;&#x2F;h3&gt;
&lt;p&gt;To help you, @yusdacra fixed and improved a language test which is automatically
executed every time a feature is added to Veloren. This tutorial shows you how
to use his awesome test!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;732188229381521438&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Open (1) &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;pipelines&quot;&gt;this link&lt;&#x2F;a&gt; where you
see a list of pipelines currently running in our CI system. Try to find a
relatively new (top is new) pipeline which is already green and contains the
title &lt;code&gt;unittests&lt;&#x2F;code&gt;. Not every pipeline might have one and it is not essential to
get the newest one, just &lt;code&gt;unittests&lt;&#x2F;code&gt; and you are probably good enough to go (2).
Click on it (3). A page will open with a black box and a lot of text. You have
to scroll up a bit and find something like what we see below:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;-----------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;span&gt;Overall Translation Status
&lt;&#x2F;span&gt;&lt;span&gt;-----------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;span&gt;            | up-to-date | outdated | untranslated
&lt;&#x2F;span&gt;&lt;span&gt;tr_TR.ron   |     206    |    11    |      19
&lt;&#x2F;span&gt;&lt;span&gt;pt_PT.ron   |     123    |    15    |      98
&lt;&#x2F;span&gt;&lt;span&gt;es_ES.ron   |     213    |     5    |      18
&lt;&#x2F;span&gt;&lt;span&gt;fr_FR.ron   |     100    |    18    |     118
&lt;&#x2F;span&gt;&lt;span&gt;it_IT.ron   |     120    |    17    |      99
&lt;&#x2F;span&gt;&lt;span&gt;ru_RU.ron   |     198    |     6    |      32
&lt;&#x2F;span&gt;&lt;span&gt;de_DE.ron   |     223    |    10    |       3
&lt;&#x2F;span&gt;&lt;span&gt;pt_BR.ron   |     199    |     8    |      29
&lt;&#x2F;span&gt;&lt;span&gt;73.20% up-to-date, 4.77% outdated, 22.03% untranslated
&lt;&#x2F;span&gt;&lt;span&gt;-----------------------------------------------------------------------------
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is the indication that you did everything right and got to the statistics.
This is an overview page that shows you the available languages and if there are
some missing or outdated translations. Let&#x27;s say we want to focus on the German
one, &lt;code&gt;de_DE&lt;&#x2F;code&gt;. We have to scroll further up till we get the detailed info:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;-----------------------------------
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;assets&#x2F;voxygen&#x2F;i18n&#x2F;de_DE.ron&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;-----------------------------------
&lt;&#x2F;span&gt;&lt;span&gt;Key hud.bag.stats_title does not have a Git line in its state! Skipping key.
&lt;&#x2F;span&gt;&lt;span&gt;Commit ID of key hud.bag.stats_title in i18n file assets&#x2F;voxygen&#x2F;i18n&#x2F;de_DE.ron is missing! Skipping key.
&lt;&#x2F;span&gt;&lt;span&gt;State       | Key name                                                    | assets&#x2F;voxygen&#x2F;i18n&#x2F;de_DE.ron            | assets&#x2F;voxygen&#x2F;i18n&#x2F;en.ron
&lt;&#x2F;span&gt;&lt;span&gt;[Unused   ] | char_selection.chest_color                                  | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | None
&lt;&#x2F;span&gt;&lt;span&gt;[Unused   ] | char_selection.create_charater                              | ecb7963730ad2eb8d6e10f6df5dfaf99abccca5b | None
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | char_selection.eye_color                                    | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | ddaa0a9246abddcd623d32c2c1fcf4cd794882df
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | char_selection.plains_of_uncertainty                        | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | ecb7963730ad2eb8d6e10f6df5dfaf99abccca5b
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | char_selection.skin                                         | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | f7d6f76a0458716ceaf5a53d3a70ee7f0fb9eda6
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | common.sound                                                | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | 45217915911ddf1b5ea6a8ff36c2394fd755fcc6
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | gameinput.slot2                                             | f24ba71d9446ea8bcf259020125eaa4290bfde49 | ddaa0a9246abddcd623d32c2c1fcf4cd794882df
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | hud.auto_walk_indicator                                     | 9b2785aeae5b60984691c18a324b1d62ce2b9ed2 | ddaa0a9246abddcd623d32c2c1fcf4cd794882df
&lt;&#x2F;span&gt;&lt;span&gt;[Unknown  ] | hud.bag.stats_title                                         | None                                     | 88a938653be9a95128e938d24afba559bf57fdf5
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | hud.chat.loot_msg                                           | 89400264dc0fb9babb93bcdd04f97c4252dcd772 | ddaa0a9246abddcd623d32c2c1fcf4cd794882df
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | hud.chat.offline_msg                                        | 89400264dc0fb9babb93bcdd04f97c4252dcd772 | ddaa0a9246abddcd623d32c2c1fcf4cd794882df
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | hud.press_key_to_toggle_debug_info_fmt                      | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | e10f27f4806d9c9493bda4b5990a3d44b317fe10
&lt;&#x2F;span&gt;&lt;span&gt;[NotFound ] | hud.settings.reset_keybinds                                 | None                                     | 8e523364ac8b3a155938c98010562c664d577c57
&lt;&#x2F;span&gt;&lt;span&gt;[Outdated ] | hud.settings.toggle_shortcuts                               | 1af82604b55839275998d6afe7ee51a9ffbfdfe4 | ddaa0a9246abddcd623d32c2c1fcf4cd794882df
&lt;&#x2F;span&gt;&lt;span&gt;[NotFound ] | hud.settings.unbound                                        | None                                     | 198c875559dbb1895249ea5d959b61dbff8901bf
&lt;&#x2F;span&gt;&lt;span&gt;223 up-to-date, 10 outdated, 2 unused, 2 not found, 1 unknown entries
&lt;&#x2F;span&gt;&lt;span&gt;94.49% up-to-date, 4.24% outdated, 1.27% untranslated
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here we have detailed information about all language keys used in the German
&lt;code&gt;de_DE&lt;&#x2F;code&gt; file in comparison with the standard &lt;code&gt;en&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Unused&lt;&#x2F;code&gt;: The key exists in German but not in English, these can probably be
removed in the German version.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;NotFound&lt;&#x2F;code&gt;: The key exists in English but doesn&#x27;t exist in German. Here we
need your translation!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Outdated&lt;&#x2F;code&gt;: The English name was changed and the German wasn&#x27;t updated. This
might be a hint that the German version is outdated and needs an update.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Okay, let&#x27;s say we want to add the correct name for
&lt;code&gt;hud.settings.reset_keybinds&lt;&#x2F;code&gt;. So we first want to look it up in English:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;i18n&#x2F;en.ron&quot;&gt;&lt;code&gt;assets&#x2F;voxygen&#x2F;i18n&#x2F;en.ron&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
Behind the key we find the English sentence: &lt;code&gt;Reset to Defaults&lt;&#x2F;code&gt;. We know that
the German equivalent would be &lt;code&gt;Standarteinstellungen wiederherstellen&lt;&#x2F;code&gt; (Well,
some of us do :P). So we open the German file:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;assets&#x2F;voxygen&#x2F;i18n&#x2F;de_DE.ron&quot;&gt;&lt;code&gt;assets&#x2F;voxygen&#x2F;i18n&#x2F;de_DE.ron&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.
If you are already a developer in GitLab you&#x27;ll now see an edit button. If you
are not familiar with GitLab or Git, you can also ask people on our Discord to
help you, we are happy to support you any time :) Feel free to ping
&lt;code&gt;@git-wizard&lt;&#x2F;code&gt;, who will always be on deck to help with this.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;732188250852032542&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;You can click on the edit button here&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Once you are editing the file on GitLab, go to the respective place where our
entry is missing and add it here:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;fluent&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-fluent &quot;&gt;&lt;code class=&quot;language-fluent&quot; data-lang=&quot;fluent&quot;&gt;&lt;span&gt;&amp;quot;hud.settings.awaitingkey&amp;quot;: &amp;quot;Drückt eine Taste...&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;hud.settings.reset_keybinds&amp;quot;: &amp;quot;Standarteinstellungen wiederherstellen&amp;quot;,
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When you&#x27;re done, enter a specific commit message such as &lt;code&gt;update the German translation&lt;&#x2F;code&gt;. You&#x27;ll then create a target branch with &lt;code&gt;&amp;lt;yourname&amp;gt;&#x2F;&amp;lt;language&amp;gt;&lt;&#x2F;code&gt;.
For example, mine would be &lt;code&gt;xMAC94x&#x2F;update-de&lt;&#x2F;code&gt;. Finally, you&#x27;ll need to create a
merge request. Check the boxes to agree that you&#x27;re code will be under GPL3
license.&lt;&#x2F;p&gt;
&lt;p&gt;You now requested to change the file, and we will then take a look at it and if
we found it okay we will merge it into the game! From that point on your
contribution will land in the &lt;code&gt;master&lt;&#x2F;code&gt; branch, and in the next few days will be
shipped to you via Airshipper. Thank you for your contribution!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;help-review-other-translations&quot;&gt;Help Review Other Translations&lt;&#x2F;h3&gt;
&lt;p&gt;Maybe someone already did a translation for your language. If so, you&#x27;ll find a
pending merge request with your language (e.g. &lt;code&gt;de_DE&lt;&#x2F;code&gt;) this list:
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&lt;&#x2F;a&gt;.
Ask us in Discord for reporter privileges and you can open it and add your
thoughts to it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;732188412312027146&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;When clicking on the &lt;code&gt;Changes&lt;&#x2F;code&gt; tab you can see the details of this change. Red
lines are old ones that are removed and replaced by green lines. If you disagree
with something that was added, you can start a discussion by clicking on the
respective line. If you don&#x27;t see any issues with the proposed changes, feel
free to approve the MR or comment on it. It&#x27;s important that you approve MR for
translations as we the developers don&#x27;t have the knowledge to verify the
language (and we don&#x27;t want to put everything through Google Translate). So you
help us to verify others contributions resulting in improving the game quality
:)&lt;&#x2F;p&gt;
&lt;p&gt;Thank you!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;732437745376428142&amp;#x2F;screenshot_1594697128840.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Watching an unbelivably rare harmonic convergence of celestial
  bodies. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;732597160331444324&#x2F;IpqYVnn.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 75</title>
          <pubDate>Mon, 06 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-75/</link>
          <guid>https://veloren.net/blog/devblog-75/</guid>
          <description>&lt;p&gt;Welcome to the longest Veloren blog post so far! This week we hear from @xMAC94x
about the network switchover. @imbris discusses an interesting bug. @zesterer
overhauled pathfinding and wrote about how it&#x27;s better. @Sharp shares some
insights about how GUIDs might not always be the best. Timo went hiking and
biking.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @xMAC94x, @lobster, @Songtronix,
@imbris, @ProTheory8, @Slipped, @Snowram, @Qutrin, @AngelOnFira, @XVar, @Sam,
@Pfau, @KevinGlasson, @Nancok, @theduke, @Patro, @Redo11,and @Swedneck!&lt;&#x2F;p&gt;
&lt;p&gt;There is a new &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-011&#x2F;&quot;&gt;Rust gamedev
newsletter&lt;&#x2F;a&gt; to check out!
@Pfau also has &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;weekly-blog-no-5-38924509&quot;&gt;a new
edition&lt;&#x2F;a&gt; of his weekly
Veloren art blog. The team met this last weekend for a 0.6 halfway meeting.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;730229799964115065&amp;#x2F;knockback.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Testing knockback values on a new hammer attack&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Songtronix fixed an error with preventing &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;&quot;&gt;the book&lt;&#x2F;a&gt;
from working with Zola 0.4.1. The art team worked on improving spell and attack
icons. They decided on a colour code system for icon backgrounds so that the
player instantly knows what category it is in. For example, red means physical,
while green means healing.&lt;&#x2F;p&gt;
&lt;p&gt;Qutrin implemented a loot table system that allows choosing drop rates for
items. @lobster was working on one-handed weapon fixes, and started working on
particle effects. @WelshPixie had to resort to proofreading lore docs since
there is currently a technical block on adding lots of sprites like she wanted.
@Snowram helped @Slipped to finish the quadruped rework.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;729672796355166318&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Skunk by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@XVar the foundational backend implementation of skills and skill groups, and is
now waiting for game design to come in with some preliminary skills to get into
the game. @Gemu has been making progress on the small-quad reworks, such as the
skunk. @Felixader is working on a few things. First is the design description
and history behind the ideals of how the different cultures construct their
cities. Second is cultural design philosophies for items. Finally, he is working
on a structure for writers can format ideas for quests, lore items, and other
writing items. This will have to be discussed with other groups to make sure it
fits nicely.&lt;&#x2F;p&gt;
&lt;p&gt;@Sam finished a new hammer attach which has been merged. They are now working on
a new spinning axe attack. @JackRubino has completed an update to the Italian
translation. @Sharp is still hard at work their monumental LoD and shadows
branch, otherwise known as &lt;code&gt;sharp&#x2F;small-fixes&lt;&#x2F;code&gt;. There is hope that this branch
will be merged soon!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;1cxoFSiTYy4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;networking-milestone-by-xmac94x&quot;&gt;Networking Milestone by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;In the blog we&#x27;ve covered a lot about networking recently. Last Friday we
reached a networking milestone. The alternative networking backend got
implemented into Veloren and will be active from now on. While no additional
features are activated yet, everything is prepared to have it enabled seamlessly
in the future.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;729467610311426078&amp;#x2F;screenshot_1593988638078.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rolling mountains by @Treeco&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;network-switchover&quot;&gt;Network Switchover&lt;&#x2F;h3&gt;
&lt;p&gt;The switch itself was quite a success considering it was switching the whole
networking layer under the hood. There were a few problems, however:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Server had a problem of too much logging which was fixed within an hour of
discovery&lt;&#x2F;li&gt;
&lt;li&gt;Clients would panic if the server disconnected them, which was also fixed
within an hour&lt;&#x2F;li&gt;
&lt;li&gt;When a clients disconnects from a server they had to wait 20 seconds for the
timeout before reconnecting&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;None of those errors caused game-breaking behavior. Unfortunately, we had a
further difficulty as our network frontend was sending way to much data (10
Mbit&#x2F;s per player even on idle). This required lz4 compression to be reenabled
to serve more than 4 players at a time on the official server.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;729756092636201010&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New icon for the axe skill&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Beside that, we were doing a lot of testing and found multiple other unrelated
bugs in Veloren:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Some messages from the server were getting dropped for a while now. Additional
logging is now provided so this can be prevented in the future.&lt;&#x2F;li&gt;
&lt;li&gt;Entities are no longer in sync when you leave spawn and come back&lt;&#x2F;li&gt;
&lt;li&gt;Our netcode sends way too many inventory syncs, @imbris pushed a fix on Monday&lt;&#x2F;li&gt;
&lt;li&gt;Crash due to missing green pants item&lt;&#x2F;li&gt;
&lt;li&gt;Render distance not adjusted correctly&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;next-steps-for-networking&quot;&gt;Next Steps for Networking&lt;&#x2F;h3&gt;
&lt;p&gt;The next steps for Veloren networking are quite clear:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Improve stability&lt;&#x2F;li&gt;
&lt;li&gt;Work on the great list of stuff to improve from @Songtronix, @zesterer, and
@imbris&lt;&#x2F;li&gt;
&lt;li&gt;Enable the multi-stream channel which will allow faster entity sync transfers
even while there is a heavy bandwidth load&lt;&#x2F;li&gt;
&lt;li&gt;Better network statistics in Grafana, which will be beneficial for
development and release parties&lt;&#x2F;li&gt;
&lt;li&gt;Invest in testing and scaling with multiple players (automated tools for high
player-load tests)&lt;&#x2F;li&gt;
&lt;li&gt;Enable the UDP backend, which will decrease latency significantly&lt;&#x2F;li&gt;
&lt;li&gt;Network feedback to its ECS systems e.g when bandwidth is slow in order to
reduce a player&#x27;s tick count. This might enable higher tick servers)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Those steps will be tackled within the next weeks and months, so stay curious 🙂&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-case-of-the-disappearing-entities-by-imbris&quot;&gt;The Case of the Disappearing Entities by @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;A bug was found that caused entities to randomly vanish. At first, it was
thought to be caused by some NaN in the code or a malfunction in the region
system used to select what entities to sync to each client. This could be
reproduced with the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Open the game&lt;&#x2F;li&gt;
&lt;li&gt;Go from far enough from spawn town that you can&#x27;t see it&lt;&#x2F;li&gt;
&lt;li&gt;Go back to spawn town&lt;&#x2F;li&gt;
&lt;li&gt;Try rolling, shooting bow, or spawning entities&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The culprit can be seen in the image below. On login, the &lt;code&gt;client&lt;&#x2F;code&gt; sends its
requested view distance to the &lt;code&gt;server&lt;&#x2F;code&gt;. The &lt;code&gt;server&lt;&#x2F;code&gt; makes sure that it&#x27;s
constrained to a maximum allowed view distance. The code handles this by sending
the &lt;code&gt;client&lt;&#x2F;code&gt; an updated view distance if it was over the maximum. If you look
carefully at the &lt;code&gt;map&lt;&#x2F;code&gt; the two parameters are disordered leading to the &lt;code&gt;client&lt;&#x2F;code&gt;
always receiving a message telling it to use the max view distance.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;729613634862317629&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;However, if the &lt;code&gt;client&lt;&#x2F;code&gt; initially requested a smaller value the &lt;code&gt;server&lt;&#x2F;code&gt; will
still think that is the value being used. Additionally, the view distance in
&lt;code&gt;voxygen&lt;&#x2F;code&gt; is never updated because the &lt;code&gt;client&lt;&#x2F;code&gt; uses an event returned from
&lt;code&gt;tick&lt;&#x2F;code&gt; to inform &lt;code&gt;voxygen&lt;&#x2F;code&gt; of this change. At the time of the bug, &lt;code&gt;voxygen&lt;&#x2F;code&gt;
ignored all events from the &lt;code&gt;client&lt;&#x2F;code&gt; while on this screen because they were
previously not relevant.&lt;&#x2F;p&gt;
&lt;p&gt;So we end up with a scenario where the &lt;code&gt;server&lt;&#x2F;code&gt; and &lt;code&gt;voxygen&lt;&#x2F;code&gt; both have the
selected view distance, say 10, while the &lt;code&gt;client&lt;&#x2F;code&gt; thinks the view distance is
the max configured on the &lt;code&gt;server&lt;&#x2F;code&gt;, say 30. Thus, the terrain renders as you
would expect but the &lt;code&gt;client&lt;&#x2F;code&gt; doesn&#x27;t unload chunks farther out since they are
still within the view distance that it knows.&lt;&#x2F;p&gt;
&lt;p&gt;However, these chunks are unloaded on the &lt;code&gt;server&lt;&#x2F;code&gt; since it sees them as being
outside the &lt;code&gt;client&lt;&#x2F;code&gt;&#x27;s view distance. Then, once the player goes back to the
spawn town they will see the terrain chunks that the &lt;code&gt;client&lt;&#x2F;code&gt; held on to but the
&lt;code&gt;client&lt;&#x2F;code&gt; won&#x27;t request the &lt;code&gt;server&lt;&#x2F;code&gt; to reload them. Additionally, since the area
is not actually loaded on the &lt;code&gt;server&lt;&#x2F;code&gt; any non-player entities will be deleted.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pathfinding-with-zesterer&quot;&gt;Pathfinding with @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;I made a bunch of changes to pathfinding this week. The biggest improvements
come from three places: heuristic modifications, velocity alignment, and cubic
spline motion planning. Previously, pathfinding worked something like this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730404219936309328&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Getting from A to B used the A* algorithm with a basic distance heuristic. This
resulted in paths that felt a bit odd. Enemies wouldn&#x27;t run towards you in
straight lines and pets would make bizarre robotic movements in order to catch
up with you. This happens because the pathfinding only considers the most
&#x27;locally&#x27; efficient path to the goal: and since it can only consider the 8
neighbouring blocks, the best it can do is to choose the block that moves
closest to the target from the source block.&lt;&#x2F;p&gt;
&lt;p&gt;To solve this problem I modified the pathfinding heuristic to make A* prefer to
use paths that are closer to a straight line to the target. This means that they
now prefer paths that are shorter from the perspective of an agent that can move
freely rather than one that can only do King moves in chess. This adjustment to
the heuristic is actually very small: in most decisions it has almost no impact,
but it&#x27;s enough to act as a tie-breaker between two options that appear to both
be optimal from the local perspective. The result is that it now produces paths
that look like this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730405206474489897&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This feels a lot more natural: enemies run towards you in relatively straight
lines, as do pets. However, there were still problems. In fact, this method
introduces even more problems. Agents follow path nodes one at a time, aiming
for the centre of each block. This resulted in lots of small turns appearing in
the paths agents took. Where the old system created paths with lots of straight
lines like this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730405683001950338&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The new system created paths with lots of small turns like this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730405853437362216&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This results in a lot of jerky movement: agents zig-zagging as their run, and a
lot of ugly rapid rotation. To alleviate this problem I came up with another
solution. I realised that the primary problem was that agents were aiming for
the centre of each block and that the resulting motion would look much smoother
if the agent instead aimed for the &#x27;most convenient&#x27; position to hit within that
block.&lt;&#x2F;p&gt;
&lt;p&gt;&#x27;Most convenient&#x27; can be a little hard to pin down, but a very good
approximation of it can be found by looking at the agent&#x27;s current velocity
vector. The most convenient position within a block will be that which requires
the least deviation from the current velocity to reach. This might initially
seem like a daunting problem: agents move with smooth movement using
floating-point numbers, so the number of points in the block to consider would
be, in practical terms, infinite.&lt;&#x2F;p&gt;
&lt;p&gt;However, this actually boils down to a simple linear optimisation problem. It
turns out that an optimal solution will always appear on the edge of the block.
To solve this, we can instead just find the intersection between the current
velocity vector and the line that represents each edge of the block. The result
is that we can achieve smooth motion even if the pathfinding itself remains
grid-aligned. As a result, the path the agent actually takes looks like this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730407757290930304&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There&#x27;s a secondary advantage that comes with this technique too. As it turns
out, considering diagonal blocks makes pathfinding much more expensive. This is
because validating that a diagonal block is accessible first requires that
determining that at least one of the two blocks adjacent to the source and
target blocks is accessible as well. This adds a lot of overhead to pathfinding.&lt;&#x2F;p&gt;
&lt;p&gt;The original reason for adding diagonal pathfinding was to create smoother
paths: but this new technique blows diagonal pathfinding out of the water for
that! As a result, we can actually remove the diagonal pathfinding and get away
with adjacent cardinal pathfinding instead. The result of this is a path that
looks like this:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730409061924995093&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Although this path has more nodes than the previous one, it&#x27;s also much faster
to find (it might also be possible to do post-processing cleanup on it
afterwards but to be honest this isn&#x27;t really needed due to the aforementioned
velocity-alignment pass). The result of this is that pathfinding has become a
lot faster and can do more useful work per frame. This allowed me to up the
per-frame pathfinding iteration budget significantly meaning that agents
discover complex paths in far fewer frames than they previously could.&lt;&#x2F;p&gt;
&lt;p&gt;Lastly, I noticed some problems with the new animals. Many new animals, such as
wolves, got introduced recently. I wanted to make them (and other creatures)
feel a bit more natural so I added per-species movement speeds. The problem is
that wolves now run at almost twice the speed that they used to: and the
existing pathfinding code simply couldn&#x27;t cope. It tended to overshoot path
nodes, understeer on corners (leading to wolves falling off a lot of things),
and it turned them into terrible hill climbers since they kept moving too fast
down slopes, causing them to fall and hurt themselves.&lt;&#x2F;p&gt;
&lt;p&gt;The previous approach to pathfinding involved moving in a dead-straight line
towards the next path node. This worked fine for slower animals but, as
mentioned, breaks down completely here. The agents would attempt to follow the
following path:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730411634014814308&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;But in practice, this didn&#x27;t take into account the reality of their own
momentum, which resulted in them taking something closer to this path:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730412018724503652&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I reality, this problem was even worse: wolves would willingly hurl themselves
off narrow paths to their deaths with surprising vigor. To counter this problem,
I made them decide on a movement direction by constructing a cubic Bézier spline
(i.e: a curve) that took into account the following things:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;The agent&#x27;s current position&lt;&#x2F;li&gt;
&lt;li&gt;The agent&#x27;s current velocity&lt;&#x2F;li&gt;
&lt;li&gt;The positions of the next two nodes&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The result of this is a curve that goes from the agent&#x27;s position to the &lt;code&gt;n + 1th&lt;&#x2F;code&gt; node in the path, but curves to take into account the current velocity (to
keep movement smooth in the general case) and the nth node (to avoid erroneously
cutting corners).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;730413471421956157&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This seems to work quite well for keeping movement smooth but unfortunately, it
doesn&#x27;t help slow agents down on corners to avoid their untimely death. To solve
that problem, I added one last feature: agents now regulate their movement speed
by taking the cubic path tangent a little into the future and performing a dot
product against their current movement direction. This slows the agent down if
their current movement direction deviates significantly from the direction of
the path that they&#x27;ll soon be needing to take. This, for the most part, solves
the problem.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s not a perfect solution: it doesn&#x27;t (and shouldn&#x27;t - agents shouldn&#x27;t always
have access to this information) take into account the physical properties of
the world around them - friction with the ground, air resistance, their own
movement capabilities, etc. - but it&#x27;s good enough that agents move in a manner
that feels relatively reliable and realistic.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also made a tonne of extra tweaks to pathfinding, too small to mention
here, but these 3 changes were the big ones that had the most significant
impact. There&#x27;s still more that can be done and I plan to improve pathfinding
further in subsequent feature branches. For now though, this is a significant
improvement.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guid-insights-by-sharp&quot;&gt;GUID Insights by @Sharp&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;GUIDs, or UUIDs, are a type of ID that uses 128-bits numbers to identify
information. GUID stands for &quot;Globally Unique Identifier&quot;, while UUID stands
for &quot;Universally Unique Identifier&quot;. They take the form
&lt;code&gt;123e4567-e89b-12d3-a456-426614174000&lt;&#x2F;code&gt;. @Sharp and I had a discussion about
their potential downsides, and the misconception that sequential primary IDs
are outdated. - @AngelOnFira&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;First and foremost, this is not arguing that GUIDs should never be used. Rather,
I&#x27;m more arguing that you should think carefully about the kind of key you use
and choose the right one for the job. So basically, the primary issue with GUIDs
is that they&#x27;re very large and very spread out in keyspace. These are of course
exactly the properties you want from GUIDs, so this is a fundamental tension.&lt;&#x2F;p&gt;
&lt;p&gt;Any methods that rely on data being &quot;almost sorted&quot; or the ability to quickly
find a page on the hard drive containing a GUID will not work. For pretty much
any index type other than a hash index, you are going to have pathological
behavior for any update operation you care to think of as a result.&lt;&#x2F;p&gt;
&lt;p&gt;Secondly, due to the space increase, foreign keys and indices are larger (often
4x or more larger). This makes it much harder to normalize your database and get
good performance. I&#x27;ve found many instances where people told me they had to
denormalize their database for performance, but it turned out to just be about
GUID overuse.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;730243903365578772&amp;#x2F;spin.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New axe spin attack by @Sam&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This also applies to other operations like aggregation. Even if they don&#x27;t need
to touch the GUID column, they&#x27;re slower because they need to read more
information from disk. Note: this doesn&#x27;t apply to OLAP databases with column
storage, but these are usually not what&#x27;s used for most applications during
regular operations.&lt;&#x2F;p&gt;
&lt;p&gt;So you&#x27;re paying a very large penalty on essentially every operation on your
database other than nested hash lookups for the privilege of using GUIDs. The
nested hash lookups, while the only available query plan in a lot of key value
stores, are often suboptimal for industry-strength relational databases.&lt;&#x2F;p&gt;
&lt;p&gt;There are other performance concerns as well. Often, host languages have even
worse support for GUIDs than the database; in many dynamic languages the GUIDs
end up being read as strings. This introduces substantial serialization,
network, and parsing overhead over integers (and it&#x27;s measurable).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;730244977606787072&amp;#x2F;screenshot_1593904483926.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Work on @Sharp&amp;#x27;s shadows&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;One thing that&#x27;s often argued in favor of GUIDs is that it&#x27;s virtually
impossible that they will ever overlap. However, most databases will want you to
create a primary key anyway which guarantees uniqueness, so this advantage
doesn&#x27;t really benefit you except in a very distributed context. Moreover, the
advantage is very easy to get with mostly-sequential IDs too; you just include a
&quot;core&quot; or &quot;machine&quot; identifier in your generated ID.&lt;&#x2F;p&gt;
&lt;p&gt;This still produces compact IDs in the same local domain, but without requiring
synchronization. This can also be extended to secure contexts; IDs are
sequential within an organization or other security domain. Since your security
should never be based on someone knowing a particular ID value in the first
place, this also encourages much better secure design (in my experience). People
who rely on GUIDs have a tendency to assume that, since it&#x27;s so unlikely that
they could be guessed, they themselves function as a security barrier. They
forget about all the side channels through which they can be passed.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;730233852643246161&amp;#x2F;screenshot_1594171489107.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Starry night by @Treeco&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;GUIDs excel where loose synchronization is needed and there isn&#x27;t a centralized
registry, or where the GUID can do double duty (for example as a hash of its
contents). Git is a database that would make absolutely no sense with sequential
IDs. GUIDs of some sort (or at least, much larger keys) can also be really
useful in a database with a different mechanism for achieving performance. For
example, distributed key-value stores. However, they will still not achieve
nearly the kind of performance that a small-key-optimized one can no matter how
much you scale out, but they can often store far more data.&lt;&#x2F;p&gt;
&lt;p&gt;However, even then, it&#x27;s useful to be able to specify ranges so that you can
redirect key lookups to the correct partition without having to do a full hash
lookup. This kind of value-based partitioning scheme works best when values with
high locality are clustered. So just doing a global GUID is usually not the best
approach even there.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway yeah, for a tiny database or a system that doesn&#x27;t get much traffic, I
realize this is mostly academic. I just have seen way too many people get bitten
by GUID performance and not realize it. I think a lot of people assume that
sequential IDs are outdated and GUIDs are just categorically better now. At
least that&#x27;s the impression I&#x27;ve gotten. It&#x27;s mostly that idea I want to fight
back against.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;730165756070723705&amp;#x2F;screenshot_1594155004479.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Ocean of Clouds by @SoullessTeacloth. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;729627191532453888&#x2F;unknown-44.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 74</title>
          <pubDate>Mon, 29 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-74/</link>
          <guid>https://veloren.net/blog/devblog-74/</guid>
          <description>&lt;p&gt;This week we get a large update from the animation team. @Gemu talks modeling,
@Snowram skeletons, and @Slipped technique. @XVar gives us a rundown on the
progress being made on the skill system. We also have another art blog by @Pfau.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @XVar, @theduke, @AngelOnFira,
@Slipped, @Patro, @Redo11, @swedneck, @samuelkieffer, @Treeco, @Nancok, @Pfau,
@zesterer, @CapsizeGlimmer, @WelshPixie, @Imbris, @Songtronix, @Shandley, and
@yusdacra!&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer has been working on castles this week. A #ux working group was
created, and it is finding its footing. It will focus on improvements to how the
player interacts with the game. @WelshPixie has been working on new shoulder
armour. @XVar added chat messages when items are picked up, and the possibility
to play different SFX depending on what was picked up. There are two placeholder
sounds for swords and staves so far.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;727558508752535622&amp;#x2F;ezgif.com-video-to-gif1.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New item interactions by @XVar&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@xMAC94x has been continuing work on networking. He also upgraded the Rust
toolchain version as the Cargo MacOS error has been fixed. @lobster worked on
the ability to wield 2 one-handed items. More to come on this soon. @Pfau also
has a new art blog #4, which you can check out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;weekly-blog-no-4-38568170&quot;&gt;here&lt;&#x2F;a&gt;. @AngelOnFira
has gotten around to lots of the translations that have been waiting to be
merged for a while.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;JTfaHA57Nk4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Playthrough by paulsoaresjr!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;skill-system-work-by-xvar&quot;&gt;Skill System Work by @XVar&lt;&#x2F;h2&gt;
&lt;p&gt;This week I started work on implementing
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;merge_requests&#x2F;1135&quot;&gt;skills&lt;&#x2F;a&gt;, the
server-side foundation of a skill system for Veloren. Today there is only a
basic EXP&#x2F;LVL system in the game - you get EXP for killing monsters, and then
you can level up. However, there isn&#x27;t any concept of skills or abilities for
players yet.&lt;&#x2F;p&gt;
&lt;p&gt;A game design meeting on Discord over the weekend resulted in the decision that
adding skills to the game should be a top priority. It will allow us to start
implementing all sorts of abilities and skills to flesh out the actual gameplay
side of Veloren significantly. After this meeting, I drew up a quick concept of
how the UI for a skill group might look. This was primarily to make sure I&#x27;d
understood what the game design team actually wanted (a &quot;skill matrix&#x2F;grid&quot; was
frequently mentioned in the meeting). This is in no way representative of how
the end result will look!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;727561730951086140&amp;#x2F;pkymfx2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept of the skill grid&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Not all skill groups will be in a grid form, or have this kind of progression
path where you can only learn skills adjacent to already known skills, but all
skill groups will have some things in common - an EXP bar, a skill point pool,
and a list of skills that have been learnt in that group.&lt;&#x2F;p&gt;
&lt;p&gt;So distilling this down into what needs to be done for an MVP, we get this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Building on the existing &lt;code&gt;Stats&lt;&#x2F;code&gt; component that players have to include a list
of skill groups the player knows, their current EXP and SP count in those
groups, and a list of skills that they have learnt in that group.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Transferring this data between the client and the server.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Persisting the new skill groups and learnt skills to the database for each
player.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Adding new messages that the client can send to the server to request a skill
unlock or a skill point refund, with associated logic for the server to accept
or reject this request based on the current state of the player.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;722077783727145157&amp;#x2F;726827414218604644&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;While this might sound like a lot, I was actually surprised by how little work
is required to implement this on top of the existing infrastructure within
Veloren. Since it already has a robust client&amp;lt;&amp;gt;server messaging system, a
full-featured ECS synced between the client and server, etc - there&#x27;s not really
much &quot;plumbing&quot; required to add new features. I think when a new developer to
the project like myself can say this, it&#x27;s a testament to the hard work put in
by the Veloren team over the past few years.&lt;&#x2F;p&gt;
&lt;p&gt;Once this basic implementation of skill groups&#x2F;points is in place, there will
still be a fair amount of work left until players actually get usable skills -
Pfau is working on the design of the in-game skill book UI. Of course, there&#x27;s
actually designing&#x2F;implementing the skill groups&#x2F;abilities which I&#x27;m sure will
continue on for the foreseeable future as the game continues to grow :)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;727569322427285989&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Skill book UI mockup&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;animation-updates&quot;&gt;Animation updates&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;modeling-by-gemu&quot;&gt;Modeling by @Gemu&lt;&#x2F;h3&gt;
&lt;p&gt;Hello, my name is @Gemu. I have been remodeling a lot of the old creature models
from Veloren, so far having focused on the reptilian and several quadruped
animals. My contributions so far have been solely on the modeling side of the
reworks.&lt;&#x2F;p&gt;
&lt;p&gt;I joined Veloren a few months ago. It was then when I first started creating
voxel models and have received amazing support and feedback from the community.
I offered to rework the old dragon placeholder model, and went from there. As I
created models, the skeleton and animation progress made by @Slipped and
@Snowram truly makes the models come to life. Since I have very little
development experience myself, I&#x27;ve mostly stuck to making the models so far,
and breaking them up in usable parts for animation. Seeing the finished models
move around has been absolutely great. Therefore I plan to learn how to help
@Slipped and @Snowram and contribute to the technical aspect as well.&lt;&#x2F;p&gt;
&lt;p&gt;So far, the reworked models of all existing reptile models and medium-sized
quadruped creatures are pretty much finished. Aside from the pre-existing
models, I have created additional creature models based on the same skeletons,
which thanks to @Slipped and @Snowrams&#x27; hard work were able to appear as well.
So far I&#x27;ve continued working on other old animal model reworks, this time
focusing on the smaller quadrupeds. Once the larger quadrupeds will be all
finished up, new models will be ready to go. I hope the players will be excited
to see all these different kinds of creatures wandering around the world as they
play.&lt;&#x2F;p&gt;
&lt;p&gt;Working on the model reworks together with the others has been very enjoyable
and a great learning experience. The future will definitely bring more of that,
and I look forward to expanding my horizon and experience towards other areas as
well.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;726910091592466465&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;skeletons-by-snowram&quot;&gt;Skeletons by @Snowram&lt;&#x2F;h3&gt;
&lt;p&gt;Hey, I am @Snowram. I helped to implement new quadrupeds skeletons into the
game. A few weeks ago I decided to dive into Veloren animation by trying to
improve some existing skeletons and animations. It has been a pleasant
experience and the community has been very supportive. We have been working
together with @Gemu and @Slipped to bring new life to the old mobs.&lt;&#x2F;p&gt;
&lt;p&gt;While I don&#x27;t have a developer background, the Veloren codebase is clear enough
for everyone to take a poke at it. I started by adding a new skeleton to improve
the look of reptile-like creatures. They previously used the &quot;medium&quot; quadruped
one that is shared with mammals. Reptiles have a very different gait and
morphology so a &quot;low&quot; quadruped skeleton was definitely needed.&lt;&#x2F;p&gt;
&lt;p&gt;I imported every new models made by @Gemu and approved by the art team. Adding
new skeleton parts is a tricky process where you have to declare all the offsets
and rotation points for each new mobs. While these offsets are mostly the same
for a given skeleton, you have to account for some specific outliers. For
example, a crocodile tail is long and segmented while a turtle is short and made
using a single bone. After that, I made several improvements to the &quot;medium&quot;
quadruped skeleton. I broke all their legs into 2 bones in order for them to
have feet. This change allowed for more complex animations.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren can&#x27;t use animations made using a dedicated software yet so all of them
are hardcoded, fortunately, it is quite easy to animate voxel models using some
basic math. Some time ago @Imbris added a way to hot load animations and it made
the whole process more seamless than ever. I made some basic animations and
@Slipped did his magic to make them awesome.&lt;&#x2F;p&gt;
&lt;p&gt;In conclusion, I very much enjoyed working as a team with everyone involved.
This has been a great learning experience and the fact that each person has
brought their own skillset into the collective effort is motivating. You always
want to give the best to make the whole picture as great.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;727648581267488828&amp;#x2F;ezgif.com-video-to-gif4.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;technique-by-slipped&quot;&gt;Technique by @Slipped&lt;&#x2F;h3&gt;
&lt;p&gt;Hey, @Slipped here! Been a while since I&#x27;ve written anything up so this seemed
like a good spot to jump back into the blog. My main branch for the last month
or so has been the quadruped rework with @Gemu and @Snowram. It&#x27;s been great to
work with a team for a change as usually my work has been pretty isolated, and
we certainly needed one here as the change has been massive.&lt;&#x2F;p&gt;
&lt;p&gt;As @Snowram described, the main goal is to separate the low, reptile-like
quadrupeds from the taller wolf-like quadrupeds. At the same time we&#x27;re
reimporting all of @Gemu&#x27;s reworks (every mob has been rebuilt from the ground
up), as well as building in a much deeper animation setup for the mobs. This
includes the breaking of the leg into leg&#x2F;foot for &lt;code&gt;quadruped_medium&lt;&#x2F;code&gt; as
@Snowram mentioned, and also a general internal rewrite of the skeleton to
adjust every bone to be a child or grandchild of a single parent bone (an
important concept that I mostly neglected until recently).&lt;&#x2F;p&gt;
&lt;p&gt;The branch also has the addition of some new techniques that I&#x27;ve learned from
the humanoid skeleton in the last few months. These include adding orientation
tilt so that the body rotates smoothly on turns, and also using a ground-based
foot movement model instead of using pendulum rotation as we see in main. We&#x27;re
also differentiating strides for the first time. Animals have been moving around
at varying speeds in-game but their animation has not reflected that. Now in the
branch, we differentiate a trot and gallop for varying mob speeds, with
different movement frequencies and intensities of motion to highlight the
changed gait. One last piece we&#x27;ve got in now is a basic set of attack
animations for the quadrupeds. They&#x27;re in a pretty plain state currently, it
makes the combat feel a good bit more engaging when you see that feedback from
the monster you&#x27;re fighting.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;727647689378103457&amp;#x2F;ezgif.com-video-to-gif2.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New wolf animation. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;726826859995594854&#x2F;snz397v1gn751.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 73</title>
          <pubDate>Mon, 22 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-73/</link>
          <guid>https://veloren.net/blog/devblog-73/</guid>
          <description>&lt;p&gt;This week, we have a lot of updates from external platforms. @Pfau has another
art blog to show off. There is a lot of updates from the writing working group.
We hear about testing and documentation from @AngelOnFira.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @kevinglasson, @AngelOnFira,
@Songtronix, @imbris, @Slipped, @xvar, and @scottc!&lt;&#x2F;p&gt;
&lt;p&gt;Recently, Veloren has &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;explore&#x2F;projects&#x2F;starred&quot;&gt;made it to the front
page&lt;&#x2F;a&gt; of most-starred projects on
GitLab! Our YouTube channel has made it to 1000 subscribers as well. @Pfau has
released another &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;weekly-blog-no-3-38302553&quot;&gt;art
blog&lt;&#x2F;a&gt;. @Pfau has been
working on a trading window concept. @Felixader completed &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1VwemHghgLsViI4xkumRwSpZcocgTAHSXn-QCFvMATsc&#x2F;edit&quot;&gt;a design
document&lt;&#x2F;a&gt;
for the direction of the writing working group. He is also working on a document
detailing the cultural design philosophy. @WelshPixie &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;16INZYHvUEvYJIlVN9-1hbAvtNFQ3Y1fFnDrqgAVSVLQ&#x2F;edit&quot;&gt;wrote race
descriptions&lt;&#x2F;a&gt;
for inside the character creation menu. They also added lots of new lines for
when villagers get hit by players. @Gemu is still reworking some old models. So
far, all larger quadrupeds and reptilians are done. @Snowram and @Slipped have
been working on the animations and implementations of these new models.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;725160600690360341&amp;#x2F;screenshot_1592957794349.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New mobs by @Gemu, implemented by @Slipped and @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@kevinglasson added persistence of the hotbar, allowing it to be saved when the
game is exited. They also worked with @xMAC94x and @Songtronix to change logging
over to use the tracing crate. @Slipped is working on adding sneaking,
rebuilding climbing to be more fun, and adding glider wall running.
@mainCharacter was working on proofreading content that the player would see.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;722077783727145157&amp;#x2F;724601878125477949&amp;#x2F;mushroom6.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New mushroom models by @WelshPixie&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;improving-test-coverage-by-angelonfira&quot;&gt;Improving Test Coverage by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;In the last few weeks, I&#x27;ve been interested increasing test coverage and
documentation of the project. I&#x27;ve worked with @Kevinglasson and @Shandley on
this endeavor. Test coverage allows us to catch errors and regressions before
merging our code into the main branch. Documentation gives better information to
developers who touch many different parts of the codebase, or who are learning
about a new section.&lt;&#x2F;p&gt;
&lt;p&gt;Rust offers a great workflow for both documentation and test coverage. In fact,
you can build tests right into documentation for functions. This has two
benefits. First, the code that makes up this test can be used to show how a
function works. Second, if the tests in the function&#x27;s documentation fail,
likely the documentation needs to be changed at the same time.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;724832872099217490&amp;#x2F;snap2020-06-15-16-11-19.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Steppesman&amp;#x27;s helmet by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On top of doc tests, Rust has a great way of generating readable documentation.
It collects comments that are above functions and adds them to a static site
that it generates. You can see what that looks like
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.gitlab.io&#x2F;veloren&#x2F;veloren_common&#x2F;comp&#x2F;inventory&#x2F;slot&#x2F;fn.equip.html&quot;&gt;here&lt;&#x2F;a&gt;.
On this site, we see information about what this function expects as parameters,
and what type these parameters are. We then see the documentation written for
this function. Finally, we see the doc test written at the bottom. We can see an
&lt;code&gt;assert_eq!&lt;&#x2F;code&gt; at the end. If someone changes how equip works, and this assert
fails, then they would have to fix the documentation to reflect the change.
Below is what this entire function looks like in the codebase.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Equip an item from a slot in inventory. The currently equipped item will go
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; into inventory. If the item is going to mainhand, put mainhand in
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; offhand and place offhand into inventory.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; ```
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; use veloren_common::{
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     assets,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     comp::{
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;         slot::{equip, EquipSlot},
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;         Inventory, Item,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     },
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     LoadoutBuilder,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; };
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; let boots: Option&amp;lt;Item&amp;gt; = Some(assets::load_expect_cloned(
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     &amp;quot;common.items.testing.test_boots&amp;quot;,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; ));
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; let mut inv = Inventory {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     slots: vec![boots.clone()],
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;     amount: 1,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; };
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; let mut loadout = LoadoutBuilder::new().defaults().build();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; equip(0, &amp;amp;mut inv, &amp;amp;mut loadout);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; assert_eq!(boots, loadout.foot);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; ```
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;equip&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;slot&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;usize&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;inventory&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; Inventory, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;loadout&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; Loadout) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;item::{armor::Armor, ItemKind};
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; equip_slot = inventory.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(slot).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;match &lt;&#x2F;span&gt;&lt;span&gt;&amp;amp;i.kind {
&lt;&#x2F;span&gt;&lt;span&gt;        ItemKind::Tool(_) =&amp;gt; Some(EquipSlot::Mainhand),
&lt;&#x2F;span&gt;&lt;span&gt;        ItemKind::Armor { kind, .. } =&amp;gt; Some(EquipSlot::Armor(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; kind {
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Head(_) =&amp;gt; ArmorSlot::Head,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Neck(_) =&amp;gt; ArmorSlot::Neck,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Shoulder(_) =&amp;gt; ArmorSlot::Shoulders,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Chest(_) =&amp;gt; ArmorSlot::Chest,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Hand(_) =&amp;gt; ArmorSlot::Hands,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Ring(_) =&amp;gt; ArmorSlot::Ring,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Back(_) =&amp;gt; ArmorSlot::Back,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Belt(_) =&amp;gt; ArmorSlot::Belt,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Pants(_) =&amp;gt; ArmorSlot::Legs,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Foot(_) =&amp;gt; ArmorSlot::Feet,
&lt;&#x2F;span&gt;&lt;span&gt;            Armor::Tabard(_) =&amp;gt; ArmorSlot::Tabard,
&lt;&#x2F;span&gt;&lt;span&gt;        })),
&lt;&#x2F;span&gt;&lt;span&gt;        ItemKind::Lantern(_) =&amp;gt; Some(EquipSlot::Lantern),
&lt;&#x2F;span&gt;&lt;span&gt;        _ =&amp;gt; None,
&lt;&#x2F;span&gt;&lt;span&gt;    });
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Some(equip_slot) = equip_slot {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; If item is going to mainhand, put mainhand in offhand and place offhand in
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; inventory
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;EquipSlot::Mainhand = equip_slot {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;swap_loadout&lt;&#x2F;span&gt;&lt;span&gt;(EquipSlot::Mainhand, EquipSlot::Offhand, loadout);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;swap_inventory_loadout&lt;&#x2F;span&gt;&lt;span&gt;(slot, equip_slot, inventory, loadout);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I&#x27;ve worked on documenting and adding tests to a single file so far,
specifically &lt;code&gt;slots.rs&lt;&#x2F;code&gt;. I plan on doing more in the future. It is a good way
for me to get better at Rust as a low to mid level Rustacean. Hopefully, other
developers will work to document what they&#x27;re doing as well. It&#x27;s a lot easier
to add a few lines as you&#x27;re writing rather than for you or someone else to come
back to it later :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cultivating-a-healthy-open-source-community-by-angelonfira&quot;&gt;Cultivating a Healthy Open Source Community by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;aS26sqT09Pw&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;new-villager-retorts-by-welshpixie&quot;&gt;New Villager Retorts by @WelshPixie&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;&amp;quot;Tis but a scratch!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Heinous wretch, be gone with you!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Stop it! Go away!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Oi! Who do you think you are?!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;I&amp;#39;ll have your head for that!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;I&amp;#39;ll set my brother on you, he&amp;#39;s bigger than I am!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Nooo, I&amp;#39;m telling mother!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Your weapon works, you can put it away now!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Today is turning out to be a very bad day...&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Eek!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;A pox upon you!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;This isn&amp;#39;t fun.&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;You must have me confused with someone else!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Guards, throw this monster in the lake!&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;I&amp;#39;ll set my tarrasque on you!&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;722077783727145157&amp;#x2F;724602538674094120&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New shoulder armour by @WelshPixie. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;725047552113901679&#x2F;7D9dCD-JSjMkkksMZiuCpfEq6NVa8b0RJlfOGmEVOm0.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 72</title>
          <pubDate>Mon, 15 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-72/</link>
          <guid>https://veloren.net/blog/devblog-72/</guid>
          <description>&lt;p&gt;This week, we have work from new contributors. We hear from @zesterer about
test economic simulations. @xMAC94x has been working on merging networking, and
wrote about the process.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Pfau, @WelshPixie, @scottc,
@xMAC94x, @Shandley, @AngelOnFira, @xvar, @Songtronix, @Slipped, @yusdacra, and
@JamesTai!&lt;&#x2F;p&gt;
&lt;p&gt;@Acrimon has been rewriting the authentication server. He is transitioning from
a microframework and tiny_http to warp and hyper which is more robust and gets
rid of the currently possible slow loris attack by being async. @Songtronix has
merged most of the changes to the book. There are still sections that need to be
worked on, but it now has a lot more information. @lobster has been working on
improvements to combat. This includes energy regen resetting properly, and
ability usage.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722259515948400680&amp;#x2F;snap2020-06-15-21-19-34.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Executioner sword by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Slipped has been hard at work this week. He added a secondary bow attack and
made arrows visible when holding the bow. @Slipped also worked on completing the
glidewield branch with @imbris for carrying the glider around on the ground.
@Slipped, @Snowram, and @Gemu work on quadruped overhaul branch. @AVeryLostNomad
is continuing work on an indoor camera mode.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722135183096283217&amp;#x2F;new_mobs.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New quadrupeds by @Gemo and @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There have been lots of new contributors joining recently. @WelshPixie has been
working on lots of new flora. @mainCharacter is working on proofreading some of
the writing with the lore blogs. @RENCURELI is going to be working on a document
proposal for level design. It will also include some ideas for world generation
guidelines.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;722085100191481866&amp;#x2F;Screenshot_from_2020-06-15_15-27-43.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New flora by @WelshPixie&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;economic-research-by-zesterer&quot;&gt;Economic Research by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;Recently, I&#x27;ve been doing a heap of research: Marginalism, the Lange–Lerner
model, and various other models for centrally-planned economies. I&#x27;ve attempted
to implement aspects of Lange–Lerner into Veloren&#x27;s economic simulation. I think
I&#x27;ve got site economies converging on Pareto-efficient production configurations
now so that&#x27;s nice.&lt;&#x2F;p&gt;
&lt;p&gt;Below is a graph of the rationalised values (roughly analogous to internal
economy prices) of various commodities over the 500-year lifetime of a site. A
site in this case is an arbitrary village or city type of object. Note that the
natural environment and worker productivity is remarkably stable, hence the
manner in which value rationalisation converge toward stable values. Also, the
value is in arbitrary units (i.e: it&#x27;s not &quot;per Kg&quot; or something like that) so
comparing values isn&#x27;t really worthwhile right now.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722069822942478356&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Internal economic prices of commodities for a site&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Next, we have a graph of the same site, this time the stocks are maintained by
the site of each commodity. In practice, the stock of a commodity is roughly
proportional to the demand for that commodity (in arbitrary units) over the
course of a year.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722070320907026492&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Stocks maintained by site of commoditiy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Since the Lange-Lerner model involves deriving commodity values by
trial-and-error, you can see that the initial values are necessarily arbitrary
and so the site goes through a period of economic instability before converging
on values that are Pareto-efficient (in a market economy, this would be the
market equilibrium).&lt;&#x2F;p&gt;
&lt;p&gt;And, for that same site, below is the workforce allocation for each occupation.
The units now are not arbitrary and actually correspond to a number of
individuals (fractional values are taken to mean that an individual only
performs the given labour for a fraction of the year).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722071319591780352&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Workforce allocation for each occupation&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Note that all of these graphs are relatively meaningless right now since I&#x27;ve
not set up industries and natural resources correctly yet. I&#x27;m basically just
using them to ensure that the economy reaches Pareto-efficiency rather than
misallocating resources and spiralling off into producing far more wheat than
could ever be turned into consumable food (as was an issue I had before).&lt;&#x2F;p&gt;
&lt;p&gt;Interestingly, the economy seems to go through cyclical periods of economic
instability. This is expected since it&#x27;s a chaotic system. You might say that
these are analogous to boom-bust cycles that we experience under modern
capitalism, although in this case value rationalisation goes through a damping
process that should get rid of most of that.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722072600490016888&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I just added some random seasonal variation for the supply of natural resources
and as you can see the respective commodity values fluctuate accordingly to
compensate for this (including for goods that are derived from natural
resources).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722075466030252102&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Seasonal variation of natural resource supply&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;networking-work-by-xmac94x&quot;&gt;Networking Work by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;The new &lt;code&gt;veloren_network&lt;&#x2F;code&gt; crate was merged into the main source code by @xMAC94x
this week. The merge wasn&#x27;t as easy as it sounds, as there were some still
errors in documentation, metrics delivery, and the implementation. Luckily these
were found by @imbris and @Songtronix. Additionally, I noticed some timing
behavior that occurred on PC&#x27;s with less than 8 cores. It appeared in CI and was
hard to track down. The code has been merged for a week now, and running tests
in the background without any problems. The next step towards new networking is
to actually start using it in the Veloren codebase and see how it works out.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;722135150397227148&amp;#x2F;mouflon.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mouflon by @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;macos-linking-error-by-xmac94x&quot;&gt;MacOS Linking Error by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;Recently I found a toolchain blocker that prevented building for MacOS. Usually
we update our rust-toolchain once a month. Last time we tried, we ran into some
errors in the MacOS pipeline as there was a linkage error. After writing a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;issues&#x2F;73370&quot;&gt;Rust
bug report&lt;&#x2F;a&gt; it seems to be
finally someone who wants to fix it, so that we can upgrade again 😄&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;722497316803575858&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Expedited fix by the Rust team!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;compilation-improvements-by-xmac94x&quot;&gt;Compilation Improvements by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;Following the CI improvements from last week, this week now had a series of
compilation improvements. This was mainly done by removing multiple versions of
the same crate, removing unused features, or switching over to other crates
which are more low level and suit our task better. As an example; until now we
shipped a full-blown web-server AND web-client with &lt;code&gt;veloren-voxygen&lt;&#x2F;code&gt;. We used a
&lt;code&gt;web-server&lt;&#x2F;code&gt;, build for handling hundreds of simultaneous connections to serve
our metrics to a single consumer! We replaced &lt;code&gt;rouille&lt;&#x2F;code&gt; by &lt;code&gt;tiny_http&lt;&#x2F;code&gt; as our
server. Also, we use a full blown &lt;code&gt;web-client&lt;&#x2F;code&gt; which was build complex tasks to
make a few calls to the &lt;code&gt;auth&lt;&#x2F;code&gt; service. We replaced &lt;code&gt;reqwest&lt;&#x2F;code&gt; by &lt;code&gt;ureq&lt;&#x2F;code&gt; as our
client.&lt;&#x2F;p&gt;
&lt;p&gt;The result was a reduction in 40 sec in compile time, 12% in total CPU time
(across all cores) and 2 GB of cache for each runner:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;Old&lt;&#x2F;th&gt;&lt;th&gt;New&lt;&#x2F;th&gt;&lt;th&gt;Diff&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;td rowspan=2&gt; Dependencies&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cargo build&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;589&lt;&#x2F;td&gt;&lt;td&gt;480&lt;&#x2F;td&gt;&lt;td&gt;-19%&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cargo test&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;959&lt;&#x2F;td&gt;&lt;td&gt;791&lt;&#x2F;td&gt;&lt;td&gt;-18%&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;td rowspan=2&gt;Cpu time&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cargo build&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;3076s&lt;&#x2F;td&gt;&lt;td&gt;2680s&lt;&#x2F;td&gt;&lt;td&gt;-13%&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cargo test&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;6118s&lt;&#x2F;td&gt;&lt;td&gt;5351s&lt;&#x2F;td&gt;&lt;td&gt;-12.5%&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;td rowspan=2&gt;Time&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cargo build&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;4:45&lt;&#x2F;td&gt;&lt;td&gt;4:05&lt;&#x2F;td&gt;&lt;td&gt;-12%&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cargo test&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;7:30&lt;&#x2F;td&gt;&lt;td&gt;7:04&lt;&#x2F;td&gt;&lt;td&gt;-6%&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;722499152604430456&amp;#x2F;Screenshot_from_2020-06-15_15-30-59.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A whole world to explore! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;722458486365225009&#x2F;KmRCJdxQ8F5-1rgc8wGQHw8PfqJ5SnFzTnOPY5hrWOs.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 71</title>
          <pubDate>Mon, 08 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-71/</link>
          <guid>https://veloren.net/blog/devblog-71/</guid>
          <description>&lt;p&gt;This week, there is a lot of external work to check out. This includes the Rust
Gamedev monthly newsletter, an interview with GamingOnLinux, and @Pfau&#x27;s art
blog. We also have new contributors to our Open Collective!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @yusdacra, @xMAC94x, @xvar,
@Shandley, @Songtronix, @Imbris, @Pfau, @JoeyMaher, @Slipped, and @scottc!&lt;&#x2F;p&gt;
&lt;p&gt;Lots of external updates this week! We did an &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gamingonlinux.com&#x2F;2020&#x2F;06&#x2F;interviewed-veloren-an-upcoming-foss-multiplayer-voxel-rpg&quot;&gt;interview with
GamingOnLinux&lt;&#x2F;a&gt;.
It covered many questions about Veloren&#x27;s development with open source
management and Rust. The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-010&#x2F;&quot;&gt;Rust Gamedev May
newsletter&lt;&#x2F;a&gt; has come out.
@Pfau has written &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;weekly-blog-no-2-38026771&quot;&gt;his second
blog&lt;&#x2F;a&gt; about artwork in
Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;Our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;opencollective.com&#x2F;veloren&quot;&gt;Open Collective&lt;&#x2F;a&gt; has some new
contributors! With the initial donations, we&#x27;re going to start looking at how
we&#x27;re handling infrastructure. This will include reimbursing those who are
voluntarily running our servers. It will definitely let our release parties run
on the best hardware money can rent!&lt;&#x2F;p&gt;
&lt;p&gt;Airshipper now supports Mac thanks to @Songtronix&#x27;s hard work! @CapsizeGlimmer
has added group chat and regional chat functionality. @AVeryLostNomad worked on
some minor features and bug fixes. These include an auto walk key, and lanterns
no longer staying on when dropped. @xvar is working on improving how we use
clippy, allowing us to catch a lot more potential errors in the future.
@Shandley has been continuing work on SFX.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;719207595725946910&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;120 bookcases by @SausageRolls&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;gamingonlinux-interview&quot;&gt;GamingOnLinux Interview&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;If you haven&#x27;t checked it out already, here is a snippet &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gamingonlinux.com&#x2F;2020&#x2F;06&#x2F;interviewed-veloren-an-upcoming-foss-multiplayer-voxel-rpg&quot;&gt;from the
interview&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;gol-why-not-go-with-an-off-the-shelf-game-engine&quot;&gt;GOL: Why not go with an off-the-shelf game engine?&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;F:&lt;&#x2F;strong&gt; &quot;The big game engines like Unity or Unreal are great for general-purpose
games. They’ve been heavily optimized for genres like first-person shooters, or
games with meshes that you just import from your modeling software. However,
once you want to dictate the rules on how the complex fundamentals of your world
are created, you can run into some issues.&lt;&#x2F;p&gt;
&lt;p&gt;Engines have a lot of overhead and provide you with high-level abstractions.
It’s as if you’re given Steve from Minecraft to control, but you really want to
be controlling Qwop from QWOP. It’s a lot more work, but you have more precision
in moving the way you want. Among other things, these engines would have a
representation of what an “object” is. In Veloren, we would need each voxel in
the world to be represented by this “object”. Internally, we represent voxels
with as little data as we can, of which is very specific to our needs since we
have that level of control. On the other hand, engines would store a lot more
metadata about it, since engines need to work more generally for any type of
game. It might include unneeded physics abilities, or the functionality related
to meshes other than cubes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449903525653250079&amp;#x2F;718906987496079360&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren group and regional chat&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On the other hand, there are other game engines that are more specific, such as
the Amethyst engine, which is also written in Rust. It offers lots of modular
functionality, where we could pick and choose systems that we like, or use the
engine as a whole. However, Amethyst is still being developed, and wasn’t far
enough along when Veloren was started.&lt;&#x2F;p&gt;
&lt;p&gt;Our approach to custom engine development has resulted in some unique systems.
The land formation is sculpted by an erosion system that simulates over millions
of years, and creates realistic features such as downhill rivers. Our
procedurally-generated villages already have some simple economic simulation.
This comes from attracting developers that are interested in experimenting with
ideas that are niche and novel, and have an incredibly flexible engine to work
with.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;719253943095394334&amp;#x2F;Dragon.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;By @Zukel&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;gol-your-ultimate-goal-for-veloren&quot;&gt;GOL: Your ultimate goal for Veloren?&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;F:&lt;&#x2F;strong&gt; &quot;For each of us, it’s different. The project was originally started by people
who wanted to make an experience that would fill the void created by Cube World.
However, since then, many people have joined who had never played Cube World
before. The project founder, @zesterer, wants to create a dynamic world where
settlements and cities interact economically and politically. @Songtronix’s goal
is to improve the user&#x27;s experience with Veloren, primarily by working on our
launcher, Airshipper. @Pfau, wants to create a vivid world from the art of our
many artists. @Slipped wants to create a captivating animation system. @Timo
wants to create a dynamic experience that friends can have. @Sharp is using
real-world natural processes to simulate our world generation system. With
everything that inspires each one of us, I think we can create the game we are
hoping for.&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;719280868060954734&amp;#x2F;snap2020-06-07-16-03-14.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A visored sallet by @AlbinoAxolotl. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;720087973806211102&#x2F;7foh1qpbde351.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 70</title>
          <pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-70/</link>
          <guid>https://veloren.net/blog/devblog-70/</guid>
          <description>&lt;p&gt;This week, we hear from @xMAC94x about the state of CI in Veloren. @BottledByte
has analyzed modding possibilities in Veloren. @Capucho is working on an
animation proposal, and @Pfau has an art blog post.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Imbris, @Shandley, @zesterer, @Pfau,
@scottc, @Slipped, @xMAC94x, @Songtronix, @qrazhan, and @CapsizeGlimmer!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @lobster added more information to the character window. @xMAC94x has
been working on lots of CI improvements. He also has been continuing work on
networking, and some changes are currently in review. @badbbad has created a new
ambient night audio track. @Capucho is working on an animation proposal, you can
check it out &lt;a href=&quot;https:&#x2F;&#x2F;hackmd.io&#x2F;&amp;#64;Capucho&#x2F;B1pZe-JnU&quot; target=&quot;_blank&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;717289023239880724&amp;#x2F;social1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Social window work by @lobster&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Shandley merged inventory and layout persistence. @Pfau has been working a lot
on the UI, and has a new art blog post, which you can check out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;posts&#x2F;eye-variations-37580702&quot;&gt;here&lt;&#x2F;a&gt;. @Snowram has been
working on adding a snake and worked with @Slipped to improve small quadruped
animation.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;717452028216868924&amp;#x2F;Im_Home-827159080.mp3&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;I&amp;#x27;m Home by @badbbad&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;mod-analysis-by-bottledbyte&quot;&gt;Mod Analysis by @BottledByte&lt;&#x2F;h2&gt;
&lt;p&gt;I have been trying to add a WASM interpreter to the Veloren&#x27;s codebase. Also,
because I was curious, I did more research on both Wasmtime and wasmer. As per
@Capucho&#x27;s proposal, I have tried Wasmtime as the first option for Veloren&#x27;s
WASM integration. After about 3 hours, I gave up, as my attempts to integrate
wasmtime failed. This was because most of Wasmtime&#x27;s structures are not
thread-safe.&lt;&#x2F;p&gt;
&lt;p&gt;I was unable to figure out a nice and easy way to implement design for its use.
It appears to me that Wasmtime is not designed to be used in multi-threaded
environments without additional work on user&#x27;s side. Maybe they will make it
thread-safe one day, but that is the future. As an example of this, here is a
quote from their documentation:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is intended that Memory is safe to share between threads. At this time this
is not implemented in Wasmtime, however. This is planned to be implemented
though!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;So, I tried to integrate wasmer instead, and it only took 10 minutes! This was
because wasmer&#x27;s internals are thread-safe by default. So I was interested in
pros and cons of Wasmtime and wasmer and did some primitive benchmarks. Here are
rough results using relative measurement:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;&amp;gt;  Compilation
&lt;&#x2F;span&gt;&lt;span&gt;wasmer was ~120% slower than wasmtime
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;  Instantiation
&lt;&#x2F;span&gt;&lt;span&gt;wasmer was ~120% slower than wasmtime
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;  Execution
&lt;&#x2F;span&gt;&lt;span&gt;wasmer was ~25% slower than wasmtime
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Well, that could not be more obvious, wasmer is just slower than Wasmtime.
However, both compiling and instantiating can be alleviated somewhat. These
benchmarks are not of real-life cases, I admit. However, even in case of a
simple for loop, wasmer was slower.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;716672449407877150&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Micro props for details in houses by @SausageRolls&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Also, the background and goals behind Wasmtime and wasmer are different.
Wasmtime&#x27;s creators, Bytecode Alliance, is a syndicated effort of industry
giants to &quot;push WASM forward&quot;. On the other hand, Wasmer Inc. tries to bring
WASM into production and &quot;real-life&quot; applications. In my opinion, Wasmtime will
have high ground in features, while wasmer will have nicer APIs. Despite its
current synchronization quirks, Wasmtime seems like a good bet for the future.
wasmer is there, too, and it makes things a lot easier, but sacrifices speed and
features.&lt;&#x2F;p&gt;
&lt;p&gt;Or the Veloren project could wait some more time until Wasmtime gets polished.
In the meantime, some data-driven modding methods could be used. This means
exposing more functionality through config files. It is simpler, both for
modders and for API implementors, and it still reduces compile times a lot.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;improving-ci-by-xmac94x&quot;&gt;Improving CI by @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;@xMAC94x spent the week improving the current CI situation. Over the past year
Veloren has grown a lot. However, we didn&#x27;t focus enough on keeping the project
clean. The result is that CI is a bit dusty right now.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-is-ci&quot;&gt;What is CI?&lt;&#x2F;h3&gt;
&lt;p&gt;CI stands for Continuous Integration. It means that our code is integrated
through tests every time we want to merge code. Most of our testing is done
automatically, giving the devs more time to focus on creating new stuff while
consistency and stability guarantees are provided by the CI framework.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s the responsibility of the contributors to write these tests. Usually, you
try to define many tests, including benchmarks, performance tests, functionality
tests, and integration tests. When a contributor wants to change something, all
tests written by all contributors are run in the CI. If a test fails, the
developer will be notified and can fix their bug. This must be done before the
code can be merged and go live.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;716684713930260500&amp;#x2F;1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New hourglass by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;what-s-wrong-with-our-ci&quot;&gt;What&#x27;s wrong with our CI?&lt;&#x2F;h3&gt;
&lt;p&gt;We are missing tests, we only have &lt;code&gt;1.17%&lt;&#x2F;code&gt; of our source code covered. Is that
bad? Yes and No. While 1% itself doesn&#x27;t mean that we have bugs in Veloren, it
means a bug could hide happily in 99% of our source code without us noticing.
This number should go up. Having more than 80% is recommended and projects tend to profit
in the long term from good test coverage. (Note: A high test coverage itself is
no guarantee for a good project).&lt;&#x2F;p&gt;
&lt;p&gt;Our CI is slow. CI is required to run for developers to merge. If a contributor
changes something they have to wait for feedback from CI, which can take up to
2 hours currently. Our CI is error-prone as well, but isn&#x27;t consistent with the
problems. Imagine your CI is like a traffic light, it either sends you a red or
a green signal. You want to be able to trust that signal. It should be reliable
and not fail. If it shows red to all 4 directions, people are annoyed why they
have to wait. But if it falsely shows green to the wrong people this could lead
to a catastrophe. Luckily in our case, the later one doesn&#x27;t happen often.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;717430522833272913&amp;#x2F;screenshot_1591118820646.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Snake by @Snowram&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;how-to-fix-ci&quot;&gt;How to fix CI?&lt;&#x2F;h3&gt;
&lt;p&gt;Okay, we identified some issues with CI, how will the Veloren team improve it?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Improving code coverage. this has to be aligned with core devs first, but
the only way to get it to work is to encourage people to always add tests. An
extreme case would be to forbid changes without tests, however, we would
rather not enforce that.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;More effectively using caches. Our codebase is quite large currently, and
changes are small. When any change comes in, our CI computers often restart
from scratch. We can configure CI to cache the results in order to speed up
the tests. However this hasn&#x27;t worked out until now. (more below)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Fix broken runners and include &lt;code&gt;verify post-merge result&lt;&#x2F;code&gt; (more below)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;716070347836751942&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;what-was-done-this-week&quot;&gt;What was done this week&lt;&#x2F;h3&gt;
&lt;p&gt;I spend a lot of time today working on improving caching. We are using GitLab CI
as it provides the awesome functionality to host own runner and configure them
as needed. A few months ago @Acrimon switched our toolchain to use docker and
@Songtronix just recently enabled the new powerful GitLab rules to modify
behavior our CI tests.&lt;&#x2F;p&gt;
&lt;p&gt;As compiling Veloren is slow, CI is also slow. We tried to use all kind
of caches, including the GitLab internal ones. This doesn&#x27;t work though, because
they zip everything, as we have up to 15 GB of generated files. Zipping them
takes more time than just having no caches at all. For now we are going with
prebuilt caches. Once a week we prebuild the cache in a nightly job, this will
then be reused every time. Such a prebuild can really be super efficient end
eliminate all dependency compilation, only keeping the linking times. However,
this simply doesn&#x27;t work. We couldn&#x27;t figure out why, but some cache where just
ignored.&lt;&#x2F;p&gt;
&lt;p&gt;What it took was some testing. As I spend some time with &lt;code&gt;cargo&lt;&#x2F;code&gt; I got to know
that it&#x27;s far from perfect. &lt;code&gt;cargo&lt;&#x2F;code&gt; had separate caches for &lt;code&gt;debug&lt;&#x2F;code&gt; and
&lt;code&gt;release&lt;&#x2F;code&gt; build no matter what. However, we are generating much more builds than
just &lt;code&gt;debug&lt;&#x2F;code&gt; and &lt;code&gt;release&lt;&#x2F;code&gt; complicating this even further. We are running the
following tasks in CI &lt;code&gt;check&lt;&#x2F;code&gt;, &lt;code&gt;build&lt;&#x2F;code&gt;, &lt;code&gt;test&lt;&#x2F;code&gt;, &lt;code&gt;benchmark&lt;&#x2F;code&gt;, &lt;code&gt;clippy&lt;&#x2F;code&gt;,
&lt;code&gt;tarpaulin&lt;&#x2F;code&gt;, &lt;code&gt;audit&lt;&#x2F;code&gt;, &lt;code&gt;windows release&lt;&#x2F;code&gt;, &lt;code&gt;linux release&lt;&#x2F;code&gt;, and &lt;code&gt;macos release&lt;&#x2F;code&gt;.
All these try to use the same cache. I found out that this just didn&#x27;t work.&lt;&#x2F;p&gt;
&lt;p&gt;One would expect that if we already filled the cache with the &lt;code&gt;check&lt;&#x2F;code&gt; job that
the next &lt;code&gt;build&lt;&#x2F;code&gt; will be sped up, unfortunately this is not true. It will just
ignore everything and reinvent the wheel. At least this is not destructive. When
we ran &lt;code&gt;test&lt;&#x2F;code&gt; once, then ran &lt;code&gt;tarpaulin&lt;&#x2F;code&gt;, it destroyed all cached data till now,
so a second &lt;code&gt;test&lt;&#x2F;code&gt; would have to start all over again. The same goes for the
multiple &lt;code&gt;release builds&lt;&#x2F;code&gt;, somehow &lt;code&gt;windows release&lt;&#x2F;code&gt; was resetting all progress
on a &lt;code&gt;linux release&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;714206315936743444&amp;#x2F;screenshot_1590350253660.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So how did we fix it? The solution might sound too stupid to function, but it
does work. We just use different directories to store the results. We make sure
that &lt;code&gt;tarpaulin&lt;&#x2F;code&gt;, &lt;code&gt;windows release&lt;&#x2F;code&gt;, &lt;code&gt;linux release&lt;&#x2F;code&gt;, and &lt;code&gt;macos release&lt;&#x2F;code&gt; all
get a separate directory to store their builds. All the other jobs are fine to
share the same directory, their caches work as intended. With this, compile times
goes down to under 30 minutes for all those tests. Besides saving some
electricity, this really saves the sanity of our contributors 😊 (and my sanity
ofc, it was annoying me so much that I had to do something)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-needs-to-be-done&quot;&gt;What needs to be done&lt;&#x2F;h3&gt;
&lt;p&gt;We disabled some jobs on master this week. This removes the ability to check if
our merged result is still functioning correct. The usual Git Merge workflow is
the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;A contributor creates a new branch off of master&lt;&#x2F;li&gt;
&lt;li&gt;The contributor adds some new changes to their branch&lt;&#x2F;li&gt;
&lt;li&gt;In the meantime, other people work on master&lt;&#x2F;li&gt;
&lt;li&gt;The contributor merged their changes back to master&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;We should be running tests for both 3. and 4. before it is merged into master.
However, we only run tests on the contributor&#x27;s branch, without a simulated
merge. Therefore, errors can occur during the merge. If this would happen, we
would have a bug in master. And master is the version distributed to the server
and via Airshipper. So this should never happen. A feature called &lt;code&gt;verify post-merge result&lt;&#x2F;code&gt; would help here. It would kick in on step 3 and simulate step
4 before executing it. If an error would appear now, it could be addressed
before it goes to the players.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;next-steps&quot;&gt;Next Steps&lt;&#x2F;h3&gt;
&lt;p&gt;To achieve better test coverage we probably need to discuss with developers
what&#x27;s the best approach to take. It&#x27;s not essential to force there to be more
tests everywhere, but we need to take a more proactive strategy for testing.&lt;&#x2F;p&gt;
&lt;p&gt;I will be continuing my work on networking. Additionally, I will try to reduce
Veloren&#x27;s compile time by reducing its dependencies, I am happy to present them
in the next post 😃&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;714446703272525834&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chunky boi chillen, see you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;710836059277230181&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 69</title>
          <pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-69/</link>
          <guid>https://veloren.net/blog/devblog-69/</guid>
          <description>&lt;p&gt;This week, we had our 0.7 meeting. @zesterer gives us a run down on how chunk
generation and loading works. @imbris discusses progress on switching to iced
for the main menu.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Treeco, @Pfau, @Songtronix, @AngelOnFira, @zesterer, and @Sharp!&lt;&#x2F;p&gt;
&lt;p&gt;This week, Gaming On Linux &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gamingonlinux.com&#x2F;2020&#x2F;05&#x2F;veloren-an-open-source-rpg-inspired-by-cube-world-has-a-new-release&quot;&gt;wrote an
article&lt;&#x2F;a&gt;
about our 0.6 release. @imbris has been working on the UI library switch to
iced. He is working on moving over small pieces of the codebase at a time.
@CapsizeGlimmer has been working NPC speech bubble functionality. @Slipped has
been working on some animation fixes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;715179301762236536&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;715180469620179024&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New hairstyles and eyes for Danari and Dwarfs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;714146058233708584&amp;#x2F;Into_the_Dark_Forest.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Into the Dark Forest by @Aeronic&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-7-intro-meeting&quot;&gt;0.7 Intro Meeting&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;714196826454229082&amp;#x2F;Screenshot_20200524_202805.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lots of attendees at the meeting!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We had the 0.7 intro meeting last Sunday. You can find the meeting notes
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1Z-8-bIhQF1-HXHrfhRV_yTIwtr7kMZa0qXJgTmbZrEM&#x2F;edit&quot;&gt;here&lt;&#x2F;a&gt;.
We decided that 0.7 development will start on June 1st, and release August 1st.
Like always, we wrote up a definition of 0.7 of what we would like to see from
the perspective of a player:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;As a player, I want to get quests from NPCs in settlements. I want to be sent
to kill enemies, collect objects, or complete dungeons. I want to be sent from
village to village and become familiar with the region.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to be able to open the map and get information where I need to go for a
quest. I want to be able to easily find where dungeons, villages, and other
points of interest are. I want to be able to open a trade window with NPCs in
villages and buy and sell items. I want to be able to craft items with
ingredients that I have.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to be able to see and hear more while in combat. I want to feel good
while doing combat. I want to see particle effects from magic, and hear swords
clashing together. I want to be able to add people to my combat party and
interact with the game UI to do this.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;715220549776834640&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;715220573138976889&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New updated models by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We also discussed version numbers as we approach the higher numbers of 0.X.0. We
decided that after 0.9.0 would come 0.10.0, followed by 0.11.0. This will allow
us more versions to make the game we&#x27;ve dreamed of without feeling pressured.
Also, we would have to make 0.7, 0.8, and 0.9 much larger to accommodate for 1.0
right after. As we saw with 0.6, large versions are best to stay away from. We
also wrote down systems that are likely to be included, as well as experimental
systems that could be explored further:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;# Things it could include
&lt;&#x2F;span&gt;&lt;span&gt;- Quest system
&lt;&#x2F;span&gt;&lt;span&gt;- World sim
&lt;&#x2F;span&gt;&lt;span&gt;- More interactions in settlements
&lt;&#x2F;span&gt;&lt;span&gt;- More advanced UI
&lt;&#x2F;span&gt;&lt;span&gt;- Implementing design team features
&lt;&#x2F;span&gt;&lt;span&gt;- Story elements
&lt;&#x2F;span&gt;&lt;span&gt;- Audio system for combat to add more layers of music
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;# Experimental systems to look at
&lt;&#x2F;span&gt;&lt;span&gt;- Modding support (Mun, other scripting languages)
&lt;&#x2F;span&gt;&lt;span&gt;- LoD
&lt;&#x2F;span&gt;&lt;span&gt;- Settlement sim
&lt;&#x2F;span&gt;&lt;span&gt;- Animation system extensions
&lt;&#x2F;span&gt;&lt;span&gt;- SFX framework
&lt;&#x2F;span&gt;&lt;span&gt;- Networking system
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We also officially announced the rollout of our OpenCollective account. For
those who want to donate to development, this is the way to do it. It will help
us support the cost of infrastructure for now. However, in the future, it may be
used to compensate core developers for full-time work. You can check out our
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;opencollective.com&#x2F;veloren&quot;&gt;Open Collective account here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work-on-iced-with-imbris&quot;&gt;Work on iced with @imbris&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;715106843055358012&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Main menu switch to iced progress&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Was it a pain to get working? Or was it easier than to work with conrod?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;In my opinion, iced is a lot easier to work with. A lot of the effort I put in
was trying to get the scaling with window resizes to look nice. With conrod I
would just scale everything down but iced&#x27;s layout offers the potential for
smarter scaling which first compresses empty spaces before shrinking the UI
elements.&lt;&#x2F;p&gt;
&lt;p&gt;There are some issue though. For example, the text widget does not have a way to
adjust its size based on the available space. So I had to make a custom widget
that does this. I think once I get all the foundations worked out it will be
really nice to work with. Another pain was figuring out text rendering. That&#x27;s
not an iced issue though.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chunk-generation-by-zesterer&quot;&gt;Chunk Generation by @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;There are a bunch of things going on behind the scenes that enable chunk
generation to be relatively quick. In something resembling an ordering that goes
from the &#x27;core&#x27; of the engine out to the periphery of it:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;We have a very efficient in-memory chunk storage format that not only allows
us to use very little memory when storing chunks, but also allows chunk data
to be very cache-friendly (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-16&quot;&gt;more information
here&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;The world generation code has been optimised to cache important data at
various stages (although there&#x27;s still a lot of work to be done here) as well
as only performing generation calculations for ranges of blocks that it knows
in advance are noteworthy (no point wasting time generating blocks that are
100 metres in the air, for example).





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;714189226656399481&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New skillbar design in progress&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;When sending chunk data to clients, the data is always compressed due to
point (1) but gets compressed even further by running it through the LZ4
compression algorithm. After all of this, chunks that might easily require
300 KB of memory with a naive approach to storage now require perhaps only a
10th of that on average.&lt;&#x2F;li&gt;
&lt;li&gt;Clients have a thread pool that is used to quickly siphon heavy-duty work
such as meshing off the main thread and on to to a worker thread running on
(hopefully) another core. This means that the rendering thread can continue
to run smoothly without interruption.





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;714203259081981973&amp;#x2F;snap2020-05-24-15-48-27.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A falcata by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;When handing chunk data off to clients, we use a COW (Copy On Write) system
to immutably reference chunk data during meshing. This allows multiple
threads to refer to the same chunk data at once (including the main thread)
without copying the data (in most cases).&lt;&#x2F;li&gt;
&lt;li&gt;The meshing code is very optimised. For each chunk, we carefully
pre-calculate the range of blocks that need checking when performing surface
extraction to avoid doing work for blocks that we know in advance do not have
exposed faces. In addition, we move through the chunk data through the
primary axis, z, to allow for good cache coherency. In the process we also do
our best to avoid accessing block data multiple times, caching block solidity
information between each face test.&lt;&#x2F;li&gt;
&lt;li&gt;Chunk meshes have a very compressed vertex format. We&#x27;re able to squeeze x,
y, z, r, g, b, AO, volumetric lighting, and surface normal information all
into just 8 bytes per vertex. There&#x27;s still a lot more to be done in this
space of course, but this means that the chunk vertex buffers are fast to
upload to the GPU and also fast to render once on the GPU since we can fit
more vertices within the cache.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;715543045520752680&amp;#x2F;k_eB5AP-rqIHXCG58yWsIH6NIdDxFjOKPz47ujRHorU.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Level 200 achieved by @Redo! See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;714214218009673758&#x2F;screenshot_1590352323747.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 68</title>
          <pubDate>Mon, 18 May 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-68/</link>
          <guid>https://veloren.net/blog/devblog-68/</guid>
          <description>&lt;p&gt;This week 0.6 was launched! We take a look at the telemetry from the launch
party. @AngelOnFira has done some network analysis on Veloren. A lot of bugs
were squashed before the 0.6 release.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @jbeich, @Slipped, @Silentium, @Pfau,
@xMAC94x, @imbris, @zesterer, @treeco, @Songtronix, @Shandley, @LunarEclipse,
@mockersf, @CapsizeGlimmer, @AngelOnFira, and @Acrimon!&lt;&#x2F;p&gt;
&lt;p&gt;0.6 was finally released last weekend! This update was the combination of many
contributors&#x27; efforts, and focused on adding content to Veloren. The release
party saw nearly 50 concurrent players on the server at once. It turns out that
the 0.6 release has brought more players to Veloren as well. Before the update,
there were on average 1.57 active players on the server at once, whereas now
that has increased to 3.2. The team will be meeting next weekend to have the
intro meeting for 0.7.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;696825216868810855&amp;#x2F;712296069991497849&amp;#x2F;Leap_of_faith.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Leap of Faith by @badbbad&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;711698259827228742&amp;#x2F;snap2020-05-17-17-54-21.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Vestal Cleric Set by @AlbinoAxototl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Redo11 has been working on adding polish translations. @LunarEclipse fixed bug that
caused crashes in the packaged versions of Veloren, and also updated the AUR for
0.6. @DaddyDemon started hosting an NA Veloren server which you can join at
&lt;code&gt;24.36.42.4&lt;&#x2F;code&gt;. @Silentium got their armor branch merged. Persistence saw some
quick improvements in anticipation for the launch, including saving the level of
players. @YuriMomo and the team working on WGPU found a memory leak in the
crate, and created an issue that you can check out
&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gfx-rs&#x2F;wgpu&#x2F;issues&#x2F;650&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;712292564740341831&amp;#x2F;712293382248202271&amp;#x2F;Game_On.mp3&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Game On! by @sharpie&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;711209450676944989&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Big Boy by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-6-release&quot;&gt;0.6 Release&lt;&#x2F;h2&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;kjDFVgWYMd4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another few months, another Veloren release! The launch server was run on
Digital Ocean. Below you&#x27;ll find lots of telemetry from the launch party. The
changelog is quite long, but this is the place for recognition of the efforts
made to Veloren, so here it is verbatim!&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;## [0.6.0] - 2020-05-16
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;### Added
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;- Added music system
&lt;&#x2F;span&gt;&lt;span&gt;- Added zoomable and rotatable minimap
&lt;&#x2F;span&gt;&lt;span&gt;- Added rotating orientation marker to main-map
&lt;&#x2F;span&gt;&lt;span&gt;- Added daily Mac builds
&lt;&#x2F;span&gt;&lt;span&gt;- Allow spawning individual pet species, not just generic body kinds
&lt;&#x2F;span&gt;&lt;span&gt;- Configurable fonts
&lt;&#x2F;span&gt;&lt;span&gt;- Configurable keybindings from the Controls menu
&lt;&#x2F;span&gt;&lt;span&gt;- Translation status tracking
&lt;&#x2F;span&gt;&lt;span&gt;- Added gamma setting
&lt;&#x2F;span&gt;&lt;span&gt;- Added new orc hairstyles
&lt;&#x2F;span&gt;&lt;span&gt;- Added SFX for wielding&#x2F;unwielding weapons
&lt;&#x2F;span&gt;&lt;span&gt;- Fixed NPCs attacking the player forever after killing them
&lt;&#x2F;span&gt;&lt;span&gt;- Added SFX for collecting, dropping and using inventory items
&lt;&#x2F;span&gt;&lt;span&gt;- New attack animation
&lt;&#x2F;span&gt;&lt;span&gt;- Weapon control system
&lt;&#x2F;span&gt;&lt;span&gt;- Game pauses when in single player and pause menu
&lt;&#x2F;span&gt;&lt;span&gt;- Added authentication system (to play on the official server register on https:&#x2F;&#x2F;account.veloren.net)
&lt;&#x2F;span&gt;&lt;span&gt;- Added gamepad&#x2F;controller support
&lt;&#x2F;span&gt;&lt;span&gt;- Added player feedback when attempting to pickup an item with a full inventory
&lt;&#x2F;span&gt;&lt;span&gt;- Added free look
&lt;&#x2F;span&gt;&lt;span&gt;- Added Italian translation
&lt;&#x2F;span&gt;&lt;span&gt;- Added Portuguese translation
&lt;&#x2F;span&gt;&lt;span&gt;- Added Turkish translation
&lt;&#x2F;span&gt;&lt;span&gt;- Complete rewrite of the combat system into a state machine
&lt;&#x2F;span&gt;&lt;span&gt;- Abilities like Dash and Triplestrike
&lt;&#x2F;span&gt;&lt;span&gt;- Armor can now be equipped as items
&lt;&#x2F;span&gt;&lt;span&gt;- Fireball explosions
&lt;&#x2F;span&gt;&lt;span&gt;- Inventory supports stacking
&lt;&#x2F;span&gt;&lt;span&gt;- Many new armors and weapons to find in chests
&lt;&#x2F;span&gt;&lt;span&gt;- Fleshed out &amp;quot;attack&amp;quot; animation into alpha, beta and spin type attacks
&lt;&#x2F;span&gt;&lt;span&gt;- Fleshed out range attack into charging and shooting animations for staff&#x2F;bow
&lt;&#x2F;span&gt;&lt;span&gt;- Customized attack animation for hammers and axes
&lt;&#x2F;span&gt;&lt;span&gt;- Added German translation
&lt;&#x2F;span&gt;&lt;span&gt;- Added a silhouette for players when they are occluded
&lt;&#x2F;span&gt;&lt;span&gt;- Added transparency to the player when zooming in
&lt;&#x2F;span&gt;&lt;span&gt;- Made armor and hotbar slots actually function
&lt;&#x2F;span&gt;&lt;span&gt;- Added dragging and right-click to use functionality to inventory, armor &amp;amp; hotbar slots
&lt;&#x2F;span&gt;&lt;span&gt;- Added capes, lanterns, tabards, rings, helmets &amp;amp; necklaces as equippable armor
&lt;&#x2F;span&gt;&lt;span&gt;- 6 new music tracks
&lt;&#x2F;span&gt;&lt;span&gt;- Added basic world and civilization simulation
&lt;&#x2F;span&gt;&lt;span&gt;- Added overhauled towns
&lt;&#x2F;span&gt;&lt;span&gt;- Added fields, crops and scarecrows
&lt;&#x2F;span&gt;&lt;span&gt;- Added paths
&lt;&#x2F;span&gt;&lt;span&gt;- Added bridges
&lt;&#x2F;span&gt;&lt;span&gt;- Added procedural house generation
&lt;&#x2F;span&gt;&lt;span&gt;- Added lampposts
&lt;&#x2F;span&gt;&lt;span&gt;- Added NPCs that spawn in towns
&lt;&#x2F;span&gt;&lt;span&gt;- Added simple dungeons
&lt;&#x2F;span&gt;&lt;span&gt;- Added sub-voxel noise effect
&lt;&#x2F;span&gt;&lt;span&gt;- Added waypoints next to dungeons
&lt;&#x2F;span&gt;&lt;span&gt;- Made players spawn in towns
&lt;&#x2F;span&gt;&lt;span&gt;- Added non-uniform block heights
&lt;&#x2F;span&gt;&lt;span&gt;- Added `&#x2F;sudo` command
&lt;&#x2F;span&gt;&lt;span&gt;- Added a Level of Detail (LoD) system for terrain sprites and entities
&lt;&#x2F;span&gt;&lt;span&gt;- Added owl, hyena, parrot, cockatrice, red dragon NPCs
&lt;&#x2F;span&gt;&lt;span&gt;- Added dungeon entrances
&lt;&#x2F;span&gt;&lt;span&gt;- Villagers tools and clothing
&lt;&#x2F;span&gt;&lt;span&gt;- Cultists clothing
&lt;&#x2F;span&gt;&lt;span&gt;- You can start the game by pressing &amp;quot;enter&amp;quot; from the character selection menu
&lt;&#x2F;span&gt;&lt;span&gt;- Added server-side character saving
&lt;&#x2F;span&gt;&lt;span&gt;- Player now starts with a lantern. Equipping&#x2F;unequipping a lantern has the same effect as the `&#x2F;lantern` command
&lt;&#x2F;span&gt;&lt;span&gt;- Added tab completion in chat for player names and chat commands
&lt;&#x2F;span&gt;&lt;span&gt;- Added server persistence for character stats
&lt;&#x2F;span&gt;&lt;span&gt;- Added a popup when setting your character&amp;#39;s waypoint
&lt;&#x2F;span&gt;&lt;span&gt;- Added dungeon arenas
&lt;&#x2F;span&gt;&lt;span&gt;- Added dungeon bosses and rare boss loot
&lt;&#x2F;span&gt;&lt;span&gt;- Added 2 sets of armour. One Steel and one Leather.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;### Changed
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;- The &#x2F;give_item command can now specify the amount of items. Syntax is now `&#x2F;give_item &amp;lt;name&amp;gt; [num]`
&lt;&#x2F;span&gt;&lt;span&gt;- Brighter &#x2F; higher contrast main-map
&lt;&#x2F;span&gt;&lt;span&gt;- Removed highlighting of non-collectible sprites
&lt;&#x2F;span&gt;&lt;span&gt;- Fixed &#x2F;give_exp ignoring player argument
&lt;&#x2F;span&gt;&lt;span&gt;- Extend run sfx to small animals to prevent sneak attacks by geese.
&lt;&#x2F;span&gt;&lt;span&gt;- Decreased clientside latency of ServerEvent mediated effects (e.g. projectiles, inventory operations, etc)
&lt;&#x2F;span&gt;&lt;span&gt;- Started changing the visual theme of the UI
&lt;&#x2F;span&gt;&lt;span&gt;- Merge of the Bag and Character-Screen
&lt;&#x2F;span&gt;&lt;span&gt;- Merge of the Map and Questlog
&lt;&#x2F;span&gt;&lt;span&gt;- Overhauled icon art
&lt;&#x2F;span&gt;&lt;span&gt;- Asset cleanup to lower client-size
&lt;&#x2F;span&gt;&lt;span&gt;- Rewrote the humanoid skeleton to be more ideal for attack animations
&lt;&#x2F;span&gt;&lt;span&gt;- Arrows can no longer hurt their owners
&lt;&#x2F;span&gt;&lt;span&gt;- Increased overall character scale
&lt;&#x2F;span&gt;&lt;span&gt;- `&#x2F;sudo player &#x2F;tp` is short for `&#x2F;sudo player &#x2F;tp me`
&lt;&#x2F;span&gt;&lt;span&gt;- The `&#x2F;object` command can create any object in comp::object::Body
&lt;&#x2F;span&gt;&lt;span&gt;- The `&#x2F;help` command takes an optional argument. `&#x2F;help &#x2F;sudo` will show you information about only the sudo command.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;711231234533228595&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712278818060238868&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We almost hit 50 players for this launch party!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712278889870655558&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712279233833205875&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712280363862589500&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712280712539275315&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712281088894042132&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712281641518759976&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712281528167825518&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above we see persistence running on the launch party server. In the week leading
up to the launch, we started seeing many issues caused by delay in persistence.
Below you can see what the length of the delays was. This was likely caused by
the fact that normally our main server run on a unit with a hard drive, whereas
the launch party ran on a server with a solid-state drive. The times taken for
saving are still quite high, since disk input&#x2F;output takes significantly longer
than accessing either RAM or the CPU Cache.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712282870600958002&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;network-analysis-by-angelonfira&quot;&gt;Network Analysis by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;After playing with Wireshark during the NorthSec CTF last weekend, I felt
inspired to check out what Veloren&#x27;s network packets look like. I started by
playing on the server, and running through a few different scenarios. First, I
started by just standing in the spawn village. Then, I started flying over
unexplored territory. Finally, I fell into a lake and sank to the bottom.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712288022338732062&amp;#x2F;Screenshot_from_2020-05-19_08-50-22.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;initial-server-connection&quot;&gt;Initial Server Connection&lt;&#x2F;h3&gt;
&lt;p&gt;At first, we have a high burst of data being sent and received while connecting
to the server. Upon analysis of the packets in that region of time, we find that
many packets are making up a larger message. This message appears to be between
30KB up to around 100KB.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;standing-in-spawn-village&quot;&gt;Standing in Spawn Village&lt;&#x2F;h3&gt;
&lt;p&gt;Here we see two different sections. First, when you load in, you start
downloading many chunks of the surrounding area. This sees about 600KB&#x2F;s of
bandwidth use. Once all of the surrounding chunks have been downloaded, the
bandwidth goes down to around 300KB&#x2F;s. There are still packets being sent that
update us on all of the entities around us.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;711703389804953710&amp;#x2F;screenshot_1589655382942.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;flying-over-unexplored-areas&quot;&gt;Flying Over Unexplored Areas&lt;&#x2F;h3&gt;
&lt;p&gt;Similar to the previous chunk downloading, we start asking the server for more
areas. We can see that there are some larger and smaller amounts being
downloaded. This section stays quite consistent.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sinking-in-a-lake&quot;&gt;Sinking in a Lake&lt;&#x2F;h3&gt;
&lt;p&gt;Finally, we see a large drop in the data being sent from the server. All of the
chunks around us have already been downloaded. Also, there aren&#x27;t as many
entities around us as in the village, and so we don&#x27;t get as many updates. Here
we are only seeing around 60KB&#x2F;s of incoming data.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712334298400686163&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Recived data rate from server&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the coming weeks, I hope to get more into the code behind networking in
Veloren. I&#x27;m also going to be exploring how we handle authentication, which
might include another writeup on some of it&#x27;s concepts.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;712295605170602075&amp;#x2F;logo.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new banner for our GitLab repo. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;712353024118358087&#x2F;P0L7gSo.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 67</title>
          <pubDate>Mon, 11 May 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-67/</link>
          <guid>https://veloren.net/blog/devblog-67/</guid>
          <description>&lt;p&gt;0.6, the content update, is slated to be released this week! Join us for the
release party at 18:00 GMT on Saturday the 16th. This week, we hear from @Sharp
about the move to WGPU. This Month in Rust GameDev has a new edition for the
month of April. In other news, &lt;em&gt;here be dragons&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Songtronix, @imbris, @CapsizeGlimmer,
@AngelOnFira, @Slipped, @YuriMomo, @Snowram, and @Shandley!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;709112492403589231&amp;#x2F;veloren_boss_battle_theme.mp3&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A new boss battle piece by @sharpie&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Lots of bug fixes this week as we approach the 0.6 launch this Saturday!
@ProTheory8 found a bug was found where rapidly changing items in the eq slot
would crash the server. @imbris is working on a fix. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-009&#x2F;&quot;&gt;This Month in Rust GameDev #9&lt;&#x2F;a&gt; has been released for the month of April.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;709475015027851321&amp;#x2F;ezgif.com-optimize.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New dragon mob by @Gemu, implemented by @Snowram and @Slipped&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Persistence has finally been merged! Although @Shandley built the final
implementation, this has been an ongoing effort by many developers. The current
level of persistence only allows a character&#x27;s looks to be stored on the server.
The plan is to expand this out to a character&#x27;s level, position, and stats
before 0.6 is released.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&#x27;Programming&#x27; is simply the act of adding bugs to an empty text file, don&#x27;t fear.
- @zesterer&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;709139690862674020&amp;#x2F;Garg_vines.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;By @Zukel&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;move-to-wgpu-by-sharp&quot;&gt;Move to WGPU by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;Concretely, the move to WGPU, at least in the long run, lets us do two things:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Access newer graphics card features on cards that support them (where &quot;newer&quot;
means anything added since OpenGL 3.2, which came out literally in 2008)
without giving up cross-platform compatibility.&lt;&#x2F;li&gt;
&lt;li&gt;Exert far more control over the way we interact with the GPU than was
possible with OpenGL, opening up previously impossible performance
optimizations without sacrificing safety.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The mechanism allowing for both of these changes is that we target the
(in-progress) WebGPU API. The API is being designed to provide a target for
browser applications that want to interact with the GPU. Unlike APIs like
DirectX or Metal, which are explicitly intended to be proprietary, WGPU is
designed to be cross-platform. Vulkan, on the other hand, tries to be a
universal standard capable of representing all possible interactions with all
existing graphics cards. It aims to provide a common interface between all the
new APIs; unlike OpenGL, it is aimed at modern graphics cards.&lt;&#x2F;p&gt;
&lt;p&gt;Unlike all of these APIs, WGPU is not intended as a &quot;final&quot; target language
implemented by the GPU vendor, but instead treats low-level APIs like Vulkan,
Metal, or DirectX as compilation targets. This gives it some independence from
vendors changing or abandoning their implementations (like Apple did with
OpenGL).&lt;&#x2F;p&gt;
&lt;p&gt;The mechanism for all this is the gfx-rs project. It both implements a low-level
Rust API over all the backends I mentioned, and provides a safe Rust
implementation of the WebGPU API on top of each one. WGPU is a unified interface
to all these backends that automatically selects the best native target.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;709162255497035776&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;By @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In practice this whole vision is not yet reality:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There are older machines that don&#x27;t expose a more modern backend, but still
support OpenGL. Thus, an OpenGL target is needed (this is in progress).&lt;&#x2F;li&gt;
&lt;li&gt;Since it&#x27;s still relatively early, there are still a fair number of bugs in
the WGPU implementations--safety, performance, etc. But with how high quality
the old gfx-rs is, I have little doubt these will be ironed out.&lt;&#x2F;li&gt;
&lt;li&gt;There are features of OpenGL, or the target languages, that aren&#x27;t yet exposed
but could be very beneficial to performance. As time goes on and the WebGPU
standard develops, I expect a lot of these concerns to lessen over time, but
apparently there is a way to write native plugins for the time being if you
don&#x27;t care about the web.&lt;&#x2F;li&gt;
&lt;li&gt;One very important part of this vision is missing; how to handle shaders.
Currently, WGPU does not have its own, working shader compiler that can
translate from SPIR-V to the relevant backend languages, or from a language
like HLSL or GLSL to SPIR-V. Instead, WGPU relies on a C++ library called
spirv-cross that (in our experience) is much more difficult to integrate into
a typical Rust workflow, both in terms of compiling it and developing against
it (e.g. it&#x27;s much harder to deal with a bug in it than a bug in a Rust
dependency). Work is ongoing on addressing this in the naga repository, which
@Capucho is apparently helping work on!&lt;&#x2F;li&gt;
&lt;li&gt;A related problem is that (AFAIK) there is no standard intermediate language
that&#x27;s been chosen for shaders (I think SPIR-V is just a convenience thing).
This doesn&#x27;t affect us that much though.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Despite these concerns, it&#x27;s already very promising and I am really happy we
were able to get Veloren working using its API, even if it&#x27;s only a proof of
concept!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;709156178495668303&amp;#x2F;snap2020-05-10-17-33-18.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;By @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;WGPU&#x27;s current approach leverages the borrow checker to provide a Rust API that
can be significantly more efficient without sacrificing safety, at the cost of
being significantly harder to use (a tradeoff we&#x27;re happy to make). However,
just because you rewrite code to use the new API doesn&#x27;t automatically make it
faster.&lt;&#x2F;p&gt;
&lt;p&gt;Mostly, it does make all the steps that are costly more explicit, which makes it
a lot easier to design for performance, but there are also some quirks of the
API itself that may make it harder to do this. I think the API (both Rust side
and interface side) will probably continue to evolve to hit the right balance of
safety and performance. It also seems possible to me that WGPU alone will not be
a high level enough target in some languages to use sanely (for instance, it
seems very hard to use safely in a language like C++).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;709270914809856080&amp;#x2F;screenshot_1589173677975.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Scale of the new cyclops. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;709515080240201738&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 66</title>
          <pubDate>Mon, 04 May 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-66/</link>
          <guid>https://veloren.net/blog/devblog-66/</guid>
          <description>&lt;p&gt;This week, new lantern functionality was added. We&#x27;ve seen some new progress on the wgpu front, with some of the game being rendered. There is also new audio progress with some SFX and a new track.&lt;&#x2F;p&gt;
&lt;p&gt;- TWiV Editors: Slipped and AngelOnFira&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Zesterer, @Julian, @Pfau, @CapsizeGlimmer, @Songtronix, @Silentium, @Capucho, and @ProTheory8!&lt;&#x2F;p&gt;
&lt;p&gt;@CapsizeGlimmer added functionality to the lanterns in the game. @Pfau has been cleaning up NPC behavior, and adding assets. @Juli199696 has been working on new SFX, including new item pickup, and wield sounds.&lt;&#x2F;p&gt;
&lt;p&gt;@Silentium has been working on a huge increase in the number of weapons in the game. @Capucho and @Sharp continue to progress the wgpu branch. Currently, the main menu and character selection work. The game itself can be rendered, but there is a lot of work to go.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;707194143943688253&amp;#x2F;dragon.PNG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Dragon model by @Gemu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;lantern-functionality-from-capsizeglimmer&quot;&gt;Lantern Functionality from @CapsizeGlimmer&lt;&#x2F;h2&gt;
&lt;p&gt;A few weeks ago lanterns were merged into the game. However, they were simply items to be equipped and carried around. Having real light in dungeons and at nighttime still relies on the &#x2F;lantern command. That changed this week with @CapsizeGlimmer&#x27;s MR which not only makes lanterns functional, binding them to a key, but also adds colors to lanterns and light flickering animations!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;707098818457501754&amp;#x2F;screenshot_1588655826969.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A blue lantern at night&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In addition to lantern flickers, the waypoint bonfires will now do the same. The atmosphere of Veloren at night is starting to really come together.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;audio-work-from-juli199696-and-badbbad&quot;&gt;Audio Work from @Juli199696 and @badbbad&lt;&#x2F;h2&gt;
&lt;p&gt;@badbbad has gone to work this week on a new audio track for the game. Titled Highlands of the Hawk, it&#x27;s seen as a wasteland type tune, meant for an orc village type environment. Give the WIP track a listen &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;tomerbarnea&#x2F;highlands-of-the-hawk&#x2F;s-KTtGQOhJeT9&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;The next big task for audio is going to be battle themes. This includes trying to devise a way for the music to be able to shift naturally into a faster paced and more intense style of music when combat starts, without feeling disjointed. One solution is to create music with multiple layers, and having those layers fade in and out depending on the player&#x27;s situation. Adaptive music is challenging, but @badbbad is looking to experiment with it soon.&lt;&#x2F;p&gt;
&lt;p&gt;@Juli199696 tweaked some of the sound effects in the game this week, moving away from more realistic metallic weapon sound effects for wielding into something a little more fitting to the overall style of the game. Pickup and drop sounds have also been tweaked.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;706686426976223242&amp;#x2F;snap2020-04-10-18-01-30.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Enemy progress from Albino Axolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;706974431422972047&amp;#x2F;Screen_Shot_2020-05-04_at_3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Progress from the wgpu branch! Now playable, somewhat!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;707311138760556554&#x2F;zarfksz1fiw41.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 65</title>
          <pubDate>Thu, 30 Apr 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-65/</link>
          <guid>https://veloren.net/blog/devblog-65/</guid>
          <description>&lt;p&gt;This week, work has been done on Airshipper and wgpu. @AngelOnFira gives us a look at external work on Tarpaulin. We also hear from @Sharp on the progress of LoD, as well as from @zesterer about work on sprite and entity LoD.&lt;&#x2F;p&gt;
&lt;p&gt;- TWiV Editors: Songtronix, Slipped, and AngelOnFira&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Zesterer, @Pfau, @Slipped, @CapsizeGlimmer, @Songtronix, @xMAC94x, and @Treeco!&lt;&#x2F;p&gt;
&lt;p&gt;@Zesterer has been hard at work with projectile collision fixes, as well as a new level of detail system for entities and terrain sprites. @Capucho has been trudging through lots of work to get wgpu working for different systems in Veloren. They are currently working on the main menu UI, as well as the character menu.&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix is working through many improvements to Airshipper. The next version will offer macOS builds, as well as stable versions of Veloren rather than just nightly.&lt;&#x2F;p&gt;
&lt;p&gt;Game design met to discuss the schools of magic, possibility of spell crafting, &quot;endless&quot; sky islands and caves for exploration, as well as touch on the goals for the Points of Interest. They also decided to address equipment and crafting during the next meeting.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tarpaulin-and-toolchains-by-angelonfira&quot;&gt;Tarpaulin and toolchains by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;Tarpaulin has broken recently on our continuous integration (CI) pipeline. Tarpaulin is used to keep track of &quot;code coverage&quot; on the project. When we run tests, we want to make sure it touches as close to 100% of the code if possible. That way there isn&#x27;t code that is completely ignored. In practice, we really don&#x27;t have that much code coverage, but that&#x27;s not the problem here. Tarpaulin breaking is!&lt;&#x2F;p&gt;
&lt;p&gt;Diagnosing this problem took some work. Although I love working with CI, my Rust skills aren&#x27;t amazing. And this problem was starting to look more like a Rust one. Luckily, I was able to follow a trail of breadcrumbs through areas that I would normally get stuck.&lt;&#x2F;p&gt;
&lt;p&gt;In our CI, we were getting this error while running Tarpaulin:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;[INFO tarpaulin] Creating config
&lt;&#x2F;span&gt;&lt;span&gt;[INFO tarpaulin] Running Tarpaulin
&lt;&#x2F;span&gt;&lt;span&gt;[INFO tarpaulin] Building project
&lt;&#x2F;span&gt;&lt;span&gt;error: toolchain &amp;#39;nightly-x86_64-unknown-linux-gnu&amp;#39; is not installed
&lt;&#x2F;span&gt;&lt;span&gt;Error: &amp;quot;Failed to report coverage! Error: No coverage results collected.&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;With my limited knowledge of how Rust toolchains work, I set off to learn more about them. I knew our CI had a version of nightly installed, so I first tried to lock down exactly which version. We use the &lt;code&gt;rust-toolchain&lt;&#x2F;code&gt; version to specify a date of nightly that we want. Since the toolchain would be the same on my local version of Veloren, I could just run &lt;code&gt;rustup toolchain list&lt;&#x2F;code&gt; to see the exact version.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;nightly-2020-04-17-x86_64-unknown-linux-gnu&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Interesting, it appears that Tarpaulin is ignoring the date. I did &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rustup#toolchain-specification&quot;&gt;some research&lt;&#x2F;a&gt; to find out more about the Rust toolchain specification. Next up was to figure out how Tarpaulin gets the toolchain name.&lt;&#x2F;p&gt;
&lt;p&gt;After cloning the Tarpaulin repo, I didn&#x27;t really know where to look. I searched for &quot;toolchain&quot;, &quot;is not installed&quot;, and &quot;nightly&quot;. I didn&#x27;t really know what I was looking at, but I stumbled across this function:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;create_command&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;manifest_path&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;Config, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ty&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;RunType) -&amp;gt; Command {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let mut&lt;&#x2F;span&gt;&lt;span&gt; test_cmd = Command::new(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;*ty == RunType::Doctests {
&lt;&#x2F;span&gt;&lt;span&gt;test_cmd.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;[&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;+nightly&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;]);
&lt;&#x2F;span&gt;&lt;span&gt;} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Ok(toolchain) = env::var(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;RUSTUP_TOOLCHAIN&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;) {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; toolchain.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;starts_with&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;nightly&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;) {
&lt;&#x2F;span&gt;&lt;span&gt;test_cmd.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;+nightly&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;);
&lt;&#x2F;span&gt;&lt;span&gt;} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;else if&lt;&#x2F;span&gt;&lt;span&gt; toolchain.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;starts_with&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;beta&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;) {
&lt;&#x2F;span&gt;&lt;span&gt;test_cmd.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;+beta&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;...
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There was some stuff in here that looked sort of useful, but it wasn&#x27;t until I came back to it a few times that I started playing with it. I had to learn how to install a cargo command from a local path, which wasn&#x27;t too bad: &lt;code&gt;cargo install --path &amp;lt;path&amp;gt;&lt;&#x2F;code&gt;. Then I could debug nice and quickly! I added an info message that would print the toolchain it was getting from the env variable, and low and behold, it was what we wanted!&lt;&#x2F;p&gt;
&lt;p&gt;Next, I changed &lt;code&gt;test_cmd.arg(&quot;+nightly&quot;);&lt;&#x2F;code&gt; to be &lt;code&gt;test_cmd.arg(&quot;+nightly-2020-04-17-x86_64-unknown-linux-gnu&quot;);&lt;&#x2F;code&gt;. Running this fixed the original problem, and the right toolchain was being used. Great success! Now that I had a fix, it&#x27;s time to get it into Tarpaulin. I swapped out some code to just use the env variable if it was available.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Ok(toolchain) = env::var(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;RUSTUP_TOOLCHAIN&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;) {
&lt;&#x2F;span&gt;&lt;span&gt;test_cmd.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;(format!(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, toolchain));
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As far as I know, this solution should work any case. I&#x27;m waiting on it to get merged, but we should be able to patch our CI manually in the meantime. This wasn&#x27;t that complicated of a problem, but I learned a lot on the way!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;704656447891570778&amp;#x2F;new-animals.PNG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Snowram merged in some new animals this week, the ram, snowy owl, hyena and parrot!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;lod-and-lighting-progress-from-sharp&quot;&gt;LOD and lighting progress from @Sharp&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;703933962606608404&amp;#x2F;screenshot_1587901296097.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A view of the distance horizon utilizing the level of detail system&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The LOD branch has been progressing nicely over the last few weeks. One of the factors increasing the workload involved in it is that an overhaul of the lighting system is being performed with the LOD additions, as the two complement each other well. Proper time-dependent lighting has been implemented, providing a more physically realistic interpretation for the sun&#x27;s effect on the terrain. Better atmospheric scattering along with point-light dependent HDR is also being worked on to improve the overall look and feel of the lighting throughout the game. After replacing magic constants with derived quantities, most of the current focus is on tweaks to the implementation to work out the exact look we want.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704785100503777300&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Morning time under a rewritten sun&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another portion of the LOD work was geared towards making the low detail terrain feel more natural. Most of the work there involved manipulating the shaders to create a look with more shadow and texture, with the goal of both improving the aesthetic of the far terrain and blending the LOD better with the nearby voxels. The work is very experimental but promising so far.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704810849637892096&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Before&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704810757274992745&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;After&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704813063655915690&amp;#x2F;screenshot_1588110890691.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, the last LOD branch focus this week was on underwater visuals, where Sharp is also implementing a realistic approach. The new handling of lighting provides a very atmospheric environment in the oceans and lakes. One of the main ideas is to filter out wavelengths on the red end of the spectrum faster than green and blue wavelengths, much like in reality. We have a lot of ideas for ocean gameplay and discovery later, so getting this right is important.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704800714198614217&amp;#x2F;screenshot_1588107974028.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;test&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Treating one block as one meter, reds and browns will quickly fade, and while that might sound like dulling the terrain, the results are quite colorful.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704860135314423830&amp;#x2F;screenshot_1588122114426.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An underwater dungeon entrance&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704873499201896498&amp;#x2F;screenshot_1588125303835.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;704864534111846430&amp;#x2F;screenshot_1588123161940.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sprite-lod-from-zesterer&quot;&gt;Sprite LOD from @zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;This week zesterer added a sprite and figure LOD system, while Pfau built it into the UI to make it configurable in the settings. Working independently from the terrain LOD, this is an important follow-up to the towns addition, because it makes the farms much easier to handle, especially on weaker machines.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;703309247257116702&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;a low detail dwarf!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The system applies downsampling to the models we use for sprites and mobs in the world. The number of voxels we have on the screen (specifically voxel faces) all impact how the game is able to perform, and since we can&#x27;t notice small detail from far away, it makes sense to simplify the visuals at distance. Several levels of LOD now exist in the game, providing just the right detail at incremental distances to aid your performance while maintaining a believable impression of the assets.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;703592458256121906&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;flatpak&quot;&gt;Flatpak&lt;&#x2F;h2&gt;
&lt;p&gt;As a little side note Veloren will now be packaged as a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flathub.org&#x2F;apps&#x2F;details&#x2F;net.veloren.veloren&quot;&gt;Flatpak&lt;&#x2F;a&gt; which can be installed with &lt;code&gt;flatpak install flathub net.veloren.veloren&lt;&#x2F;code&gt; to support multiple Linux distributions. Please note that due to our frequency of updates the package might occasionally be outdated.
We do our best to ensure the best experience for you all!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;705373322195763240&amp;#x2F;veloren-flathub.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It already gets downloaded!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;villager-work-from-pfau&quot;&gt;Villager work from @Pfau&lt;&#x2F;h2&gt;
&lt;p&gt;Pfau is working towards making the villagers much more interesting by the next update by giving them some personality through clothing and tools. With farms being the defining element of the towns thus far, some farm equipment felt right.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;preview.redd.it&amp;#x2F;5b56odhirlv41.png?width=1024&amp;amp;auto=webp&amp;amp;s=32b7f786bf08cc335dc7329f4b1ed6b5182d56ed&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A villager in overalls with a rake&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Although the villagers won&#x27;t have complex activities yet, giving them the appropriate equipment has helped the towns feel much more cohesive and real already. In the works are rakes, shovels, brooms, pickaxes, fishing poles and more for them to carry around.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;704295866583744582&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A wise village elder. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;703665712199106689&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 64</title>
          <pubDate>Wed, 22 Apr 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-64/</link>
          <guid>https://veloren.net/blog/devblog-64/</guid>
          <description>&lt;p&gt;This week we take a look at the work put in on dungeons, the details added to towns and progress with wgpu, Iced and persistence&lt;&#x2F;p&gt;
&lt;p&gt;- Slipped, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @zesterer, @Pfau, @Songtronix, @Imbris, @Capucho, @CapsizeGlimmer, @xMAC94x, and @Shandley!&lt;&#x2F;p&gt;
&lt;p&gt;This week the grind to 0.6 release continues. @zesterer has put a lot more work into the civsim branch. Basically Veloren 2, in addition to towns the branch now contains multi-level dungeons with optional paths, loot, bosses and ranged enemies with new AI. We also have seen progress from @Shandley to add character persistence to the game, along with huge steps forward from @Imbris and @Capucho to integrate &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hecrj&#x2F;iced&quot;&gt;iced&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gfx-rs&#x2F;wgpu-rs&quot;&gt;wgpu&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;towns-and-dungeons&quot;&gt;Towns and Dungeons&lt;&#x2F;h2&gt;
&lt;p&gt;Paths have seen a major step forward this week. In earlier blogs we&#x27;ve shown off the map of paths around the world that civilizations use to trade between each other and help themselves develop. While world simulation is still largely an invisible background process, the paths created by the formed civilizations are now able to be seen! You can find these paths anywhere around the world and use them to trace back to multiple towns.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;701606065044979882&amp;#x2F;screenshot_1587346186231.png?&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The roads are also pretty smart in how they work. Following them you&#x27;ll notice that they take you through the easiest paths between mountains, or go around them completely. They like following rivers. They&#x27;ll bridge over water when they need to, and when they enter a town you can stay on them to explore the whole town itself! They also have streetlights.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;702258024114552912&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;9GFTFGE1kx4&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A look at the new paths and procedural towns&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;702240577076330526&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Dungeons are new and already pretty complex. They have around six floors and are fully procedural with an increasing difficulty as you descend. Each one is a unique experience with a main path that you can follow to the bottom along with offshoot rooms. The new AI provides some challenges and strategy, with enemies now working with line of sight detection. Dungeons are a ton of fun so far, especially with a group. Future plans include traps, platforming, puzzles and much more!&lt;&#x2F;p&gt;
&lt;p&gt;One of the big visual changes is the new block shader, giving a 3x3 noisy texture to blocks in the world&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;701871760538075146&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new block shaders&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;701870219810832414&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The shaders help bridge the gap between small and large voxels in fields&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;701876031333597324&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;wgpu-with-capucho&quot;&gt;wgpu with @Capucho&lt;&#x2F;h2&gt;
&lt;p&gt;wgpu is a graphical backend that we&#x27;ve been eyeing for a long time, looking forward to a conversion to it as it provides access to APIs like Vulkan, DirectX and Metal. Now, I barely know anything about wgpu but I do know that converting to wgpu is very advantageous for Veloren and also a super hard task to do. I&#x27;ve built a compilation showcasing Capucho&#x27;s heroic struggle, which started to yield visible results this week! Since wGPU is an API that covers more ground and is vastly more capable than our exist gfx pre-ll based API, moving everything to the new API is proving to be a struggle. We&#x27;ll get there though.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;blog&amp;#x2F;devblog-64&amp;#x2F;aYGdTmK.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It&amp;#x27;s been a trip&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;other-work&quot;&gt;Other work&lt;&#x2F;h2&gt;
&lt;p&gt;Shandley has been working a ton on persistence this week. This is one of the main features we&#x27;re targeting before 0.6 release as character saving is going to be a huge complement to some other recent features like changes to inventory, combat and the loot found in the world. More on that next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;701638298736787536&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The same main menu, but in Iced! The conversion to the new GUI library has progressed nicely so far, text is next.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;New music has been completed and heading into master this week from @badbbad! 6 new tracks will nearly double the game&#x27;s playlist. All of them probably land on our SoundCloud: &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;velorenofficial&quot;&gt;https:&#x2F;&#x2F;soundcloud.com&#x2F;velorenofficial&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;702077289235742740&amp;#x2F;screenshot_1587457488787.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sharp continuing work on the LOD branch&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;external-preview.redd.it&amp;#x2F;ZZk-wyDUs6Sr-e0-CDmdqK2N2u9-oThVfDOAehHQByk.png?width=1024&amp;amp;auto=webp&amp;amp;s=98bdccde577959791f3f730053c6a5e93593b207&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chilling with the flax. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;701515993058377798&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 63</title>
          <pubDate>Wed, 15 Apr 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-63/</link>
          <guid>https://veloren.net/blog/devblog-63/</guid>
          <description>&lt;p&gt;@Imbris made the inventory slots more functional with drag &amp;amp; drop support, functional armor&#x2F;hotbar slots and @Zesterer has been working on procedural town generation.&lt;&#x2F;p&gt;
&lt;p&gt;- Songtronix, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Capucho, @Carbonhell, @Imbris, @Zesterer, @Slipped, @xMac94x, @Olexorus, @Pfauenauge, @Songtronix and @Treeco!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;inventory-hotbar&quot;&gt;Inventory &amp;amp; Hotbar&lt;&#x2F;h2&gt;
&lt;p&gt;As promised in the last blog post, @Imbris made the inventory slots fully functional which means this isn&#x27;t just a dream anymore (note the use of the hotbar!):&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;699923075151691786&amp;#x2F;screenshot_1586945019098.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It&amp;#x27;s free real estate! Play singleplayer and enter in the chat: &amp;#x2F;debug&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-6-meeting&quot;&gt;0.6 Meeting&lt;&#x2F;h2&gt;
&lt;p&gt;In the meeting we refined our goal for the 0.6 release and agreed upon that we have one important goal: &lt;strong&gt;persistence&lt;&#x2F;strong&gt;. Many players join the server just to find out that all their progress will be lost when they leave the server. We want to solve this but we cannot guarantee that throughout the development progress things get lost. However a simple server restart or logging back into the server shouldn&#x27;t reset your items. This will be our most important goal and if needed will delay the release.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;worldgen&quot;&gt;Worldgen&lt;&#x2F;h2&gt;
&lt;p&gt;@Zesterer has been hard at work to improve towns!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;tha_ijDg4dA&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Take a look at the new procedural towns! (WIP)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Words cannot describe the beauty of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;g13m1b&#x2F;more_impressions_of_the_new_towngen&#x2F;fndg2ae?utm_source=share&amp;amp;utm_medium=web2x&quot;&gt;creating towns&lt;&#x2F;a&gt; with pure code therefore take a look at these screenshots (keep in mind that many things are still in flux and might change before being made available in our nightly release):&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;699437037417267314&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;699437798284853269&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;699440344361730109&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;699446318577221682&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;699449191063355482&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;699457749217574913&amp;#x2F;screenshot_1586831938004.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;699424941287932005&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;699862781952000009&amp;#x2F;screenshot_1586930668733.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;699425119327485967&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;698546741422850118&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 62</title>
          <pubDate>Mon, 06 Apr 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-62/</link>
          <guid>https://veloren.net/blog/devblog-62/</guid>
          <description>&lt;p&gt;@Carbonhell made it possible to change your key bindings in-game and @Pfau with the help of @Imbris are working on
improving the inventory with working armor slots while @Capucho
gives us a look into how to make yourself transparent.&lt;&#x2F;p&gt;
&lt;p&gt;- Songtronix, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Imbris, @Pfau, @Songtronix, @Capucho, @AngelOnFira, @Zesterer, @Qutrin, @Shandley, and @yusdacra!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;capucho&quot;&gt;Capucho&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;697582876635430992&amp;#x2F;player-transparent.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Recently, I implemented player transparency. As you can see above, this allows the player to become transparent when you zoom in far enough. When first developing this feature it was more of some toying around. I created a simple shader that would display a dark silhouette when the player was beyond things.&lt;&#x2F;p&gt;
&lt;p&gt;It works by rendering after everything else. It would pass the depth test and then the player was rendered. This way if the player wasn’t occluded by a tree or something, it could render over the player. Otherwise the silhouette would be shown. I posted a screenshot and called it a day.&lt;&#x2F;p&gt;
&lt;p&gt;Next day I go check out the discord and there was a lot of positive responses, so I thought to myself that adding some sort of transparency effect when zooming would be cool, so I disable the shadow effect and modified the player shader to reduce the opacity when zooming in. Then I tried to put everything together but when you zoomed the shadow appeared because the player now was also rendering things that were behind him, so I was searching for something to make it work and found about stencil buffers.&lt;&#x2F;p&gt;
&lt;p&gt;Stencil buffers are like a Depth Buffer but the developer has full control over it, so I made that when the player was rendered the buffer would write a 1 and the shader only rendered if there was a 0 and then I tried to run and it crashed right after startup, it wasn’t supposed to have happened and it took me 2 days to figure it out. The OpenGL spec says that a depth buffer and a stencil buffer can exist separated, but it turns out almost no graphic cards manufacturers implement it so I joined them together and it worked, I shared my work, it was merged and I went to sleep.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;697033148348760094&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Next day I get a message, Slipped had turned Jesus, this was caused by the circular dependency in the depth buffer, the player was transparent and the water too but the player was drawn last onto the screen so it seemed like it was hovering over water. It was no easy fix because if you changed the order the player would have x-ray vision on the water when it became transparent.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;696219653944508436&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Slipped had turned Jesus&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;To solve this Imbris suggested dithering. Dithering simply discarded pixels on a pattern and there was no circular dependency because there was nothing to be rendered and It also gave a nice transparency effect with some sort of film grain applied on top. A number of small changes were also made, the shadow also got dithered, the position was taken from the player location and not from the fragment which made it more uniform and this was made the final version of the effect.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;697579569003364452&amp;#x2F;player-dither.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;language-combat-and-armor&quot;&gt;Language, Combat and Armor&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren is now available in Italian, Portuguese, Turkish and German!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the recent merge of Combat, we now have far better fighting experience than before. Try it out! Another great addition is Armor:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;696539899326627880&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;inventory support for Armor will follow shortly but it&amp;#x27;s already equippable and can be found in chests!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;697178994964955206&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Are you worthy to wear it?&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In need for some calming tunes? Checkout our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;velorenofficial&quot;&gt;SoundCloud&lt;&#x2F;a&gt; and tune your controls:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;696766685180461066&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;How to make a good game: Make Controls adjustable. Thank you @Carbonhell!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;697135378934792302&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Exclusive cape just for $9999.99. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;696823462588579880&#x2F;L6GDPKNzYYmtwHEuCi6O5abx3X2L0KbU1PaVDp82X_c.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 61</title>
          <pubDate>Mon, 30 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-61/</link>
          <guid>https://veloren.net/blog/devblog-61/</guid>
          <description>&lt;p&gt;This week, @Zesterer gives us an in-depth look into the mentality behind the design, development, and goals of worldsim. @xMAC94x gives us another look into the new networking prototype. Lots of progress was made in combat as well.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Capucho, @Songtronix, @Imbris, @Zesterer, @AngelOnFira, @jackrubino, @Slipped, and @Shandley!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Zesterer has been putting a lot of work into worldsim. This includes sites, settlements, trade routes, and basic economic simulation. @Capucho finished free look and some other fixes. @yusdacra is working on a Turkish translation. @Juli199696 is working on a test server as well as finding bugs.&lt;&#x2F;p&gt;
&lt;p&gt;@Timo has quite a list this week. He worked on many bugs from the combat branch. He&#x27;s done lots of playtesting and has worked on issues that have come up. Some fixes include attacking animations, better combat movement, and glider physics. @Pfau has been working on adding new armour and weapons. He has also worked on improving some icons, as well as a new map background.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;695053157390221332&amp;#x2F;ezgif.com-video-to-gif.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Animation work by @Slipped&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;world-simulation-process-by-zesterer&quot;&gt;World Simulation Process by @Zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;One of the goals of Veloren is to have interesting and complex world simulation. We don&#x27;t have any illusions of grandeur - world simulation on the same level of Dwarf Fortress is unlikely - but we do want to create a world that fulfills the following criteria:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-it-encourages-the-player-to-ask-questions-when-encountering-new-things-by-providing-answers-to-those-questions&quot;&gt;1. It encourages the player to ask questions when encountering new things by providing answers to those questions&lt;&#x2F;h3&gt;
&lt;p&gt;World simulation should be internally consistent and driven by cause and effect. When a player encounters a peculiar feature of the world, deciding to investigate further should warrant actual answers rather than &quot;because it just is like this&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;This means placing aspects of the world in a historical context such that the ripples of past events can be explored by the player. If the player comes across ruins, they should have a name and an event in history that led to their abandonment. What happened at this place? Why did it happen? How has this had an impact on the surrounding settlements? All of these questions should have answers that can be discovered by interacting with NPCs or observing aspects of the world.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;691375223127277577&amp;#x2F;snap2020-02-28-16-30-55.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mustache work by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;2-it-provides-unexpected-and-unique-situations&quot;&gt;2. It provides unexpected and unique situations&lt;&#x2F;h3&gt;
&lt;p&gt;Existing procedural games tend to suffer from two key problems. The first, a lack of depth, I have already mentioned. When there exists no depth to features of an environment it becomes meaningless to investigate them. Players don&#x27;t feel like they have a stake in the world around them and don&#x27;t bother trying to satisfy their curiosity. They become conditioned to accept that things &#x27;just are&#x27; without question.&lt;&#x2F;p&gt;
&lt;p&gt;The second problem is homogeneity. Random variations in existing content do not lead to meaningful gameplay and players quickly become accustomed to the scope of the variation that the game permits. By combining elements of variation in a way that interact with one another, it&#x27;s possible to create an environment that throws up a far greater number of combinations of mechanics than would otherwise be possible.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-it-is-dynamic-and-reacts-to-decisions-made-by-the-player-in-a-way-that-feels-meaningful&quot;&gt;3. It is dynamic and reacts to decisions made by the player in a way that feels meaningful&lt;&#x2F;h3&gt;
&lt;p&gt;Many procedural games suffer from either a lack of interactivity (No Man&#x27;s Sky) or a lack of interactivity that produces a meaningful effect on the world (Minecraft). Players want to explore a world where their actions have far-reaching ramifications. To do this, the game world must be complex and interconnected such that those effects may propagate through the world in interesting and unexpected ways. Changing the world should change the behaviour of agents within the game world. Too often we see wooden-headed NPCs that blissfully ignore the player&#x27;s actions in games. We will do our best to avoid this.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;693844797513007104&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;How do we achieve all this? Sadly, there is no silver bullet. Procedural systems are difficult to get right, but I&#x27;ve come up with a few basic principles that I&#x27;ve found to be useful.&lt;&#x2F;p&gt;
&lt;p&gt;First, to create content, don&#x27;t create more variations of existing content. Instead, create new ways in which existing may interact. Minecraft often provides good examples of this: the addition of a single extra block to the game often has a multiplicative effect where players find thousands of ways in which it may interact with existing mechanics to create new things.&lt;&#x2F;p&gt;
&lt;p&gt;Next, randomization is not good procedural generation. In fact, the very opposite: games such as No Man&#x27;s Sky suffer badly from this misnomer and it created environments without depth or meaning. Instead, variation should be a product of the interaction of a small number of existing elements. Just take a look at how Conway&#x27;s Game of Life produces incredible emergent behaviour from an absurdly simple set of rules.&lt;&#x2F;p&gt;
&lt;p&gt;Players should be able to reason about the circumstances that led up to a particular situation and use that information to change the way they play in the future. If your game is informed by randomization, there is no common thread that players can use to reason about the game. Instead, they become a &#x27;back-seat driver&#x27;, beholden to the disorganized chaos of the random rules you&#x27;ve created.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, create &#x27;meta&#x27; rules. Games that stick to a strict set of rules tend to be rather dull. Instead of trying to spice things up by making the rules more complex (which just leads to confusion and frustration for players), it&#x27;s better instead to come up with consistent rules about when other rules might change. You can build up a hierarchy of rules that is both simple to understand but permits a vast amount of variation.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;693357544172683304&amp;#x2F;screenshot_1585379427021.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;With this in mind, I&#x27;ve begun work on simulating civilizations in Veloren. I&#x27;ve not got a huge amount to show yet, but I envisage something that looks like this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A world full of &#x27;sites&#x27;: these are places of interest in the world that may take on particular characteristics. Examples include villages, towns, ruins, farms, hideouts, towers, caves, dungeons, or magical places. The world simulation code will be aware of these sites and will influence them throughout the course of world generation and gameplay. Sites may get invaded, develop an economy, play host to various creatures, or otherwise play a part in the world&#x27;s story-telling.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;A dynamic simulated economy where prices are determined by regional supply and demand. This feature will permit a lot of gameplay, allowing players to become merchants and trade goods across the world. The economy should react to various economic stimuli, with prices rising and falling according to the availability of goods. If a dragon decides to lay siege to a town, demand for weapons should spike!&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Simulation of social and material conditions: Ethnic and political groups within the world should interact with one another. Wars, battles, uprisings, plagues, and famines should occur and inform the behaviour of groups within the world.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;blog&amp;#x2F;devblog-61&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Simulating population growth, yellow being the highest population, black being the least&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;To facilitate these things, I&#x27;ve made the decision to split world generation into 4 distinct stages, each of them adding more &#x27;colour&#x27; to the world:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;World generation. We already have this stage: it takes place over the course of millennia simulating erosion, river formation, ecology, etc.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Antiquity. This stage will involve the founding of civilizations and the simulation of basic economic relationships between them. This stage will take place over thousands of years.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;History. In this stage, we&#x27;ll be creating and simulating actual characters in the world. Legends and myths will be created, significant figures will live and die, wars and battles will occur between settlements and civilization. Diplomacy will be simulated too. This stage will take place over a number of generations and probably a few hundred years.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;In-game world simulation. This stage will occur throughout the duration of gameplay. It will be an extension of the third stage, with small details added that players can interact with. Characters will persist and can be interacted with by players, changing their behaviour accordingly. Diplomacy will include events triggered by players and will permit a certain level of player interaction.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;691303661413859448&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;These stages will be run one after the other for each world. In theory, the results of each stage should be layered on top of one another in a manner that produces a rich, interesting world with a meaningful history.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, all of this is going to take a lot of time to develop. Do not expect this content to suddenly appear in the next update: however, I do want to get a basic skeleton of this architecture working for 0.6 such that it can be fleshed out in subsequent updates.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;networking-with-xmac94x&quot;&gt;Networking with @xMAC94x&lt;&#x2F;h2&gt;
&lt;p&gt;Networking is currently in a transit stage between the implementation &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-57&quot;&gt;I had&lt;&#x2F;a&gt;, and a newer async-std based variant. I noticed the implementation had a few difficulties, which are not trivial and didn&#x27;t come up in the beginning.&lt;&#x2F;p&gt;
&lt;p&gt;My initial plan was to have multiple worker-threads. Each worker thread could get multiple channels, like TCP or UDP, and handle their requests simultaneously. This would allow a single participant to have an opened TCP and UDP connection and both are handled by different threads.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;691397085013999746&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This requires a lot of locking and careful synchronising. Also, the old coding had some limitations. A packet could only ever be sent over a single channel, TCP or UDP. But mixed mode, like HEADERS via TCP, or UDP for Data (which isn&#x27;t that big of a deal). But prioritisation of outgoing messages was only possible inside a single worker thread which could use up all the network capacities. Additionally, these workers would need to be balanced if one has a high load while one a low load.&lt;&#x2F;p&gt;
&lt;p&gt;Those all are not simple tasks, which lead me to the idea of a redesign. Instead of multiple worker threads, we could use a single thread and then use async_std. This has the potential of stopping the synchronisation problems as I include everything in the state machine of async.&lt;&#x2F;p&gt;
&lt;p&gt;For example, the code that handles TCP gets reduced to a small amount, as most of it was manually building a state machine that async already provides. Unfortunately, I don&#x27;t have any numbers yet to compare those both approaches yet, nor is the new one really usable yet.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;692744692516913172&amp;#x2F;screenshot_1585233275293.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Making big friends. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;693537809230856272&#x2F;40.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 60</title>
          <pubDate>Mon, 23 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-60/</link>
          <guid>https://veloren.net/blog/devblog-60/</guid>
          <description>&lt;p&gt;This week we check in with @Sharp about some improvements to the map. Many contributors have been putting good work into combat, and there is progress to show! @Timo does a design analysis article on Zelda: BoTW.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Acrimon, @Songtronix, and @Capucho!&lt;&#x2F;p&gt;
&lt;p&gt;@Adam, @Slipped, @Pfau, and @Timo have been working a lot on combat. This work has lead @Slipped to compile &quot;8,000 times&quot;, while @Timo was never able to compile in time before someone else pushed a new commit to the branch. Here are some items that they covered:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Abilities like dash and triple strike
&lt;&#x2F;span&gt;&lt;span&gt;- More work on the new inventory by @Pfau
&lt;&#x2F;span&gt;&lt;span&gt;- Inventory supports stacking
&lt;&#x2F;span&gt;&lt;span&gt;- Armor as items
&lt;&#x2F;span&gt;&lt;span&gt;- Many bug fixes
&lt;&#x2F;span&gt;&lt;span&gt;- Fireball explosions
&lt;&#x2F;span&gt;&lt;span&gt;- Animations for hammer attacks, axe attacks, sword spins, arrow firing, and spell casting
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;567745888705839105&amp;#x2F;692515607064739951&amp;#x2F;explosion.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Explosions in action!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Comfy has worked on exporting most of the models used in the game. Many were saved instead of exported, so this will cut down on file size. @Capucho is working on implementing free look.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;analyzing-the-map-of-zelda-botw-by-timo&quot;&gt;Analyzing the Map of Zelda: BoTW by @Timo&lt;&#x2F;h2&gt;
&lt;p&gt;As part of game design, @Timo has written &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.koesters.xyz&#x2F;zeldabotw&#x2F;post.html&quot;&gt;an article&lt;&#x2F;a&gt; on the map in Zelda: BoTW. This analysis is a good way to get inspiration and ideas for things we could make use of in Veloren. Here is a short excerpt of this article:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Maybe you&#x27;ve heard of the 40 second rule of open world games. It says that there has to be something that catches the players attention every 40s on average. Luke Stephens did an excellent video on this, where he tries to find out how well the 40s rule applied in a variety of open world games. This article is meant to expand on the idea to find out how open world games manage coming up with so many interesting ideas.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;691374582480896120&amp;#x2F;snap2020-03-19-18-10-28.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;map-improvements-by-sharp&quot;&gt;Map improvements by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;This is only a small update for maps, but worth mentioning. We switched from shadow maps to horizon mapping. This means we can store just two angles per chunk to get proper lighting across the sun&#x27;s whole arc (ideally I&#x27;d like to keep this to 1 byte each), plus two bytes of &quot;occluder height&quot; to give us an approximation we can use for soft shadows.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;691466055624949800&amp;#x2F;worldmap_1584927490894.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This theoretically uses considerably more space per chunk than the implementation of binary, sharp shadow maps for height fields as described in the other paper. However, sharp shadows usually require much finer granularity (possibly column level rather than chunk level) to look decent, which we probably don&#x27;t want. Since our characters can also be in the air, I also wanted to make sure we could come up with some plausible estimate for the height where a chunk stops being in shadow, which requires the extra height data anyway.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;691394243482222622&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Item stacks and new visuals. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;692422982798278666&#x2F;FWVz7XyHTe_4wEEg5YIjbQO9CrlnhlX4JTWipBkc2bs.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 59</title>
          <pubDate>Mon, 16 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-59/</link>
          <guid>https://veloren.net/blog/devblog-59/</guid>
          <description>&lt;p&gt;This week, we see some work that is being done on the UI. We hear from @imbris about their work on winit, as well as server events. @Timo has been working on quite a few smaller issues.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x, @Songtronix, @Acrimon, @Imbris, and @Shandley!&lt;&#x2F;p&gt;
&lt;p&gt;@Timo has been working on quite a lot. He added a loadout struct to store weapons and their selected abilities. In combat, @Timo added a slight bouncing animation in first-person mode, added a shield item, and added a sword dash attack ability. He also fixed bugs for most weapon types, such as bows and boost. Finally, he improved character creation so the chest armor slider adjusts to available assets dynamically.&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix has ongoing work to improve the book. @Cedric is working on an external programming language called &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WeirdConstructor&#x2F;WLambda&quot;&gt;WLambda&lt;&#x2F;a&gt;. @Octo, @Pfau, and @Slipped have been working on some upcoming UI changes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work-of-imbris&quot;&gt;Work of @imbris&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;status-of-the-winit-update-branch&quot;&gt;Status of the winit Update Branch&lt;&#x2F;h3&gt;
&lt;p&gt;Previously, the issue blocking updating to the latest winit branch was mouse movement input lag occurring on macOS. To dig deeper into what was going on I created an example program to print out when events were being received from winit (see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Imberflur&#x2F;winit&#x2F;blob&#x2F;04ab898d0939752df709c403c382838c207ea0e4&#x2F;examples&#x2F;mouse_test.rs&quot;&gt;this&lt;&#x2F;a&gt;). With testing by @Shandley we saw an output that looked like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Generating mouse event: (8.000, 0.000)
&lt;&#x2F;span&gt;&lt;span&gt;Generating mouse event: (19.000, -5.000)
&lt;&#x2F;span&gt;&lt;span&gt;[DeviceEvent::MouseMotion(8.000, 0.000)] @ 0.193 us, 342.641 us after winit created
&lt;&#x2F;span&gt;&lt;span&gt;[DeviceEvent::MouseMotion(19.000, -5.000)] @ 41.391 us, 178.440 us after winit created
&lt;&#x2F;span&gt;&lt;span&gt;[MainEventCleared] @ 50.862 us
&lt;&#x2F;span&gt;&lt;span&gt;[MainEventCleared] @ 34315.527 us
&lt;&#x2F;span&gt;&lt;span&gt;Generating mouse event: (42.000, -8.000)
&lt;&#x2F;span&gt;&lt;span&gt;Generating mouse event: (83.000, -16.000)
&lt;&#x2F;span&gt;&lt;span&gt;[DeviceEvent::MouseMotion(42.000, -8.000)] @ 70504.492 us, 319.739 us after winit created
&lt;&#x2F;span&gt;&lt;span&gt;[DeviceEvent::MouseMotion(83.000, -16.000)] @ 70528.703 us, 153.272 us after winit created
&lt;&#x2F;span&gt;&lt;span&gt;[MainEventCleared] @ 70541.742 us
&lt;&#x2F;span&gt;&lt;span&gt;[MainEventCleared] @ 106441.617 us
&lt;&#x2F;span&gt;&lt;span&gt;Generating mouse event: (80.000, -11.000)
&lt;&#x2F;span&gt;&lt;span&gt;Generating mouse event: (133.000, -14.000)
&lt;&#x2F;span&gt;&lt;span&gt;[DeviceEvent::MouseMotion(80.000, -11.000)] @ 141973.828 us, 366.537 us after winit created
&lt;&#x2F;span&gt;&lt;span&gt;[DeviceEvent::MouseMotion(133.000, -14.000)] @ 141990.969 us, 123.327 us after winit created
&lt;&#x2F;span&gt;&lt;span&gt;[MainEventCleared] @ 141999.312 us
&lt;&#x2F;span&gt;&lt;span&gt;[MainEventCleared] @ 177216.766 us
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;(Note: the &quot;Generating mouse event&quot; lines come from a &lt;code&gt;println!&lt;&#x2F;code&gt; I inserted into the winit codebase).
As you can see, there seems to be a bug in the macOS event loop such that mouse events are only generated every other &lt;code&gt;MainEventsCleared&lt;&#x2F;code&gt;. This was an issue because I am using &lt;code&gt;MainEventsCleared&lt;&#x2F;code&gt; as the point where we run update code, render, and sleep to regulate the framerate (this is using &lt;code&gt;ControlFlow::Poll&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;687812568550604830&amp;#x2F;screenshot_1584056316512.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So mouse movement events were only received every other frame. Alas, digging around in &lt;code&gt;winit&lt;&#x2F;code&gt;&#x27;s macOS code and staring at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;opensource.apple.com&#x2F;source&#x2F;CF&#x2F;CF-1153.18&#x2F;CFRunLoop.c.auto.html&quot;&gt;this code&lt;&#x2F;a&gt;, I could not suss out what was causing the issue (I learned to call a method in Objective C is also referred to as &quot;sending a message&quot;). Nevertheless, I then realized we can just respond to every other &lt;code&gt;MainEventsCleared&lt;&#x2F;code&gt; which seems to mostly work just fine :D (to follow this issue see &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-windowing&#x2F;winit&#x2F;issues&#x2F;1418&quot;&gt;here&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Now, we need to figure out why arrow keys are producing &lt;code&gt;RecievedCharacter&lt;&#x2F;code&gt; events on macOS and what those characters are so that they can be filtered out. Also, there may be some sort of fps degradation over time on macOS that needs to be investigated.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;latency-improvements-for-serverevent-mediated-effects&quot;&gt;Latency improvements for &lt;code&gt;ServerEvent&lt;&#x2F;code&gt; mediated effects&lt;&#x2F;h3&gt;
&lt;p&gt;I made some improvements to the latency of &lt;code&gt;ServerEvent&lt;&#x2F;code&gt; mediated effects last week. Notable examples of such effects include inventory manipulations, terrain manipulation, and projectile generation.&lt;&#x2F;p&gt;
&lt;p&gt;Essentially, what used to occur is that the &lt;code&gt;ServerEvent&lt;&#x2F;code&gt; handling would be performed after all ECS systems were run each tick on the server. This included server-specific systems that sent sync data to clients.&lt;&#x2F;p&gt;
&lt;p&gt;Since syncing was performed before server event handling, clients would not see the effects of that handling until the next server tick. To remedy this I rearranged when sync systems were being run so that they would run at the end of the server&#x27;s tick. You might notice that shooting a bow is slightly more responsive now.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ui-improvements-by-pfau-and-company&quot;&gt;UI Improvements by @Pfau and company&lt;&#x2F;h2&gt;
&lt;p&gt;Recently, a small group has been working on some UI changes. This is being done by myself, @Slipped, and @Octo. The aim was to reduce the number of windows in the UI and start introducing a more artistic theme for it. So we decided to merge 4 windows:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The character menu and the bag&lt;&#x2F;li&gt;
&lt;li&gt;The map and the quest log&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In the last two weeks, we worked on the first item. I started by making a concept with our old assets.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;689209541476220978&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is just the character menu above a slightly stretched bag. So far so good. Then we started cutting bits and pieces off and tried to condense the information.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;689210095552299148&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This... slightly crowded window was the result. We decided to give the stats a whole tab of the menu you can switch to. Some minor changes followed, with the decision to move the gem item into slots inside the armour later.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;689210789936234532&amp;#x2F;inventory_concept.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Next, we added a scrollbar, a currency counter, and an indicator to show how much inventory space is left. We also added tabs you can open to only show certain types of items.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;484067824080519178&amp;#x2F;686142873309020180&amp;#x2F;charbag.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Then, we started to think about a general colour and design theme. We decided on &quot;Runic Blue&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;484067824080519178&amp;#x2F;686216377413271583&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;484067824080519178&amp;#x2F;686394851536928805&amp;#x2F;charbag.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;These changes are making use of the function to be able to colour within the code itself. We created a bunch of greyscale PNG files for this and then coloured them with a palette from the code. We could even let the player choose from some colour themes, or modders can come up with their own palette as well.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;689229310338662400&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is what we already have running in Veloren. Nothing is final yet, and more work will be done on this front in the near future.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;688132986918535285&amp;#x2F;screenshot_1584133996495.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;688083744556711980&#x2F;27.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 58</title>
          <pubDate>Mon, 09 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-58/</link>
          <guid>https://veloren.net/blog/devblog-58/</guid>
          <description>&lt;p&gt;This past week, many contributors are still working on long term items. Lots of small issues are being worked on as well. We hear about work that @imbris has been doing on external crates. There is also a new edition of This Month in Rust GameDev!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Acrimon, @imbris, @Capucho, @Songtronix, @Slipped, @Shandley, @xMAC94x, and @Snowram!&lt;&#x2F;p&gt;
&lt;p&gt;@Capucho has been working hard on many issues. This includes pausing the game in singleplayer when in the menu, as well as storing screenshots and logs in a better location. @Kalculate has been working on addressing mobs that spawn camp. This will need some revision to be compatible with changes that @Zesterer is working on.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;684818929935188138&amp;#x2F;24.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@LunarEclipse was working on the final stretch for controller support, and it was just merged! Along with that, @Acrimon got auth merged as well. @Slipped and @Pfau are working on some changes to UI, and hopefully, we can see the progress in the next few weeks. @Timo has added energy gains while attacking enemies.&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse and @xMAC94x have been working on CI. With the changes, contributors now need to make sure that their &lt;code&gt;Cargo.lock&lt;&#x2F;code&gt; is up to date. CI will fail if not. There have also been various repairs to runners.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-007&#x2F;&quot;&gt;This Month in Rust GameDev&lt;&#x2F;a&gt; has just been released for February! This edition was had many different contributors, as you can see in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-gamedev&#x2F;rust-gamedev.github.io&#x2F;issues&#x2F;64&quot;&gt;tracking issue&lt;&#x2F;a&gt;. Keep an eye out for another one next month if you want to lend a hand yourself!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-external-work-of-imbris&quot;&gt;The External Work of @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;@imbris has been putting in some work on crates that Veloren uses. At the end of January, @imbris contributed some performance improvements to the rodio crate. They optimized how silence is sampled so it doesn&#x27;t need to be adjusted. This lead to improvements of around 20% to dynamic mixers with silent sources. You can check out that PR &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;RustAudio&#x2F;rodio&#x2F;pull&#x2F;261&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Secondly are contributions to winit. The following is written by @imbris:&lt;&#x2F;p&gt;
&lt;p&gt;I have been trying and failing to get the latest winit to work nicely on all platforms. I actually made a one-line fix for a freeze when pressing modifier keys on windows and it was &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-windowing&#x2F;winit&#x2F;pull&#x2F;1503&quot;&gt;merged&lt;&#x2F;a&gt;. Now that they have fixed the panics on Windows, everything seems to be in order.&lt;&#x2F;p&gt;
&lt;p&gt;Everything also works fine on x11. I suspect that Wayland might actually almost work. This is an improvement from where it is at right now. Note; I think there is an env variable Wayland users can set to tell winit to go through x instead, next time users report issues on Wayland this might be useful.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, there is MacOS for which the update seems to have introduced lagging of mouse motion events when using ControlFlow::Poll. This is where we are now.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;687068780165332994&amp;#x2F;nfa892h874l41.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;On top of the world! See you next week :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;687068740374102065&#x2F;f-7Ilr0w88sbqEkgVsflCdTRXi1cbFLADGfZ2A9f4xc.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 57</title>
          <pubDate>Mon, 02 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-57/</link>
          <guid>https://veloren.net/blog/devblog-57/</guid>
          <description>&lt;p&gt;This week we hear from @xMAC94x about his work on the new networking protocol. We also have another contributor spotlight, this time with @Songtronix!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Lorage, @xMAC94x, @AngelOnFira, @Artem, @imbris, and @Shandley!&lt;&#x2F;p&gt;
&lt;p&gt;@Kalculate is working through the NPC spawn code to fix spawn camping issues. Some of the core developers are working on figuring out a suitable modding language to handle animations. This is being headed up by @Zesterer and @imbris. @xMAC94x worked on automating Docker builds for the game server and Torvus. He is also working on networking systems and benchmarking them. @untouchedhappiness is working on Japanese translations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;683702810650607632&amp;#x2F;troll1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New mob by @Shimox&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;new-networking-protocol-by-xmac94x&quot;&gt;New Networking Protocol by @xMAC94x&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;@xMAC94x has been working on the networking systems for quite some time. Here, he discusses a new communication protocol that he is prototyping.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The new networking protocol will add some layers above a simple TCP stream. Right now, I&#x27;m focusing on testing this protocol with benchmarks. The most basic TCP benchmark would contain two programs. One, the server, is running and listening on a local port, while the other, the client, connects to it. After the connection is made the client sends a ton of bytes. The server reads the bytes and promptly discards them, as their contents don&#x27;t matter for the benchmark. You can then measure how much bytes the clients could send in a minute and then calculate the bandwidth throughput.&lt;&#x2F;p&gt;
&lt;p&gt;For TCP networking basically two factors are important:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;The number of bytes per second&lt;&#x2F;li&gt;
&lt;li&gt;The number of messages per second. You can either send fewer big or a lot of small messages. Big messages are faster.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;682852764069396485&amp;#x2F;redhead-orc-looks-at-you.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;When mom says you&amp;#x27;re a handsome boy&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Simple TCP Networking has some disadvantages though, the major two being:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It cannot make use of the faster but unreliable UDP. UDP is great for sending data quickly, but it does not provide any guarantees that it will make it to the destination properly.&lt;&#x2F;li&gt;
&lt;li&gt;When a big message like a Chunk comes in, all other messages have to wait. This leads to high ping or latency.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;That&#x27;s where Veloren&#x27;s new network protocol will fit in. It allows an abstraction over multiple Protocols at once: TCP, UDP, and direct mpsc channels. The Networking Layer knows which Ports belong to the same participant (client or server) and can send messages most efficiently. Also, big messages are split up into smaller parts which can be sent with a respective priority.&lt;&#x2F;p&gt;
&lt;p&gt;The stack is quite complicated and for the first time during development, I got it in a working state for a minimal example. That means, only 1 client each, only 1 protocol each (TCP) and only a single stream of messages. Before investing time in continuing to add more protocols or more clients I wanted to test the performance. If my way should prove to be inefficient, I can adjust it directly. That&#x27;s why a benchmark at an early stage sometimes is a reasonable choice.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;682910605480427549&amp;#x2F;18.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So what does the benchmark do? It&#x27;s a program that can be either client or server (depending on the command line arguments). &lt;strong&gt;A&lt;&#x2F;strong&gt;, the server, will be launched and listen in a sperate thread for messages. &lt;strong&gt;B&lt;&#x2F;strong&gt; will connect to it and will start sending messages in a separate thread. The first result was; it didn&#x27;t crash. This means we have an integrated pentest (or how I like to call it, Yuri-Test ;)&lt;&#x2F;p&gt;
&lt;p&gt;Every message is a simple ID, which increases, plus 1000 bytes of zeros (just to give it some work). These messages will be encoded and decoded twice, once when sending them. This allows the framework to handle messages like a large collection of bytes. These bytes will then be sent to the networking layer where routing and decisions are done. When the networking layer decides the TCP layer is ready to send, it takes a small part of the messages and brings it to the TCP layer. Here, it gets encoded a second time.&lt;&#x2F;p&gt;
&lt;p&gt;The message is sent to the other side. On the other end, the stack is applied backwards. It will get decoded, routed to the client and decoded again. In the end we get around 100.000 messages per second and about 800 Mbit&#x2F;s. For a single client, both results are more than Veloren will ever need. But they are far from perfect compared to the big players in networking. So there are 2 things to do in the future:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Increase those numbers, to more like 500.000 messages&#x2F;s and multiple Gbit&#x2F;s&lt;&#x2F;li&gt;
&lt;li&gt;Focus on multiple clients, sending and receiving as this will be similar to the workload of a real Veloren server&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;contributor-spotlight-songtronix&quot;&gt;Contributor Spotlight: Songtronix&lt;&#x2F;h2&gt;
&lt;p&gt;Hey everyone, it&#x27;s @Songtronix! I&#x27;m a 20-year-old guy living in Germany. I strive to learn more about what interests me: &lt;strong&gt;code&lt;&#x2F;strong&gt;, &lt;strong&gt;UI&#x2F;UX&#x2F;Graphic Design&lt;&#x2F;strong&gt;, and music&#x2F;video production). I started working on Veloren in mid-February 2019. I found it while exploring the Rust community on Reddit&#x2F;the web. Veloren was linked, and so I checked it out.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m the developer behind Airshipper, the Veloren launcher! It looked frustrating to explain for the 10th time how to download the latest version of Veloren. As such I&#x27;ve tasked myself to ease these kinds of experiences all around Veloren. I&#x27;ve made a download page which has the latest and greatest version of Veloren. I&#x27;ve made the launcher which currently does its job of automating the updating experience.&lt;&#x2F;p&gt;
&lt;p&gt;Written in one of the best languages, Rust, Veloren as an open-source project has opened me up to a lot of opportunities to improve myself. I&#x27;ve learned to work together with people who have different skill sets than me. I&#x27;ve learned to compromise but also bring in my own views and challenge myself to grow beyond my skills.&lt;&#x2F;p&gt;
&lt;p&gt;I want to make Veloren a first-class experience, not necessarily in-game but all around it. I want to improve the book, the documentation, and the onboarding process to make your first contribution that much easier ^^&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;683401419465818124&amp;#x2F;veloren-voxygen_2020-02-29_20-51-58.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sunset. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;684534142276337820&#x2F;xhnDuDT.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 56</title>
          <pubDate>Mon, 24 Feb 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-56/</link>
          <guid>https://veloren.net/blog/devblog-56/</guid>
          <description>&lt;p&gt;This week we keep pushing onwards towards The Content Update. Work on server persistence is being done, and we take a look at its progress. Level of detail changes are on their way, and we see some of their screenshots.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Slipped, @Pfau, @Shandley, @AngelOnFira, @imbris, @Juli199696, and @Songtronix!&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix is hard at work on Airshipper. This week, self-updating for Windows was completed, and it also now prunes outdated assets to save disk space. @xMAC94x is working on benchmarks for networking, which should be completed in the next week or so. @Juli199696 is working on a server configuration tool that will help users set up their own servers.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;681549052063645913&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@imbris has taken up the torch on auth this week. They worked on some user-friendliness fixes, such as case sensitivity and hidden password text. @octo and @Snowram have been working on potential theme music, as well as other tracks. @Timo has been working on the character state branch. Now, climbing and rolling require stamina. This is not yet on master.&lt;&#x2F;p&gt;
&lt;p&gt;@AngelOnFira, @TheDip, and @Griffin have been putting in lots of work to player persistence. All of them are new contributors to the engine, so a lot of mistakes were made along the way. @Zesterer and @Treeco are continuing work on level of detail. There will be more news on it next week as it becomes more ready to merge.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;681156801382973451&amp;#x2F;celestial_arch.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Celestial Arch by @Snowram. It&amp;#x27;s their first track for Veloren!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;persistence-by-angelonfira&quot;&gt;Persistence by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;Hey everyone! This week, I stepped away from my main meta focus. There was a call for a proof-of-concept (PoC) on server persistence, and I thought I would take the reigns. It was a task without a large scope, and it shouldn&#x27;t need to touch too much of the codebase. Along the way, I got a lot of help from @TheDip and @Griffin.&lt;&#x2F;p&gt;
&lt;p&gt;The goal of this PoC was to create a way for the server to save a player&#x27;s level when they leave the server. It just needed to be implemented for the server, since singleplayer actually runs a server in the background anyway. There are a few steps to this entire process:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Figure out a database to use&lt;&#x2F;li&gt;
&lt;li&gt;Set up simple database interaction test&lt;&#x2F;li&gt;
&lt;li&gt;Hook up the player stats&lt;&#x2F;li&gt;
&lt;li&gt;Optimize method used&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;681603086850326557&amp;#x2F;screenshot_1582577196814.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mountains off in the distance. More to come on LoD next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;1-database-options&quot;&gt;1. Database Options&lt;&#x2F;h3&gt;
&lt;p&gt;This step is important to get right. We want to make sure we choose an option that will be sustainable for future development, and scalable where needed. It also needs to be as concealed as possible, and shouldn&#x27;t require setup for someone running a server. We chose to go with SQLite as the database.&lt;&#x2F;p&gt;
&lt;p&gt;SQLite saves the database as a file anywhere you like, and doesn&#x27;t need to be hosted separately from Veloren. On top of that, it can be bundled into the server executable, and so it is pretty much invisible.&lt;&#x2F;p&gt;
&lt;p&gt;We are also using the Diesel library to interact with the SQLite database. This gives us a lot more features, such as migrations and data models. Migrations allow us to add and remove tables in the database over different updates, so that we don&#x27;t have to wipe the database with each version.&lt;&#x2F;p&gt;
&lt;p&gt;Data models give us a separation between our use of the data in-engine and how the database views it. Instead of having to deal with datatypes when we fetch it from the database, Diesel takes care of it for us.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;681605795062087682&amp;#x2F;screenshot_1582577850375.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;2-sample-database-interaction&quot;&gt;2. Sample Database Interaction&lt;&#x2F;h3&gt;
&lt;p&gt;For this, we just followed the Diesel tutorial. We had to make some notable changes to the default architecture, however. Our persistence module is a child of the server. Diesel expects itself to be on the top level of a crate. We had to set up the migrations and schema directory to be on the same level as the module.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-player-stats&quot;&gt;3. Player Stats&lt;&#x2F;h3&gt;
&lt;p&gt;This step allowed us to look a bit more into what we would be storing in the database. At first, we just stored the exact exp. After showing this off to others, it was mentioned that we should just store a &lt;code&gt;Stats&lt;&#x2F;code&gt; object in its entirety. This includes everything about a player, such as a name, level, and items. After hooking this up, the PoC was ready.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-optimizing&quot;&gt;4. Optimizing&lt;&#x2F;h3&gt;
&lt;p&gt;Throughout the implementation, we fell down rabbit holes of trying to optimize too early. This is easy to do, and speculation on this kind of tech can be really fun. But it can get very abstract quite quickly. We were already talking about query optimizations and read speed when we weren&#x27;t even sure how the architecture would look.&lt;&#x2F;p&gt;
&lt;p&gt;Since this was our first time really implementing something on the engine, we must get good feedback. So although the PoC is ready, it must be regarded as something that should be torn down if it doesn&#x27;t complete its objectives properly. That&#x27;s why it only implements a small subsection of everything that should be saved. We can see if it works and how it performs, but not be too invested to restart.&lt;&#x2F;p&gt;
&lt;p&gt;Over the next few weeks we&#x27;ll work at integrating it in more places and running tests to explore what restrictions we might run into. Along with auth, this task will be a big part of 0.6, the content update.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;681481713825742871&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rolling mountains at dusk. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;682058921040805888&#x2F;XwCLZ7G.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 55</title>
          <pubDate>Mon, 17 Feb 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-55/</link>
          <guid>https://veloren.net/blog/devblog-55/</guid>
          <description>&lt;p&gt;This has been an exciting week. We had a huge boost from a Reddit post, and the Rust Game Dev WG released its January blog. Lots of good progress was made towards the goal of 0.6, &quot;the content update&quot;. We hear from @AngelOnFira about Mac builds and @TheDip talks about the state of achievements.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @TheDip, @AngelOnFira, @Pfau, @imbris, @iMarv, @Zesterer, @Treeco, @Acrimon, and @Sharp!&lt;&#x2F;p&gt;
&lt;p&gt;The Rust Game Dev Working Group released its &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-006&#x2F;&quot;&gt;January blog&lt;&#x2F;a&gt;! A fan of Veloren posted on &#x2F;r&#x2F;pcgaming this week about Veloren. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;pcgaming&#x2F;comments&#x2F;f4lpzr&#x2F;veloren_is_a_open_world_multiplayer_voxel_rpg&#x2F;&quot;&gt;The post&lt;&#x2F;a&gt; got lots of attention, and we&#x27;ve seen a large influx of users on the Discord because of it. We also learned a lot from what people were commenting on the post. Although it was not all positive, lots of it was very constructive on ways we could improve.&lt;&#x2F;p&gt;
&lt;p&gt;@TheDip is working on implementing achievements, as @Felixader is working on their icons. You can check out those icons &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;gallery&#x2F;wtCfRIZ&quot;&gt;here&lt;&#x2F;a&gt;. @AngelOnFira has completed preliminary work on Mac builds, the next step is to integrate it with Airshipper. He is currently working on a proof-of-concept for server persistence. At first, this will allow the server to store player levels, but might also work to store world chunks.&lt;&#x2F;p&gt;
&lt;p&gt;The game design working group met last weekend to discuss the skill unlock system. @Zesterer has been working on improving glider physics. @Pfau fixed a visual bug with health bars. @YuriMomo is working on implementing a custom cursor. @Sharp has been working on coloring the map. This shows off some altitude perspective and might include shadows later on.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;679452202464444449&amp;#x2F;imgonline-com-ua-twotoone-NyYLWjDcdN7f9y.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Map without and with color&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Off-topic from Veloren, but one of our expert graphics contributors @Vercidium has just released a large new update to their game, Sector&#x27;s Edge. Show them some love and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sectorsedge.com&#x2F;&quot;&gt;check it out&lt;&#x2F;a&gt;! @Vercidium has done some novel graphics analysis and debugging for Veloren with skills they&#x27;ve learned from the industry.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-mac-build-situation-by-angelonfira&quot;&gt;The Mac Build Situation by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;Over the last half-year, I&#x27;ve been working on and off to get Mac builds working. This week, I finally made it happen by taking the easy way out.&lt;&#x2F;p&gt;
&lt;p&gt;Previously, I had been trying to cross-compile from Linux. For Windows builds, this is quite easy. You tell Rust to target Windows, and you&#x27;re good. However, with Mac, you require a lot more work. Mac requires that you have a special SDK that can only be compiled from a Mac computer. Not the worst, someone &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;phracker&#x2F;MacOSX-SDKs&quot;&gt;made a GitHub repo&lt;&#x2F;a&gt; with them. The next step is using the SDK to target Mac. Someone else &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tpoechtrager&#x2F;osxcross&quot;&gt;made OSXCross&lt;&#x2F;a&gt; that helps with this. This is where I got stuck.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;678566416609181726&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mountains&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There were a lot of dependencies that weren&#x27;t lining up properly, and it was becoming an increasingly difficult task. I trudged through this on and off over many months. During this time, GitHub Actions released for the public. Actions are GitHub&#x27;s built-in CI&#x2F;CD tool. It can be used to run tests automatically, build executables, and much more. The biggest upside; it has Mac runners.&lt;&#x2F;p&gt;
&lt;p&gt;Mac runners execute from Mac servers. This means that they have all of the requirements built in to be able to target other Macs. @Songtronix has used this method to build Airshipper for Mac, and it worked flawlessly. I copied @Songtronix&#x27;s code, tweaked it a little, and it worked (almost) right away as well. Success!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;679107687283425300&amp;#x2F;snap2020-02-17-17-50-44.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Messer by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Even though we have Mac builds, there are still a few issues to iron out. A build should be run when code is merged into master. However, since GitLab is our primary Git hosting platform, it can&#x27;t easily tell GitHub Actions to run a build. This is supposed to be solved with webhooks, however there are some complications there as well.&lt;&#x2F;p&gt;
&lt;p&gt;So right now, the builds run once a day at midnight. Not sure which time zone. On top of that, we currently don&#x27;t have a way to get the latest link to this build, which means that Airshipper can&#x27;t automatically distribute it. Finally, when Actions pulls the repo, a custom step had to be built to pull from GitLab instead, since the LFS files are stored on GitLab&#x27;s LFS server.&lt;&#x2F;p&gt;
&lt;p&gt;Hopefully, in the coming weeks, we&#x27;ll see some improvements on the ease of use of these builds. Catch you next time!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;achievement-implementation-by-thedip&quot;&gt;Achievement Implementation by @TheDip&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Since 0.6 is the &quot;Content Release&quot;, it&#x27;s important that we hit the ground running where we can. @TheDip is one of the first to push forward on this front.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Achievements give players goals to work towards while playing Veloren. Some of the early ones can be for learning, as they teach core mechanics to the player. After early game, achievements can just be for the completionist players. Some might include leveling up to level 20, or completing 3 dungeons.&lt;&#x2F;p&gt;
&lt;p&gt;As of right now, achievements will be displayed in a menu. Hovering over any achievement will bring up a &quot;tooltip&quot; menu that gives a description and requirements. As for &quot;alerts&quot; when you unlock an achievement, I was thinking of putting an arrow above the achievements button. It will flash to let you know to take a look. Since the UI is getting overhauled, all of this is temporary.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;678306199766040587&amp;#x2F;679461839809150986&amp;#x2F;Untitled.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Current achievement layout&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Triggering an achievement is done with a flag or value. For example, we can count the number of dungeons a player has completed, so that when they hit 3, they get the achievement. Extensions can be that achievements can also be used to give the player something, although I&#x27;m not quite sure yet what those would be. That will be left up to the design team.&lt;&#x2F;p&gt;
&lt;p&gt;Felixader also had an idea of making the achievements menu look like an “open book”, per-say. I have yet to attempt that, but that may be something we consider.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;blog&amp;#x2F;devblog-55&amp;#x2F;tTEoM4A.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;Chicken&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chonker chicken. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;677643267851943976&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 54</title>
          <pubDate>Mon, 10 Feb 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-54/</link>
          <guid>https://veloren.net/blog/devblog-54/</guid>
          <description>&lt;p&gt;Contributors met this week to start discussing what will be done in 0.6. @Zesterer has some cool progress on new settlements. We take a look at the results of the Rust GameDev Working Group survey.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Zesterer, @xMAC94x, @Songtronix, @Sharp and @Pfau!&lt;&#x2F;p&gt;
&lt;p&gt;This week, contributors met for a 0.6 intro meeting. @Zesterer has started working on settlements, the next step in worldsim. @Sharp got the new minimap merged, with the help of @Pfau.&lt;&#x2F;p&gt;
&lt;p&gt;@imbris has been working on updating the winit crate within Veloren. It just had &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;users.rust-lang.org&#x2F;t&#x2F;winit-0-20-the-state-of-windowing-in-rust-and-a-request-for-help&#x2F;29485&quot;&gt;quite a large update&lt;&#x2F;a&gt;. This should help fix issues with Wayland support, which prevents some users from playing Veloren. The new eventloop structure that @imbris is working on integrating will make it easier to potentially run Veloren in a webpage, as well as allow for smooth resizing.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;1ldHQfxCT24&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A visualization of Veloren development over 1 year&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;0-6-intro-meeting&quot;&gt;0.6 Intro Meeting&lt;&#x2F;h2&gt;
&lt;p&gt;This weekend, the team met for a 0.6 intro meeting. The intro meetings are a great way to rally contributors and get excited about what we want to see in the next release. A large focus of this version will be player objectives, and so 0.6 will be known as &lt;em&gt;The Content Update&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You can take a look at the meeting Google doc &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1krjesMNjkyA665I9glliKiSR3NzytefAvqKbRqc_OQ4&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;. This meeting, we focused heavily on ways we could implement content into Veloren. It has been a goal for many releases to add objectives for the player. In the meeting, we brainstormed some ideas of how we could achieve this most easily. Here are some of the questions that we aimed to answer:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;As a player joining the server, what should you be told to do?&lt;&#x2F;li&gt;
&lt;li&gt;How can you be introduced to mechanics at this point?&lt;&#x2F;li&gt;
&lt;li&gt;How should the game tell players to accomplish tasks?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For the answer to these questions, there are many underlying systems that we&#x27;ll require. These include NPC dialogues, waypoints, mob spawning control, and mob inventories. Moving forward with 0.6, hopefully we can see these implemented.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;672871612445360128&amp;#x2F;screenshot_1580495106427.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Explorers burning the midnight oil&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Songtronix started a thread on Reddit that is focusing on asking the community what they want to see in future versions of Veloren. Feel free to take a look at it &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;f0p6ov&#x2F;what_should_veloren_06_and_beyond_be&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;, as well as contribute any ideas you have. We love to hear them!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;settlements&quot;&gt;Settlements&lt;&#x2F;h2&gt;
&lt;p&gt;@Zesterer is picking up the worldsim&#x2F;worldgen torch again with settlements. Although it&#x27;s in very early stages, here are some images to show off some progress.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;676821640834711552&amp;#x2F;screenshot_1581120942420.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;676821642856497184&amp;#x2F;screenshot_1581290756451.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;676821642223288333&amp;#x2F;unknown-26.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;rust-gamedev-wg-survey&quot;&gt;Rust GameDev WG Survey&lt;&#x2F;h2&gt;
&lt;p&gt;Last August, the Rust GameDev Working Group ran a survey to gather information on the developer ecosystem within Rust. This week, they released the results for this &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;survey-01&#x2F;&quot;&gt;in a post&lt;&#x2F;a&gt;. We tried to get our developers to contribute information to the survey, so let&#x27;s take a look at the results!&lt;&#x2F;p&gt;
&lt;p&gt;Only &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;survey-01&#x2F;#are-you-using-rust-for-gamedev&quot;&gt;half the participants&lt;&#x2F;a&gt; currently use Rust for game dev, while most of the other half are considering doing so. For many, the game dev ecosystem within Rust isn&#x27;t mature enough for what they need. However, Veloren escapes the issue of maturity (mostly). We are working on a lot of systems from the ground up, and so we know that when something isn&#x27;t available, we are capable of making do ourselves. Other projects might rely on underlying engines like Amethyst, while we are creating our own.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;676910760764375077&amp;#x2F;minimap.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The newly-merged minimap&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This topic of maturity is echoed in the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;survey-01&#x2F;#what-about-rust-as-a-language-and-ecosystem-presents-the-biggest-negatives-for-you-as-a-game-developer-right-now&quot;&gt;next section&lt;&#x2F;a&gt; which focuses on the negatives that the participants see. More than anything else, developers want maturity. This is followed by mobile, web, and console support.&lt;&#x2F;p&gt;
&lt;p&gt;A great response from one user reads:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;From playing in the space I know it&#x27;s possible to make games using Rust. However in the ecosystem my biggest negatives is the [lack of] case studies and demonstrations of it working.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This cannot be truer. Many developers&#x27; ideas of &quot;maturity&quot; are based on what they can see done in a language. Rust has few flashy projects to show off, especially within the game dev field. Veloren is in a great place to surge forward and become a flagship example of what can be achieved with Rust. Not only does it show how Rust acts on the graphical level, but also within game dev architecture.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, from another survey participant about the Rust community:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[There is a] collective community effort to &quot;build the right thing&quot; and &quot;build the thing right&quot;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;676882362776420377&amp;#x2F;3hpyl26e9qf41.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some quality content from u&amp;#x2F;George_gekor8 on Reddit. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;676879138895691807&#x2F;LnA5RCj.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 53</title>
          <pubDate>Mon, 03 Feb 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-53/</link>
          <guid>https://veloren.net/blog/devblog-53/</guid>
          <description>&lt;p&gt;Happy Global Game Jam to all those who participated! This week, 0.5 released. We take a look at how it went and go over new additions to this release. We also have another Contributor Spotlight, this time with @Silentium.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Zesterer, @xMAC94x, @Sharp, @Songtronix, @Slipped, @Shandley, @Vechro!&lt;&#x2F;p&gt;
&lt;p&gt;This week, 0.5 was released! Not only that, but we just passed 3000 commits on the repo. Not only that, but there are (nearly) the same amount of stars on both the GitLab and GitHub repos.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;674425034370056192&amp;#x2F;memestars.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The hardest choices require the strongest wills&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@AgentAl has been working on some music pieces with &quot;cold&quot; and &quot;ice&quot; themes. @Zesterer has been working on patching lots of small issues and made a game for the Global Game Jam. @Shandley has been back at work on the music system, and is looking at ways to make it more performant.&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse is nearly finished getting controller support to work. They are also working on updating the AUR with the stable 0.5 package. @DoNeo wrote &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dtf.ru&#x2F;indie&#x2F;99140-reliz-versii-0-5-dlya-veloren&quot;&gt;a new article&lt;&#x2F;a&gt; on dtf.ru about Veloren&#x27;s 0.5 release. @Timo is continuing work on character state, this is needed for future combat abilities.&lt;&#x2F;p&gt;
&lt;p&gt;@Aeronic got an official Soundcloud account set up for Veloren. Be sure to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;velorenofficial&quot;&gt;check it out&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;VPJ_AVb6Gg0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;0.5 feature video by @DoNeo&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;0-5-release&quot;&gt;0.5 Release&lt;&#x2F;h2&gt;
&lt;p&gt;Since we adopted a proper changelog structure, we can easily see what has been achieved during 0.5. The list is super long, so you should &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md&quot;&gt;check it out for yourself&lt;&#x2F;a&gt;. Here are some of the big items:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Include license in assets
&lt;&#x2F;span&gt;&lt;span&gt;Added dropping items
&lt;&#x2F;span&gt;&lt;span&gt;Added initial region system implementation
&lt;&#x2F;span&gt;&lt;span&gt;Added &#x2F;giveitem command
&lt;&#x2F;span&gt;&lt;span&gt;Added moon
&lt;&#x2F;span&gt;&lt;span&gt;Added clouds
&lt;&#x2F;span&gt;&lt;span&gt;Added proper SFX system
&lt;&#x2F;span&gt;&lt;span&gt;Added changelog
&lt;&#x2F;span&gt;&lt;span&gt;Added Scrolling Combat Text (SCT) &amp;amp; Settings for it
&lt;&#x2F;span&gt;&lt;span&gt;Added a Death Screen and Hurt Screen
&lt;&#x2F;span&gt;&lt;span&gt;Added randomly selected Loading Screen background images
&lt;&#x2F;span&gt;&lt;span&gt;Added options to disable clouds and to use cheaper water rendering
&lt;&#x2F;span&gt;&lt;span&gt;Added client-side character saving
&lt;&#x2F;span&gt;&lt;span&gt;Added a localization system to provide multi-language support to voxygen
&lt;&#x2F;span&gt;&lt;span&gt;Added rivers and lakes which follow realistic physical paths.
&lt;&#x2F;span&gt;&lt;span&gt;Added a default map, which is used to speed up starting single player.
&lt;&#x2F;span&gt;&lt;span&gt;Added fullscreen and window size to settings so that they can be persisted
&lt;&#x2F;span&gt;&lt;span&gt;Added coverage based scaling for pixel art 28 new mobs
&lt;&#x2F;span&gt;&lt;span&gt;Added waypoints
&lt;&#x2F;span&gt;&lt;span&gt;Added pathfinding to NPCs
&lt;&#x2F;span&gt;&lt;span&gt;Overhauled NPC AI
&lt;&#x2F;span&gt;&lt;span&gt;Pets now attack enemies and defend their owners
&lt;&#x2F;span&gt;&lt;span&gt;Added collars to tame wild animals
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Unfortunately, the launch party wasn&#x27;t as big as we had hoped. At peak, we had just over 30 players online, compared to over 40 for 0.4. It also didn&#x27;t help that Digital Ocean started having issues creating new droplets right as we were trying to increase our server&#x27;s compute capacity. This called for a quick switch over to AWS for hosting.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597829554194874379&amp;#x2F;672849526218031150&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Below are some more statistics from the launch party. You can compare them to the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-37&#x2F;#launch-party&quot;&gt;0.4 launch party&lt;&#x2F;a&gt;. The total server costs for this launch were around ~$12.50 USD. This includes the server and bandwidth.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;672892726563569684&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Players online&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;672893030650478592&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chonk count on the server&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;672892816401104916&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bandwidth used&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;contributor-spotlight-silentium&quot;&gt;Contributor Spotlight: Silentium&lt;&#x2F;h2&gt;
&lt;p&gt;Hey everyone, Silentium here!&lt;&#x2F;p&gt;
&lt;p&gt;After 4 years of college, I started a career in biotechnology and currently work in a start-up pharmaceutical company in Boston. I have a love for science and learning that rivals my love for fantasy in almost any form. From D&amp;amp;D podcasts to Anime and Novels, I&#x27;ve had a real seeded connection with anything fantasy since I was young.&lt;&#x2F;p&gt;
&lt;p&gt;As such, I run a D&amp;amp;D campaign with some of my friends and it&#x27;s been going on for over a year now, but the world it&#x27;s set in hasn&#x27;t stopped growing and developing since 2016, when my girlfriend and I first started world-building. The name Silentium actually comes from this world, as he is a major player in world history and current events. I&#x27;ve been expanding my fantasy novel reading experiences ever since I decided to create my own world for a D&amp;amp;D campaign, and now have an appreciation for writing that I never had as a youth.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;674418650849083402&amp;#x2F;8KDR7IBl.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;In progress jungle structure by @Shimox&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I have loved video games all my life but my experience with them is much more limited than I would like it to be. My taste in games is limited to a few specific types, and as a result, there are many popular games that I have no interest in playing. I have always been critical of the game design choices made in any game I have ever played, and as such I have always dreamed of having a hand in the design of a game that I would personally like to play.&lt;&#x2F;p&gt;
&lt;p&gt;I was falling off the Cube World hype train after it released late last year, and was directed to Veloren from Reddit. I started my contribution to the game a few weeks earlier than November, but only in a minor way. I designed about 100 weapons in the MagicaVoxel program uses to create the assets for the game. I have many more unsubmitted weapons waiting for submission as soon as I flesh out my designs a bit more.&lt;&#x2F;p&gt;
&lt;p&gt;Since the beginning of November, I have been working with many of the very creative and talented people within the Veloren community on game design. We have started with the combat system because there was already a working group dedicated to creating and implementing that system for the game, but we definitely plan on branching out to other topics as we go.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;673934650346962955&amp;#x2F;snap2020-02-03-11-54-06.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Pipa instrument by @AlbinoAxolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Essentially, every week we get together and design the mechanisms and definitions of important aspects and elements of the game&#x27;s core gameplay features. I create a write-up following the meeting that outlines everything we specifically designed without branching out too far into out of scope topics, and include sections for why we created things in a specific way. All of it is recorded in a single document for reference, and each complete topic has its own document as well.&lt;&#x2F;p&gt;
&lt;p&gt;The end goal is to have a master document that contains everything we design, so it can be referenced when the programmers develop these aspects of the game. In this process, I mediate the meetings, organize the discussion topics, and provide the environment for the design discussions to take place in the most inclusive and constructive way they can. As the team leader for the Game Design workgroup, I&#x27;m always looking for new contributors who have a passion for game design and a desire to help.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve never heard of a game created by a large community of unpaid people, rather than a company. I may have been living under a rock, but this is a brand new concept for me, and the potential for a game created by such a community has my hopes very high. The art style and world generation that I saw when I first arrived had me convinced that this game could become amazing if it has the right direction.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;674430753467138078&amp;#x2F;hrhZcwRL.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;s all for this week, see you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;672041052495937536&#x2F;screenshot_1580296807788.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 52</title>
          <pubDate>Mon, 27 Jan 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-52/</link>
          <guid>https://veloren.net/blog/devblog-52/</guid>
          <description>&lt;p&gt;This week 0.5 will be releasing! It&#x27;s also the 1st anniversary of the blog, so we look back at what some contributors are most proud of. @Tub talks about the new website design and @Songtronix shows us some great progress on Airshipper. @Ender gives a run-down on how text localization is working.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Sharp, @Zesterer, @Pfau, @imbris, @Slipped, @Acrimon, @Payload1, @Timo, @Treeco, @flyingfryingpan, @Friz64, @Ender, and @Songtronix!&lt;&#x2F;p&gt;
&lt;p&gt;With the release of 0.5 coming up this week, we will be having a launch party this Friday, January 31st at 18:00 GMT. You can check out our countdown &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.timeanddate.com&#x2F;countdown&#x2F;launch?p0=769&amp;amp;iso=20200131T18&amp;amp;year=2020&amp;amp;month=1&amp;amp;day=31&amp;amp;hour=18&amp;amp;min=0&amp;amp;sec=0&amp;amp;msg=Veloren%200.5&amp;amp;csz=1&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We had 50+ concurrent players at the last launch party, and we expect it to be much higher this time! If you&#x27;re considering streaming the launch, please reach out to any admin or core dev so we can announce it. Here are some of the changes you can expect for this version:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Many new worldgen features&lt;&#x2F;li&gt;
&lt;li&gt;More diverse mobs with better AI&lt;&#x2F;li&gt;
&lt;li&gt;More immersive combat and character progression&lt;&#x2F;li&gt;
&lt;li&gt;Tons of performance improvements&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;@Zesterer has done a lot of work this week on AI. This includes pathfinding, aggro switching, and pet AI. @Sharp got their new worldgen merged just in time for 0.5 as well. @Slipped merged their work on new animals. @Qutrin started working on the switch to wgpu as the new graphics API. @AlbinoAxolotl has been working on some musical instrument assets, as well as dwarven haircuts.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;1-year-of-this-week-in-veloren-by-angelonfira&quot;&gt;1 Year of This Week in Veloren by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;This is TWiV #52! That means that one year ago, I had just put out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-1&quot;&gt;the first edition&lt;&#x2F;a&gt;. At that point, I was just looking for something that I could contribute to on the project. I didn&#x27;t know the direction the blog would take, just that I wanted to do one every week. If I didn&#x27;t, I knew I wouldn&#x27;t write the next one either. So while on vacation in Europe for a month, during exams, and other busy times, I kept up with the weekly, Monday (or Tuesday) devblogs.&lt;&#x2F;p&gt;
&lt;p&gt;This was great for me, as it helped give structure to a lot of the rest of my week. I&#x27;m super proud of being able to do this for an entire year! It is my biggest achievement on Veloren, but while we&#x27;re at it, let&#x27;s take a look at some of the other contributor&#x27;s achievements.&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix is happy about their progress on making Veloren easily distributable with Airshipper. They&#x27;ve taken it on themselves to continually work on improving the Veloren experience. In this coming year, @Songtronix wants to keep working on this by improving documentation in The Book, as well as stabilizing many of the current technologies on the go like auth.&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse has spent much of the last year improving their Rust skills. They have worked a lot on to do with package distribution of Veloren, specifically with the AUR. They also did lots of work on The Book, controller support, and Polish translations. @LunarEclipse is excited about the prospect of content in Veloren this year, and determined to stabilize controller support throughout the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;671804094930878494&amp;#x2F;dIxOSxbHmwaxBBha1vSub98jcVyJ040iTCfM75Babng.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some performance boosts made this possible&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Shandley has been working through many small issues mostly in the SFX area. They&#x27;re excited about questing and where it&#x27;s headed, since community-driven content will be a major part of Veloren. This year, @Shandley wants to continue work on the music and sound system. Also, fishing as a side goal 🐟&lt;&#x2F;p&gt;
&lt;p&gt;@Slipped is proud of their work on the new animals in the game. As an early voxel artist of the game, they are now focusing on heading up the animation efforts of Veloren. @Slipped is excited about the future of the animation system, as well as worldsim. &quot;We have a really cool simulation base with the physical simulation of the world so far. Seeing history layered on top of that in a way that has real-world, dynamic consequences will be amazing to see. The devs planning in that area have some really great visions for Veloren&quot;. @Slipped is excited to see more biodiversity in the game, and will also be focusing on combat animations.&lt;&#x2F;p&gt;
&lt;p&gt;@Tub is happy about the new website design they&#x27;ve been working on. It was a good experience getting feedback from other developers, and iterating on the design. @Tub hopes to start working on the engine itself this year when they can find time.&lt;&#x2F;p&gt;
&lt;p&gt;@Silentium&#x27;s biggest milestone was becoming the lead of the game design working group, for which they are super honored. After iterating on the design process many times, @Silentium is excited for the next step of development; implementing the designs. @Silentium is working to finish the combat design, and start working with other groups on other design needs such as exploration and crafting.&lt;&#x2F;p&gt;
&lt;p&gt;@Adam has used Veloren as an opportunity to learn Rust. They have also done a lot of work on combat, ability, and condition state systems, which they will be working on improving in this coming year. They are quite excited about this!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;670788372645675018&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sam has recently joined the design team, and has worked on progress through their design proposals. Like @Silentium, they are excited to see their designs be implemented in the game, as well as the form the weapon system will take. @Sam&#x27;s goal this year is to dive deeper into design concepts surrounding damage types.&lt;&#x2F;p&gt;
&lt;p&gt;Although @Shimox doesn&#x27;t have a lot in the game, they did get one of their flowers implemented. They are excited to see the transition from getting Veloren to work towards a more content-based focus. This year, @Shimox hopes to work on getting more assets into the game.&lt;&#x2F;p&gt;
&lt;p&gt;@DoNeo is proud of their work starting up the Russian community. They have done a lot of work translating the devblog every week. @DoNeo is excited to see a more integral history and lore system through worldsim. In the coming year, @DoNeo wants to focus on developing the Veloren community through articles, translations, and videos.&lt;&#x2F;p&gt;
&lt;p&gt;@xMAC94x somehow made it through their job, life, and relationships to find time to work on many systems in Veloren. They want to be surprised with where Veloren goes in this coming year. @xMAC94 wants to continue working on networking and macro-scale worldsim.&lt;&#x2F;p&gt;
&lt;p&gt;@Qutrin is proud of the contributions they managed to make this year. They are excited to see the content that will be added to Veloren this year. One of @Qutrin&#x27;s big focuses will be the switch to the wgpu graphics API.&lt;&#x2F;p&gt;
&lt;p&gt;@Acrimon worked hard on user authentication, which has required a huge amount of collaboration from the team. They are excited to see what the rest of the team will be working on this year. After deploying auth, @Acrimon plans on hot-reloading support to help devs, as well as building out an extensive modding system.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;668175046144950292&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Knight&amp;#x27;s tomb by @AlbinoAxototl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Timo is proud of their work on the combat system. They&#x27;ve been focusing on this for many versions now. @Timo wants to see Veloren grow from a prototype into a game with a steady player base and long-term gameplay. This year, they want to dive deeper into the combat system as well as design features around it.&lt;&#x2F;p&gt;
&lt;p&gt;@Aeronic has worked on many musical pieces for Veloren, as well as getting a strong audio team together. They are excited to see where audio will go this year, through both music and sound effects. @Aeronic wants to see a fully encompassing audio experience be implemented in this coming year.&lt;&#x2F;p&gt;
&lt;p&gt;@Yuri broke lots of things. They are excited for more features to break, as well as &quot;Zest branches&quot; and the new contributors that will join the project. They plan on finding many more bugs and exploits this year.&lt;&#x2F;p&gt;
&lt;p&gt;For @Zesterer, their biggest milestone was the 0.2 release. For them, this was the culmination of many months of refactoring and rewriting to produce the new engine. Like many others, @Zesterer is excited to see what will happen with worldsim. @Zesterer&#x27;s goal is to keep the engine running fast, as they enjoy doing the optimizations.&lt;&#x2F;p&gt;
&lt;p&gt;@Pfau was amazed by the 50+ people that took place in the last release party. He is excited to see combat and equipping become more fleshed out. He wants to learn more Rust so that he can start using the Iced library for some more advanced GUI elements.&lt;&#x2F;p&gt;
&lt;p&gt;@Sharp has spent a lot of time on erosion through many different methods. They are excited about the ways that world simulation systems will react with one another. This coming year, @Sharp plans on getting some other developers up to speed on the erosion systems so that the work can be distributed more.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;website-update-by-tub&quot;&gt;Website Update by @Tub&lt;&#x2F;h2&gt;
&lt;p&gt;A project that has been idling on my desk for months has finally been finished: the website redesign. The most obvious change is that the giant header has been removed and used as a background instead. The second most obvious one (and the whole point of the redesign) was to add a proper start page that&#x27;s more than just a list of devblogs.&lt;&#x2F;p&gt;
&lt;p&gt;Behind the scenes, a lot of cleanup has happened. Unused features were disabled and removed, some JavaScript was removed in favor of modern CSS features, CSS files were restructured and minified. Shortcodes were added, alleviating the need to write custom HTML code in the pages, and giving a more consistent layout. All of these result in faster page loads with less jitter, slightly better SEO and accessibility, and cleaner code going forward.&lt;&#x2F;p&gt;
&lt;p&gt;Once these things were done, several community members jumped in with suggestions, bug reports, and ideas, many of which I was able to implement during the past weeks. Being my first contribution in this community, it has once again shown me the value of collaboration - together, we created a better site than I could have created alone. Now that the site is live, I expect more ideas to pour in, paving the road for future improvements.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;airshipper-progress-by-songtronix&quot;&gt;Airshipper Progress by @Songtronix&lt;&#x2F;h2&gt;
&lt;p&gt;Last time I showed some concept art on how Airshipper might look:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;656126305531592704&amp;#x2F;launcher.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Airshipper Design&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Thanks to the wonderful help of @Timo with his constant effort to make it real we&#x27;re finally approaching a consumer-ready GUI.
Before spoiling you with the final version, let&#x27;s follow us on our journey on how we have done it!&lt;&#x2F;p&gt;
&lt;p&gt;@Timo started to work on the layout of the UI:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;606794753392115722&amp;#x2F;661132017341300743&amp;#x2F;screenshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Initial layout. Ugly but a start&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And already after a little bit of time he has almost done it:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;606794753392115722&amp;#x2F;661295008455852063&amp;#x2F;screenshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;We even show the changelog now!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;After some finishing touches, he&#x27;s done the layout of the UI!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;606794753392115722&amp;#x2F;661479736815517706&amp;#x2F;screenshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Looking good so far!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Well, if you look closely you can see a slider beside the play button. &lt;em&gt;Why?&lt;&#x2F;em&gt; Well until then there was no progress bar in the GUI library which can fill up nicely while downloading the game. As I always wanted to contribute to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hecrj&#x2F;iced&quot;&gt;iced&lt;&#x2F;a&gt; I thought this is the chance. So I&#x27;ve done it and I loved the process of doing so! After my &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hecrj&#x2F;iced&#x2F;pull&#x2F;141&quot;&gt;Merge Request&lt;&#x2F;a&gt; has been accepted I played around with it for about an hour.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;606794753392115722&amp;#x2F;662243497822257152&amp;#x2F;Peek_2020-01-02_11-38.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;I still do this every day...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And then with some customization efforts by @Timo:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;606794753392115722&amp;#x2F;665298474899734588&amp;#x2F;screenshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;and songtronix is the coolest ^^&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Leaving out all the backend horror like making the download button do the actual thing, I have put some efforts to get the UI closer to the design. This is achieved by showing the blog posts and even adding buttons that link to the respective blog. For all the poor souls with a bad internet connection: Do not worry, we cache the news and changelog and only download the whole thing if it actually has changed.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;606794753392115722&amp;#x2F;669213993138651136&amp;#x2F;Peek_2020-01-21_17-16.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;UI with news and changelog&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now let&#x27;s watch airshipper actually starting the game:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;670949726903861268&amp;#x2F;reddit.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Starting the game&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;soliloquy-of-pfau&quot;&gt;Soliloquy of @Pfau&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;[ADMIN][Pfau] what needs adjusting
&lt;&#x2F;span&gt;&lt;span&gt;[ADMIN][Pfau] is the min and max value you can zoom in and out
&lt;&#x2F;span&gt;&lt;span&gt;Sharp went offline.
&lt;&#x2F;span&gt;&lt;span&gt;[ADMIN][Pfau] *off he goes*
&lt;&#x2F;span&gt;&lt;span&gt;[ADMIN][Pfau] Sometimes I wonder what my role on veloren is
&lt;&#x2F;span&gt;&lt;span&gt;[ADMIN][Pfau] Quality Control? Art Director? Clown?
&lt;&#x2F;span&gt;&lt;span&gt;Pfau died
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;veloren-for-all-of-us-localization-system-by-ender&quot;&gt;Veloren For All Of Us: Localization System by @Ender&lt;&#x2F;h2&gt;
&lt;p&gt;Even if English became the de-facto standard on the internet, there is still a majority of the worldwide population is not able to learn it or just prefer to enjoy cultural content in their native languages. This is even truer for video games like Veloren as you can play it before a polished &quot;complete&quot; version is released. Translations are thus an important step to increase the popularity of the game and make it accessible to the greatest number.&lt;&#x2F;p&gt;
&lt;p&gt;More personally, it was for me a great opportunity to discover the Veloren source code and develop my first feature in Rust. I really enjoyed working on this subject as it allows other translators to contribute to this great project.&lt;&#x2F;p&gt;
&lt;p&gt;So, what is the road from an English specific application to an internationalized one? At first glance, it doesn’t seem so complicated: it’s all about text right? So first, how many files and lines of source code does a translator have to work with? Let&#x27;s take a look at these stats in the 0.4 stable version:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;668149180543533082&amp;#x2F;671726747787591700&amp;#x2F;1FRpUN47UII62t5WRa4WFnIu8JMhYXm7q-Foz9EqBl-lARz3jVnM9QwItIvHgxQ.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In total there are 107 files in Veloren client application containing 931 lines of text among 23855 lines of code. This increases by around 20% in the upcoming 0.5 version. With this architecture, translating Veloren for non-technical people would be very overwhelming. It is like looking for a needle in a haystack. So the first step to simplify this process is to separate the displayed texts into a unique file and access them with a key-value system.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;668149180543533082&amp;#x2F;671738263471521803&amp;#x2F;dictionary.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;With this system, new localizations can be easily added. Since the process consists of a simple file to add in the Veloren source code, even non-developers can contribute by taking the English file as an example. So how does this look?&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;668149180543533082&amp;#x2F;671726846991269912&amp;#x2F;1RhcdZFClSARgMCe1Uw0RJysAakl_u8o_x3dbbTHsPat8J8MRxm0bdlQ9lFE8sg.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Yeah! Our text is translated and we can now enjoy Veloren in French... or any other language. But there is still an issue here, what are these weird character “F” wrapped in a white box? Well, the current version of Veloren uses a set of font with partial support of the worldwide available characters. In fact, even common Latin languages like Spanish or French are not completely compatible. A quick workaround we implemented for the 0.5 is to convert these unsupported characters to standard letters (A to Z), giving a more readable output.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;668149180543533082&amp;#x2F;671726456115560448&amp;#x2F;STCYdWJRjInKB3q6zBKpAq36L2ca-K3y_d0cevBXUo5tycswUa71DauibHBcwOrb7sHUiC4D8mXJQLWRofKRULgqm9NSc8aw479j.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And here is the result you will have in the 0.5: a pretty translated version, but still incorrect regarding the language rules. So, what is planned for 0.6 version and beyond:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Add a way to use different fonts depending on the language to have a correct display&lt;&#x2F;li&gt;
&lt;li&gt;Add translations of the bag items&lt;&#x2F;li&gt;
&lt;li&gt;Find better fonts supporting a wider range of characters&lt;&#x2F;li&gt;
&lt;li&gt;Add MOAR localizations! (Contributions are welcome!)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Here is a preview of the font customization feature:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;671012089367887912&amp;#x2F;font.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Configurable fonts for the localization system by @Ender&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;671153950753554444&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;See you at the release party!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;670374225235673108&#x2F;bg_main.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 51</title>
          <pubDate>Mon, 20 Jan 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-51/</link>
          <guid>https://veloren.net/blog/devblog-51/</guid>
          <description>&lt;p&gt;This week, we take a look at some of the finishing touches to 0.5. Lots of progress has been made on quality of life changes, such as translations and visual flares. We hear from @Sharp about map migrations, and from @AngelOnFira about their talk at CUSEC.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Pfau, @Timo, @Acrimon, @JosephG, @Zesterer, @Sharp, @Songtronix, @Payload1, and @Shandley!&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse has gotten controllers to partly work. In-game works, but no menu support, and key binding still has to be set up. @Pfau worked on some nice visual flairs, like colored frames for activated skills, and darkened skills when they are charging. He also worked on scaling character creation to your window size. @Sharp has been working on the map that will be released with 0.5.&lt;&#x2F;p&gt;
&lt;p&gt;@Ender has been working on a localization system. This will allow translations of the game to be easily created. Both English and French translations are nearly done, with the ladder at 75% complete.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;667766443261296640&amp;#x2F;ln.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;The localization system&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-5-map-by-sharp&quot;&gt;0.5 Map by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m almost done creating the versioned infrastructure for maps. This will allow us to load old maps with when the format changes. The basic idea is that we &quot;chain&quot; migrations of old map types. So each map type just has to know how to convert into the next version, and it will follow the chain until we hit the latest version of the map. The world file format is defined as an enum with a variant index that we set explicitly (this is an available feature on Rust nightly). That way, we can extend their backwards compatibly while still using bincode.&lt;&#x2F;p&gt;
&lt;p&gt;I also support the &quot;legacy&quot; map types that don&#x27;t have this field, but you have to explicitly know you&#x27;re loading a legacy one. For every other map created after this change, that shouldn&#x27;t be necessary. This still doesn&#x27;t cover invalidating old maps when the code changes, but it at least makes sure people won&#x27;t be left unable to use their world files. At least, not if they make them on major releases; I don&#x27;t guarantee backwards compatibility for random changes between releases.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;668186575552643075&amp;#x2F;screenshot_1579374543576.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;On the plateau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;It shouldn&#x27;t increase the binary size much unless we start to gather a truly absurd number of versions. Postgres supports compatible migrations for something like 5-10 years and it doesn&#x27;t cause any problems. And if people really want to migrate old maps that have been removed from the binary, they can always grab an older version of Veloren and perform the process manually. This entails migrating up to the latest supported version was that also knew how to read their old file, then jump to the latest version of Veloren that knew how to read that file.&lt;&#x2F;p&gt;
&lt;p&gt;So I don&#x27;t really see much of an issue either way. That&#x27;s the nice thing about chaining and supporting migrations from the get-go rather than adding it after there are already several incompatible map types, or using a file format that doesn&#x27;t know its own version.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;668862161426317342&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;128 x 128 km map rendered by @Treeco. 24+ GB of ram recommended to play&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;cusec-2020-talk-by-angelonfira&quot;&gt;CUSEC 2020 Talk by @AngelOnFira&lt;&#x2F;h2&gt;
&lt;p&gt;Hey everyone! Last weekend, I gave a talk at CUSEC (Canadian University Software Engineering Conference) in Montreal. The title was &quot;Cultivating a Healthy Open Source Community&quot;. I spoke about lots of interesting ideas that I learned from working on Veloren, both from a management and development view.&lt;&#x2F;p&gt;
&lt;p&gt;You can check out the slides &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1E7zeXXMpJeFo3CcRpYk8xehk5vMg_Qv754nIOlcne0Y&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;. In the future, I might get the recording of the talk as well. I reached out to some developers to get other ideas to add to the presentation, but I also feel that all of the contributors who added to Veloren were an inspiration for the talk as well. Thank you all &amp;lt;3&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;668449791469944833&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The sun sets on this blog. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;668269937508483075&#x2F;screenshot_1579398358885.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 50</title>
          <pubDate>Mon, 13 Jan 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-50/</link>
          <guid>https://veloren.net/blog/devblog-50/</guid>
          <description>&lt;p&gt;Happy 50th edition of TWiV! We have a lot of progress and content for this week. We get to take a look at scrolling combat text with @Pfau, and skeletons with @Slipped. @Sharp has been hard at work, and we get to hear about some new updates to erosion and worldsim. We also examine an interesting optimization that the team has come across this week. Finally, the Rust Game Dev Working Group released their monthly newsletter, be sure to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-005&#x2F;&quot;&gt;check it out&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;@Acrimon is still working on solidifying auth, it has been tested quite well in the last few weeks. @yusdacra worked on improving frustum culling. This will give performance gains as chunks out of view of the camera were being rendered before, and now they are being culled properly. @LunarEclipse has been working on controller support, and it should be ready soon. @Timo has been working on resolving some issues with how fog moves around erratically.&lt;&#x2F;p&gt;
&lt;p&gt;@Slipped added a lot of new animal types, take a look at their writeup below. You can check out some galleries that @Felixader made showcasing their work on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;TdxXtiW&quot;&gt;artifact icons&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;khOK0At&quot;&gt;berry icons&lt;&#x2F;a&gt;. @Shimox also created a gallery show off their work, check it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;1nOsSBX&quot;&gt;here&lt;&#x2F;a&gt;. @Silentium and the design team are still working on the skill tree structure.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;664902704912662549&amp;#x2F;screenshot_1578595517948.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New trees by @Vechro&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Acrimon, @Pfau, @imbris, @Songtronix, @Shandley, @yusdacra, @payload1, @Qutrin, and @Timo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;scrolling-combat-text-by-pfau&quot;&gt;Scrolling Combat Text by @Pfau&lt;&#x2F;h2&gt;
&lt;p&gt;Hey everyone! Recently, part of the team has been helping me with Scrolling Combat Text (SCT). This is another element that will make Veloren more immersive. The first thing to show off is quite obvious. Single hits get displayed as soon as they happen, and they fade out as they pan upwards. Their colour goes from white to an aggressive orange&#x2F;red tone depending on how much damage percentage your hits caused at the enemy. You can see this in the image below.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;665982316673499148&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another way to set up the SCT is to sum up the total damage you did. Again, the higher the percentage of the enemy&#x27;s health you reduced the more orange the colour becomes. Along with showing this text when you deal damage, it will be shown when you take damage. Below is an example of the summed damage taken by the player.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;665984900331077652&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We also implemented experience and healing text. The XP you gain after the fight will be shown at a random position in the upper half of your screen. The higher the percentage of the gained XP from your currently needed XP to level up the bigger the number. Healing gets displayed like experience; a random position in the lower half of the screen. It&#x27;s shown as either single or cumulated numbers and doesn&#x27;t get added up with the damage numbers. This system has only the basic functions and will be expanded later.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;665983542727016488&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, a little unrelated piece of progress. The map becomes slightly translucent when you start moving while having it open. Anyways, see you next time!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;665985765427380237&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;skeletons-by-slipped&quot;&gt;Skeletons by @Slipped&lt;&#x2F;h2&gt;
&lt;p&gt;Hey! @Slipped here, I&#x27;ve been working on the same MR for quite a bit now so I figured it was a good time to post an update. I&#x27;ve been working on the animation skeletons and setting up the foundations to allow for a ton of new NPCs in the game. Most of the credit goes to @imbris and @Lawtonfogle who set up skeletal sharing to work for humanoids a few months ago. All I had to do was transfer this to animals, so this writeup isn&#x27;t technical because they handled all the hard stuff.&lt;&#x2F;p&gt;
&lt;p&gt;The key part of what I&#x27;ve done here is giving a species trait to all the different body setups. For our purposes, we&#x27;ll call this the skeletons. This means that, unlike before, any time we load in a new mob it will have a set species. Previously, we could load in a wolf and get a wolf, or a pig and get a pig, but that only worked because they were two different skeletons and they only had their own body parts to choose them (i.e., they were randomly choosing a leg from a pool of one leg).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;666169913349767178&amp;#x2F;screenshot_1578897584890.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Critters&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We don&#x27;t want this long term because creating new skeletons for individual mobs is super over-complicated for what we need. The new set up also moves a lot of the critical animation info like 3D placement and pivot point into config files, which is hugely useful because it lets us to hot load these things, with different placements per species. This will remove the strain off the compilation times and making this MR take a few years less than it would have.&lt;&#x2F;p&gt;
&lt;p&gt;One of the things I&#x27;ve really fleshed out in this MR is exactly how we want our skeletons to look, how many we will need and what makes them all different. One thing that has become clear as I progress is that even more important than how something looks, or how big it is, is how it behaves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;666169902960476170&amp;#x2F;screenshot_1578897643022.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Birds&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Obviously, we want an animal that has 4 legs to be wired into a skeleton that has 4 legs, but almost as important is behavior. Predator vs prey, speed of movement, style&#x2F;rigidness of movement are important questions when working out where something fits. Because of this, I&#x27;ve been pretty picky with the models that I&#x27;m adding into this MR. It&#x27;s easy to plug a new mob into a skeleton that mostly fits, but if we can put it into a skeleton that fits it well later, then that&#x27;s what I&#x27;m trying to do. Larger quadrupeds like deer, horses, and buffalo require more than one leg bone to seem alive, so they will come later. Current quadrupeds are all pretty low to the ground, which works with an easier setup.&lt;&#x2F;p&gt;
&lt;p&gt;Current skeletons in my working branch are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;critter: quadruped, 5 bones. very simple movement, the left and right feet are modeled together because they move together and this streamlines them. Scaled down in animation, for very small mobs.&lt;&#x2F;li&gt;
&lt;li&gt;quadruped_small: quadruped, 7 bones. Normally prey. Slightly more cartoony feel, lots of cute models.&lt;&#x2F;li&gt;
&lt;li&gt;quadruped_medium: quadruped, 11 bones. The most complex animal skeleton right now. Generally predators. Usually a bit bigger than quadruped_small, but more importantly allows for flexibility and realism. Splits the head into 4 parts, the torso into 2. Things like movable jaws give us a lot of freedom to animate better attacks. Split torso allows us to simulate things like turning better, or even breathing in idle animations.&lt;&#x2F;li&gt;
&lt;li&gt;bird_medium: biped, 6 bones. Simple and functional, useful for things like ducks, gives them heads, chests, tails, wings and legs.&lt;&#x2F;li&gt;
&lt;li&gt;biped_large: simplified in some respects from the humanoid, but made more complex in others. To support something this big we split the &quot;pants&quot; bone into two actual legs, so we&#x27;ll get some more realistic looking movement. A tricky one. Hopefully I finish this eventually :P&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There are others lying dormant (some rumors say there&#x27;s a dragon skeleton laying around) but those will be in for after 0.5 is released.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;666169909377499167&amp;#x2F;screenshot_1578897442650.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here is an example of a medium quadruped. This is a Tuskram. You can see it looking to its right, and with the bone setup we&#x27;ve built for it we&#x27;re able to represent a simple head twitch with 4 different angles: the neck at less of an angle than the head, even less for the front torso, and no angle on the rear torso. For now, it&#x27;s just a cool little detail that&#x27;s too subtle to notice, but for something like a lunge attack to the side it will be more extreme and the payoff should be good.&lt;&#x2F;p&gt;
&lt;p&gt;This MR brings the total number of animals in the game from 2 to 30, which will be pretty cool. We also add gender to each i-game mob, giving us full customization capability, so the total number of variants possible will be 60, though not every mob will do gender variation.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;666169911592353802&amp;#x2F;screenshot_1578897506222.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Small quadrupeds&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;iterator-problems-with-angelonfira-and-sharp&quot;&gt;Iterator Problems with @AngelOnFira and @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;The team came across an interesting bug that is being resolved. In Rust, if you want a sequence of numbers, say (0,1,2,3,4), you could use the iterator notation &lt;code&gt;0..5&lt;&#x2F;code&gt;, where the first number, &lt;code&gt;0&lt;&#x2F;code&gt;, is inclusive, and the second number, &lt;code&gt;5&lt;&#x2F;code&gt;, is exclusive, or not used. This is useful when going through things like arrays, where an index starts at 0 instead of 1.&lt;&#x2F;p&gt;
&lt;p&gt;However, in some cases, you might want the iterator to include the second number, so you would use &lt;code&gt;0.=5&lt;&#x2F;code&gt;, which would give (0,1,2,3,4,5). The problem is Rust has to do a lot of checking to make sure that this is safe, and so it is incredibly inefficient. Instead, &lt;code&gt;0..(5 + 1)&lt;&#x2F;code&gt; is much quicker. An even better option is to use &lt;code&gt;for_each&lt;&#x2F;code&gt; statements to allow the compiler to handle it, but this isn&#x27;t always possible. @Qutrin has been going through the codebase to resolve this issue wherever possible. For more information on this issue, check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rust&#x2F;comments&#x2F;eiwhkn&#x2F;-&#x2F;fctvmt4&quot;&gt;this Reddit post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;665943193367609374&amp;#x2F;screenshot_1578843555059.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;View distance is on the rise!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The section above was written by myself, @AngelOnFira. After asking #programmers to proofread it, @Sharp gave a much more in-depth summary of the issue. Here is is:&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s worth clarifying that the issue is not exactly with Rust, it&#x27;s with codegen. Rust uses lazy iterators by default, which means it has to assume next() can be called at any time, not just one after the other. And similarly, to avoid dynamic dispatch, the iterator itself always has just one implementation.&lt;&#x2F;p&gt;
&lt;p&gt;Therefore Rust won&#x27;t send LLVM code that does the efficient thing (check just once whether the upper bound can overflow, and branch based on that); it has to branch every time you call next. Unfortunately, LLVM usually isn&#x27;t smart enough to work out that these are equivalent. However, there is another solution that is almost certainly better than replacing ..=X with ..x+1 (which you should only do if you know you won&#x27;t overflow anyway).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;666400650372055064&amp;#x2F;screenshot_1578952644755.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some of the new pine forests&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;What I just described is part of a broader class of problems caused by Rust using lazy iteration; there are other things that cause similar performance impacts (like chain(), or zip() on arrays). However, if you call .for_each() (instead of using a for loop or calling the iterators directly), Rust knows you are doing internal iteration. So many of the ForEach implementations are specialized for the iterator type to take advantage of the fact that they know the iterator will be run to completion.&lt;&#x2F;p&gt;
&lt;p&gt;These implement all the optimizations you&#x27;d expect and LLVM generates much better code for them. I&#x27;ve already seen dramatic speedups in some parts of the codebase that I didn&#x27;t realize were unoptimized by replacing for loops with for_each, and unlike the other replacement, it is always semantically equivalent if the transformation is possible at all (i.e. you weren&#x27;t using break; or return; for nonlocal control flow). So I think a good extension of this project would be to go through the codebase and clean up as many for loops as possible.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erosion-worldgen-updates-by-sharp&quot;&gt;Erosion Worldgen Updates by @Sharp&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;665113539320741908&amp;#x2F;Screen_Shot_2020-01-10_at_1.01.40_AM.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here&#x27;s a map (128x focus, so it exaggerates small z differences) showing some of the new stuff I&#x27;ve been working on improving. This is in addition to other stuff not on master: hillslope diffusion, sediment transport, debris flow [replacing thermal erosion], soil production, map saving, and significant map rendering improvements.&lt;&#x2F;p&gt;
&lt;p&gt;The main thing is multiple receivers for drainage computation--that is, allowing some of the water to flow downhill in directions other than the very steepest. The drainage per direction is presently automatically weighted across all downhill directions from each chunk by a factor of:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;(slope to neighbor in that direction)^(0.5 + 0.6*(avg slope across all neighboring downhill chunks)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Note that doing this is quite computationally expensive. Making it significantly cheaper is nontrivial, to say the least--I even tried SIMD-ing it and haven&#x27;t had success yet. So I&#x27;m working on making it easy to switch between this and the old method of drainage computation.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;665495102260641802&amp;#x2F;screenshot_1578736714896.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mountains off in the distance&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Currently, this is only performed for erosion purposes, since we can&#x27;t render it well yet--so in the rendered map, we&#x27;re still using the old drainage computation for river flows (but the humidity calculation does use it, so it does a much better job of making sure wet areas are wet than the current map does).&lt;&#x2F;p&gt;
&lt;p&gt;The other significant improvement since the last time I shared a map is that we are using a nicer (for our purposes, anyway) algorithm to determine downhill directions for lake chunks. They now try to point directly at the closest pass rather than either always point downhill except the lake bottom (master), or do so except for a single line from the lake bottom to the pass (this branch previously), which produces somewhat nicer underwater erosion.&lt;&#x2F;p&gt;
&lt;p&gt;Combined, these two effects really clamp down on linear artifacts. The particular map shown above has 128x128 chunks (4x larger distance per side than the current map), and doesn&#x27;t use the plates from before for much (uplift=old altitude^2, kf constant).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;665114042905395223&amp;#x2F;Screen_Shot_2020-01-10_at_9.12.56_AM.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Here, I&#x27;m also including a second image of the overhead map where the multi-receiver drainage is also used to decide where there&#x27;s a river. This looks quite nice from overhead, but it renders ugly in game and I haven&#x27;t yet decided how I want to approach it. I also don&#x27;t want the overhead map to differ from the world map. So I&#x27;m using the old method for the time being. The new method basically gives us wide rivers &quot;for free!&quot;, though since we currently deliberately underestimate how much flow is needed to make a river by a large factor it makes the map a bit busy.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;665720336704077865&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The sun is setting for this week. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;666814910432280598&#x2F;tnmttHhdPXcQ6nThAH6A5QJSxVnbPpwaT7AXYDRmPi4.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 49</title>
          <pubDate>Mon, 06 Jan 2020 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-49/</link>
          <guid>https://veloren.net/blog/devblog-49/</guid>
          <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PUBLIC SERVICE ANNOUNCEMENT&lt;&#x2F;strong&gt; Are you looking to spend your new year&#x27;s motivation on something cool? Well then make it the year of working on Veloren! We have many beginner issues available right now to get you started. Ask anything you like in #learning, the team will be happy to help!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Happy new year! We&#x27;ve seen a great push this week on lots of fronts. Authentication is reaching stability, and lots is being added to Veloren both in assets and fundamental systems. We also hear from @Silentium about principles of writing design proposals.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Zesterer, @LunarEclipse, @Pfau, @Shandley, and @Songtronix!&lt;&#x2F;p&gt;
&lt;p&gt;@Acrimon is working on hardening authentication. Security audits are in progress, as well as lots of client integration and testing. @Slipped has been hard at work getting lots of new creatures into the game, including boars, sheep, foxes, and sabre teeth. @imbris, @Timo, and @Pfau started working on scrolling combat text. It&#x27;s almost done! There is also a new death screen as well, which has more information about respawning.&lt;&#x2F;p&gt;
&lt;p&gt;@Timo has started a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;-&#x2F;boards&#x2F;1479986?milestone_title=Alpha%20Release&quot;&gt;GitLab board&lt;&#x2F;a&gt; that will track progress on design systems that are needed before the release of Veloren alpha. You can see a more detailed document of the combat design overview &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1YGKIY5-NEnl_P39KjxJLZoGRQWNB0X970-rPADBO7BM&#x2F;edit?usp=drivesdk&quot;&gt;here&lt;&#x2F;a&gt;. @Silentium hosted another great design meeting that focused on weapon types. You can see that document &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1TALOo0tU1KQf_43FyBQFX-Pc_c34Sjli0_1KON0gN9k&#x2F;edit?usp=drivesdk&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;663596353875738657&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Scrolling combat text&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;how-to-effectively-write-a-proposal-for-the-game-design-team-by-silentium&quot;&gt;How to Effectively Write a Proposal for the Game Design Team by @Silentium&lt;&#x2F;h2&gt;
&lt;p&gt;The first thing to remember when writing a design proposal is that any idea might not make it into the game due to the consensus of the design team. Unfortunately, we can&#x27;t include all ideas, but with some compromising and some creative thinking, we can usually extract important aspects of the idea. Even ideas that don&#x27;t get used in their full state can still provide some very important insight into other aspects of the game&#x27;s design, so do not think that an unused idea is invalid. Every idea is useful, just maybe not necessarily in the way it was intended. The more the better.&lt;&#x2F;p&gt;
&lt;p&gt;The second thing to understand is that the proposal needs to keep from being too detailed. The goal is to do the least amount of work possible to effectively communicate the fundamental principles and reasoning of an idea. This is because if the idea isn&#x27;t well-received, or if it needs some reworking or changes, they can be done without subverting a large portion of the work done to write the proposal. No idea proposed to the game design team is used verbatim.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;664165152232570883&amp;#x2F;bushes_render.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some berry bushes by @Shimox&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The third thing is to be open to changing ideas. As previously stated, no idea is used without some changes being made first. As long as the proposer keeps an open mind about what can be changed, their idea will be very useful to the design of the game. This also helps uphold healthy conversation grounds.&lt;&#x2F;p&gt;
&lt;p&gt;Fourth is to read all preceding documentation. Almost everything we are currently doing is built off previous work. We have a very specific order in which we are designing gameplay elements and systems, and some of them need to be addressed before others. Make sure not to presume we haven&#x27;t designed an element of play, and make sure not to read too deeply into the potential implications of a system we have designed. The proposals are written to be specific, including only that which has been explicitly been decided on. Items out of its scope may still be up in the air.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;663598543277129728&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New low health border&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The last thing is that everything is changeable, even the stuff we have already written in our official documentation. By this, I do not mean we are open to redesigning the whole thing again. We are very proud of the work we have done and would rather not scrap it. That being said, if anyone thinks there is a problem with a system we have designed or a fundamental fatal design choice we have made, we are open to hearing about the criticism. Not only that, but we fully expect some systems to not prove viable when we start playtesting. As a result of this, we will likely have to rework some of our systems and come up with more iterations.&lt;&#x2F;p&gt;
&lt;p&gt;Each time we begin a new topic of design, I will make a post to let the team members put their ideas into one document. We all collaborate on this to get the final proposal finished so keep an eye out for those in #game-design!&lt;&#x2F;p&gt;
&lt;p&gt;As long as someone can keep these principles in mind while they write their proposal, they will be very effective in contributing their ideas to the game design team. Please let me know if you have any questions about any of this, or if you need clarification. I love when people take an interest in our work, so please don&#x27;t hesitate to message me!&lt;&#x2F;p&gt;
&lt;p&gt;Cheers ✨👍✨
@Silentium&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;663586091173150758&amp;#x2F;screenshot_1578281403695.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New creatures implemented by @Slipped. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;663040746307321857&#x2F;screenshot_1578151409248.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 48</title>
          <pubDate>Mon, 30 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-48/</link>
          <guid>https://veloren.net/blog/devblog-48/</guid>
          <description>&lt;p&gt;It&#x27;s the last blog of 2019! With the year wrapping up, we take a look at some of the progress we&#x27;ve made. We&#x27;ve seen many new contributors join Veloren&#x27;s development, as well as many milestones reached. @Adam also does a deep dive into character states and concepts surrounding them.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @AngelOnFira, @imbris, @Pfau, @Acrimon, @DylanKile, @LunarEclipse, and @Songtronix!&lt;&#x2F;p&gt;
&lt;p&gt;@Tub has been working on a new website layout, which can hopefully be implemented fully in the next few weeks. @Sharp has been continuing work on erosion and has just added debris flow erosion. @LunarEclipse added an Airshipper AUR package for easier installation in Arch. There was also a team meeting, as the release date for 0.5 is coming up!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;660489583141847050&amp;#x2F;Screen_Shot_2019-12-28_at_12.16.23_AM.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Sharp&amp;#x27;s new debris flow erosion system&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;2019&quot;&gt;2019&lt;&#x2F;h2&gt;
&lt;p&gt;With 2019 coming to an end, it&#x27;s important to look back at what we&#x27;ve accomplished. The images in this edition of TWiV reflect some major milestones we&#x27;ve hit. It&#x27;s also a great way to see where we started, with just the bare-bones of the new engine. Of course, we should also remember the great contributors that have made this possible!&lt;&#x2F;p&gt;
&lt;p&gt;Note: this just counts contributors that committed to the GitLab repo. Many others have given input at meetings, created concept art, music, and stories. Big &amp;lt;3 to all of them as well!&lt;&#x2F;p&gt;
&lt;p&gt;(817) Joshua Barretto, (275) timokoesters, (162) imbris, (146) Forest Anderson, (139) jshipsey, (127) Pfau(90), (104) Acrimon, (78) imbris, (70) Pfau, (65) Monty Marz, (55) Marcel, (47) Piotr Korgól, (45) Louis Pearson, (42) Timo Koesters, (40) Joshua Yanovski, (31) Marcel Märtens, (26) Louis Pearson, (24) sxv20_, (23) Songtronix, (21) tommy, (20) Shane Handley, (20) Yeedo, (19) Cody, (17) Songtronix, (16) Vechro, (15) Forest, (15) LunarEclipse, (14) Dominik Broński, (14) Songtronix, (14) telastrus, (13) Songtronix, (13) scott-c, (12) haslersn, (12) robojumper, (11) Imberflur, (9) KyoZM, (9) liids, (9) scorpion(9979), (8) Andrew Pritchard, (8) Justin Shipsey, (7) Adam Fogle, (7) Christoffer Lantz, (6) Joseph Gerardot, (6) S Handley, (5) Cedric Hutchings, (5) Sheldon Knuth, (5) Sheldon Knuth, (5) soruh, (4) Adam Whitehurst, (4) Ahmed Ihsan Tawfeeq, (4) Maciej Ćwięka, (3) Cody, (3) JMS, (3) Tom Watson, (3) Wu Yu Wei, (3) stevedagiraffe, (3) telastrus, (2) Arash Outadi, (2) Demonic, (2) Geno, (2) J. R. Vidal F, (2) Nikita Puzankov, (2) Piotr, (2) Tesseract, (2) Treeco, (2) Vsevolod Timchenko, (2) kacper, (1) Adam Whitehurst, (1) Adam Whitehurst, (1) Algorhythm, (1) Artem, (1) Brian Lewis, (1) Carbonhell, (1) Christian Authmann, (1) Christoffer Lans, (1) Dylan Kile, (1) Erocs, (1) Isaac Freund, (1) Jessie Mancer, (1) Luc Fauvel, (1) Luc Fauvel, (1) MidgeOnGithub, (1) Nero, (1) Nick(12), (1) Nicolas, (1) RustyBamboo, (1) Sebastian Venter, (1) Tanner Donovan, (1) Thomas JULLIEN, (1) appcrashwin(7), (1) heydabop, (1) neronim66@gmail.com, (1) pestilence, (1) yashaslokesh, (1) yeet&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;This year&#x27;s credits are brought to you by &lt;code&gt;git shortlog -sne --since=&quot;1 year ago&quot;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;551729308142665748&amp;#x2F;2019-03-03_12-34-28.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;One of the oldest videos of the new engine (March 4th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;character-states-overhaul-by-adam&quot;&gt;Character States Overhaul by @Adam&lt;&#x2F;h2&gt;
&lt;p&gt;Hello, @Adam here! I&#x27;m working on redesigning the Character State System so that it can (hopefully) handle all the awesome ideas that &lt;code&gt;#game-design&lt;&#x2F;code&gt; has in mind. This will include the combat, abilities, and weapons systems of Veloren. I&#x27;m going to walk through &lt;em&gt;all the guts&lt;&#x2F;em&gt; of this new system, to illustrate how it works and why I&#x27;m so proud of it. :) But first, some background...&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;CharacterState&lt;&#x2F;code&gt; component is what handles behaviors of &quot;characters&quot;: Any player or NPC, human or otherwise. Each &lt;code&gt;CharacterState&lt;&#x2F;code&gt; actually has two concurrent states: an &lt;code&gt;ActionState&lt;&#x2F;code&gt; which is primarily concerned with how a character is interacting with the world (Attacking, Blocking, Wielding), and a &lt;code&gt;MoveState&lt;&#x2F;code&gt; which primarily describes how a player is moving around the world (Standing, Running, Gliding, Climbing).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;556678246549159946&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The beginning of networking! (March 18th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;existing-state-of-character-states&quot;&gt;Existing State of Character States&lt;&#x2F;h3&gt;
&lt;p&gt;When I began, the existing &lt;code&gt;movement&lt;&#x2F;code&gt;, &lt;code&gt;controller&lt;&#x2F;code&gt;, and &lt;code&gt;combat&lt;&#x2F;code&gt; systems were under-equipped to handle the exciting ideas that &lt;code&gt;#game-design&lt;&#x2F;code&gt; was coming up with. Here are a few reasons why.&lt;&#x2F;p&gt;
&lt;p&gt;First, &lt;code&gt;CharacterState&lt;&#x2F;code&gt; update logic was spread across these three separate systems, so to make any changes or fix any bugs, one would first have to understand how &lt;em&gt;all three&lt;&#x2F;em&gt; of these systems worked, &lt;em&gt;just to change one state&#x27;s behavior&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Second, the &lt;code&gt;controller&lt;&#x2F;code&gt; system was the main source for state-transitioning logic, but that logic was occurring across a series of conditional checks, with state behavior logic mixing with that of others. This meant that changing one state&#x27;s implementation could have unpredictable effects on another&#x27;s.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;557239261141663744&amp;#x2F;image6.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Original concept of character creation screen (March 18th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, The state interactions during combat were being defined by the combat system itself. For example, when you tried to attack, the system would check if the enemy was blocking, and handled that blocking logic. So to have new, interesting ways of attacking&#x2F;blocking&#x2F;dodging, we would have to layer that on top of the logic of every other attack&#x2F;block&#x2F;dodge behavior.&lt;&#x2F;p&gt;
&lt;p&gt;What needed to happen instead was that the blocking state needed to be able to define how it would handle blocking an attack i.e: Would the block interrupt the attacker? Would it apply a strength debuff?&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;575267581510811648&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The state of graphics in Veloren with AO, FXAA, and terrain gradients (May 6th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;To summarize, the issues with the existing systems are:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;State updating logic was spread across three separate, interlocked systems leading to cognitive overhead.&lt;&#x2F;li&gt;
&lt;li&gt;State behavior logic depended on the behavior logic of every other state. Changing one state would affect every other state in unpredictable ways.&lt;&#x2F;li&gt;
&lt;li&gt;State handling was too static and would not scale as weapons and abilities were added.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;577595582051385399&amp;#x2F;EwrweYYSen.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Playing around with NPC characters (May 13th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;veloren-character-state-system-vcss&quot;&gt;Veloren Character State System (VCSS)&lt;&#x2F;h3&gt;
&lt;p&gt;With these issues in mind, I&#x27;m going to start at the root of this new Veloren Character State System (referred to simply as &#x27;VCSS&#x27;). Peek into the implementation file: &lt;code&gt;sys&#x2F;character_state.rs&lt;&#x2F;code&gt;. Don&#x27;t worry! This part is actually pretty simple, mostly just boilerplate!&lt;&#x2F;p&gt;
&lt;p&gt;The key piece of code is this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Determine new move state if character can move
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;(None, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;) = (move_overrides.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(entity), character.move_disabled) {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; state_update = character.move_state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;EcsStateData {
&lt;&#x2F;span&gt;&lt;span&gt;entity: &amp;amp;entity,
&lt;&#x2F;span&gt;&lt;span&gt;uid,
&lt;&#x2F;span&gt;&lt;span&gt;character,
&lt;&#x2F;span&gt;&lt;span&gt;pos,
&lt;&#x2F;span&gt;&lt;span&gt;vel,
&lt;&#x2F;span&gt;&lt;span&gt;ori,
&lt;&#x2F;span&gt;&lt;span&gt;dt: &amp;amp;dt,
&lt;&#x2F;span&gt;&lt;span&gt;inputs,
&lt;&#x2F;span&gt;&lt;span&gt;stats,
&lt;&#x2F;span&gt;&lt;span&gt;body,
&lt;&#x2F;span&gt;&lt;span&gt;physics,
&lt;&#x2F;span&gt;&lt;span&gt;updater: &amp;amp;updater,
&lt;&#x2F;span&gt;&lt;span&gt;server_bus: &amp;amp;server_bus,
&lt;&#x2F;span&gt;&lt;span&gt;local_bus: &amp;amp;local_bus,
&lt;&#x2F;span&gt;&lt;span&gt;});
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;*character = state_update.character;
&lt;&#x2F;span&gt;&lt;span&gt;*pos = state_update.pos;
&lt;&#x2F;span&gt;&lt;span&gt;*vel = state_update.vel;
&lt;&#x2F;span&gt;&lt;span&gt;*ori = state_update.ori;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The character&#x27;s &lt;code&gt;action_state&lt;&#x2F;code&gt; update logic is similar, so we only need to focus on &lt;code&gt;move_state&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;First, the code must check whether the character&#x27;s MoveState &lt;em&gt;can update&lt;&#x2F;em&gt;. The character&#x27;s ActionState may override the MoveState, or there may be some outside override occurring from an &lt;code&gt;OverrideMove&lt;&#x2F;code&gt; component.&lt;&#x2F;p&gt;
&lt;p&gt;If it can, the VCSS packages all the components that &lt;em&gt;any&lt;&#x2F;em&gt; state might need to read into an &lt;code&gt;EcsStateData&lt;&#x2F;code&gt; struct, and passes that to &lt;code&gt;move_state.handle()&lt;&#x2F;code&gt;. More on this function later.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;583662031438217216&amp;#x2F;screenshot_1559225872419.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new shadow system (June 3rd)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;What&#x27;s so nice about this &lt;code&gt;EcsStateData&lt;&#x2F;code&gt; struct is: In the future, a newly implemented state might need to read a component that doesn&#x27;t currently exist or isn&#x27;t needed for current states. That new component can be plugged into the &lt;code&gt;EcsStateData&lt;&#x2F;code&gt; struct, &lt;em&gt;without needing to update the parameters of all the existing states.&lt;&#x2F;em&gt; They will accept (and be able to read) that new component, through &lt;code&gt;EcsStateData&lt;&#x2F;code&gt; &lt;em&gt;automatically&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Notice, though, that this function returns something labeled &lt;code&gt;state_update&lt;&#x2F;code&gt;. Well, that&#x27;s the &lt;code&gt;StateUpdate&lt;&#x2F;code&gt; tuple, which is really just a tuple of new &lt;code&gt;CharacterState&lt;&#x2F;code&gt;, &lt;code&gt;Pos&lt;&#x2F;code&gt;, &lt;code&gt;Vel&lt;&#x2F;code&gt;, and &lt;code&gt;Ori&lt;&#x2F;code&gt; components, that the current state has determined should be the updated state of the components.&lt;&#x2F;p&gt;
&lt;p&gt;This illuminates a very critical part of the new VCSS. State update &lt;code&gt;handle()&lt;&#x2F;code&gt; functions are pure. They cannot mutate any components they are passed, they must &lt;em&gt;return new components&lt;&#x2F;em&gt;. The reason for this is twofold:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;State &lt;code&gt;handle()&lt;&#x2F;code&gt; functions only read data, and return new data, so they can be easily parallelized.&lt;&#x2F;li&gt;
&lt;li&gt;ECS data-behavior-constraint is maintained, systems handle behavior, and the VCSS here still handles manipulating the data in storage.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Alright, I bet you thought we&#x27;d move onto &lt;code&gt;move_state&lt;&#x2F;code&gt;s &lt;code&gt;handle()&lt;&#x2F;code&gt; function now. Not yet, but I appreciate your enthusiasm ;) First, we must know where this &lt;code&gt;handle()&lt;&#x2F;code&gt; function comes from &lt;em&gt;(and why)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618164525975470101&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Town generation (September 2nd)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;meet-statehandle-trait&quot;&gt;Meet StateHandle trait&lt;&#x2F;h3&gt;
&lt;p&gt;It&#x27;s defined in &lt;code&gt;common&#x2F;src&#x2F;comp&#x2F;states&#x2F;mod.rs&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub trait &lt;&#x2F;span&gt;&lt;span&gt;StateHandle {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ecs_data&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;EcsStateData) -&amp;gt; StateUpdate;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This guy is the glue that connects the VCSS to a state and its update logic. It takes in that &lt;code&gt;EcsStateData&lt;&#x2F;code&gt; struct, and passes back a &lt;code&gt;StateUpdate&lt;&#x2F;code&gt; tuple like I just explained. Knowledgeable observers might be asking: &quot;Wait... but you just said ECS systems need to separate data and behavior, but you&#x27;re implementing functions on the data to handle how to update that data?&quot;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;661758961044815912&amp;#x2F;dsmGaKWMeHXe9QuJtq_ys30PNfTGnMsRuHuo_MUzGCg.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As a newbie to the Rust language, this was a problem that made me question my entire implementation strategy (and worth as a programmer, but that&#x27;s for my therapist).&lt;&#x2F;p&gt;
&lt;p&gt;In case you are unfamiliar with why ECS systems are so powerful and why this was so troubling: The slowest part of game programs is usually waiting for data to be moved between cache and storage. Data-behavior-separation makes ECS systems so efficient because &lt;em&gt;only relevant data&lt;&#x2F;em&gt; is cached when behaviors are performed. Traditional Object-Oriented data-behavior-encapsulation caches the relevant data, &lt;em&gt;along with&lt;&#x2F;em&gt; all the other data (and behavior functions) that an object has, which is just wasted space in the cache. This leads to more calls to storage, and &lt;em&gt;major performance hits&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627857731629350932&amp;#x2F;screenshot_1569738184760.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rivers and erosion (September 30th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The key takeaway is that we want to minimize calls to storage by caching only relevant data. Bundling data up with their behavior would take up excess space in the cache!&lt;&#x2F;p&gt;
&lt;p&gt;So, I spent a long time looking in the mirror and asking, &quot;Is this what we want? Is this the right approach? What am I missing about ECS?&quot; Of course, after wasting so much time in the bathroom, I did a little research and found that missing piece: &lt;em&gt;trait member functions are syntactic sugar for static functions that accept their implementors as the first argument.&lt;&#x2F;em&gt; And that was a sweet discovery indeed. :)&lt;&#x2F;p&gt;
&lt;p&gt;What this means is that calling &lt;code&gt;move_state.handle()&lt;&#x2F;code&gt; &lt;em&gt;is the same as calling&lt;&#x2F;em&gt; &lt;code&gt;MoveState::handle(move_state)&lt;&#x2F;code&gt;. The function implementation is not actually bundled &lt;em&gt;into&lt;&#x2F;em&gt; the state struct, it exists somewhere &lt;em&gt;outside&lt;&#x2F;em&gt; the struct, as a static function, just like the VCSS that called it. It&#x27;s not put into cache along with the data, and therefore won&#x27;t waste space! The VCSS can still churn through only relevant data at lightning speed and us dumb humans can move that &lt;code&gt;handle()&lt;&#x2F;code&gt; function somewhere else where it&#x27;s easier to manage! Win-win.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;handling-statehandle&quot;&gt;Handling StateHandle&lt;&#x2F;h3&gt;
&lt;p&gt;So, states &lt;code&gt;impl StateHandle&lt;&#x2F;code&gt; trait to define how their data gets updated, but then you might notice something else! &lt;code&gt;MoveState&lt;&#x2F;code&gt; isn&#x27;t actually a state, it&#x27;s the enum that defines all the possible &lt;code&gt;MoveState&lt;&#x2F;code&gt;s! So why does it &lt;code&gt;impl StateHandle&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;Well, fictitious reader-in-my-head, you are quite astute. This is another reason why &lt;code&gt;StateHandle&lt;&#x2F;code&gt; is the glue between the VCSS and states. Peek below &lt;code&gt;StateHandle&lt;&#x2F;code&gt;s definition at the &lt;code&gt;impl StateHandle for MoveState&lt;&#x2F;code&gt; and you will see that its just a big ole match statement that passes &lt;code&gt;EcsStateData&lt;&#x2F;code&gt; to the &lt;code&gt;handle()&lt;&#x2F;code&gt; functions of the states themselves.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;646104765884923925&amp;#x2F;bg_main.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Moon and clouds (November 18th)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This was a design decision that I think is important. While this matching could have been done within the VCSS itself, I chose to put it here because...&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It keeps the VCSS concise&lt;&#x2F;li&gt;
&lt;li&gt;This matching logic is an implementation detail of how states handle their updates and not a detail of the VCSS itself.&lt;&#x2F;li&gt;
&lt;li&gt;There are several RFC&#x27;s and plans for rust to eliminate the need for matching on enum variants just to perform the same trait function that is implemented by all variants of that enum. Thus, it could likely be refactored away in the future.&lt;&#x2F;li&gt;
&lt;li&gt;You have to update &lt;code&gt;states&#x2F;mod.rs&lt;&#x2F;code&gt; when implementing new states anyway, so now we don&#x27;t need to touch the VCSS file every time we want to add a new state.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Okay, I&#x27;m done patting myself on the back. Before I get to the stuff you care about, I should explain this nest of matches inside &lt;code&gt;impl StateHandle for ActionState&lt;&#x2F;code&gt;, because this was a stumbling point for me as a newbie rustacean:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Passes handle to variant or subvariant handlers
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ecs_data&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;EcsStateData) -&amp;gt; StateUpdate {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;match &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;Attack(kind) =&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; kind {
&lt;&#x2F;span&gt;&lt;span&gt;BasicAttack(state) =&amp;gt; state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(ecs_data),
&lt;&#x2F;span&gt;&lt;span&gt;Charge(state) =&amp;gt; state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(ecs_data),
&lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;Block(kind) =&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; kind {
&lt;&#x2F;span&gt;&lt;span&gt;BasicBlock(state) =&amp;gt; state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(ecs_data),
&lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;Dodge(kind) =&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; kind {
&lt;&#x2F;span&gt;&lt;span&gt;Roll(state) =&amp;gt; state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(ecs_data),
&lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;Wield(state) =&amp;gt; state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(ecs_data),
&lt;&#x2F;span&gt;&lt;span&gt;Idle(state) =&amp;gt; state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(ecs_data),
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; All states should be explicitly handled
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Do not use default match: _ =&amp;gt; {},
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So we&#x27;re matching on &lt;code&gt;self&lt;&#x2F;code&gt; (an &lt;code&gt;ActionState&lt;&#x2F;code&gt;)... then if its an &lt;code&gt;Attack&lt;&#x2F;code&gt;, we match on &lt;code&gt;kind&lt;&#x2F;code&gt; (an &lt;code&gt;Actionkind&lt;&#x2F;code&gt;), and &lt;code&gt;ActionKind&lt;&#x2F;code&gt; variants have some object inside them called &lt;code&gt;state&lt;&#x2F;code&gt; that has the &lt;code&gt;handle()&lt;&#x2F;code&gt; we want to call. Cool. Why?&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s look at &lt;code&gt;BasicAttack&lt;&#x2F;code&gt;. It holds a &lt;code&gt;BasicAttackState&lt;&#x2F;code&gt; struct that we will see defined in a moment. This struct defines all the data fields that &lt;code&gt;BasicAttack&lt;&#x2F;code&gt; needs, along with the implementation of &lt;code&gt;StateHandle&lt;&#x2F;code&gt; trait, because enum variants aren&#x27;t allowed to &lt;code&gt;impl&lt;&#x2F;code&gt; traits (yet). BasicAttack is an &lt;code&gt;AttackKind&lt;&#x2F;code&gt; itself. We have different &lt;code&gt;AttackKind&lt;&#x2F;code&gt; variants inside the &lt;code&gt;Attack&lt;&#x2F;code&gt; &lt;code&gt;ActionState&lt;&#x2F;code&gt; variant because this allows us to easily check character states by different levels. Sometimes we only need to check &lt;em&gt;if&lt;&#x2F;em&gt; a character is attacking, sometimes we want to know &lt;em&gt;what&lt;&#x2F;em&gt; attack they are using. Most importantly, if different attacks were added to &lt;code&gt;ActionState&lt;&#x2F;code&gt; enum itself, every additional state would require updating other systems that match on action state but don&#x27;t care about what kind of attack the character is using.&lt;&#x2F;p&gt;
&lt;p&gt;Okay, dear reader, I think it&#x27;s time ...&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;661759609459048477&amp;#x2F;27d.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;where-it-all-comes-together&quot;&gt;Where it All Comes Together&lt;&#x2F;h3&gt;
&lt;p&gt;Take a lil&#x27; looksee at &lt;code&gt;common&#x2F;src&#x2F;comp&#x2F;states&#x2F;basic_attack.rs&lt;&#x2F;code&gt;. Inside you&#x27;ll find nothing surprising. You&#x27;ve got the &lt;code&gt;BasicAttackStruct&lt;&#x2F;code&gt; I already talked about:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub struct &lt;&#x2F;span&gt;&lt;span&gt;BasicAttackState {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; How long the state has until exiting
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;remaining_duration&lt;&#x2F;span&gt;&lt;span&gt;: Duration,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;With a field, &lt;code&gt;remaining_duration&lt;&#x2F;code&gt;, so the state knows when it should finish. This is all the data that&#x27;s in this state that&#x27;s going into cache.&lt;&#x2F;p&gt;
&lt;p&gt;&#x27;impl StateHandle&#x27; trait won&#x27;t go into cache. It&#x27;s &lt;code&gt;handle&lt;&#x2F;code&gt; function initializes new components:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let mut&lt;&#x2F;span&gt;&lt;span&gt; update = StateUpdate {
&lt;&#x2F;span&gt;&lt;span&gt;pos: *ecs_data.pos,
&lt;&#x2F;span&gt;&lt;span&gt;vel: *ecs_data.vel,
&lt;&#x2F;span&gt;&lt;span&gt;ori: *ecs_data.ori,
&lt;&#x2F;span&gt;&lt;span&gt;character: *ecs_data.character,
&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It does some behavior stuff, if the &lt;code&gt;remaining_duration&lt;&#x2F;code&gt; is 0, it goes back to wielding or idle state, otherwise, it ticks down &lt;code&gt;remaining_duration&lt;&#x2F;code&gt;. Either way, it just returns the updated components. :) That&#x27;s it, that&#x27;s how a full state is implemented, from start to finish.&lt;&#x2F;p&gt;
&lt;p&gt;But let&#x27;s just take a moment to appreciate what&#x27;s going on here. All of a single state&#x27;s implementation, data, and behavior, &lt;em&gt;looks&lt;&#x2F;em&gt; like it&#x27;s in one place, so it&#x27;s easy to see all the important information us humans need when writing states, but the program can still separate this into its data and behavior pieces for ECS. What&#x27;s more, you don&#x27;t see any of the logic for anything that &lt;em&gt;isn&#x27;t&lt;&#x2F;em&gt; part of &lt;code&gt;BasicAttackState&lt;&#x2F;code&gt;. You don&#x27;t need to know how the VCSS calls this state update, you don&#x27;t need to know what other state behavior looks like, you don&#x27;t need to rely on a different &lt;code&gt;movement&lt;&#x2F;code&gt; systems to move the character, you don&#x27;t have to worry if this state will break parallelization in the system, none of that junk! All you have in front of you is the state you care about right now, and that&#x27;s the way it should be. :)&lt;&#x2F;p&gt;
&lt;p&gt;So, with all that ogling and awing, I encourage you to look at other states&#x27; implementations and see how they work. Also, check out &lt;code&gt;common&#x2F;src&#x2F;util&#x2F;movement_utils.rs&lt;&#x2F;code&gt; to see what those functions can do for you, you don&#x27;t have to rewrite logic that is shared across states, do you? And don&#x27;t be afraid to reach out to me with questions, suggestions, or to volunteer! ;)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;660605211043430467&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;s all for this year! Catch you in 2020 :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;541307708146581519&#x2F;661755187714719754&#x2F;oT7BunH4mrp6uQ4uF-S577Pb-LisAwKPtc3pJ61UWMg.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 47</title>
          <pubDate>Mon, 23 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-47/</link>
          <guid>https://veloren.net/blog/devblog-47/</guid>
          <description>&lt;p&gt;Super short blog this week, happy holidays!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Songtronix, and @Shandley!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;659233670359547914&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;stuff&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;And that&amp;#x27;s all. See you for a 2019 wrap up next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;658694331049312256&#x2F;screenshot_1577114895603.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 46</title>
          <pubDate>Mon, 16 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-46/</link>
          <guid>https://veloren.net/blog/devblog-46/</guid>
          <description>&lt;p&gt;This week we take a look at Airshipper&#x27;s progress and potential future concepts. We also have a new section, the Contributor Spotlight where we learn more about Veloren&#x27;s contributors. @Silentium gives us a run-down on the state of design, and we hear about some SFX with @Shandley.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @xMAC94x, @Pfau, @Songtronix, @Adam, @AngelOnFira, and @Shandley!&lt;&#x2F;p&gt;
&lt;p&gt;@Pfaunauge has fixed fire-rate issues with the bow. He also worked on the minimap, adding scalability and zooming. @imbris fixed the minimization overflow and messed around with Iced, a UI library.&lt;&#x2F;p&gt;
&lt;p&gt;Discussions are happening about potential networking changes, but it is very much in a concept phase. The RFC can be found &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&#x2F;blob&#x2F;xMAC94x&#x2F;network&#x2F;open&#x2F;0019-network.md&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-spotlight-angelonfira&quot;&gt;Contributor Spotlight: AngelOnFira&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The contributor spotlight is a new section of TWiV. With so many people working on Veloren from around the world, the contributor spotlight will try to capture some of the personality behind the development.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Hey! I&#x27;m a student in my 4th (fifth) year at Carleton University in Ottawa, Canada. I&#x27;m studying computer science, with honours in game development. On the Veloren project, I&#x27;m the meta lead. I do things like write this blog, and work on the CI&#x2F;CD pipeline. I&#x27;m also exploring cross-platform builds for Mac, and compiler&#x2F;development optimizations.&lt;&#x2F;p&gt;
&lt;p&gt;Other than school and Veloren, I work at a startup called Timsle, where I&#x27;m a backend&#x2F;security web developer. I also run a security competition called Hack All The Things, and I love participating in others, like NorthSec and BSides. Game jams are also super cool, check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;globalgamejam.org&#x2F;&quot;&gt;the Global Game Jam&lt;&#x2F;a&gt; that is coming up at the end of January!&lt;&#x2F;p&gt;
&lt;p&gt;At the beginning of 2019, I had a semester off school. I wanted to start a new project in my spare time. I was interested in creating a game similar to Cube World. I wanted to learn procedural generation, lower-level graphics APIs, and Rust. As I was doing my research, I stumbled across Veloren. It was eerily odd how many of their values and goals were the same as mine.&lt;&#x2F;p&gt;
&lt;p&gt;I wanted to contribute to Veloren, but I had only used Rust for simple problems, and I hadn&#x27;t yet read the Rust book. I wanted to contribute in any way I could, so I picked up the blog, which only contained one post. Every week since then I&#x27;ve written a little about the progress of Veloren.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;656643480764022784&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;lake&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;My vision for Veloren is to create a game that can achieve what larger games cannot. Games that are trying to sell copies are produced with limited resources that dictate deadlines. It is difficult to find pure motivation for these projects, as there is always a financial aspect at the end of the tunnel.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren is built without these restrictions. Veloren only progresses with motivation from volunteers that want to make something neat. We are free to explore concepts that other games would have to cut due to time constraints and research capacity. We can try and fail and try again. We are the creators, we are the players, and we are the community. And I like being a part of it.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you&#x27;re interested in having your own contributor spotlight, keep an eye out on the Discord! Also, feedback on this format is always appreciated.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;airshipper-updates-with-songtronix&quot;&gt;Airshipper Updates with @Songtronix&lt;&#x2F;h2&gt;
&lt;p&gt;While Airshipper can&#x27;t be considered stable yet, a lot of progress has been made. A progress bar has been added if the game is being downloaded&#x2F;extracted and as such you don&#x27;t have to wonder if it&#x27;s still doing something.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;656126204570632212&amp;#x2F;airshipper.gif&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;progress-bar&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Nice little quality of life improvements in the launcher&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;However, note that these changes right now aren&#x27;t available yet due to the code being a mess and the need for elaborate testing. On the topic of availability, Airshipper can be downloaded already but remember that the launcher right now is in an unstable state and
many things will change.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;656126305531592704&amp;#x2F;launcher.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;launcher&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;One of the biggest changes will be a beautiful looking UI, thanks to this concept from @SrMizuki! As you can see the launcher has a section for the news and a changelog which we seriously need for releases! :D&lt;&#x2F;p&gt;
&lt;p&gt;The launcher provides profile support to encourage the use of the latest and greatest version of Veloren while easily being able to switch to a stable version for serious gameplay. This will be similar to Overwatch PTR, or Factorio&#x27;s beta versions. While not noticeable in the UI concept, this is implemented but not exposed to the user yet.&lt;&#x2F;p&gt;
&lt;p&gt;Dreaming big is one part but the other part is making it real! That&#x27;s why the UI design concept will be realized with &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hecrj&#x2F;iced&quot;&gt;Iced&lt;&#x2F;a&gt;, a very promising GUI library, and I&#x27;m excited to start working on it.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;656126504371224604&amp;#x2F;IcedTour.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A very impressive tour on what Iced is capable of&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

Your browser does not support the video tag.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sfx-with-shandley&quot;&gt;SFX with @Shandley&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s been challenging to add sound effects to the game. This is because there are so many areas being developed at once. We’ve added an event-dispatcher based SFX system, which allows us to decouple the SFX implementation from the development of new features. Here is a rundown on how this is achieved:&lt;&#x2F;p&gt;
&lt;p&gt;The EventBus is registered during initialization of the specs::World, and holds a &lt;code&gt;VecDeque&lt;&#x2F;code&gt; to which we push and read a Struct containing a sound effect constant (which references the SFX file to be played) as well as a position in the world from where it should be emitted. During gameplay, the event queue is consumed by the audio system, which locates the correct audio file from configuration and emits it at the specified position.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;654267555606691840&amp;#x2F;screenshot_1576059872770.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;cave&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An interesting cave&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We can then construct small ‘mappers’ which watch specific resources and entities in the world and emit events based on changes in state. For example, a simple inventory SFX ‘mapper’ watches the player entity&#x27;s inventory, and dispatches a ‘ConsumeItem(Apple)’ event at the player position when the relevant change in the player&#x27;s inventory state happens.&lt;&#x2F;p&gt;
&lt;p&gt;We have access to the player&#x2F;world state through Veloren&#x27;s Entity Component System. Without needing to know about the specifics of any particular system, we can watch the state of entities during movement or combat, and &quot;match&quot; that entity&#x27;s state to sound effects.&lt;&#x2F;p&gt;
&lt;p&gt;This is also good news for non-coding sound designers since we configure a catalog of these states as constants in a .RON configuration file, they only need to update the config to attach a sound effect file to a specific state to add it to the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;654241231857123368&amp;#x2F;screenshot_1576053591480.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So far we’ve implemented movement states such as running. gliding and basic attacks, but we’re also working on other systems in-game:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Combat: including blocked&#x2F;special attacks and support for special weapons with specific sounds.&lt;&#x2F;li&gt;
&lt;li&gt;Inventory: adding and consuming items.&lt;&#x2F;li&gt;
&lt;li&gt;Modifying SFX based on the player&#x27;s environment, such as the surface they are standing on, or echoes created when the player is near a cliff.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This SFX system is in its early days, and we still need to create a lot of new sounds as the combat team evolves their systems. However, having SFX already adds a lot of atmosphere to the gameplay.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;game-design-update-by-silentium&quot;&gt;Game Design Update by @Silentium&lt;&#x2F;h2&gt;
&lt;p&gt;Over the past six weeks, the game design group has gotten through quite a bit of the high-level combat mechanics. With new people joining the discussion every so often, the team has laid down a solid foundation for the future of Veloren&#x27;s design. However, now we are getting into a bit more detail with some of our design choices. Topics that were once designed in a single two-hour session at a high level are now requiring multiple meetings to get through on a detailed level. This was expected, but the change in pace is noticeable.&lt;&#x2F;p&gt;
&lt;p&gt;Our master document with all the things we have officially designed is in &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1otj-t0vaod3EKwYTA0bv5Chp5Z7ZbBAY8YgXX9bIm4o&#x2F;edit?usp=sharing&quot;&gt;this&lt;&#x2F;a&gt; document, but all of it is subject to re-examination and re-design if need be. There are also a few other documents that serve as &quot;idea dumps&quot; where everyone involved in the design process will place their ideas during the week leading up to the weekly meeting.&lt;&#x2F;p&gt;
&lt;p&gt;I have also made a flowchart that represents our current understanding of the order in which design topics can be approached. Each color represents a game system, and the topics are differentiated by that system, so don’t worry if you see two of the same topics
in the chart.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;646401404419833866&amp;#x2F;654008543610929182&amp;#x2F;IMG_20191210_121525.jpg&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;flowchart&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The current design flowchart&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Since our understanding widens with each topic we design, this chart expands and changes to fit the new model, but for now, it does a good job of showing a few of the game systems we plan to address. This chart does not show everything we plan on designing, but a fair chunk of it for sure. For right now combat seems to be our focus, but that will change once we get most of it finished up. I’m not the only one who’s excited to move on to magic and crafting :)&lt;&#x2F;p&gt;
&lt;p&gt;Overall we’ve been making steady progress with our efforts, and we already have some dedicated programmers putting our designs into the game! If anyone has any questions about the process or anything we have written up, shoot me a message!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;656646109460037652&amp;#x2F;screenshot_1576625780585.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;end&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;s all for this week. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;656276339799883777&#x2F;uAe9u57IK3wMPBvFOfIkIeep5LHbhzNoMRq_l19VqcE.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 45</title>
          <pubDate>Mon, 09 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-45/</link>
          <guid>https://veloren.net/blog/devblog-45/</guid>
          <description>&lt;p&gt;This week, we get a glance at some of the ideas behind pathfinding, both at a macro and micro level. We also see optimizations to networking, as well as the current state of the design working group. Also, a new edition of &quot;This Month in Rust GameDev&quot; &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;posts&#x2F;newsletter-004&#x2F;&quot;&gt;has come out&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Acrimon, @Shandley, @Adam, @Songtronix and @Treeco!&lt;&#x2F;p&gt;
&lt;p&gt;@Acrimon is working on the underlying message system for networking. Optimizations to this will improve the connection from the client to the server. @chrischrischris has been working on pathfinding and has significant progress on prototypes.&lt;&#x2F;p&gt;
&lt;p&gt;The design working group put the topic of conditions on temporary hold for now, since they should have enough to start designing skill trees for the combat system. You can check out the WIP formal document on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1i0Jum79ju0-kpeuJ7d4hH2jK1eBrGvgHjGNerW4O0Wc&#x2F;edit?usp=drivesdk&quot;&gt;conditions and status effects&lt;&#x2F;a&gt;, as well as the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1g4ajHENiCp140fxIct2neoej6l_kbIwDoe2F9AIORKw&#x2F;edit?usp=drivesdk&quot;&gt;preliminary steps&lt;&#x2F;a&gt;. @danach has been working on the definitions for biomes, and you can see that document &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1wANqUszd3tz_syqNPBnA7_4J1sB79TFtbkWegZkihOA&#x2F;edit&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;653592625672355850&amp;#x2F;unknown_1.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;map&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@SrMizuki&amp;#x27;s work on the map&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;pathfinding-by-chrischrischris&quot;&gt;Pathfinding by @chrischrischris&lt;&#x2F;h2&gt;
&lt;p&gt;One of the major goals in Veloren is to create a world that feels alive and dynamic and to provide a sort of simulated world over time. A major component of this world will be cities and civilizations which interact with each other. To provide this experience, an essential component is for entities to be able to travel and explore.&lt;&#x2F;p&gt;
&lt;p&gt;Think of trading caravans being able to navigate long roads between cities, guards patrolling castle gates, and villagers walking from their homes to the market. The first step to making this a reality is adding intelligent pathfinding. For Veloren&#x27;s pathfinding implementation, we wanted to focus on modularity and reusability. There are three major components:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-a&quot;&gt;1: A*&lt;&#x2F;h3&gt;
&lt;p&gt;A generic A* algorithm which knows nothing about the world, but does know how to find the shortest path in an abstract graph. For people not familiar with the algorithm, its goal is to be given a graph and a heuristic and find a short path without having to scan the entire graph. To learn more about it, check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.redblobgames.com&#x2F;pathfinding&#x2F;a-star&#x2F;introduction.html&quot;&gt;this excellent reference&lt;&#x2F;a&gt; on Red Blob Games.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;651888835638198272&amp;#x2F;screenshot_1575492769520.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;forest&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A forest to explore&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;2-translation-to-world&quot;&gt;2: Translation To World&lt;&#x2F;h3&gt;
&lt;p&gt;The block pathfinding component which connects the &lt;em&gt;A algorithm above and blocks in the world. Its job is to use the ReadVol API to transform coordinates in the world to a graph that A&lt;&#x2F;em&gt; can use.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-macro-scale&quot;&gt;3: Macro Scale&lt;&#x2F;h3&gt;
&lt;p&gt;This is a chunk pathfinding component that connects #1 and #2. This exists to make the pathfinding more efficient across long distances. It works by partitioning the world up into chunks and ignoring large amounts of contiguous blocks that are non-traversable.&lt;&#x2F;p&gt;
&lt;p&gt;Imagine this scenario: A NPC is trying to find a path from one civilization to another across a large distance, with an ocean in between the two cities. There is a bridge connecting the two cities right in the middle of the ocean. If we only use a block pathfinding algorithm, then we look at every block in the ocean until we find the bridge.&lt;&#x2F;p&gt;
&lt;p&gt;However, with this system, we can instead look at chunks of blocks. If there were 500 blocks of ocean and then the bridge, and the chunk size was 100, then we would only have to look at 5 chunks of ocean before finding the bridge instead of 500. This macro-scale pathfinding is still in the works.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;654001262823735297&amp;#x2F;5lyqf.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;The pathfinding in action&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I am currently working on adding ray casting to detect if the path has become invalid. This can happen when blocks are placed and blocking off the old path, or explosions destroying terrain. My project partner is also working on making it hierarchical, by having NPCs create paths along chunks and then along blocks for more efficient pathfinding.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;652247780185735168&amp;#x2F;screenshot_1575578363542.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;sun&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The sun sets on the savannah. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;654000031652642846&#x2F;bGqIyCgV4O26InhD2DTiSH9tArXNLI9lxp4rWZyJCVc.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 44</title>
          <pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-44/</link>
          <guid>https://veloren.net/blog/devblog-44/</guid>
          <description>&lt;p&gt;Small blog this week! &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;&quot;&gt;Advent of Code&lt;&#x2F;a&gt; has started, and I&#x27;ve become strapped on writing time. Others also have a lot going on, and so there aren&#x27;t any major writeups. However, I have compiled some of my ramblings into a new TWiV section.&lt;&#x2F;p&gt;
&lt;p&gt;- AngelOnFira, TWiV Editor&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @AngelOnFira, @xMAC94x, @Pfau, @Adam, and @Treeco!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @Pfau got the first animated UI element going! @Zesterer and @imbris helped out with the implementation. @Sharp is continuing to work on sediment transport in the erosion system. @AngelOnFira has worked on more GitHub Actions CI testing and compression of assets.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;651457499622539266&amp;#x2F;Screen_Shot_2019-12-03_at_5.14.56_PM.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;sediment&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;View of the sediment transport&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Silentium also prepared a flow chart to guide the topics covered in design meetings.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;646401404419833866&amp;#x2F;649323337482502168&amp;#x2F;IMG_20191127_135615.jpg&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;flow&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Since I don&#x27;t have much content to curate about this week, it&#x27;s time to rant about stuff I&#x27;ve been exploring. As meta lead, I deal with a lot of experimentation of stuff that you don&#x27;t see in the game. From this, I&#x27;ve written some incomplete blog posts. Taking inspiration from His Dark Materials, here is the first edition of the &quot;Lantern Slides&quot;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lantern-slides-mac-build-predicament&quot;&gt;Lantern Slides: Mac Build Predicament&lt;&#x2F;h3&gt;
&lt;p&gt;Building for Linux is easy. Veloren developers work across many different flavors of it, so we have a good breadth of installation instructions. Windows is also pretty standard, and its drivers are quite resilient. Mac, on the other hand, is not so friendly.&lt;&#x2F;p&gt;
&lt;p&gt;With our deployment setup, we want to be able to build executables from an Ubuntu runner. Although this is Linux, it can build for Windows with a specific Rust target installed. Mac also has a target that can be installed on Linux, however, it also needs a specific compiler.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;651511467409145866&amp;#x2F;screenshot_1575402810412.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;savanah&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Exploring the wild&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The compiler that can be used to build Linux and Windows executables is quite standard. Mac has a special SDK that has to be used to build the compiler. I&#x27;m still learning why this is the situation, but it adds to the process required to build a Mac executable. This is much easier done when building from a Mac, however that is not great for us. The intended solution is as follows:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Dump the Mac SDK from XCode&lt;&#x2F;li&gt;
&lt;li&gt;Package the SDK in a specific format&lt;&#x2F;li&gt;
&lt;li&gt;Build the compiler with &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tpoechtrager&#x2F;osxcross&quot;&gt;OSXCross&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;First off, I don&#x27;t want to install XCode just to get the SDK. Luckily, there is a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;phracker&#x2F;MacOSX-SDKs&quot;&gt;GitHub repo&lt;&#x2F;a&gt; that has the SDKs prepared. I then made &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AngelOnFira&#x2F;macosx-sdk&quot;&gt;my own repo&lt;&#x2F;a&gt; that packaged them as they weren&#x27;t already. Next up, I started working with OSXCross. Unfortunately this is where I&#x27;m stuck.&lt;&#x2F;p&gt;
&lt;p&gt;OSXCross requires a lot of manual tinkering to get it working. The latest example of it working with a Rust project is a few years old. The documentation can only get you so far, and there is a lot of digging that has to be done. Hopefully, this can be ironed out before the 0.5 release, as I&#x27;ve promised Mac builds for quite a while.&lt;&#x2F;p&gt;
&lt;p&gt;If I get it working, I would like to build a prototype Docker image that can be used to target Mac from Linux for Rust. This will hopefully be useful for the Rust CI community, as currently, I&#x27;m not aware of any other option than building from a Mac device. With GitHub actions just releasing with Mac runners, hopefully, there will also be other solutions parallel to this one.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;651513953628717057&amp;#x2F;screenshot_1575403137263.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;mountain&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mountain above the clouds&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;lantern-slides-unfinished-rust-ci-blog&quot;&gt;Lantern Slides: Unfinished Rust CI Blog&lt;&#x2F;h2&gt;
&lt;p&gt;Since Rust is a compiled language, it uses many techniques to help lower compile time. Most of these include storing files in the target&#x2F; folder of the project.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;looking-at-veloren-as-a-case-study&quot;&gt;Looking at Veloren as a Case Study&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&quot;&gt;Veloren&lt;&#x2F;a&gt; is an open source game being developed with Rust. One of the key reasons we use GitLab for Veloren is the integrated CI.&lt;&#x2F;p&gt;
&lt;p&gt;We have several GitLab runners that are each used for all of the CI tasks that Veloren requires. Each runner can compile, test, lint, verify, and build executables.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren-docker-ci&#x2F;blob&#x2F;master&#x2F;Dockerfile&quot;&gt;Docker image used on the runners&lt;&#x2F;a&gt; contains:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;All of the dependencies for builds&lt;&#x2F;li&gt;
&lt;li&gt;A specific version of Rust that is forced in dev as well&lt;&#x2F;li&gt;
&lt;li&gt;Targets for cross-platform builds&lt;&#x2F;li&gt;
&lt;li&gt;Rustup components for tools like Rustfmt and Clippy&lt;&#x2F;li&gt;
&lt;li&gt;The cloned project for easier checkout during builds&lt;&#x2F;li&gt;
&lt;li&gt;A target folder populated from &lt;code&gt;cargo run&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This means that the Docker image is quite large, around 6gb. This is unfortunate, however, it greatly helps CI times. During CI, some of the benefits from this are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The entire ~150mb project doesn&#x27;t need to be re-cloned each time&lt;&#x2F;li&gt;
&lt;li&gt;The specific Rust version doesn&#x27;t need to be installed&lt;&#x2F;li&gt;
&lt;li&gt;Many of the dependency crates won&#x27;t need to be rebuilt, let alone redownloaded&lt;&#x2F;li&gt;
&lt;li&gt;Many of the source files for Veloren are already compiled. Therefore, since many merges to master don&#x27;t change all the files, they only have to compile the files they changed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;651513929734029312&amp;#x2F;screenshot_1575402960703.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;terrain&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A view of the current terrain&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The runners have a cache that stores the target&#x2F; folder after each build. It uses a Docker anonymous volume for this. Here is what the target folder looks like after a week of a runner&#x27;s work:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;11G target&#x2F;debug
&lt;&#x2F;span&gt;&lt;span&gt;1.3G target&#x2F;release
&lt;&#x2F;span&gt;&lt;span&gt;2.5G target&#x2F;x86_64-pc-windows-gnu
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The size difference makes sense since the initial compile and all tests are run with the Linux target. This stores artifacts in target&#x2F;debug. The target&#x2F;release and target&#x2F;x86_64-pc-windows-gnu only hold the final executables for their respective platforms.&lt;&#x2F;p&gt;
&lt;p&gt;However, the size of the folders is quite a problem. Since this runner has only been running for a week, a 15gb target folder is quite large. A runner that is new and contains only a single build of each type takes up the following space:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;6.1G target&#x2F;debug
&lt;&#x2F;span&gt;&lt;span&gt;1.5G target&#x2F;release
&lt;&#x2F;span&gt;&lt;span&gt;2.4G target&#x2F;x86_64-pc-windows-gnu
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Note, the reason that target&#x2F;release is bigger is most likely that the runner didn&#x27;t get asked to run that specific stage.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;So, in the week that the runner was doing jobs, it accumulated around 5gb in just the &lt;code&gt;target&#x2F;debug&lt;&#x2F;code&gt; folder. In fact, some of our runners have accumulated 100gb+ of target artifacts. This has caused us to sometimes run out of space on the runners, which we&#x27;ve then had to manually restart. Not ideal.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;651620383073632286&amp;#x2F;DGRQkAw.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;The new animated map by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Let&#x27;s examine some other differences between the target folders of these runners. Let&#x27;s call the runner that has run for a while &lt;code&gt;old runner&lt;&#x2F;code&gt;, and the new one &lt;code&gt;new runner&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;First, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;47533016&quot;&gt;here is&lt;&#x2F;a&gt; some great information about what the target folder contains. Let&#x27;s take a look at what the target folder of new runner contains:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;drwxr-xr-x 8 root root 4096 Jul 21 20:29 .
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 5 root root 4096 Jul 21 19:43 ..
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 153 root root 12288 Jul 21 20:29 build
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 0 Jul 9 12:05 .cargo-lock
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 2 root root 131072 Jul 21 20:33 deps
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 2 root root 4096 Jul 21 20:29 examples
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 836 root root 45056 Jul 21 20:30 .fingerprint
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 41 root root 4096 Jul 21 20:33 incremental
&lt;&#x2F;span&gt;&lt;span&gt;drwxr-xr-x 2 root root 4096 Jul 9 12:05 native
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 4487824 Jul 21 20:29 veloren_chat_cli-94fcc09b2c5cad1e
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 2942 Jul 21 20:29 veloren_chat_cli-94fcc09b2c5cad1e.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 4487808 Jul 21 20:29 veloren_client-d0c1376a22680bbe
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 2896 Jul 21 20:29 veloren_client-d0c1376a22680bbe.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 11732848 Jul 21 20:29 veloren_common-0b3ae1d1ad5c1cb1
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 2812 Jul 21 20:29 veloren_common-0b3ae1d1ad5c1cb1.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 82117288 Jul 21 20:20 veloren-server-cli
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 3758 Jul 21 20:19 veloren-server-cli.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 4487840 Jul 21 20:29 veloren_server_cli-d029ad657c74936b
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 3775 Jul 21 20:29 veloren_server_cli-d029ad657c74936b.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 5311464 Jul 21 20:29 veloren_server-fc3a2f6366701d99
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 3725 Jul 21 20:29 veloren_server-fc3a2f6366701d99.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 227318048 Jul 21 19:34 veloren-voxygen
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 9061 Jul 21 19:29 veloren-voxygen.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 23485928 Jul 21 20:29 veloren_voxygen-fb154c7c142b5881
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 9078 Jul 21 20:29 veloren_voxygen-fb154c7c142b5881.d
&lt;&#x2F;span&gt;&lt;span&gt;-rwxr-xr-x 2 root root 4563864 Jul 21 20:29 veloren_world-1f1dbc7fde8cc98d
&lt;&#x2F;span&gt;&lt;span&gt;-rw-r--r-- 1 root root 3466 Jul 21 20:29 veloren_world-1f1dbc7fde8cc98d.d
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Here is where I stopped writing. Maybe someday I&#x27;ll finish these ideas and write a remediation blog alongside this analytical post.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;650839128975343616&amp;#x2F;Capture.PNG&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;sunset&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The place where the rivers meet. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;648997842517753876&#x2F;screenshot_1574803332703.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 43</title>
          <pubDate>Mon, 25 Nov 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-43/</link>
          <guid>https://veloren.net/blog/devblog-43/</guid>
          <description>&lt;p&gt;This week we get a postmortem from @Sharp about their learnings on erosions to generate rivers and better land features. Also more on the CI improvements, a new article on dtf.ru, and other updates.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Zesterer and @xMAC94x, @Pfau, @Songtronix, @Slipped, @shandley, @telastrus!&lt;&#x2F;p&gt;
&lt;p&gt;This week, @xMAC94 and @AngelOnFira have been working on upgrades to CI. @xMAC94x worked primarily on improving the current CI by building the base image more frequently. @AngelOnFira focused on experiments with new CI setups on GitHub Actions, and some more OSXCross for Mac builds. @Songtronix got the FreeBSD build to compile again. They also worked on improving logging.&lt;&#x2F;p&gt;
&lt;p&gt;@RonVal4 and @DoNeo wrote a Veloren article on &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dtf.ru&#x2F;indie&#x2F;83725-veloren-igra-mechty&quot;&gt;dtf.ru&lt;&#x2F;a&gt;. It&#x27;s worth a translated read if your Russian isn&#x27;t очень хорошо! The game design group met up last Saturday to discuss non-damaging conditions in-game. They will be meeting again this Saturday to finish up this topic.&lt;&#x2F;p&gt;
&lt;p&gt;@chrischrischris will be continuing their work on advanced pathfinding for agents. Screenshots coming up in future devblogs! @imbris has been working on a bug where entities aren&#x27;t properly sent to the client. The bug occurs when entities leave the visible range from the player and come back in. @imbris is close to solving the issue, but there are still some anomalies.&lt;&#x2F;p&gt;
&lt;p&gt;@Felixader has another &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;gallery&#x2F;UkpWPM3&quot;&gt;Imgur gallery&lt;&#x2F;a&gt; with some work they&#x27;ve been doing this week. @shandley has been continuing work on SFX.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;river-postmortem-by-sharp&quot;&gt;River postmortem by @Sharp&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;After having done a lot on river, erosion, and world generation, @Sharp takes some time to dive into some ideas.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Nobody has ever been able to figure out a way to make river networks that fit the terrain with pure noise. The original authors of ideas like Perlin Noise were explicitly trying to find ways to reproduce geological features without running expensive simulations. These simulations would have been impractical for the time when they were working on these ideas many years ago.&lt;&#x2F;p&gt;
&lt;p&gt;They were able to successfully reproduce things that evoked the feelings of a lot of terrain. Shattered hills, some kinds of ridged mountains, and so on. But never river networks, glaciation, or other processes that evolve in a more &quot;global&quot; way. Even though they sometimes produce fractal-like patterns, they don&#x27;t do so randomly.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;647407674551435275&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;mountain&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mountain above the clouds&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;People had the idea to just model the physical processes of things like water flow directly a long time ago. I think the first paper on computationally simulating hydraulic erosion came out in 1989. However, most of these early algorithms were &quot;explicit&quot;, meaning that each new step relied exclusively on the values of the previous step. This made computing iterations much faster and simpler, and easy to parallelize. This is because each grid can operate in isolation for each round, and then just look at the effects of a previous round.&lt;&#x2F;p&gt;
&lt;p&gt;However, the downside is that explicit numerical methods do not converge to the same solution if you make the time step large enough
Each of them has a certain range of time steps where they are &quot;stable&quot; and this varies by algorithm. If you&#x27;re applying lots of different methods like this (as you often do for things like erosion), you are limited by the shortest convergence time scale of any of the methods
In practice, this time scale is sometimes measured in years, or even days. While we need to simulate erosion over millions of years to get realistic looking landscapes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;647786679066689536&amp;#x2F;screenshot_1574514737131.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;village&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The more recent innovations that have allowed these techniques to scale to large areas and time periods have thus been in finding clever implicit algorithms for solving these problems. In each iteration, an implicit algorithm computes values for all the cells &quot;at once&quot;. This is done by solving partial differential equations, either exactly or using numerical methods with guaranteed convergence rates per iteration.
The downside is that these equations are much more complex, and often require global information and ordering of the solution that makes them difficult to parallelize.&lt;&#x2F;p&gt;
&lt;p&gt;The upside is that a fully implicit method&#x27;s convergence is not dependent on the time scale. This means that you can set it to any scale you want, so it will never be a bottleneck to your erosion algorithm.&lt;&#x2F;p&gt;
&lt;p&gt;Our fluvial erosion algorithm is a mixture of the two. First, we explicitly compute a river drainage network at a discrete-time point, and we only consider a single path from node to node rather than potential water flow from all paths.&lt;&#x2F;p&gt;
&lt;p&gt;Second, we implicitly compute the differential equation that predicts the effect of shear stress on the land elevations along that flow. Shear stress is the pushing effect that fluids have normal to their direction of flow. This allows for far larger time steps than we could use otherwise while guaranteeing, if not complete convergence, then at least something very close to it.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;648317007762161665&amp;#x2F;screenshot_1574641016614.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;river-valley&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A river at the bottom of a valley&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Fluvial erosion is the process people are familiar with where water weathers the rock it flows over, eventually forcing it down and producing deep gouges. It gets stronger the higher its volume per time, which we approximate with the area flowing into the cell. This is one reason we compute a drainage network explicitly; the other is to figure out a single slope we can use in the equation.&lt;&#x2F;p&gt;
&lt;p&gt;We currently combine this with three other algorithms. The first is tectonic uplift. This is relevant over large timescales. On land, at least some parts (not sure if all), there are areas where tectonic processes are causing more material to be released and thus rising the land above them. This allows mountains to develop out of even formerly flat ground and is a large advantage to us over other erosion algorithms that eventually tend to make all land flat.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;648306318213644300&amp;#x2F;Screen_Shot_2019-11-25_at_12.32.41_AM.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;tectonic&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Tectonic uplift map&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The second is thermal erosion, which reflects the tendency of rock to &quot;slide&quot; when above a certain angle. This is known as its talus angle, also called its angle of repose. It is dependent on the rock type and relates to the steepness that the rock grains can be heaped at before they start to slide down.&lt;&#x2F;p&gt;
&lt;p&gt;This corrects the tendency that stream power has to create extremely steep slopes, by breaking down the rock when it gets too steep, and has a large effect on the final elevation and overall map shape. It also has a nice side effect of limiting overall altitude in the presence of uplift. I think this is distinct from &quot;mountain height&quot; as mentioned in the paper, which I believe refers to how high a particular ridge can get before depositing into a basin; but I&#x27;m not sure.&lt;&#x2F;p&gt;
&lt;p&gt;The third, just added on my branch, is hillslope diffusion. This reflects the tendency of land to &quot;slump&quot; into each other, even below its angle of repose, and is a catchall for the effects of lots of different processes (e.g. wind). This equation is fully implicit, meaning it converges for every time scale no matter what, so it is pretty easy to add on as a step at the end. It is responsible for effects like making hills convex, beach slopes gentle, filling in small depressions, and creating new lakes (e.g. &quot;oxbow&quot; lakes) by blocking rivers with sediment.&lt;&#x2F;p&gt;
&lt;p&gt;We still use noise to influence uplift rates at each point, compose an initial continent shape, and control parameters to the erosion equations (such as rock strength and diffusion rate). We also still use noise heavily in the local generation of features, and for things like deciding on humidity and temperature maps; however, these things are also weighted by other factors (like altitude and flux). Over time, we hope to decrease the role of noise as we simulate more processes.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;648317020735143938&amp;#x2F;screenshot_1574641007838.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;mountain&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mountains off in the distance&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There are many more things left to simulate, but so far this has given Veloren very distinctive and realistic-feeling worldgen compared to a lot of procedurally generated worlds, especially those which render things at a fine enough scale that you can play in them in 3D. Just having rivers and lakes guaranteed to actually flow downhill and connect up globally makes a huge difference in feel, as does having ridges in mountains and gorged valleys.&lt;&#x2F;p&gt;
&lt;p&gt;With hillslope diffusion, we also have features like oxbow lakes and islands built up out of sediment (smoother than regular islands). As we add more processes, we will get more diverse terrain and more biomes, but we could also get that with hardcoded biome types or noise-based approaches.&lt;&#x2F;p&gt;
&lt;p&gt;The use of physical processes, however, results in terrain that is much more interesting and diverse by comparison. This is because it allows for the interaction of all these effects. It also means that the interesting terrain will be cohesive with its environment, which is often a stumbling block for biome-based or noise-based generation. Your shattered hills may look great, but where do you put them and why are they there?&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;647479114621648896&amp;#x2F;screenshot_1574441428637.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;loading-screen&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new loading screen by @Pfau. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;646518917577310219&#x2F;screenshot_1574211401431.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 42</title>
          <pubDate>Mon, 18 Nov 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-42/</link>
          <guid>https://veloren.net/blog/devblog-42/</guid>
          <description>&lt;p&gt;Welcome to TWiV 42, the only edition that comes with a towel included! This week look at the newly-created game design working group and improvements to CI. We also get some updates about authentication, asset compression, player creation, and a new song by @Aeronic.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @xMAC94x and @Zesterer!&lt;&#x2F;p&gt;
&lt;p&gt;@Acrimon has been continuing work on authentication by fixing bugs, as well as working on a Veloren video renderer. @AngelOnFira has been working on cross-compiling to Mac, as well as an RFC and discussions on moving VCS to GitHub. He has also been working on asset compression, which has resulted in a 50% decrease in the asset folder size.&lt;&#x2F;p&gt;
&lt;p&gt;@SrMizuki has been working on improving the player creation screen, see the image below. @Felixader created an Imgur gallery with their work, you can check that out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;UK3fplV&quot;&gt;here&lt;&#x2F;a&gt;. @Zesterer has just finished his work on clouds, but there will be a larger writeup on that next week.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;645973106032377856&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;creation&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The WIP character creation screen&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;verdant-glades-by-aeronic&quot;&gt;Verdant Glades by @Aeronic&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;646076577431552096&amp;#x2F;Verdant_Glades.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An exploration or village theme&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;ci-improvements-by-xmac94x&quot;&gt;CI Improvements by @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;The GitLab CI cache currently copies all residual build files into a .zip (2 GB compressed, 8 GB uncompressed) before and after every job. This kills CI performance, as Rust builds leave a lot of small files and many dependencies, which take longer to zip. With the new changes, we precompile Veloren while building our CI Docker image.&lt;&#x2F;p&gt;
&lt;p&gt;This cache will be saved under &lt;code&gt;&#x2F;dockercache&#x2F;veloren&#x2F;target&lt;&#x2F;code&gt; and we can make a symlink to that folder in the &lt;code&gt;.gitlab-ci.yml&lt;&#x2F;code&gt; file. That way we can reuse the cache and we don&#x27;t need to copy stuff. Docker is quite quick to start up the container with this cache.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;644579675741356042&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;moon&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Zesterer has created Moon&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We can have multiple runners going at once, compiling different branches, because Docker handles the storage completely. There is no shared storage between them. However we have a huge disadvantage, the cache doesn&#x27;t get updated. This means the cache is the same every time it builds. So we don&#x27;t get any advantages of Rust incremental builds between Docker image builds. When we want to update the cache, we need to create a new Docker image.&lt;&#x2F;p&gt;
&lt;p&gt;However, I would expect a weekly run to be viable. This should be an overnight image build, as it takes 40 min on an 8 core Ryzen 1700X. Even if it took 3 hours it wouldn&#x27;t be a problem.&lt;&#x2F;p&gt;
&lt;p&gt;The new system can compile all jobs in a merge-to-master pipeline version in 32 minutes on a single runner compared to over 2 hours on the previous system.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;new-game-design-working-group&quot;&gt;New Game Design Working Group&lt;&#x2F;h3&gt;
&lt;p&gt;This week, a new working group was created for game design! @Silentium is the team lead and has been working hard the last few weeks to get design frameworks in place.&lt;&#x2F;p&gt;
&lt;p&gt;Two weeks ago, a design meeting was held for character stats. The process is to write a Google Doc during the meeting, and then move it to the design repo on GitLab as an RFC. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1_vy-UEngZTrYHHIwF3ZMGecInEi0o334mclksvObO10&#x2F;edit?usp=drivesdk&quot;&gt;Here is a link&lt;&#x2F;a&gt; to the doc, and here is the description of the topic:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The idea for this system is to create a few stats that combat is concerned with. That isn&#x27;t to say that other systems outside combat shouldn&#x27;t have anything to do with these stats, and there should definitely be more stats than this in the game, but for combat purposes, these are a few stats that we might want to consider.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This past weekend, another meeting was held about damage types. You can check it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1g0kIr_hyo-b7WJFb-pxc5R4MU7Ns_Coxz6I29EL4qTo&#x2F;edit&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;646104765884923925&amp;#x2F;bg_main.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;cloudy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It&amp;#x27;s a cloudy night tonight. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;645962072143691786&#x2F;screenshot_1574079543108.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 41</title>
          <pubDate>Mon, 11 Nov 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-41/</link>
          <guid>https://veloren.net/blog/devblog-41/</guid>
          <description>&lt;p&gt;This week, we have lots of contributor work. A new Veloren video, some excerpts from Danari lore, and updates on Airshipper. We also just recently passed 50,000 lines of code on Veloren! The Rust GameDev Working Group also just released their October newsletter.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Shandley, @Qwertycrackers, @Timo, @Pfau, @Acrimon, @AngelOnFira, @AdamWhitehurst, @xMAC94x, @soruh, and @Slipped!&lt;&#x2F;p&gt;
&lt;p&gt;We recently just passed 50,000 lines of code in the main Veloren repository! This is according to Tokei, so some strings may be attached :P Also, This Month in Rust GameDev #3 was just released. Be sure &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;2019&#x2F;11&#x2F;07&#x2F;newsletter-003.html&quot;&gt;to check it out&lt;&#x2F;a&gt; to see what&#x27;s going on in the Rust GameDev community!&lt;&#x2F;p&gt;
&lt;p&gt;@Songtronix and @Acrimon have been hard at work getting the authentication site working. It&#x27;s almost ready, and will allow for user authentication in a few weeks!&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;IIl271iDulY&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A new Veloren video by @DoNeo and @RonVal4! It&amp;#x27;s geared for the Russian community, but there are English subtitles as well.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;&lt;h3 id=&quot;first-steps-by-aeronic&quot;&gt;First Steps by @Aeronic&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;643099066854670336&amp;#x2F;First_Steps.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A piece that might play during character creation&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;airshipper-0-1-1&quot;&gt;Airshipper 0.1.1&lt;&#x2F;h3&gt;
&lt;p&gt;Airshipper is now a little bit better! With the launcher, you&#x27;ll be able to install Veloren&#x27;s latest nightly. The launcher is still in Alpha, and there is a lot of work to be done on it. Here is the changelog for this version:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Airshipper won&amp;#39;t close the window if an error occurred so you have time to read it.
&lt;&#x2F;span&gt;&lt;span&gt;- Downloading the Linux version of Veloren will now end with .tar.gz, as suggested by Timo.
&lt;&#x2F;span&gt;&lt;span&gt;- The installer will now allow you to create a desktop shortcut and customize where
&lt;&#x2F;span&gt;&lt;span&gt;the game data will be stored, as suggested by Pfau. (experimental)
&lt;&#x2F;span&gt;&lt;span&gt;- Default location of game data will be %appdata%&#x2F;veloren
&lt;&#x2F;span&gt;&lt;span&gt;- Website (https:&#x2F;&#x2F;www.songtronix.com&#x2F;) now links to our social media and improved SEO
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;643102462781423616&amp;#x2F;screenshot_1573397958545.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;hair&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Several new male hairstyles have been added by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;writing-update-by-felixader&quot;&gt;Writing Update by @Felixader&lt;&#x2F;h3&gt;
&lt;p&gt;@Felixader has been continuing work on the lore of races and cultures. He just finished the Danari lore. Here is an excerpt:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;When the Velvet Black Army came to Veloren, the danari had long been the bureaucratic backbone of The Velvet Black Army. By then their entire culture had served the Velvet Black for so long that their home country was a distant memory. The ideal that bound their people to the Velvet Black Master was the vision that one strong leader could unite all peoples and lead to a final and everlasting peace.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The long, drawn-out war against Dwarves and Elves that taxed the Velvet Black Army damaged that vision. Veloren&#x27;s people held steadfastly and solidly over decades even as they lost battles every day. Unaccustomed to a difficult battle their leader became unbearable, even for them. As their master&#x27;s impatience grew to cruelty, the danari were the first to see his true nature.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;It took a while since the vision for universal peace through conquest was so integral to the danari’s view of themselves. But behind the curtains of the Velvet Black Court, the danari decided after many meetings and council sessions to act.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;643101530546765834&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;palms&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;WIP palms by @Slipped&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;You can take a look at the Danari lore and lots of other writing &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1WGacLASLkz24l5WDJ8nCe7ONIYTy_5iQoAl5oVsEM_o&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;. The next steps are going to be race&#x2F;culture relations and motivations as they are at the time when the player enters Veloren. In the short term for 0.5, here are some of the plans:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Around 50 artifacts to find and fill a collection book. This will motivate players in 0.5 to
&lt;&#x2F;span&gt;&lt;span&gt;explore the world. Additional to this task:
&lt;&#x2F;span&gt;&lt;span&gt;- Making the symbols in form of pixel art for in the inventory
&lt;&#x2F;span&gt;&lt;span&gt;- Adding lore text to the artifacts.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And for the longer term:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- Constructing various quests, with phases that outline possible Quest task.
&lt;&#x2F;span&gt;&lt;span&gt;- Relating how some of those quests could play into the faction simulation.
&lt;&#x2F;span&gt;&lt;span&gt;- Constructing various quests that are directly related to the faction simulation,
&lt;&#x2F;span&gt;&lt;span&gt;with phases that outline possible quest tasks.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;images&amp;#x2F;blog&amp;#x2F;devblog-41&amp;#x2F;20191110_154902.jpg&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Felixader working on a relations chart for factions in Veloren&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;643102827681677342&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;You now start the game with a little breakfast in your pocket! See you next week :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;643034796548947968&#x2F;screenshot_1573381825305.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 40</title>
          <pubDate>Mon, 04 Nov 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-40/</link>
          <guid>https://veloren.net/blog/devblog-40/</guid>
          <description>&lt;p&gt;This week we have a small blog. To account for this, we have a large gallery section that shows off some neat screenshots in-game. We also take a look at the player survey for a second time, analyzing the interest in certain systems. We also hear a bit about the first design meeting.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Acrimon, @xMAC94x, @Pfau, @Soruh, @Zesterer!&lt;&#x2F;p&gt;
&lt;p&gt;This week has been quite slow on updates, lots of the work is behind the scenes. @Timo and @Daddy Demon are working on adding a lot of new weapons to Veloren. Combat met for a design meeting this week, and it was the first time that the new design process was followed. There will be work in the upcoming weeks to refine this process and improve the design RFC system. This is being headed up by @Silentium. You can check out the combat design overview &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1YGKIY5-NEnl_P39KjxJLZoGRQWNB0X970-rPADBO7BM&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;640522609661968394&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;water&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New water shader by @Zesterer. Left is the old shader, right is the new. Pic by @Treeco&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;639919039317016607&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;login&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New login information&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;640570480839098369&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;weapon&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New weapons that @Timo and @Daddy Demon are working on&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;player-survey-part-2&quot;&gt;Player survey part 2&lt;&#x2F;h2&gt;
&lt;p&gt;A few weeks ago, we had a survey that we send out about Veloren. We already went over some of the results &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;devblog-36&quot;&gt;here&lt;&#x2F;a&gt;. We got lots of other information that we didn&#x27;t cover there, so let&#x27;s look at some more of it!&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;636383398406914058&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;636384150999400459&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;636384004567859220&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;What do you want Veloren developers to focus on? Blue is less interested and increases to purple, which represents high importance to the community.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;This question gave a lot of data. Three main categories were quite clear, combat, exploration, and progression. It makes sense that these stand out as they have been pillars of Veloren&#x27;s development up until now.&lt;&#x2F;p&gt;
&lt;p&gt;The rest of the categories are quite similar. There are still some other indicators we can see through. Specifically, what had the least importance. These were survival, building, and story. Now, these are topics that we have big ideas for. But the implication of the survey suggests that it is not what needs to be focused on to get people interested in Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;We can compare this to some of the results on what the community is looking most forward to:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;641723631952723979&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As we can see, there are still high results for PvE (combat) and exploration. It&#x27;s still interesting to see how little of a focus there is on PvP. &quot;Getting around&quot; also has quite a high score. This is a system that the dev team is quite inspired by, so much so that the install tool for Veloren is called &quot;AirShipper&quot; :P&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;641724508738158600&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, we take a look at the most important systems to have prepared for a 1.0 release. This insight will help us scope the roadmap a little more. Again, we see combat and progression as important tasks. The item system and animation are following up. These are systems that are being improved at the moment. NPC AI will have to be looked into, as the current system is quite primitive.&lt;&#x2F;p&gt;
&lt;p&gt;The results of the survey have allowed the dev team to get a better idea of what will get the community interested in Veloren&#x27;s gameplay instead of the tech demo it currently is. In the next survey analysis, we&#x27;ll take a look at some of the individual unique responses.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gallery&quot;&gt;Gallery&lt;&#x2F;h2&gt;
&lt;p&gt;Since we don&#x27;t have a ton of content to read this week, let&#x27;s check out some cool screenshots!&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;638731902198743050&amp;#x2F;screenshot_1572355812991.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;640311797131378688&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;640312193207894033&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;641240747181473802&amp;#x2F;screenshot_1572953979661.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;641287634546851862&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;641291542429958167&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;s all for this week, see you soon!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;640537991244414976&#x2F;screenshot_1572786538932.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 39</title>
          <pubDate>Mon, 28 Oct 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-39/</link>
          <guid>https://veloren.net/blog/devblog-39/</guid>
          <description>&lt;p&gt;This week we discuss the 0.5 intro meeting that occurred last weekend. Some topics include design meetings and the Liberapay plan of action. We also stop in with @imbris, who shows off some new optimizations with caching, as well as a bug that prevented spawned objects from being shown.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @imbris, @Slipped, @Timo, @Acrimon, @Pfau, @Songtronix, @soruh, @pestilence, @xMAC94x, and @LunarEclipse!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;638360896124485639&amp;#x2F;SPOILER_Screenshot_2019-10-28_Veloren_-_Account.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;login-website&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The first design iteration for Veloren&amp;#x27;s login website&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Songtronix has been working on testing and fixes for Airshipper, which is slated for release soon. @SrMizuki is working on general user interface improvements to try and find a balance between functionality, design, and user experience.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;wqZvH_ULIj0&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;A positive message from @Lulu!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Soruh has been working on upgrading dependencies to get rid of security issues from RUSTSEC. @AngelOnFira has been working on getting a MacOSX target set up. This has proven to be quite difficult, but it will allow CI to automatically build Mac executables.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;638418360375312454&amp;#x2F;Axolotl.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;axolotls&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some variations of axolotl by @Axolotl&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;optimizations-by-imbris&quot;&gt;Optimizations by @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;Time for a mini flame graph story. I hadn&#x27;t run a flame graph recently and there had been some improvements to meshing speed among other changes to the engine. I was curious about what the current flame graph would look like, so I gave it a go. The result showed that meshing was still a huge chunk of the flame graph, especially now that I could crank the view distance up past 25.&lt;&#x2F;p&gt;
&lt;p&gt;Taking another look at it, I discovered there was a portion of the code doing lookups into the volume that didn&#x27;t use the cached access that I had previously added. It caches the last accessed chunk to prevent a hash map lookup for every block since most will be in the same chunk. The code of interest looked up adjacent blocks to determine which faces were exposed and thus needed to be meshed.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;user-content.gitlab-static.net&amp;#x2F;bef1ec1fb80fcae5c50776189734dd03ae45bb69&amp;#x2F;68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3436373037333831343230383035333234382f3633363831303439303136343637343537332f756e6b6e6f776e2e706e67&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;flamegraph&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For a moment I considered using the caching here as well. However, the color smoothing was already accessing all the adjacent blocks which I took advantage of essentially removing redundant block accesses. Now the main bottleneck is the lighting flood calculations which is slated to be moved out of meshing entirely. For more information, check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;merge_requests&#x2F;625&quot;&gt;!625&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;object-spawn-bug-by-imbris&quot;&gt;Object Spawn Bug by @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;Here&#x27;s what happens when the client sends the &lt;code&gt;&#x2F;object chair&lt;&#x2F;code&gt; chat command. For context, the server communication with clients was moved into the ECS systems. The relevant server code looks like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; 3) Handle inputs from clients
&lt;&#x2F;span&gt;&lt;span&gt;frontend_events.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle_new_connections&lt;&#x2F;span&gt;&lt;span&gt;()?);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Handle game events
&lt;&#x2F;span&gt;&lt;span&gt;frontend_events.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;handle_events&lt;&#x2F;span&gt;&lt;span&gt;());
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; before_tick_4 = Instant::now();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; 4) Tick the client&amp;#39;s LocalState.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;tick&lt;&#x2F;span&gt;&lt;span&gt;(dt, sys::add_server_systems);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Tick the world
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.world.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;tick&lt;&#x2F;span&gt;&lt;span&gt;(dt);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; 5) Fetch any generated `TerrainChunk`s and insert them into the terrain.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; in sys&#x2F;terrain.rs
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; before_tick_6 = Instant::now();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; 6) Synchronise clients with the new state of the world.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; TODO: Remove sphynx
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; Sync &amp;#39;logical&amp;#39; state using Sphynx.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; sync_package = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;ecs_mut&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;next_sync_package&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;notify_registered_clients&lt;&#x2F;span&gt;&lt;span&gt;(ServerMsg::EcsSync(sync_package));
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;During &lt;code&gt;state.tick()&lt;&#x2F;code&gt; one of the systems, &lt;code&gt;message&lt;&#x2F;code&gt;, receives messages from clients. When it gets this chat command, it pushes it onto the server-side event bus. So our &lt;code&gt;&#x2F;object chair&lt;&#x2F;code&gt; commend is pushed onto this bus. But where does it get handled? In &lt;code&gt;self.handle_events()&lt;&#x2F;code&gt;, which occurs before &lt;code&gt;state.tick()&lt;&#x2F;code&gt;. This means we wait until the next tick to handle the chat command. This might introduce some latency but logically we are good so far. Now the next tick arrives and a chair entity is assembled and inserted into the world inside of &lt;code&gt;self.handle_events()&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;shimox.s-ul.eu&amp;#x2F;wOv0n69U&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;rat&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rat&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now we get to &lt;code&gt;state.tick()&lt;&#x2F;code&gt;. At this point, the ECS systems are run including the &lt;code&gt;entity_sync&lt;&#x2F;code&gt; system which is responsible for sending physics updates to the clients. This includes the &lt;code&gt;Pos&lt;&#x2F;code&gt;, &lt;code&gt;Vel&lt;&#x2F;code&gt;, and &lt;code&gt;Ori&lt;&#x2F;code&gt; components. It happily does this, since the chair has no &lt;code&gt;Last&amp;lt;Pos&#x2F;Vel&#x2F;Ori&amp;gt;&lt;&#x2F;code&gt; components, which are used to track whether an update needs to be sent. The client then receives this information and processes it in a &lt;code&gt;match&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;ServerMsg::EntityPos { entity, pos } =&amp;gt; {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Some(entity) = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;ecs&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;entity_from_uid&lt;&#x2F;span&gt;&lt;span&gt;(entity) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;write_component&lt;&#x2F;span&gt;&lt;span&gt;(entity, pos);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;ServerMsg::EntityVel { entity, vel } =&amp;gt; {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Some(entity) = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;ecs&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;entity_from_uid&lt;&#x2F;span&gt;&lt;span&gt;(entity) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;write_component&lt;&#x2F;span&gt;&lt;span&gt;(entity, vel);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;ServerMsg::EntityOri { entity, ori } =&amp;gt; {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if let &lt;&#x2F;span&gt;&lt;span&gt;Some(entity) = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;ecs&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;entity_from_uid&lt;&#x2F;span&gt;&lt;span&gt;(entity) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;write_component&lt;&#x2F;span&gt;&lt;span&gt;(entity, ori);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The client then promptly converts the UID to its associated entity and uses that to insert the received value e.g. the position... or does it? In reality, the client doesn&#x27;t know this entity exists and so it just throws out this information since &lt;code&gt;entity_from_uid()&lt;&#x2F;code&gt; returns &lt;code&gt;None&lt;&#x2F;code&gt;. Meanwhile, the server keeps going through the current tick, all the way to:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.state.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;notify_registered_clients&lt;&#x2F;span&gt;&lt;span&gt;(ServerMsg::EcsSync(sync_package))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here, sphynx bundles up all the information it manages, like new entities! And that is sent to the client. So our client receives this and a positionless (effectively invisible) chair is created on the client&#x27;s side. And because that chair never moves the server won&#x27;t waste network bandwidth sending its position again.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;637159625791242240&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;chair&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The evasive chair, at long last&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;0-5-intro-meeting&quot;&gt;0.5 Intro Meeting&lt;&#x2F;h2&gt;
&lt;p&gt;Last weekend, we met up to discuss what we were going to achieve in 0.5. Each team lead also gave a rundown on what they had worked on during 0.4, and their goals for 0.5.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;638082941599088641&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;meeting&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The meeting attendees list keeps getting longer!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Silentium and @AngelOnFira are working on working on coming up with a better process to make design decisions. The process focuses on regular design meetings and request for comments (RFC). A design meeting will consist of discussion on a specific topic, with a moderator to keep the conversation in scope. This meeting will produce an RFC document, which will be added to the Veloren RFC repo.&lt;&#x2F;p&gt;
&lt;p&gt;Anyone will be able to discuss the RFC in the comment section. Once everyone has been able to voice their opinion, a selected few will sign off on the RFC, and it will be added to the MDBook. The MDBook will be an accessible collection of all finalized design ideas. Since the MDBook only includes finalized ideas, it will be easier for external parties as well as contributors to understand Veloren&#x27;s design. For more information on the process, take a look at the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1zuEHW2ZSyVAkR7_KVA2pvk_BiuDkhxwMcgFCnE4kXqw&#x2F;edit?usp=sharing&quot;&gt;WIP document&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;638445717668495390&amp;#x2F;screenshot_1572287665343.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;river&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Down by the riverside&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Although a formal description for 0.5 has not been written yet, some initial ideas were brainstormed for what the release could include;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;- More player combat design in the game, multiple skills, more weapons. Individual behaviors, left click is different on sword and axe
&lt;&#x2F;span&gt;&lt;span&gt;- Skills with buttons on the keyboard
&lt;&#x2F;span&gt;&lt;span&gt;- Some effects from the skills.
&lt;&#x2F;span&gt;&lt;span&gt;- Integrating this with levels and XP, so that people have reasons to progress.
&lt;&#x2F;span&gt;&lt;span&gt;- Make NPCs drop stuff
&lt;&#x2F;span&gt;&lt;span&gt;- Crafting
&lt;&#x2F;span&gt;&lt;span&gt;- Fishing action
&lt;&#x2F;span&gt;&lt;span&gt;- Initial implementation to prehistory simulation
&lt;&#x2F;span&gt;&lt;span&gt;- Initial implementation of real-time simulation
&lt;&#x2F;span&gt;&lt;span&gt;- Have NPC AI hook into the realtime simulation
&lt;&#x2F;span&gt;&lt;span&gt;- Rework towns and populate them
&lt;&#x2F;span&gt;&lt;span&gt;- Have some basic trade&#x2F;reputation mechanics
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The release date of 0.5 has been moved forward to sometime in January rather than the beginning of December. Since 0.4 was released partly into October, contributors would have been stressed on time to get new content ready for 0.5. On top of that, since many contributors are in school, progress is made a bit more slowly. The new release date is still being figured out, but it will be at least a week into January. This will hopefully allow for a healthy code freeze period right after the new year.&lt;&#x2F;p&gt;
&lt;p&gt;Liberapay was also a big topic during this meeting. The core team is working on setting up a crowdfunding model for Veloren. It is important to note that this model is incredibly experimental. Many tweaks will be made, and the logistic setup of the process is still ongoing. This model would follow three phases:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;# Phase 1
&lt;&#x2F;span&gt;&lt;span&gt;- Anyone can donate, but not advertised as much
&lt;&#x2F;span&gt;&lt;span&gt;- Money only goes to official infrastructure, rest is saved for Phase 2
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;# Phase 2
&lt;&#x2F;span&gt;&lt;span&gt;- Anyone can donate
&lt;&#x2F;span&gt;&lt;span&gt;- Infrastructure costs have the highest priority
&lt;&#x2F;span&gt;&lt;span&gt;- The remainder is distributed into each working group by the leads
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;# Phase 3
&lt;&#x2F;span&gt;&lt;span&gt;- Anyone can donate
&lt;&#x2F;span&gt;&lt;span&gt;- Infrastructure costs have the highest priority
&lt;&#x2F;span&gt;&lt;span&gt;- Process of remainder usage is refined depending on the outcome of Phase 2
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For more information about the meeting, you can take a look at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1bjH88F1ApGjG65evdjZeTnpHK8Vc8NjHB5m7MS9XVHw&#x2F;edit?usp=sharing&quot;&gt;the meeting minutes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;638104128043876392&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;end&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;That&amp;#x27;s all for this week. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;637022419441418240&#x2F;Capture.PNG" type="image/PNG"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 38</title>
          <pubDate>Mon, 21 Oct 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-38/</link>
          <guid>https://veloren.net/blog/devblog-38/</guid>
          <description>&lt;p&gt;Small blog this week. With the team still recovering from the 0.4 release, bigger changes are starting to come along. @Sharp talks about some of the future work with rivers and undertow. @DoNeo and @RonVal4 have started a Russian Veloren community.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Songtronix, @Zesterer, @lawtonfogle, @shandley, @Sharp, and @Pfau!&lt;&#x2F;p&gt;
&lt;p&gt;@Felixader has been continuing work on Veloren lore. They finished the undead protectorate lore and based on this, added a better reason why the Orc tribes are split in two. @Songtronix is almost ready to release Airshipper! In the way Airshipper is currently implemented, you will be able to create profiles where you can set a name, a channel (release, nightly) with their own voxygen config. This will be useful when mod support comes up, so that you can easily switch between enabled mods.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;635459640955764745&amp;#x2F;Panda_friend.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;panda&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A panda model made in tribute to @Lulu&amp;#x27;s positivity on the Discord server&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@DoNeo and @RonVal4 have been working on setting up a Russian community for Veloren. You can check it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vk.com&#x2F;veloren&quot;&gt;here&lt;&#x2F;a&gt;. They are working to translate the blog and bridge the language gap for the purely Russian community. They have also been working on creating some models for the game.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rivers-update-by-sharp&quot;&gt;Rivers update by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;Lakes, rivers, and erosion were merged! World generation is now dramatically different from before, with much more terrain variety, and consequently more memorable locations. It also has large-scale geographic features, such as plains, lakes, and mountains that extend for many square kilometers, as well as rivers that span more than half the map.&lt;&#x2F;p&gt;
&lt;p&gt;Note that this makes worldgen take much longer as it is simulating 12.5 million years of erosion. So if singleplayer seems not to be working after you click the button, just wait for it to finish. It usually takes a minute or two. We will soon be adding a loading screen and the ability to cancel singleplayer early to make this more obvious to players.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;635907156243120148&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;rivers&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;ve been working on adding somewhat physically realistic river undertow so river flow properly affects characters and items when submerged. This also requires solving river self-intersections, to give the rivers an impact on gameplay beyond their effect on world generation. On my branch, we are already properly transferring over river velocities and having them push around a player, so the remaining work is mostly little tweaks to make the velocities nicer and apply the drag equations more effectively (I will probably not add lift yet, but we&#x27;ll see!). Once these are solved, the next step will be modifying the river renderer to also reflect the flow direction at each point (I might also work on this concurrently).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;634860358623821835&amp;#x2F;634897828430479380&amp;#x2F;screenshot_1571441821485.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The sun sets for this week. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;634860358623821835&#x2F;635926180993957899&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 37</title>
          <pubDate>Mon, 14 Oct 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-37/</link>
          <guid>https://veloren.net/blog/devblog-37/</guid>
          <description>&lt;p&gt;This week, we released 0.4! We hear back from @Vercidium with another graphics analysis. We also take a look at the server usage from the launch party, as we had over 40 players connected at once. There has also been a lot of work done for asset creation.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Timo, @KyoZM, @Acrimon, @AngelOnFira, @xMAC94x, @imbris, @Zesterer, @Pfau and @lfauvel!&lt;&#x2F;p&gt;
&lt;p&gt;Many artists have been working on weapon models this week. @Jollyfish, @Duko, @Shimox, and @Silentium were some of the many to do this. We&#x27;ve also had many other artists working on other components, such as @gallostrart and @Zornithorinque working on trees, and @Lawtonfogle working on hot loading armor.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;633121566129127424&amp;#x2F;Weapon_Collection_2.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;jolly-weapons&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;More weapons by @Jollyfish&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Felixader has been keeping up with expanding lore, this week was about the background of orcs. @Sharp has just completed their river, lake, and erosion work. This is in the process of getting reviewed, and should be merged in the next few days! @Zesterer and @Sharp have been in talks about world simulation, and there will likely be groundwork done on this in the next few days. @Zesterer also worked on lots of improvements and cleaning up the code. @Qutrin is working on implementing stat points to give your character benefits, such as health or weapon damage.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;render-analysis-2-by-vercidium&quot;&gt;Render Analysis #2 by @Vercidium&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve been asked by Yuri to analyse the game&#x27;s performance again so here we go :)&lt;&#x2F;p&gt;
&lt;p&gt;I had 60 FPS while playing the game for a couple minutes and all seemed good, but then it dropped to 30 FPS. I captured a single frame and noticed there were still large gaps in the rendering pipeline where the CPU wasn&#x27;t sending any work to the GPU (see the red lines on the image). I think this is still caused by GFX though.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;630200222500388885&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The map was taking 13.82ms to render and the water was taking 16.15ms to render, but I hadn&#x27;t seen any water yet. After restarting the game I was running at 60 FPS again, however there were still gaps in the pipeline:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;630202270520180737&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;m not sure how the water shader works but it seems like it&#x27;s not doing any work at all. After finding some water and analyzing the telemetry, I wasn&#x27;t sure why 519372 water vertices were being rendered. Especially since the shader looked like it was just creating flat triangles. The shader appears to be spending 62.65% of the time doing nothing. I&#x27;d recommend aligning water chunks to map chunks and only rendering the water chunk if that map chunk is rendered (frustum culling).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;630210783296618496&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The map is still drawn in a random order with no frustum culling. Frustum culling is a must! There are a lot of chunks completely outside the view that are still being drawn. There were 162 chunks rendered that didn&#x27;t end up on the screen. On top of that, there were 1175 rendering calls (mostly water) that didn&#x27;t end up rendering any colour pixels to the screen. This is because there are lots of water rendering calls that are asking the GPU to draw 0 triangles.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;630215761591271485&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Map rendering at 25 view distance spends 19.75% of the time doing nothing on the GPU. I think that&#x27;s still a GFX issue but damn 6.7 million vertices per frame is a lot. Top limiting factor in the rendering pipeline is Viewport Culling at 33.9%, followed by Vertex Attribute Fetch (loading a bazillion triangles) at 30.2%. Rendering the chunks is quite fast with SM Active is at 62.2, it&#x27;s just that there&#x27;s a lot of fluff GFX does (16726 redundant OpenGL calls a frame) before it actually tells the GPU to render the chunk.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;630217304373854218&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;That&#x27;s all from me, I hope it helps!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;launch-party&quot;&gt;Launch party&lt;&#x2F;h2&gt;
&lt;p&gt;This week, we officially released 0.4!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to all of the great contributors to this version, @Zesterer, @Timo, @imbris, @Acrimon, @Sharp, @Destinghim, @Slipped, @AngelOnFira, @Pfau, @Geno, @scott-c, @haslersn, @Qutrin, @Vechro, @xMAC94x, @KyoZM, @Andrewpritchard, @Songtronix, @Shanehandley, @telastrus, @christofferlantz, @stevedagiraffe, @Vercidium, @Demonic, @tommy, @arashout, @nick12, @lfauvel, @wusyong, @cauthmann, @yashaslokesh, @artem, @carbonhell, @appcrashwin7, @LunarEclipse, and @keller! Also thanks to everyone else who added something of their own to Veloren, the community is really what pushes this project forward :)&lt;&#x2F;p&gt;
&lt;p&gt;The launch party went great, with over 40 people joining at its peak. With over 3000 people in the Discord server now, we reach a lot more people with @everyone :P You might have noticed that the download link was through Airshipper. Although future versions of Airshipper will have clients that you can install on your computer, you can rely on this link to get you the latest version for now.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;633872080042983434&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;tick&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;633872510836015124&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;cpu&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Now let&#x27;s take a look at some of the server graphs! Above you can see the tick time broken down, as well as the CPU task parallelization. For the launch party, we specifically reserved a powerful server to make sure our load would be handled. Turns out it was more than handled.&lt;&#x2F;p&gt;
&lt;p&gt;The server used was an AWS EC2 instance, c5.9xlarge. This instance has 36 vCPUs, which have 141 ECU of compute power. It also has 72 GB of ram, but we were really not limited here. The instance cost ~$1.8 CAD an hour, however the real cost was from bandwidth, more to come on this below.&lt;&#x2F;p&gt;
&lt;p&gt;As you can see in the CPU usage graph, we were using around 20% of the server&#x27;s compute capacity with the 40 players. Projections would show that we should be able to handle at least four times the number of players. Maybe more depending on the standard overhead that the Veloren server has.&lt;&#x2F;p&gt;
&lt;p&gt;




&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;633871925734670378&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;players&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;633872356057808906&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;chunk&quot;
    &gt;
  
&lt;&#x2F;figure&gt;






&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;633872252881993778&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;mem&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Above you can see graphs of the players on the server, and the number of chunks loaded, and the memory usage of the server over time. The number of chunks grew over time as players explored further away from spawn. The memory usage also increased quite proportionally to the number of chunks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;540224034412036099&amp;#x2F;631906648264540181&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;network&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The real killer of the launch party was the bandwidth. At it&#x27;s peak, the server was sending out about 50 MB&#x2F;s, or 400 megabits per second. That equated to around 1 megabyte per second for each player. This will have to be a domain of heavy work in the next few versions. Over the entire launch party, 110 GB of data was sent out from the server. AWS really charges hard for bandwidth use, and so this incurred a cost of ~$8 CAD alone. In the future, we&#x27;ll likely host through a different service.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;631909872526688257&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@AngelOnFira getting content for the devblog. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;633170795862163485&#x2F;screenshot_1571028502893.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 36</title>
          <pubDate>Mon, 07 Oct 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-36/</link>
          <guid>https://veloren.net/blog/devblog-36/</guid>
          <description>&lt;!-- TODO alt=&quot;new-title&quot;, caption=&quot;The new title screen for 0.4, created by @Pfau&quot; --&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Timo, @AngelOnFira, @Acrimon, @KyoZM, @Songtronix, @stevedagiraffe, @shanehandley, @Pfau, @Qutrin, @Nick12, @Slipped, @Zesterer, @appcrashwin7, @LunarEclipse, @haslersn, @Wuyuwei, and @keller!&lt;&#x2F;p&gt;
&lt;p&gt;This month we&#x27;re featured front and center of &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-gamedev.github.io&#x2F;2019&#x2F;10&#x2F;05&#x2F;newsletter-002.html&quot;&gt;This Month in Rust GameDev&lt;&#x2F;a&gt;! Be sure to check this blog out, there is a lot of other great work being done in the Rust gamedev community :) We&#x27;re also right on the verge of our 0.4 release, and were working to squash all the bugs we can. Expect a new version this time next week!&lt;&#x2F;p&gt;
&lt;p&gt;Here is a new video highlighting different structures in Veloren.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;iwP7SXdWcTg&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;
&lt;p&gt;With 0.4 approaching quickly, the core team has been hard at work fixing bugs. One of the primary goals is to fix problems that prevent players from opening the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;630188264434696222&amp;#x2F;collection2.jpg&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;jolly-weapons&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Jollyfish&amp;#x27;s weapon creations&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Songtronix has been continuing work on Airshipper and also fixing Discord Rich Presence and Torvus. @Qutrin worked on giving enemies levels when they spawn and displaying it on their nametags. @shandley has been working on audio tweaks. @Pfau started working on the UI component of a map. There is still a ton of work to go on this front.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;630126839683219466&amp;#x2F;screenshot_1570304312795.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;qutrin-level&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Qutrin&amp;#x27;s new enemy level work&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We&#x27;ve seen a ton of new contributors come in this week, and start working on great stuff! @Jollyfish is working on a large assortment of weapons, mostly varieties of polearms. @Felixader is working on bringing writing back, as they expand the background lore of elves and dwarves. @Argoplantus has been having lots of discussions that focused around system proposals. @Shimox has worked on creating variants for log mobs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;630127247600123924&amp;#x2F;log_body_variants.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;shimox-log&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Shimox&amp;#x27;s log mobs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;erosion-and-rivers-by-sharp&quot;&gt;Erosion and Rivers by @Sharp&lt;&#x2F;h3&gt;
&lt;p&gt;In games or as a sort of core for research purposes, the usual way people do erosion is as follows. Approximate your surface as a height map consisting of a series of points with associated altitudes. In Veloren, we approximate each map chunk as a &quot;point&quot;. For each point, figure out the neighboring point most downhill of it, and call that the point&#x27;s receiver. Repeat this until you have a directed and acyclic forest of nodes pointing to your &quot;boundary&quot;. The boundary is comprised of the nodes at the edge of the map that aren&#x27;t expected to have a downhill, usually the ocean.&lt;&#x2F;p&gt;
&lt;p&gt;This graph models river flow using the core assumption of all of these models: water flows along the shortest path downhill until it hits the ocean. Now, reverse the graph. Starting from points that have no incoming flows, for each point, we compute the approximate average rainfall times of the area of the point. Remember, these points represent a surface, in Veloren&#x27;s case a chunk. This is your volumetric flux, or some parameter related to it. Volumetric flux is the rate of water coming out of the point per unit time.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;629830173579018250&amp;#x2F;screenshot_1570233444121.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;3-rivers&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Three rivers converging&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As you traverse the reversed graph, you take the sum of all the flux coming into each point, plus the water the point receives naturally, and call that its &quot;drainage&quot;. This represents the total amount of water that ends up flowing into each point. We also can take this opportunity to try to calculate a slope from this point to its receiver, which is the approximate slope that the water will flow downhill on.&lt;&#x2F;p&gt;
&lt;p&gt;Now, we take all this information and dump it into an empirical formula called the stream power equation. This is intended to model the shear stress of water flowing over a surface per unit time. It relates drainage, slope, and some magic constants. It tells you the expected change in height per unit time from water flowing over the point. You run this on all your points, and that constitutes an iteration of erosion--water flattening out the slopes it runs over. In general, the higher the flux and the higher the slope, the more pressure is exerted. This is one of the reasons why rivers tend to run down high slope areas and make them flat.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s the basic version of erosion. But you&#x27;ll note that there&#x27;s a problem here: when rivers hit a local depression they stop in this model. A local depression is a point with no other downhill points that aren&#x27;t on our boundary, for example, a lake. This means that this erosion equation can&#x27;t get rid of depressions, even though it can introduce them.
Furthermore, since we&#x27;re only running erosion in this model and not other geological processes, the more iterations you run, the lower and flatter your land will become.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;630255449467387904&amp;#x2F;screenshot_1570334879354.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;river lake&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A small river feeding into a lake&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So if you run it too many times or at too high a delta t, you will end up with a completely flat and uninteresting landscape. So, the above system is kind of limited. It should be stressed that this model is perfectly fine in some circumstances, and it is used by most games that do erosion, which is already a pretty advanced thing for a game to do.&lt;&#x2F;p&gt;
&lt;p&gt;The system also has a lot of trouble generating interesting terrain by itself. It&#x27;s better at more realistically shaping previously existing interesting terrain. To fix the &quot;rivers stop at lakes&quot; problem, people either make special maps that always flow downhill by construction. For instance, the most popular blog about this, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www-cs-students.stanford.edu&#x2F;~amitp&#x2F;game-programming&#x2F;polygon-map-generation&#x2F;&quot;&gt;Red Blob Games&lt;&#x2F;a&gt;, has a map where altitude always increases towards the center. So many games that have erosion and copied this article&#x27;s approach and have a single mountain on an island. Either that or run one of several algorithms that fill in all depressions on a heightmap before running each iteration. You can see an example of that &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;mewo2.com&#x2F;notes&#x2F;terrain&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;fill in depressions&quot; method sort of works, but it has two disadvantages:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It completely removes lakes from your map. This is why you may notice that when people talk about using this method in games and want lakes, they often just have lakes there from the start.&lt;&#x2F;li&gt;
&lt;li&gt;It is slow compared to the other steps, the best-known algorithms for drainage filling are O(n^1.5). So this even further limits how many iterations can be run.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;631209513336438794&amp;#x2F;screenshot_1570562280617.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;rivers&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Rivers running through the region&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So, what do we do? It turns out that we are not exactly the first people to notice these problems. Clever people have been hard at work figuring out how to make this equation scale to large datasets. An &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hal.inria.fr&#x2F;hal-01262376&#x2F;document&quot;&gt;algorithm&lt;&#x2F;a&gt; addresses our problems in three ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It adds tectonic uplift, another important component of the erosion model that is missing from the simplified version of the stream power equation. It turns out that if you simulate for long enough, tectonic uplift and erosion cancel each other out to form a steady state. This means that erosion can be run for as many iterations as you like without flattening out the map.&lt;&#x2F;li&gt;
&lt;li&gt;It comes up with a clever algorithm for lake flow connections. This allows us to avoid figuring out how to fill in all the drains to compute a consistent stream tree. The high-level overview is abstract points by the local depression (i.e. lakes) that they are in, and look for the &quot;lowest&quot; path between each pair of neighboring lakes. Then if we start from the boundary and always choose the lowest available path to a lake that we haven&#x27;t traversed yet, we&#x27;ll find a consistent path &quot;downhill&quot; between lakes, that will be connected if the lakes are all flooded. This algorithm is O(n + m log m) (sorta) rather than O(n^1.5), which means that even with tons and tons of lakes it finishes pretty rapidly.&lt;&#x2F;li&gt;
&lt;li&gt;It does this using an &quot;implicit&quot; algorithm that allows you to choose whatever delta t and erosion level you want without destroying convergence.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is the algorithm we use.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;628941230763540500&amp;#x2F;screenshot_1570021070372.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;river-island&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An island in the middle of a river&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;player-survey&quot;&gt;Player survey&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;631310557701603348&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;blog&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Thanks to all of you that read the blog &amp;lt;3&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Last week we put out a survey, and we&#x27;ve had a ton of responses! We&#x27;ve got a lot of valuable insight on many topics. With the sudden server population increase this week, it&#x27;s interesting to get opinions from people who just found out about the game, as well as people who have been a part of the server for a while.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;631310693232017408&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;games&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Different games players have played before&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;One of the big goals of the survey was to find more about the Veloren player base. And then on an even deeper level, the previous experiences of players in different games. Veloren is trying to encapsulate dynamics and pillars that can be found in many other games. For most people who look at Veloren, they can draw connections to Cube World and Minecraft. It&#x27;s interesting to see the number of players that have played these games, which is near 90-100%.&lt;&#x2F;p&gt;
&lt;p&gt;If we contrast this to the similarities that Veloren has to Dwarf Fortress, we don&#x27;t hear as much about the overlap. There is a much smaller subset of players who have played this before; around 30%. Also, many of the underlying systems that dictate large scale world simulation haven&#x27;t been incredibly visible just yet. This might be a motivation to bring out those systems that players aren&#x27;t familiar with. We&#x27;ll see.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;631310925768425477&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;combat&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The different types of combat preferred by players&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;An interesting discovery was the proportion of players that liked player vs environment (PvE) over player vs player (PvP) combat. Because of what people imagine of a game like Veloren, the systems that promote PvE seem more commonplace. These types of systems center around teamwork to kill bosses, or quests to find items. This is also similar to the raid systems of MMO games.&lt;&#x2F;p&gt;
&lt;p&gt;On the other hand, PvP combat is quite low, at only around 30%. We can look at many other games that have similar mechanics to Veloren, and see how their PvP systems have progressed. Whether that be Minecraft hunger games, or duals in Borderlands 2, or player combat in World of Warcraft. All of these games are intrinsically PvE games, but have a PvP mask put on them. We can compare that to games that focus on PvP, such as Counter Strike, League of Legends, or Fortnite. These base PvP games would really struggle to introduce elements of PvE into them as core mechanics. This means more than just jungling in LoL, or killing chickens in CS.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;631311301620006952&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;magic&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren&amp;#x27;s theme opinions&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, let&#x27;s take a look at the theme of magic in Veloren. This came down to quite a close decision between soft and hard magic. Soft magic meaning that it exists in the world, however, it is not well defined. Hard magic means the world is focused around it, and it has tangible limitations. Take a look &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hard_and_soft_magic_systems&quot;&gt;here&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;p&gt;The decision of how magic is included in Veloren will likely evolve with the design and development process. It&#x27;s hard to settle on this topic when there is so little content in the game. There is already quite a lot that has been written on the lore of Veloren, but how that plays out once mechanics are introduced is yet to be seen. The vote shows that more players prefer soft magic worlds. This is valuable for us to know, as these questions are very much answered with what the player&#x27;s &quot;idea&quot; of Veloren is.&lt;&#x2F;p&gt;
&lt;p&gt;Next week, we will look at some more of the results from this survey. Stay tuned!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;631181200056123392&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;motherload&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;We&amp;#x27;ve found the motherload! Until next week :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;630135340979585034&#x2F;screenshot_1570306351970.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 35</title>
          <pubDate>Mon, 30 Sep 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-35/</link>
          <guid>https://veloren.net/blog/devblog-35/</guid>
          <description>&lt;p&gt;Thanks to this week&#x27;s contributors, @Zesterer, @Pfau, @imbris, @Xacrimon, @shandley, @Vechro, @Timo, @AngelOnFira, and @Carbonhell!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-piece-by-aeronic&quot;&gt;New Piece by @Aeronic&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s been a while since we&#x27;ve seen some audio in TWiV, so here you go, a new piece by @Aeronic!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627177941851439114&amp;#x2F;grasslands.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Grasslands&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;veloren-videos&quot;&gt;Veloren Videos&lt;&#x2F;h2&gt;
&lt;p&gt;More of an effort is being made on creating video content for Veloren. Here is a video of some alpha gameplay!&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;YyvXXCjpbqQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor Work&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627854166789718026&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A crafting bench designed by @Vechro&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This week, @YuriMomo discovered a bug where you could fall through the terrain. The problem with this bug was that although certain users were running into it, there wasn&#x27;t a standard way of replicating it. First, @YuriMomo used debugging tools to find the conditions that were causing the bug to happen. Then, once it was replicable, they were able to try reproducing it without tools.
Turns out by moving forward and spamming both shift and space then moving the camera, you were able to achieve the bug. Now that the bug has been replicated and isolated, it&#x27;s much easier to resolve.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627852816794517525&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above, you can see the new entity highlight system by @Zesterer. When you hover over different objects in the world, you&#x27;ll be able to see if you can interact with them. You are also able to gather them into your inventory by right-clicking on them.&lt;&#x2F;p&gt;
&lt;p&gt;Right now there are a few pickable entities in the game: grass (ingredient), flowers (ingredient), velorite ore (ingredient), mushrooms (consumable), and apples (consumable). Consumables can be eaten to regain lost health and ingredients will be used for crafting later on. Inventory tooltips have also been added, with different icons per item coming soon.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627854784455770122&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above is an initial crafting window concept. An idea for crafting has been getting the player able to discover recipes by themselves or by the knowledge from other sources. However, that means a player could look up a recipe in a wiki that will allow them to craft every item they could get the ingredients for.&lt;&#x2F;p&gt;
&lt;p&gt;Using the items might be restricted though; they couldn&#x27;t craft an epic armour set to wear at level one. Once a recipe is discovered, it could be listed on the left side and can be used again. Getting better at crafting could allow players to put more items into the discovery table, as well as other perks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627855206742491166&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Initial ideas were also developed for a trading window. The currency will probably be called &quot;Velorite&quot;, or &quot;Vel&quot; for short. It is the most valuable material in the Veloren world. In this concept for trading, the idea of allowing the player to barter was proposed. Depending on multiple factors, the trader will accept or decline the offer.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627856450093318184&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;A new contributor, @Carbonhell, introduced a popup at the login screen that lets players cancel the login process when it takes too long.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;627883210671521822&amp;#x2F;Screen_Shot_2019-09-29_at_5.01.27_PM.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Songtronix has been keeping up with Airshipper, Veloren&#x27;s launcher. The command line interface can start an existing install of Veloren, no matter the platform. Next up is going to be checking for updated versions, and downloading them.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;river-work-by-sharp&quot;&gt;River Work by @Sharp&lt;&#x2F;h2&gt;
&lt;p&gt;@Sharp has been continuing their hard work on rivers. Although they look great, there are still many optimizations that need to be made to them. They are quite a costly part of the world generation. Enjoy a large selection of screenshots, in which there are winding rivers in many different situations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627857344654475284&amp;#x2F;screenshot_1569762215841.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627857346927919104&amp;#x2F;screenshot_1569738210927.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627857731629350932&amp;#x2F;screenshot_1569738184760.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Sharp has also worked on a world map viewer to be able to see land and water. This will help with the world generation development, as it gives a high-level view of what the world looks like.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627881886504714261&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;new-character-proportions-by-pfau&quot;&gt;New Character Proportions by @Pfau&lt;&#x2F;h2&gt;
&lt;p&gt;This week, @Pfau started to rework character proportions. The reason for this was to more closely follow the standard Veloren character design, but also to give Veloren artists more space for details on armour. The new models are 3 Voxels taller than the old ones. This gives one more row for the chest, the pants, and the shoes. The hands have also been modified to look more humanoid.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627849141925445672&amp;#x2F;screenshot_1569718320997.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;627849269499527209&amp;#x2F;screenshot_1569717935175.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Above, you can see cloth in the style of a Kimono as a possible armour design for casters&#x2F;healers. The new models look more &quot;heroic&quot; and fit the level of detail of our other objects better than previous iterations. Below, you can see the concept of the Kimono armour. Characters also have necks now that clip into their heads to never have a gap between the head and body when turning the head.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;627483585343127552&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The sun sets for the dev blog this week. See you next time!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;523568428905398283&#x2F;627477819764506624&#x2F;unknown.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 34</title>
          <pubDate>Mon, 23 Sep 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-34/</link>
          <guid>https://veloren.net/blog/devblog-34/</guid>
          <description>&lt;p&gt;Thanks to this week&#x27;s contributors, @Xacrimon, @imbris, @Pfaunenauge, and @Zesterer!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;Many contributors are still getting into the swing of school. But we still have some great progress this week! @Yeedo has continued work on the gliding system. @imbris, @Zesterer, and @Xacrimon put in some great optimization work. @Pfau worked on fixing bugs within the character creation screen.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;625412685286080544&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Visuals added for deleting characters&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;improvement-to-worldgen-with-imbris&quot;&gt;Improvement to Worldgen with @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;@imbris has spent lots of time this week working on worldgen improvements. Before the work started, a flame graph was recorded. Flame graphs are used to show where the most time is being spent within different functions. You can see the initial flame graph here:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;625876315475804185&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The goal is to look at the widest items and try to make them thinner. @imbris noticed that a lot of time was being spent in the &lt;code&gt;seed_expan::diffuse&lt;&#x2F;code&gt; function. This one is near the middle of the flame graph image. You can see that each function below it has to be just as large as it is waiting on the diffuse function to move along. This function used some code magic:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Simple non-cryptographic diffusion function.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;diffuse&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u32&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u32 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    x = x.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0x7ed55d16&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(x &amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x = (x ^ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0xc761c23c&lt;&#x2F;span&gt;&lt;span&gt;) ^ (x &amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;19&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x = x.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0x165667b1&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(x &amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x = x.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0xd3a2646c&lt;&#x2F;span&gt;&lt;span&gt;) ^ (x &amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x = x.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0xfd7046c5&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(x &amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x = (x ^ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0xb55a4f09&lt;&#x2F;span&gt;&lt;span&gt;) ^ (x &amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x = x.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;31&lt;&#x2F;span&gt;&lt;span&gt;) - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;13&lt;&#x2F;span&gt;&lt;span&gt;) ^ (x &amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;13&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    x
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;@Xacrimon was able to simplify this function by combining a few of the operations. It gives mostly the same effect, but much more quickly:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F;&#x2F; Simple non-cryptographic diffusion function.
&lt;&#x2F;span&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;inline&lt;&#x2F;span&gt;&lt;span&gt;(always)]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;diffuse&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u32&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;u32 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    a ^= a.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;rotate_right&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;23&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    a.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;wrapping_mul&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2654435761&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And with that, we are already able to see improvements in the flame graph! No longer do we have the long wait in the middle of the flame graph:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;625017004146819107&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@imbris took a closer look at some other sections, specifically the &lt;code&gt;Fastnoise&lt;&#x2F;code&gt; function. While they had improved it during diffuse&#x27;s improvements, it still took almost half of the time spent generating a chunk.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;625036683896946699&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The middle section where it was calling into libm.so was a cosine used for cosine interpolation to smooth the noise.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; factor = pos.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;e&lt;&#x2F;span&gt;&lt;span&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.5 &lt;&#x2F;span&gt;&lt;span&gt;- (e.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;fract&lt;&#x2F;span&gt;&lt;span&gt;() as &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32 &lt;&#x2F;span&gt;&lt;span&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;::consts::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;PI&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cos&lt;&#x2F;span&gt;&lt;span&gt;() * &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This was being used instead of linear interpolation because it gave a much smoother transition (e.g. for colors). You can take a look at a nice visualization of cosine vs linear interpolation &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;paulbourke.net&#x2F;miscellaneous&#x2F;interpolation&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. Thus, @imbris set out to find an interpolation method that was similar to cosine but cheaper. They stumbled upon &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Smoothstep&quot;&gt;Smoothstep&lt;&#x2F;a&gt; which is almost indistinguishable from cosine.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; factor = pos.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;e&lt;&#x2F;span&gt;&lt;span&gt;| {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; f = e.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;fract&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;fract&lt;&#x2F;span&gt;&lt;span&gt;() as &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;f32&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;f.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;powf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;) * (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3.0 &lt;&#x2F;span&gt;&lt;span&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0 &lt;&#x2F;span&gt;&lt;span&gt;* f) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; &amp;lt;- smooth step
&lt;&#x2F;span&gt;&lt;span&gt;});
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;625884456405696522&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Blue is cosine, and red is Smoothstep&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As you can see in the figure above, both are nearly identical. Additionally, @imbris noticed that 2&#x2F;3 of the time spent lerping the noise with the factor calculated above was in clamping the factor when it is known that the factor will always be between 0.0 and 1.0.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;625048823894507535&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The clamp function in the flame graph&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Thus, @imbris was able to avoid the clamping check and replaced the cosine interpolation with Smoothstep. We now had this flame graph:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;625074635708432417&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Looking good! A lot of fat has been trimmed in those greedy areas. At this point, @Zesterer pointed out that the cache in this section could be improved:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;625890475227873281&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So @imbris, @Zesterer, and @Xacrimon collaborated to create a more efficient, fixed size, small cache that wasn&#x27;t on the heap. It also used a less expensive custom hash function. @Zesterer also made the bounds-checked generation much more precise, which lead to a very significant reduction in worldgen time. Feel free to check out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;merge_requests&#x2F;504&quot;&gt;!504&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;merge_requests&#x2F;507&quot;&gt;!507&lt;&#x2F;a&gt; to see the relevant MRs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;625893203639402506&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The final flame graph&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There is a lot more work to go in the optimization field, but it will always be an ongoing process. @Zesterer gave some insight into some future work.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;So at the moment, we go through the whole process of generation for every block. That means that there&#x27;s a hell of a lot of code being run each time we try to sample a block. I strongly suspect that this is very unfriendly for the instruction cache. So I would propose to move to a system where, in an almost ECS-like manner, we instead apply the generation process in layers with the whole chunk being operated upon every time. This might even allow the compiler to parallelize (via SIMD) a bunch of things too.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;626174961806999563&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Exploring the frost lands. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description>
    <enclosure url="https:&#x2F;&#x2F;s3.eu-central-2.wasabisys.com&#x2F;veloren-blog&#x2F;cdn&#x2F;597826574095613962&#x2F;625413845556527124&#x2F;screenshot_1569180669352.png" type="image/png"></enclosure>
  </item>
        
        
          
        
        <item>
          <title>This Week In Veloren 33</title>
          <pubDate>Mon, 16 Sep 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-33/</link>
          <guid>https://veloren.net/blog/devblog-33/</guid>
          <description>&lt;p&gt;We&#x27;ve recently passed 200 stars on GitLab! This puts us on the third page of most starred repos on the platform! Thanks to this week&#x27;s contributors, @Timo, @AngelOnFira, @Arashout, @imbris, @xMac94x, @haslersn, and @Artem!&lt;&#x2F;p&gt;
&lt;p&gt;Since school has started back up, lots of contributors have had to back off from the project a little. This blog will be a bit shorter, but we still have lots to show off!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h2&gt;
&lt;p&gt;@Songtronix has been continuing progress on Airshipper, and a super early demo of the backend for &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;airshipper.songtronix.com&#x2F;nightly&#x2F;master&#x2F;windows&#x2F;artifacts.zip&quot;&gt;Windows&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;airshipper.songtronix.com&#x2F;nightly&#x2F;master&#x2F;linux&#x2F;artifacts.zip&quot;&gt;Linux&lt;&#x2F;a&gt;. @Zesterer has been pondering many of the deeper philosophical domains of Veloren but also got additional movement merged. @Yeedo has been making progress on the glider code.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;622823155999965195&amp;#x2F;screenshot_1568562996613.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;male-char&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;622823158390456333&amp;#x2F;screenshot_1568562938326.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;female-char&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New character creation screens!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Pfau has been working on the character creation screen. A new background is in progress, and @Zesterer implemented character rotation so you can see your entire creation! There has been a massive increase in the number of hairstyles, colours, skin colours and accessories. These were worked on by @Pfau, @Sebastian, and @Marco Junior. @imbris worked on adding segment combination which is now enabled. Without this, none of the character creation would be possible!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;622824401091428352&amp;#x2F;screenshot_1568563253538.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;lots-combs&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;So many different combinations of characters now!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;622827798968533012&amp;#x2F;screenshot_1568564097243.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;first-person&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@lobster has been experimenting with the first-person view, which is now useable in-game. Make sure to give it a try!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;623185669132517400&amp;#x2F;untitled.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;p&gt;@Timo just started working on bows and arrows. In this video, you can see him wielding the bow (which he equipped using the inventory) and pressing the left mouse button to shoot arrows in the direction he is looking. While they don&#x27;t deal any damage yet, they do fall and collide with the ground as you would expect. @Timo also worked on curating some design mechanics, as we will soon be moving towards adding player content to Veloren.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;622825658053033996&amp;#x2F;screenshot_1568563539261.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;cool-dwarf&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A dwarf exploring the woods. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 32</title>
          <pubDate>Mon, 09 Sep 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-32/</link>
          <guid>https://veloren.net/blog/devblog-32/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Desttinghim, @imbris, @scott-c, @haslersn, @andymac, @Slipped, @xMAC94x, @AngelOnFira, @Pfau, @Timo, @Geno, and @Zesterer!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-future-of-veloren-by-zesterer&quot;&gt;The Future of Veloren by @Zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;Veloren started life as a Cube World clone. We make no secret about this, and it&#x27;s very clear that Cube World is Veloren&#x27;s primary influence. If you were to take a peek at the git history of the engine, you will find that, fittingly, &#x27;Clone World&#x27; was the preliminary name we used for the project.&lt;&#x2F;p&gt;
&lt;p&gt;Times, however, have changed. Throughout Veloren&#x27;s development, it has become clear to us that there are many aspects of Cube World that we feel dissatisfied with, and that there are many ideas we&#x27;d like to experiment with that Cube World does not explore.&lt;&#x2F;p&gt;
&lt;p&gt;Last week, the developer of Cube World, Wollay, broke his silence to announce a new Cube World release. Being fans of Cube World, we&#x27;re all excited to play it - I&#x27;m sure it&#x27;ll halt Veloren&#x27;s development for at least a few days while we enjoy it.&lt;&#x2F;p&gt;
&lt;p&gt;Many have asked whether Cube World&#x27;s imminent release will mean the end for Veloren. For us, without a shadow of a doubt, the answer is a decisive &quot;no&quot;. Be it the community we&#x27;ve grown, the things we&#x27;ve learned, the artwork we&#x27;ve created, the engine we&#x27;ve built, or the ideas we&#x27;ve shared - it&#x27;s clear to us that the potential for this project is unbounded.&lt;&#x2F;p&gt;
&lt;p&gt;That said, it&#x27;s become clear to us that Veloren needs a stronger vision. It&#x27;s not uncommon for us to find ourselves explaining what Veloren &lt;em&gt;isn&#x27;t&lt;&#x2F;em&gt; rather than what it &lt;em&gt;is&lt;&#x2F;em&gt;. This partly stems from Veloren&#x27;s origins as a clone, but it also stems from our open-ended development model. As of yet, we&#x27;ve avoiding planning more than one release ahead. In short, we&#x27;ve lacked a long-term vision for Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;Starting this week, we intend to change that.&lt;&#x2F;p&gt;
&lt;p&gt;Throughout the next fortnight, we&#x27;ll be looking to the future to plan a long-term roadmap for the project. We&#x27;ll be talking to the community to gather as many ideas as possible, then we&#x27;ll assemble them into a long-term plan that takes us from where we are now to a 1.0 release. That&#x27;s not to say that this roadmap will be set in stone - as a community-driven project, new ideas will inevitably come along to replace old ones. However, this roadmap will provide us with the long-term vision we need to drive this project forward with purpose and clarity.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;development&quot;&gt;Development&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;contributor-work&quot;&gt;Contributor work&lt;&#x2F;h3&gt;
&lt;p&gt;@Sharp has been continuing work on lakes and rivers. There is a lot to fiddle around with to make them feel natural. @Xacrimon has been continuing work on the authentication side and has just started working on account management. @Yurimomo has worked on improving the way we go about testing, and how we can improve our changelog.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;619561307603075102&amp;#x2F;screenshot_1567777918471.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;rivers&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The debug work on the river systems&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;new-chunk-data-structure-haslersn&quot;&gt;New Chunk Data Structure @haslersn&lt;&#x2F;h3&gt;
&lt;p&gt;This week, @haslersn implemented a new chunk data structure. A chunk in Veloren is an arrangement of voxels which has an area of 32 by 32 voxels and is 16 voxels in height. All of the terrain is stored in a three-dimensional regular grid of such chunks. This holds true for both the old and the new data structure, both of which we&#x27;ll now explain.&lt;&#x2F;p&gt;
&lt;p&gt;Previously, there were three types of chunks. The first type was a chunk that only contains copies of one voxel. This type was for example used if the chunk consisted solely of air. The second type was a chunk that mostly contains copies of one default voxel but is also sparsely filled with different voxels. Those deviations from the default voxel were stored in a hash table. The motivation for storing only the deviations was to save memory. The third type was a chunk that contains arbitrary voxels, stored in an array of length 32 x 32 x 16. This type was used if the second type couldn&#x27;t save a considerable amount of memory anymore, because of too many deviations from the default.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;621027738337280035&amp;#x2F;screenshot_1568134661960.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;waterfall&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The first documented waterfall in Veloren!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;However, the previous implementation wasn&#x27;t very efficient because of two reasons. First, for every access to some voxel data there&#x27;s a branch checking for the chunk type. Second, if the accessed chunk is of the second type and therefore uses a hash table, then a hash has to be calculated.&lt;&#x2F;p&gt;
&lt;p&gt;People tend to agree that the second reason is indeed a problem. For the first reason this less clear-cut. One might argue that consecutive accesses most often access the same chunk and then the branch predictor is right most of the time. We can&#x27;t know without benchmarking and so we did. Before showing the benchmarking results, we explain the new data structure which gets along without a hash table.&lt;&#x2F;p&gt;
&lt;p&gt;In the new data structure, the chunk of 32 x 32 x 16 voxels is furthermore subdivided into groups of 4 x 4 x 4 voxels. Consequently, there are 256 such groups per chunk. Again, for every chunk, there&#x27;s a default voxel. If within a group every voxel is a copy of that default voxel, then we don&#x27;t store that group.
If, on the other hand, a single voxel within a group deviates from the default voxel, then the whole group is stored. To store those groups, we have an array of voxels that grows dynamically every time a new group has to be stored. To track if a group is stored and wherein the voxel array it is stored, we have an extra index buffer that contains per group an index into the voxel array.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;620360425577644062&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;water-city&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Still to work to do on town generation!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In comparison to the old data structure, we get a little bit of memory overhead for empty or almost empty chunks, because we always store the index buffer.
But in other cases where most voxel groups are filled with non-air voxels, we win in this respect.&lt;&#x2F;p&gt;
&lt;p&gt;We benchmarked old versus new, considering an arrangement of five stacked chunks that are filled with voxels, and obtained the following results.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;| Benchmark                                | Old data structure | New data structure   |
&lt;&#x2F;span&gt;&lt;span&gt;| ---------------------------------------- | -------------------|--------------------- |
&lt;&#x2F;span&gt;&lt;span&gt;| full read (81920 voxels)                 | 17.7ns per voxel   | 3.6ns per voxel      |
&lt;&#x2F;span&gt;&lt;span&gt;| constrained read (4913 voxels)           | 67.0ns per voxel   | 14.1ns per voxel     |
&lt;&#x2F;span&gt;&lt;span&gt;| local read (125 voxels)                  | 17.5ns per voxel   | 3.8ns per voxel      |
&lt;&#x2F;span&gt;&lt;span&gt;| X-direction read (17 voxels)             | 17.8ns per voxel   | 4.2ns per voxel      |
&lt;&#x2F;span&gt;&lt;span&gt;| Y-direction read (17 voxels)             | 18.4ns per voxel   | 4.5ns per voxel      |
&lt;&#x2F;span&gt;&lt;span&gt;| Z-direction read (17 voxels)             | 18.6ns per voxel   | 5.4ns per voxel      |
&lt;&#x2F;span&gt;&lt;span&gt;| long Z-direction read (65 voxels)        | 18.0ns per voxel   | 5.1ns per voxel      |
&lt;&#x2F;span&gt;&lt;span&gt;| full write (dense) (81920 voxels)        | 17.9ns per voxel   | 12.4ns per voxel     |
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see, the old data structure is defeated. Since we only considered completely filled chunks, the only seeming problem with the old data structure that could lead to this defeat was the extra branch. However, it&#x27;s important to note that we can&#x27;t be sure that this was the only reason why the old implementation performed worse. For sparsely filled chunks we assume an even greater improvement because hash tables are known to have slower access times than arrays, especially for the sizes relevant here.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;map-and-minimap-by-haslersn&quot;&gt;Map and Minimap by @haslersn&lt;&#x2F;h3&gt;
&lt;p&gt;@haslersn also did some work on adding a map and mini-map. This is not yet merged into master, but a feature branch and several screenshots have been shared.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;619614628560764938&amp;#x2F;screenshot_1567798154092.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;map&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new minimap view!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;As you can see, the map is three-dimensional and encompasses all of the structures which are present in the world. This is achieved by simply taking the actual terrain&#x27;s voxel data and averaging a cube of 4 x 4 x 4 voxels into a single voxel on the map. Hereby the algorithm must consider only voxels that have, on any of the six squares, an adjacent air-voxel. Otherwise, a green pasture wouldn&#x27;t look as green because not so green voxels from below the ground would be considered.&lt;&#x2F;p&gt;
&lt;p&gt;Implementation-wise, various additional code had to be added: Changes in the terrain need to trigger a generation or regeneration of the corresponding map chunk, map chunks need to be meshed and, of course, the minimap has to be rendered. If you pay close attention, you can see the player&#x27;s figure on the minimap in one of the screenshots. Luckily the rendering code for the main scene could simply be re-used with some things disabled, so as to render the minimap and the desired figures thereon. Hence the main work was not to implement new code, but rather to adapt existing code to be re-usable in other contexts, such as for the minimap.
This work is still ongoing.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;619697844625997836&amp;#x2F;screenshot_1567817888158.png&quot;
    
    loading=&quot;lazy&quot;
    
      alt=&quot;mini-map&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The real map and the player visible in the minimap. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 31</title>
          <pubDate>Mon, 02 Sep 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-31/</link>
          <guid>https://veloren.net/blog/devblog-31/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Timo, @Zesterer, @Slipped, @Pfau, @Muqito, @tommy, @imbris, @yashaslokesh, and @haslersn!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to @Pfau for this week&#x27;s Screenshot Saturday. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;618163622388039701&amp;#x2F;0_qDNl2l6TV-HGN7huMcx_J0s9x4UCYHY-96mkD2A8I.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Massive week for development! Check out the new changes like towns, items, worldgen, combat &amp;amp; more!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;generating-towns-by-zesterer&quot;&gt;Generating Towns by @Zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;We&#x27;d like generated towns to have structure. To do this, we generate them in several passes. They look something like this:&lt;&#x2F;p&gt;
&lt;h4 id=&quot;foundation-pass&quot;&gt;Foundation Pass&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618155702116155393&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;First, we split the town up into 9x9x9 cells. For each one, we work out whether it sits close to or below the surface of the terrain. If that&#x27;s the case, we designate that cell a &#x27;foundation&#x27;. Foundations are special cells that permit the generation of other structures in later passes.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;road-pass&quot;&gt;Road Pass&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618156287787532346&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In this pass, we choose an initial location from which all roads in the towns will be connected. From there, we repeatedly choose a random road cell and extend the road out across the foundation layer by a random number of cells. If we hit another road in the process, or there are any significant changes in altitude, we stop the road. In addition, we make sure that roads never run right next to other roads. The result of this process is a relatively convincing road network for the town with multiple high streets.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;area-pass&quot;&gt;Area Pass&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618157343208767495&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The third pass is used to designate specific regions of the town. Here, we choose a random road cell and a neighbouring empty cell. From here, we &quot;grow&quot; a region using a flood fill algorithm until its randomly determined growth energy is expended. Parks, trade districts, and other such areas all have different growth energies with random variations. Once a region is designated, we disallow buildings forming on it in later passes.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;building-pass&quot;&gt;Building Pass&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618161064030371848&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This pass generates buildings. Like the previous pass, we choose a random road cell and a neighbouring empty cell. From here, we grow the building from the starting cell. Buildings are also permitted to grow vertically upwards, although they are not permitted to grow out over an empty space to form an overhang (yet). Once the flood fill is complete, we do two things: firstly, we eliminate any cells that don&#x27;t have enough neighbours (to avoid ridiculously narrow buildings). This can, in rare cases, result in the total elimination of the building. Then, we decide whether to keep the building or throw it out based on its size. The building falls under a given size, we throw it out and try again.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;wall-pass&quot;&gt;Wall Pass&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618161540092264451&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The final &#x27;high-level&#x27; pass is the wall pass. Here, we use a flood fill algorithm to designate external parts of the town by growing inward from the edges. When a non-empty cell is encountered, we don&#x27;t go further. As a side-effect, we remove unused foundation cells that appear in external cells. After this, we use another flood fill algorithm to probe outwards from the centre of the town, designating &lt;em&gt;any&lt;&#x2F;em&gt; cells it hits as internal cells. Now for the magic: when the flood fill algorithm encounters an external cell, it designates it as a wall. Once completed, we clean up the walls in much the same way as the previous pass, removing walls that have two few (or too many) neighbours. The result is a clean boundary wall around the entire town.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;module-pass&quot;&gt;Module Pass&lt;&#x2F;h4&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618162263299457025&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The last pass is used to assign modular components to buildings and walls. In this pass, we go through each wall and building cell and take a look at what neighbours it has. Based on the neighbours, we attempt to match it with a particular pre-built voxel model that is designed to fit certain neighbour conditions. This will then be used for block generation when players approach the town.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;618164525975470101&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Final town!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;There is still a lot of work to do to improve towns, but these are the fundamentals. Stay tuned to later TWiV posts to hear more as they improve!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other work&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;615992611680813076&amp;#x2F;2019-08-27_21-33-06.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;616357085688365104&amp;#x2F;2019-08-28_21-42-26.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;616373180852076547&amp;#x2F;untitled.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;618056323539664896&amp;#x2F;screenshot_1567426460469.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new pixel art for the flying rod&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Timo has made great progress on the inventory system, take a look at the videos above. @Sharp has continued work on rivers and drainage. There will be more to come on this in the upcoming weeks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;618175033054986259&amp;#x2F;screenshot_1567195670184.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Sharp&amp;#x27;s work on rivers. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 30</title>
          <pubDate>Mon, 26 Aug 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-30/</link>
          <guid>https://veloren.net/blog/devblog-30/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Timo, @Sharp, @Zesterer, @Vechro, @Slipped, @Demonic, @Pfau, @cauthmann, and @Songtronix!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to @lobster for this week&#x27;s Screenshot Saturday. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;615943022512832512&amp;#x2F;g0LLJzOSb6kwu52gDeLx0jCAViYGl1OI7Iwlcs9FBd4.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;There have been some huge changes to worldgen this week from @Sharp along with @Zesterer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;jungle-biomes-by-sharp&quot;&gt;Jungle Biomes by @Sharp&lt;&#x2F;h3&gt;
&lt;p&gt;For my first contribution to Veloren, I decided to make jungle biomes, which have been a popular request. I was told that that wouldn&#x27;t be an easy task, because we would need to add humidity and it would require a major refactor of the worldgen system to be more modular. Well... it didn&#x27;t, but it &lt;em&gt;was&lt;&#x2F;em&gt; a lot more work than I expected.&lt;&#x2F;p&gt;
&lt;p&gt;Besides jungles themselves (which are mostly credited to the great work of Veloren&#x27;s asset designers, and have nothing to do with me!), the key contributions of the new patch were (1) adding humidity, and (2) using more principled statistical distributions for controlling factors like temperature, humidity, and tree density.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;615478921995223040&amp;#x2F;screenshot_1566811761699.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A jungle from above&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;For the first of these, I just used another procedural generation method, billow noise, but something didn&#x27;t feel right. What I was generating didn&#x27;t look like jungles, just groups of trees. Not only that, it felt like however, I tweaked it, either the whole world was mostly jungles, or they were barely anywhere. And every time I tweaked the noise a bit, the distribution of everything changed and I had to go through the whole world looking to make sure everything still looked okay!&lt;&#x2F;p&gt;
&lt;p&gt;So I did some reading about statistical distributions (normally I would have hated this, but it&#x27;s amazing what working on a game will do for you!). It turns out that a key part of the culprit is that we wanted to make humidity go down with altitude. It turns out that when you add or average multiple random variables together, even if they are uniformly distributed along a range, meaning every value in the range is equally likely, they will more and more approximate a normal distribution. That means that &quot;moderate&quot; values are more likely and &quot;extreme&quot; values are less likely, which means that it can be hard to predict how many of the &quot;extreme&quot; climates you&#x27;ll actually see in a (relatively) small world like Veloren&#x27;s.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;615846109637771274&amp;#x2F;screenshot_1566899482405.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some work on the jungle trees by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;What&#x27;s worse, it soon became apparent that the procedural noise functions are not even close to being uniformly distributed, meaning we have absolutely no idea what adding them together will do or what effect tweaking their shape will have. That&#x27;s pretty bad because it makes it very hard to tweak the shape of things like the altitude generation or temperature without destroying biodiversity, even if you &lt;em&gt;do&lt;&#x2F;em&gt; end up getting some of the factors right.&lt;&#x2F;p&gt;
&lt;p&gt;So what solutions do we have? It turns out that there is a way to turn a distribution &lt;em&gt;back&lt;&#x2F;em&gt; into a uniform distribution, as long as you can compute a certain key function that describes the distribution (its &quot;cumulative density function&quot;). Even better, it turns out that for some kinds of distributions that we wanted to use, there is a closed-form solution for this function! A key use of this would be a logistic distribution which we wanted to use for tree density, and the weighted sum of uniform distributions, which we wanted to use for temperature and humidity.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;614276631309320192&amp;#x2F;screenshot_1566525273985.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A jungle with little peninsula&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;All that remained was to implement this solution for the functions we knew. But what about all the procedural noise functions? It turns out that figuring out any sort of closed-form solution for these is an open research problem -- like &lt;em&gt;very&lt;&#x2F;em&gt; open. In the end, rather than solving it, I decided to just take advantage of the fact that we have a closed world, and &quot;brute force&quot; the cumulative density function by going through all the computed values, sorting them, and using their positions in the sorted list as their uniform value. This is basically the idea behind cumulative density functions, so it&#x27;s not as lame as it seems, but it does mean that this particular solution can&#x27;t be used with an infinite world.&lt;&#x2F;p&gt;
&lt;p&gt;After all this math, there was still the matter of making things look visually pleasing. For this, I have @Zesterer to thank for patiently guiding me through how to make transitions between different humidity levels and temperatures aesthetically pleasing. Particularly difficult was getting the &quot;snow splatter&quot; effect to work when you no longer want snow except at certain humidity levels. I also have a very poor sense of what colors to use, which led to a lot of entertaining back-and-forth. So, by the end of all this, I was hoping that it would end up being worth it. Was it? I think so... but you decide :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;town-generation-by-zesterer&quot;&gt;Town Generation by @Zesterer&lt;&#x2F;h2&gt;
&lt;p&gt;We&#x27;d like to have nice town generation in Veloren. Plenty of voxel games have them, but few do them well, for a few reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Most town generation algorithms require expensive pre-generation of the surrounding landscape before generating the town itself, thereby limiting the upper size of the town&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Town generation algorithms that &lt;em&gt;don&#x27;t&lt;&#x2F;em&gt; require the above tend to produce bland or uninteresting towns with little integration between their various parts.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Veloren solves these problems in two parts:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Pre-generate the entire world at a lower resolution&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Pre-generate the entire town on top of the world at a lower resolution&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;615584277169569827&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A city layout. Each colour represents a different building.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;What does this give us? First, it means that each town might be implicitly aware of neighbouring towns during the world simulation state. This will permit us to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Simulate economic resources flowing between towns through trade&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Simulate the migration of populations between towns and the effect their settlement may have on the towns&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Simulate war between conflicting towns and civilizations&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Secondly, it means that we don&#x27;t need to do expensive pre-generation of the surrounding terrain because we already have low-resolution information about the terrain. It&#x27;s not perfect, but it&#x27;s more than enough to generate bits of the town in a visually-pleasing manner.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;615610635631329316&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Chilling in the town square at night :P&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In conclusion, town generation goes through multiple distinct stages:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;World generation (low resolution)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Town generation (low resolution)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;World simulation (low resolution)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Chunk generation (block resolution)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;At each stage, more and more detail is added to the world. The final stage, which occurs in real-time while the game is running, takes the existing metadata generated by previous stages and turns it into the raw blocks that we show players in-game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450064928720814081&amp;#x2F;614956265453518899&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This section will be continued next week, as @Zesterer keeps working on implementing town generation. Here is a sneak peek though!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other work&lt;&#x2F;h3&gt;
&lt;p&gt;@Pfau has been assisting with the town generation from an artistic side. Houses will be made from 9x9x9 blocks that make up the components of the structure. He has also added mushrooms and the current time of day in the debug view. He is also working on adding more to the new jungle biome.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;615466971395522580&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;615450248059289610&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;615940088110776321&amp;#x2F;screenshot_1566921934065.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau&amp;#x27;s town work as well as mushrooms!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On top of what @Sharp worked on earlier, they also did some initial work on river generation and erosion. @Timo worked on pushing combat forward. They implemented a new struct to keep track of what a character is currently doing.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;CharacterState {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;movement&lt;&#x2F;span&gt;&lt;span&gt;: MovementState,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;action&lt;&#x2F;span&gt;&lt;span&gt;: ActionState
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;enum &lt;&#x2F;span&gt;&lt;span&gt;MovementState {
&lt;&#x2F;span&gt;&lt;span&gt;Run,
&lt;&#x2F;span&gt;&lt;span&gt;Roll,
&lt;&#x2F;span&gt;&lt;span&gt;Jump,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;enum &lt;&#x2F;span&gt;&lt;span&gt;ActionState {
&lt;&#x2F;span&gt;&lt;span&gt;Idle,
&lt;&#x2F;span&gt;&lt;span&gt;Wield,
&lt;&#x2F;span&gt;&lt;span&gt;Attack,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;@Timo added a new ActionState Block so a player can defend themselves against incoming attacks. I wrote the code that reduces damage while blocking by 90% and @Slipped provided a fitting animation. They also added better aiming, so you now have to hover your crosshair near the enemies body to hit him, not just in the general direction. The player now looks in the direction the camera is pointing at while in combat to make aiming more natural.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;615940642631057439&amp;#x2F;235e1f21eafa4361e19b053c302d4e01.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Shinji has been designing Velorite stones. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 29</title>
          <pubDate>Mon, 19 Aug 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-29/</link>
          <guid>https://veloren.net/blog/devblog-29/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @imbris, @Zesterer, @Xacrimon, @Qutrin, @scott-c, @Pfau, @Geno, @haslersn, and @luc-fauvel!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;optimizations-by-xacrimon&quot;&gt;Optimizations by @Xacrimon&lt;&#x2F;h3&gt;
&lt;p&gt;A bit about the optimizations I have been working on. Last week, I focused on new specs storage. After looking around the &lt;code&gt;specs&lt;&#x2F;code&gt; code for something unrelated it occurred to me that we were using &lt;code&gt;VecStorage&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; for &lt;em&gt;everything&lt;&#x2F;em&gt;. This felt both badly thought out and horribly memory wasteful. And as it turns out, both were true.&lt;&#x2F;p&gt;
&lt;p&gt;So I set out to lower memory waste which essentially means packing components together more densely without impacting performance heavily. So the obvious solution is to just use &lt;code&gt;HashMapStorage&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; right? Not so fast. As it turns out &lt;code&gt;HashMapStorage&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; has quite some overhead for operations. Though more memory efficient they consume significantly more cycles do to and thus the game runs a lot slower.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;613390884947492872&amp;#x2F;output.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some of Zesterer&amp;#x27;s work this past week&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So as it turns out there isn&#x27;t a fantastic ready-made optimization here. I needed to come up with something that increasing memory efficiency without decreasing performance. So I ended up writing my own storage type. It is essentially an improved version of &lt;code&gt;DenseVecStorage&amp;lt;T&amp;gt;&lt;&#x2F;code&gt;. That data structure is quite optimized so there is no point right? Well as it turns out &lt;code&gt;DenseVecStorage&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; is quite cache inefficient. This is due to it using a separate &lt;code&gt;Vec&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; for the redirection table.&lt;&#x2F;p&gt;
&lt;p&gt;What my storage type does differently is that it places the redirection table &lt;em&gt;inside&lt;&#x2F;em&gt; the data vector by interleaving it. That boils down to storing x nodes of a normal redirection table inside each data entry and then using some custom indexing logic to first lookup the redirection entry which then points to an actual data entry. This has worked very well and managed to decrease memory usage in Veloren without a significant cost.&lt;&#x2F;p&gt;
&lt;p&gt;This week I went through the code looking for mutexes from the standard library and mpsc channels. That&#x27;s because there are very good faster alternatives to both of these available, namely &lt;code&gt;crossbeam&lt;&#x2F;code&gt; for channels and &lt;code&gt;parking_lot&lt;&#x2F;code&gt; for locks. This optimization essentially consisted of stepping through the codebase and rewriting sections of code to use these faster alternatives.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;613060874625875988&amp;#x2F;screenshot_1566234879794.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new jungle biome by @Sharp&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other Work&lt;&#x2F;h3&gt;
&lt;p&gt;This week, @Pfau worked on moving some of the hotbar and XP UI elements over to VOX formats. He also did a redesign of these elements so make sure to check that out! @Zesterer added water, so now they&#x27;re no longer just blue blocks! @Geno has been working hard since the beginning of this version to get world saving in. This will be quite a large component of 0.4. @Sharp has been working on adding a jungle biome, as well as humidity.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;613151473039310859&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 28</title>
          <pubDate>Mon, 12 Aug 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-28/</link>
          <guid>https://veloren.net/blog/devblog-28/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Xacrimon, @Geno, @Zesterer, @Pfau, @Qutrin, and @Songtronix!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;rust-game-dev-survey-psa&quot;&gt;Rust Game-dev Survey PSA&lt;&#x2F;h3&gt;
&lt;p&gt;Hey all you Rust programmers! The recently-formed Rust game-dev working group has a new survey to check in with current Rust game developers to see how it&#x27;s going. If you have 10 mins to spare, please give them some info! It would be awesome if we could share our individual experiences on Veloren with them so that they can work on making Rust better. To do the survey, go &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;users.rust-lang.org&#x2F;t&#x2F;survey-from-the-rust-game-development-working-group&#x2F;31270?u=erlend_sh&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;609742056784396288&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some interesting perlin noise terrain&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;0-4-meeting&quot;&gt;0.4 meeting&lt;&#x2F;h3&gt;
&lt;p&gt;This past weekend, we had a meeting to discuss the beginning of 0.4. At the beginning meetings, we aim to do a few things. First, we come up with a definition of what the new version should contain. Then, we discuss any current RFCs that could pertain to the version. Finally, we have a group playtest, since there is no better time that everyone is together!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;610197275314094111&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;All of the people attending the meeting&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;the-definition-of-0-4&quot;&gt;The Definition of 0.4&lt;&#x2F;h4&gt;
&lt;p&gt;For the definition, we started by looking at what we wanted to see in 0.4. Here are the main topics&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Persistent world&lt;&#x2F;li&gt;
&lt;li&gt;World content&lt;&#x2F;li&gt;
&lt;li&gt;Interaction with the world&lt;&#x2F;li&gt;
&lt;li&gt;Inventory&lt;&#x2F;li&gt;
&lt;li&gt;Character creation&lt;&#x2F;li&gt;
&lt;li&gt;Combat&lt;&#x2F;li&gt;
&lt;li&gt;Quests&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;From here, we write out a more concrete description of what we want to see.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The player should be able to experience a world with small details that give it more life. As they explore different areas, they should find out details about the world lore.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The player should be able to have objectives that the game gives them. These should be able to come from interacting with NPC characters. Objectives should get the player to kill enemies in a different area. Once the objectives are complete, the player should get a reward.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The player should be able to have closer personalization with their character. They should be able to store items and tools. They should also be able to equip different equipment that helps them in combat.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;608707184397910027&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;608706818306211848&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The result of an explosion&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;the-rfc-discussions&quot;&gt;The RFC Discussions&lt;&#x2F;h4&gt;
&lt;p&gt;RFC stands for &quot;request for comments&quot;. It is a standard for documenting ideas that are complex and require more attention from multiple community members. Although a lot of discussion on these topics happen on Discord as well as issues on GitHub, discussing them over voice has been effective in getting everyone up to speed.&lt;&#x2F;p&gt;
&lt;p&gt;In this particular meeting, we discussed a few different topics.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;working-groups&quot;&gt;Working Groups&lt;&#x2F;h5&gt;
&lt;p&gt;With more contributors joining, we&#x27;ve started to see some flaws in our current community design. If you&#x27;re looking for help on a particular part of Veloren, it&#x27;s hard to know who to contact. When discussions happen in &lt;code&gt;#programmers&lt;&#x2F;code&gt;, it is difficult to have more than one thread of ideas being discussed at once.&lt;&#x2F;p&gt;
&lt;p&gt;Working groups should help solve this. We achieve this by splitting many of the core topics into different teams, each having their own lead. Here is the current separation of topics and their leads:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Worldgen - zesterer&lt;&#x2F;li&gt;
&lt;li&gt;Rendering - imbris&lt;&#x2F;li&gt;
&lt;li&gt;Testing - YuriMomo&lt;&#x2F;li&gt;
&lt;li&gt;Audio - Aeronic&lt;&#x2F;li&gt;
&lt;li&gt;Assets &amp;amp; Visual Design - Pfau&lt;&#x2F;li&gt;
&lt;li&gt;Combat - Timo&lt;&#x2F;li&gt;
&lt;li&gt;Meta - AngelOnFira&lt;&#x2F;li&gt;
&lt;li&gt;Server &amp;amp; Multiplayer - xMAC94x&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We are aiming to clean up the Discord server over the next week or so to reflect these changes. We will be adding roles and channels for these teams, and moving away from old roles that are no longer used.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;future-third-party-server-hosting&quot;&gt;Future third party server hosting&lt;&#x2F;h5&gt;
&lt;p&gt;We also discussed what we&#x27;d like to see from third party server hosting in the future. This means an external entity that hosts servers and charges players to play on them. Veloren is free to play, free to explore the codebase, and will remain free forever (Yay FOSS!). However, what happens in this case?&lt;&#x2F;p&gt;
&lt;p&gt;This question comes from seeing other games, like Minecraft, having their own third party private server ecosystem. A provider will make servers that attract certain demographics that are willing to pay. With Veloren on the other hand, everything is supposed to be free, right? Well, there are actually a few benefits to having third-party hosted servers:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Server hosting would become less of a concern for our core developers&lt;&#x2F;li&gt;
&lt;li&gt;To give a server experience worth paying for, we might see more external improvement contributions&lt;&#x2F;li&gt;
&lt;li&gt;Third-party advertising campaigns can lead to more visibility&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Not to mention, supporting an ecosystem of third-party work is way easier than trying to ban it. Our main goal with this is to make sure that players still understand that the game is free to play, and what they are paying for is a service.&lt;&#x2F;p&gt;
&lt;p&gt;That all being said, we&#x27;re not aiming to have this be the only hosted servers by any means. There will be official Veloren servers hosted that will be free to use.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;arewevelorenyet-com&quot;&gt;arewevelorenyet.com&lt;&#x2F;h5&gt;
&lt;p&gt;There are lots of Rust sites that discuss how far along certain ecosystems are. For example, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;arewegameyet.com&#x2F;&quot;&gt;arewegameyet.com&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.arewelearningyet.com&#x2F;&quot;&gt;arewelearningyet.com&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.arewewebyet.org&#x2F;&quot;&gt;arewewebyet.com&lt;&#x2F;a&gt;. So, why can&#x27;t Veloren have it&#x27;s own?&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;610894024110506014&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Coming soon...&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;On this site, we&#x27;ll display where we are with the game. We often get people coming to the Discord server to check in with our progress, so this will be a great resource to point them to. It will also be a great way to show off the current tech systems in one place so that someone can see what exactly makes Veloren tick.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other Work&lt;&#x2F;h3&gt;
&lt;p&gt;This week, @LunarEclipse worked on updating the AUR packages for installing on Arch. They cleaned up the PKGBUILDs, and followed conventions so that &lt;code&gt;veloren&lt;&#x2F;code&gt; builds the latest release from source, &lt;code&gt;veloren-bin&lt;&#x2F;code&gt; packages release binaries, and &lt;code&gt;veloren-git&lt;&#x2F;code&gt; builds the latest master. @LunarEclipse is also continuing work on controller support. @Xacrimon is still working on game performance boosts, this time on branch prediction. @Qutrin is working on an admin permission system for better server control.&lt;&#x2F;p&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 27</title>
          <pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-27/</link>
          <guid>https://veloren.net/blog/devblog-27/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Zesterer, @Timo, @Xacrimon, @xMAC94x, @Pfau, @Qutrin, @Vercidium, @telastrus, @Songtronix, @imbris, @YuriMomo, and @Slipped!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;0-3-release&quot;&gt;0.3 Release&lt;&#x2F;h3&gt;
&lt;p&gt;This week, 0.3 was released! This version was a long time coming, and there has been a ton added to Veloren. Here is a small list of the major changes in this version:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;+ XP and leveling
&lt;&#x2F;span&gt;&lt;span&gt;+ Better combat, movement, and animations
&lt;&#x2F;span&gt;&lt;span&gt;+ Enemies, bosses
&lt;&#x2F;span&gt;&lt;span&gt;+ Better world generation, more biomes
&lt;&#x2F;span&gt;&lt;span&gt;+ Build mode
&lt;&#x2F;span&gt;&lt;span&gt;+ Caves, lanterns, lights, dungeons
&lt;&#x2F;span&gt;&lt;span&gt;+ Character customization, multiple races
&lt;&#x2F;span&gt;&lt;span&gt;+ Inventories (WIP)
&lt;&#x2F;span&gt;&lt;span&gt;+ Day&#x2F;night, better shaders, voxel shadows
&lt;&#x2F;span&gt;&lt;span&gt;+ Many performance optimizations
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can download 0.3 on the main website &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;welcome&quot;&gt;here&lt;&#x2F;a&gt;. We are excited to start work on 0.4. We will be having a meeting in the next week or so to discuss what our goals are for the next release.&lt;&#x2F;p&gt;
&lt;p&gt;Here is a list of all of the contributors that made 0.3 possible:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;@Zesterer
&lt;&#x2F;span&gt;&lt;span&gt;@Timo
&lt;&#x2F;span&gt;&lt;span&gt;@Pfau
&lt;&#x2F;span&gt;&lt;span&gt;@Qutrin
&lt;&#x2F;span&gt;&lt;span&gt;@Songtronix
&lt;&#x2F;span&gt;&lt;span&gt;@Xacrimon
&lt;&#x2F;span&gt;&lt;span&gt;@Slipped
&lt;&#x2F;span&gt;&lt;span&gt;@edocyeknom
&lt;&#x2F;span&gt;&lt;span&gt;@Cody
&lt;&#x2F;span&gt;&lt;span&gt;@scorpion9979
&lt;&#x2F;span&gt;&lt;span&gt;@Desttinghim
&lt;&#x2F;span&gt;&lt;span&gt;@sheldon_knuth
&lt;&#x2F;span&gt;&lt;span&gt;@imbris
&lt;&#x2F;span&gt;&lt;span&gt;@liids
&lt;&#x2F;span&gt;&lt;span&gt;@LunarEclipse
&lt;&#x2F;span&gt;&lt;span&gt;@AngelOnFira
&lt;&#x2F;span&gt;&lt;span&gt;@xMAC94x
&lt;&#x2F;span&gt;&lt;span&gt;@Cedric
&lt;&#x2F;span&gt;&lt;span&gt;@Vechro
&lt;&#x2F;span&gt;&lt;span&gt;@Nero
&lt;&#x2F;span&gt;&lt;span&gt;@jrvf
&lt;&#x2F;span&gt;&lt;span&gt;@Tesseract
&lt;&#x2F;span&gt;&lt;span&gt;@Geno
&lt;&#x2F;span&gt;&lt;span&gt;@Thomas_Jullien
&lt;&#x2F;span&gt;&lt;span&gt;@Jessie_Mancer
&lt;&#x2F;span&gt;&lt;span&gt;@YuriMomo
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;graphics-analysis-by-vercidium&quot;&gt;Graphics Analysis by @Vercidium&lt;&#x2F;h3&gt;
&lt;p&gt;This week, @Vercidium stopped by our Discord Server. He is a developer currently working on a voxel game called &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sectorsedge.com&#x2F;&quot;&gt;Sector&#x27;s Edge&lt;&#x2F;a&gt;. With his knowledge of graphics debugging he was able to provide insight into how Veloren is performing. @YuriMomo, our resident graphic analyst had some good discussions with him on this topic.&lt;&#x2F;p&gt;
&lt;p&gt;Using NVIDIA’s Nsight tool, he analyzed how different parts of the rendering pipeline performed at different view distances. These parts include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;How fast the fragment and vertex shaders are running&lt;&#x2F;li&gt;
&lt;li&gt;How often the shaders and GPU are idle&lt;&#x2F;li&gt;
&lt;li&gt;Memory reading and writing&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Shader performance is determined by the code they are running and the memory they read from and write to. In our case, the terrain shader was rendering 722676 triangles every frame and for 46% of the time, it was reading primitive data (triangles) from memory. This either means that either the shader code is highly optimized and finishing before more triangle data is loaded, or too much data is being processed.
To determine which is the limiting factor, @Vercidium analyzed a few more metrics provided to us by NSight.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;608290350683127850&amp;#x2F;JIb6QByXO_7nQVOCgvrVj6iO56OotnPnNxPLFB8OP-yB2FGz-xefUebz-gUXICUbXchWqz6lyTsCInK4MFnjHsHeReFdje_-yMyz.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The ‘Top SOLs’ metric is the first section we will look at as it displays the top 5 parts of the rendering pipeline that are limiting the performance. Our top limiting metrics are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Stream Multiprocessors (SM) are physical processors on the GPU that run the fragment and vertex shaders&lt;&#x2F;li&gt;
&lt;li&gt;Viewport Culling (VPC) ensures that pixels outside the screen aren’t processed&lt;&#x2F;li&gt;
&lt;li&gt;Video RAM refers to data that is read&#x2F;written from the GPU’s memory&lt;&#x2F;li&gt;
&lt;li&gt;Vertex Attribute Fetch is responsible for loading primitive data into the vertex shader for processing&lt;&#x2F;li&gt;
&lt;li&gt;A Level-2 (L2) cache is attached to each VRAM partition and allows commonly accessed data to be retrieved quicker&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Since VRAM is the 2nd highest SOL, the GPU’s memory bus used for accessing primitive data from memory is full and subsequent shaders are delayed until these queues have been processed. This is caused by either a high triangle count or the amount of data stored in each triangle.&lt;&#x2F;p&gt;
&lt;p&gt;When all top SOLs are less than 60%, NVIDIA states that the pipeline is under-utilized. Based on the SM Active % percentage (just below the SOL metric), the GPU shaders are completely idle for 24% of the time. Vercidium determined that this could be caused by a few different things.&lt;&#x2F;p&gt;
&lt;p&gt;First of all, extra non-rendering GPU commands being run between each draw call. This can be optimized on the CPU.&lt;&#x2F;p&gt;
&lt;p&gt;Second, chunks of blocks are being rendered that are not visible on the screen. Since Viewport Culling is the 2nd highest SOL, this means that the GPU is doing a lot of work determining whether triangles are on the screen. By culling these chunks on the CPU, the GPU will be able to spend more time processing the triangles that will end up visible to the player&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;607665430202548246&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A nice little camp setup&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Finally, since VRAM and VAF are the 3rd and 4th highest SOL, this means that the GPU is doing more work reading primitive data into the vertex shader than writing pixels out from the fragment shader (CROP - color read&#x2F;write operation is another metric, which isn’t in the top 5 SOLs). This means that there is excessive primitive data loaded from VRAM every single frame.&lt;&#x2F;p&gt;
&lt;p&gt;This can be reduced by combining similar block faces and using a 32x32x32 RGB colour texture to determine the colour of each block, or implementing a Level-of-Detail system to simplify chunks that are further away from the camera. This will reduce both the size of each vertex and the number of vertices loaded each frame. Using a texture to determine block colour is recommended as the TEX SOL (texture access) is currently running at 0% throughput, so there is room for textures to be used without slowing the pipeline down.&lt;&#x2F;p&gt;
&lt;p&gt;When running at a higher view distance, the number of chunks rendered increases from 136 to 766. Here, viewport culling has become the highest SOL and by diving deeper into the numbers, Vercidium determined that 1&#x2F;3rd of all chunks rendered end up outside the screen. With a total triangle count of 4.6 million per frame, 1.5 million triangles aren’t visible.&lt;&#x2F;p&gt;
&lt;p&gt;The second metric that increased is the Graphics&#x2F;Compute Idle percentage, which means that for 25% of the time, the entire GPU is idle and can be seen by the two large gaps in the ‘Pipelined Actions’ row below:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;608290896982573076&amp;#x2F;6-M_U6tBOXfQdHdNMFZ2MLL6MKZU7l_z1BTY-DtbkPgPJSJx_pUAGhS583RW0r-52dL-ZkSEHXNfvJuvGmP6hxKn_863BKWOPP3z.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;This is caused by a delay on the CPU, where no instructions are being sent to the GPU. The reason for this is yet to be determined, but once solved will increase FPS for all players by 25%.&lt;&#x2F;p&gt;
&lt;p&gt;The ‘Wait For Idle Count’ metric increased from 276 to 1494, meaning that the GPU is waiting for non-drawing commands to finish before it is able to run the shaders again. After filtering through the commands received by the GPU, Vercidium found that the framebuffer is being bound between each draw call, i.e. ‘Draw, Bind, Draw, Bind, etc.’, rather than ‘Bind, Draw, Draw, Draw’. This is caused by a problem in GFX, which is the Rust library that Veloren uses to render the chunks.&lt;&#x2F;p&gt;
&lt;p&gt;Vercidium also provided some quick changes that can be done to increase performance slightly, such as:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rendering to an SRGB8 framebuffer rather than an RGBA_16F format. This means that 32 bits will be stored per pixel - rather than 64 - and the memory output from the fragment shader will be reduced by half.&lt;&#x2F;li&gt;
&lt;li&gt;Stencil testing was enabled through the entire render process, but nothing was written to the stencil buffer. By changing the depth attachment from GL_DEPTH24_STENCIL8 to GL_DEPTH24, depth writing and comparison will be quicker as no bitwise operations will be required when reading from the depth buffer.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;color-work-by-imbris&quot;&gt;Color work by @imbris&lt;&#x2F;h3&gt;
&lt;p&gt;This week I worked on making the colors of the voxel models more accurate by accounting for the differences between SRGB and linear RGB (see the &lt;code&gt;imbris&#x2F;SRGB&lt;&#x2F;code&gt; branch). SRGB is widely used in color pickers and for the colors we normally specify using integer values of 0 to 255.&lt;&#x2F;p&gt;
&lt;p&gt;These colors are intuitive to work with despite being non-linear, meaning that a value of 200 is more than twice as bright as 100. This is because our eyes perceive light in a similar non-linear fashion. A light that emits twice the number of photons doesn&#x27;t look twice as bright to our eyes. Furthermore, because it more closely matches the human eye, when limited to 8 bits per component the available shades are visually more evenly distributed when using SRGB.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;608142460828385280&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The top is linear RGB, the bottom uses SRGB&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Hence, using an SRGB based color representation allows us to pass a wider variety of colors to the shaders will using 8 bits per component (i.e. 24-bit color). The 24-bit colors from loaded voxel models or generated terrain, some of which are based on voxel models, are passed to the shaders where previously they were treated as already being in a linear color space (shaders assume this).&lt;&#x2F;p&gt;
&lt;p&gt;Thus, when drawing to the screen the colors were inaccurate and appeared washed out. This was adjusted for by adding a postprocessing shader which adjusts the color by converting it into HSV, increasing the saturation, and then converting back out of HSV. While this looks nice, it doesn&#x27;t represent the original colors very well. This can make it difficult to predict what the colors of a model will look like in the game as a figure or part of the terrain.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, any other client front-end would have to follow this same transformation to obtain similar colors as voxygen. I set out to handle the SRGB values by adding a function to the shaders which transform them into a linear representation and then applying this to the terrain colors, the figure colors, and the light (the placeable lights) colors.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;608159397633589269&amp;#x2F;screenshot_1565066810815.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Before @imbris&amp;#x27; changes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;608159646389239819&amp;#x2F;screenshot_1565066596641.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;After the changes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;I also removed the post-process color correction. This left the colors of the terrain looking wildly different because they were selected with the old set of transformations present. I am currently at the point of fixing these colors. However, this is not straightforward because the hue transformation was applied after everything else, including lighting. I can&#x27;t simply apply it to these original values and then, treating them as linear values like they were before, transform them into the SRGB space before converting them to 24-bits.&lt;&#x2F;p&gt;
&lt;p&gt;This issue is compounded by the fact that the world-gen calculates the colors of individual blocks via linear interpolation of the base colors. This is similar to the lighting the saturation shift before and after this interpolation won&#x27;t be equivalent. Furthermore, to test tweaks to these colors requires re-compilation. Another set of colors which will need tweaking is the sky, fog, and ambient lighting for which thankfully adjustments can be seen immediately due to hot-loading of the shaders.&lt;&#x2F;p&gt;
&lt;p&gt;Going into working on making SRGB handling more accurate I knew I would be working on the shaders. So, first I decided to add loading the shaders at runtime instead of compiling them into the executable (a feature we have been planning to add for a while but which no one had gotten around to doing).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;608160148938162199&amp;#x2F;screenshot_1564938023686.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This was before I converted the terrain colors to SRGB. The tweaks in the previous images are just trying to correct for the removal of saturation in the postprocessing after switching the terrain colors into SRGB. Whereas this was just after changing the shaders.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;While this was fairly simple using the existing asset system, I ended up going one step further to add hot-loading of the shaders. That is, detecting when the shader files are edited, reloading from the disk, and re-compiling. This is accomplished via the &lt;code&gt;notify&lt;&#x2F;code&gt; crate which can be used to detect changes to watched files.&lt;&#x2F;p&gt;
&lt;p&gt;I added yet another loading function &lt;code&gt;load_watched&lt;&#x2F;code&gt; which calls the regular load function but also takes a &lt;code&gt;&amp;amp;mut ReloadIndicator&lt;&#x2F;code&gt; and adds the given specifier to be watched for changes. A &lt;code&gt;ReloadIndicator&lt;&#x2F;code&gt; is basically an &lt;code&gt;Arc&amp;lt;AtomicBool&amp;gt;&lt;&#x2F;code&gt; which gets flipped on whenever an asset is reloaded and flipped off whenever it is checked.&lt;&#x2F;p&gt;
&lt;p&gt;Once the asset is reloaded, a call to a load function will return a fresh &lt;code&gt;Arc&amp;lt;MyAsset&amp;gt;&lt;&#x2F;code&gt;. All of the watching of and reloading of assets is done in a background thread which flips the &lt;code&gt;AtomicBool&lt;&#x2F;code&gt;s after the reloading is complete.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other Work&lt;&#x2F;h3&gt;
&lt;p&gt;@Qutrin has been working on adding some more content to the progression system. Now, as you level up, you&#x27;ll gain more health. @Timo also added a bit to the progression system, with making XP gain dependant on the level of the enemy killed.&lt;&#x2F;p&gt;
&lt;p&gt;A new Request For Comments (RFC) system has been created. RFCs allow ideas that are more complex to have discussion specifically around them. This is particularly useful for design ideas. Some new sections in the &lt;code&gt;Game Design&lt;&#x2F;code&gt; section of the Discord server make use of RFCs. Take a look at the RFC repo &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;rfcs&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;607839700803256320&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some voxel work by @Demonic&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Timo worked on some network performance improvements to physics updates. When nothing changes, updates are no longer sent to the client. @Xacrimon has been working for a while now on memory improvements and has made strides implementing a data structure for storing entities more densely in memory. More to come on this in the upcoming weeks. @Geno implemented a FOV slider that has been merged into master. Be sure to check this setting out, it can help your camera in the game.&lt;&#x2F;p&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 26</title>
          <pubDate>Mon, 29 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-26/</link>
          <guid>https://veloren.net/blog/devblog-26/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Pfau, @Qutrin, @xacrimon, @tommywatson, @Muqito, @Vechro, @Nero, @imbris, @sheldon_knuth, @Timo, and @Zesterer!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot Winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @Pfau for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;605415582472470659&amp;#x2F;ZDYfRCvBZ5szsQ83Nbd8CgRfwrgV2z8TCI78oJ2stQs295n9n5Vm6jxei7o6ep4fiR7gOH5X60hdv8aeWExTY4tGyYjEZPPyBkmB.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Experimenting with new objects and lighting to make this cozy cabin!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;0-3-release&quot;&gt;0.3 Release&lt;&#x2F;h3&gt;
&lt;p&gt;We have the 0.3 release coming up this week! Our aim for minor releases (0.X.0) is to have them every two months, at the beginning of the month. With 0.3, we have a lot of content that we are still working on but we&#x27;re going to bundle everything up on the first of August.&lt;&#x2F;p&gt;
&lt;p&gt;At the end of 0.2, we gave ourselves room for a code freeze at the end of the release. This time around, we didn&#x27;t save extra time for it. We&#x27;ve found that we do most of our bug fixes halfway though the release, not necessarily at the beginning or the end. On top of that, since we&#x27;re mainly adding the foundations of Veloren, we aren&#x27;t seeing many regression bugs, just newly introduced ones.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;605114420972224560&amp;#x2F;Untitled.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Cave exploring by @Itwist&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;With those places to fix issues out of the way, we don&#x27;t really need the extra code-freeze time to work on these issues. Although this strategy of working right to the deadline works now, it won&#x27;t be like this in future releases. Some of the things that will change that will be:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A bigger audience that can test out builds during a code-freeze period&lt;&#x2F;li&gt;
&lt;li&gt;When the core systems of Veloren stabilize and content is built on top of them that bringing in bugs&lt;&#x2F;li&gt;
&lt;li&gt;When the core systems have stabilized but are edited, introducing regression bugs&lt;&#x2F;li&gt;
&lt;li&gt;When the list of issues related to bugs significantly increases&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We are also aiming to have some playtests of 0.3 this weekend. We want to try and get as many people as possible on the server to stress test it as well as find bugs. At the last release, this helped a lot with finding issues on different platforms. Keep an eye out on the Discord for when the playtest times are announced!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;605115514125156367&amp;#x2F;caves.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;605117724171042930&amp;#x2F;screenshot_1564341608439.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some images from a recent playtest&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other work&lt;&#x2F;h3&gt;
&lt;p&gt;@Qutrin has been putting a lot of work into the progression system. Right now it is quite bare-bones, however, lots of the work was setting up the foundation for future work in this section. Currently, you can receive experience from killing players and NPCs.&lt;&#x2F;p&gt;
&lt;p&gt;@xacrimon and @Timo have been working on updating crates that are used for Veloren. Many of them haven&#x27;t been updated in a while, so it took a lot of work to do this. @xacrimon had to port code to get the rand and scanfmt crates up to date. This is another step towards moving Veloren to stable Rust instead of nightly!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;605248237032701963&amp;#x2F;graph.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The web of dependancies for Voxygen&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Muqito has been working with the frontend to be able to specify what time of the day you want to change to. @Pfau has added a lot more chat colours to help improve the user experience. Finally, @imbris added a UI size slider.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;605456886539747328&amp;#x2F;snap2019-07-29-20-47-04.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Vechro and @Pfau have been working on getting more models into the game&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;deep-fried-veloren&quot;&gt;Deep fried Veloren&lt;&#x2F;h3&gt;
&lt;p&gt;With the new lighting, it&#x27;s possible to spawn in objects that have incredibly high brightness values, which then deep fry anything near them. Check out some of the fun things we did with this!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;605116363123720213&amp;#x2F;caves.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;605357490909085700&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;605358049414086656&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Atom bomb test, ca. 1940, (heavily) colourized.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;605460599903748104&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Unfortunately, the deep fry must be fixed. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 25</title>
          <pubDate>Mon, 22 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-25/</link>
          <guid>https://veloren.net/blog/devblog-25/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Songtronix, @Zesterer, @tommywatson, @Pfau, @Vechro, @xMAC94x, and @Jewel_Knight!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot Winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @imbris for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;602653443500408863&amp;#x2F;muNyHUA2dYF_dajG9lXynBI3-f-zjqnrA5b729d3O9o.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New lighting testing with .vox files&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;lights-by-zesterer&quot;&gt;Lights by @Zesterer&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;602507567138340874&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Lights at night!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Zesterer has been working on point lights and static entities this week! Static entities are now quite easy to add to the game, and you can give them a Stats component to make them possible to punch around the world. Below you can see how the light count is limited to 32, and the game will automatically show only the closest 32 point lights. There is also now a LightEmitter component that defines the colour and strength of the light that a particular entity should emit.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;602527135705333780&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The maximum amount of lights that can currently be emitted&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;octtrees-and-ecs-with-xmac94x&quot;&gt;OctTrees and ECS with @xMAC94x&lt;&#x2F;h3&gt;
&lt;p&gt;In the past, we haven&#x27;t used OctTrees at all. OctTrees are generally a good way to save memory in applications like voxel-based games because you can easily apply a Level Of Detail storage. That is, store more details where the player is, store fewer details far away. Take a look at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=mcpLSHU8M1c&quot;&gt;this video&lt;&#x2F;a&gt; to learn some more about the concept of OctTrees and why they are helpful for voxel-based applications.&lt;&#x2F;p&gt;
&lt;p&gt;The problem with OctTrees is that they are not performant. You have to move through a lot of memory hops, and all of these hops reduce performance because the cache can&#x27;t work as well with it. An Entity Component System (ECS) can mass-handle thousands of entities, but it&#x27;s not perfect for handling blocks and terrain data. Because of this, ECS is quite structured and if you know that data is structured you can apply more optimizations.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;602837782091661323&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A glowing potion by @Vechro&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;So neither OctTrees nor ECS is perfect, and that&#x27;s why we use Chonks for Terrain data. Chonks are more like a HashMap(Chunks, offset) which are super optimized for accessing a block.&lt;&#x2F;p&gt;
&lt;p&gt;I am working on a ECS-like OctTree model which aims to combine the speed of data-driven programming and the efficiency of OctTrees. Yesterday (I think) I managed to get the first functional working version running. Today I managed to generate performance numbers with &quot;cargo bench&quot;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;tests::bench_access_0            ... bench:          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;50&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_access_0_4_multiple ... bench:         &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;592&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_access_0_random1    ... bench:  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;49&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;703&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;526&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;152&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;348&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_access_0_random2    ... bench: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;554&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;240&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;752&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;65&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;435&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;192&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_access_4            ... bench:          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;36&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_clone_region        ... bench:     &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;145&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;983&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;634&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_make_at_least1      ... bench:  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;58&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;263&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;925&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;322&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;574&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_make_at_least2      ... bench:     &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;190&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;072&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;958&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_make_at_least3      ... bench:  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;26&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;786&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;832&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;723&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;765&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;tests::bench_region              ... bench:   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;700&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;958&lt;&#x2F;span&gt;&lt;span&gt; ns&#x2F;iter (+&#x2F;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;352&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;252&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As we can see in these benchmarks, simple access of a block under this system in release takes about 50 nanoseconds (ns).
These numbers scale quite well, even if random positions are accessed, like in the test &lt;code&gt;bench_access_0_random1&lt;&#x2F;code&gt; where 1 million different positions are accessed by random, which takes about 49,7ns per access.&lt;&#x2F;p&gt;
&lt;p&gt;Even when reading 10 million blocks, the access time seems to be stable. The dataset used for these tests is always 1 billion (10^9) blocks big.&lt;&#x2F;p&gt;
&lt;p&gt;We currently see really slow numbers in &quot;make_at_least&quot; column. This is the metric for adding more detail to the OctTree by increasing the level of detail. Current analysis shows that this is mainly because allocation takes a lot of time.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;602644995601727499&amp;#x2F;screenshot_1563752040273.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A light at night by @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In the future, I will have a look if we can speed up Vector allocation even further in these cases. Also, we can evaluate if a separation of data and indices can make increased use of CPU caching even more. Also, a cached version of that OctTree, which holds the last access-information might increase access-performance even more.&lt;&#x2F;p&gt;
&lt;p&gt;The system I am currently building has the chance to replace&#x2F;extend (implementation dependent) the current Chonk system to scale better with larger worlds. It will not replace the ECS system because it just can&#x27;t compete with its performance and convenience in programming.&lt;&#x2F;p&gt;
&lt;p&gt;The OctTree I&#x27;m building stores the data in once continuous vector. That means all data is in one block in memory, which increases performance in ways similar to ECS. In the future, I will try to increase memory efficiency and write about the results :)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other Work&lt;&#x2F;h3&gt;
&lt;p&gt;@Pfau, @imbris, and @Vechro have been working on more crosshair options. You can see this in the settings window.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;603026218677305414&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new crosshairs&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Qutrin has been working on camera modes. For now, there will be two modes: first person and third person. First person mode would only be used for build mode for now. There will be lots of experimenting and discussion in the future to find the best way to handle the different views. Thought has to be put into how it will affect PVP and allow players to look around corners.&lt;&#x2F;p&gt;
&lt;p&gt;@Vechro has been working a layout prototype for the social window, which could include a friends and online list.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;567747595510874141&amp;#x2F;601851783890862091&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;In other news, @Yeedo is working on debugging glider code, @imbris is at work on tooltips, and @AngelOnFira and @YuriMomo are working on improving the CI system for Veloren. There will be more to come on this topic in the following weeks, but if you want a sneak peek, &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dev.to&#x2F;angelonfira&#x2F;rust-ci-35cg-temp-slug-7525864?preview=92263c0071434a6d75ffc28c6761594a9301a9c630f3dc5cdf67807f88be6b7037943ae70dc2ae8d9e857440f9730ebe205edaf258c801d21384f277&quot;&gt;check this out&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;602653066025762825&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Actually image of @Pfau opening the blog. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 24</title>
          <pubDate>Mon, 15 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-24/</link>
          <guid>https://veloren.net/blog/devblog-24/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Zesterer, @xacrimon, @Pfau, and @xMAC94x!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot Winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @Vechro and @Pfau for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;600705713525883014&amp;#x2F;WD16ZwoA7M9VdV_JFpFTOtJ9jfm35fB2ePBLEybkua8.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Peaking out of the chimney&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;content-additions&quot;&gt;Content Additions&lt;&#x2F;h3&gt;
&lt;p&gt;Recently, we&#x27;ve seen the addition of the savannah biome! Another task has been populating this region with objects like bones and abandoned structures. Also, @Pfau has been working on getting new structures in, such as the witch hut and the tower ruins. He is also working with @Vechro on better heads and hairstyles for female orcs.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;600763428197367867&amp;#x2F;screenshot_1563303537857.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The savannah biome&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;599622299490189322&amp;#x2F;screenshot_1563031375359.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau&amp;#x27;s witch hut&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;599343458800500749&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A female orc&amp;#x27;s new head&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;nightly-downloading&quot;&gt;Nightly Downloading&lt;&#x2F;h3&gt;
&lt;p&gt;While @Songtronix is working on Airshipper, we need a reliable way for users to download new versions of Veloren when they come out. @LunarEclipse made a nice gif to show how to go about this from &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;download&#x2F;index.html&quot;&gt;the book&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;600707695586050049&amp;#x2F;3h4k8Hk.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;How to download a CI build&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;stable-rust&quot;&gt;Stable Rust&lt;&#x2F;h3&gt;
&lt;p&gt;@Timo has been making large strides in removing all of the nightly Rust used in the codebase. Moving away from nightly will help the project in many ways. First, upgrading stable versions of Rust is much safer than nightly. Although nightly has more features, it is intrinsically more likely to break something or regress. One of the reasons this had to happen now is that a crate broke on the newest nightly. It is common enough that regressions in nightly break crates and code that are not stable.&lt;&#x2F;p&gt;
&lt;p&gt;Also, many of the other Rust tools that are used on the project are guaranteed to run on stable. Since not all tools are built for all the nightly builds, we&#x27;ve had to lock to a certain version of nightly so that it would include everything we need.&lt;&#x2F;p&gt;
&lt;p&gt;This task is part of the general codebase cleanup. In the coming weeks, we are aiming to also upgrade to the latest versions of crates we use. There is still also a push on keeping the codebase clean with Clippy and no warnings.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;community-work&quot;&gt;Community work&lt;&#x2F;h3&gt;
&lt;p&gt;A community member, @Juli199696, has been doing some cool graphical things with ReShade. Let&#x27;s take a look at a few of them!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;598858086383353866&amp;#x2F;veloren-voxygen_2019-07-11_14-44-32.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;598858110425366528&amp;#x2F;reshade.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;599137225908944906&amp;#x2F;veloren-voxygen_2019-07-12_09-14-26.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The &amp;quot;comic&amp;quot; effect&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;599962750508335104&amp;#x2F;veloren-voxygen_2019-07-14_15-53-20.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;599962732111855616&amp;#x2F;veloren-voxygen_2019-07-14_15-55-08.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;599962761203679273&amp;#x2F;veloren-voxygen_2019-07-14_15-56-20.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;&amp;quot;Veloren mountain&amp;quot; with some different lighting effects&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;600050683755888650&amp;#x2F;veloren-voxygen_2019-07-14_21-46-16.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A castle at sunset. See you next week! :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 23</title>
          <pubDate>Mon, 08 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-23/</link>
          <guid>https://veloren.net/blog/devblog-23/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Pfau, @Zesterer, @Songtronix, @Qutrin, @Sheldon, @Timo, @AngelOnFira, @Slipped, @imbris, and @Desttinghim!&lt;&#x2F;p&gt;
&lt;p&gt;This week, we reached 100 stars on the GitLab repo! The stars are impacting the project quite a bit. Veloren is currently the 100th most starred project on GitLab! This helps the project become more visible, and shows the contributors that their work means something. So if you can &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&quot;&gt;spare the star&lt;&#x2F;a&gt;, we would love to have it 😀&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot Winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @Zesterer for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;597840720916774912&amp;#x2F;U01qD8m.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The river that splits biomes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;veloren-in-the-terminal-teloren&quot;&gt;Veloren in the Terminal, Teloren&lt;&#x2F;h3&gt;
&lt;p&gt;A little something that @Zesterer has been working on this week is having Veloren be playable from in the terminal. You are able to see a top-down view of the game.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;596786038974971944&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren in the Terminal!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;You can navigate with simple controls, WASD. Alternatively, it has click-to-move controls. This is just a small step to the level of accessibility that the team is aiming for with Veloren. Why shouldn&#x27;t you be able to play the game from a server that only has a terminal? :P&lt;&#x2F;p&gt;
&lt;p&gt;Be sure to check out the Teloren project &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zesterer&#x2F;teloren&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;597839635733020672&amp;#x2F;screenshot.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;ASCII character representations of the terrain&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;changes-to-ci&quot;&gt;Changes to CI&lt;&#x2F;h3&gt;
&lt;p&gt;This week, CI was updated to include some new checks. When Veloren is compiled, previous success has been achieved if an executable is produced at the end. However, there are many other warnings that the compiler was giving, from issues such as unused variables or imports. On compiling, you would get a massive spew of these issues.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;warning: unused import: `log::warn`
&lt;&#x2F;span&gt;&lt;span&gt;--&amp;gt; common&#x2F;src&#x2F;sys&#x2F;combat.rs:7:5
&lt;&#x2F;span&gt;&lt;span&gt;|
&lt;&#x2F;span&gt;&lt;span&gt;7 | use log::warn;
&lt;&#x2F;span&gt;&lt;span&gt;|     ^^^^^^^^^
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;warning: unused imports: `AnimationInfo`, `Animation`, `ForceUpdate`, `HealthSource`, `OnGround`
&lt;&#x2F;span&gt;&lt;span&gt;--&amp;gt; common&#x2F;src&#x2F;sys&#x2F;controller.rs:3:22
&lt;&#x2F;span&gt;&lt;span&gt;|
&lt;&#x2F;span&gt;&lt;span&gt;3 |         ActionState, Animation, AnimationInfo, Attacking, Controller, Gliding, HealthSource,
&lt;&#x2F;span&gt;&lt;span&gt;|                      ^^^^^^^^^  ^^^^^^^^^^^^^                                  ^^^^^^^^^^^^
&lt;&#x2F;span&gt;&lt;span&gt;4 |         Jumping, MoveDir, OnGround, Respawning, Rolling, Stats, {ForceUpdate, Ori, Pos, Vel},
&lt;&#x2F;span&gt;&lt;span&gt;|                           ^^^^^^^^                               ^^^^^^^^^^^
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;warning: unused variable: `platform_specific`
&lt;&#x2F;span&gt;&lt;span&gt;--&amp;gt; common&#x2F;src&#x2F;assets&#x2F;mod.rs:124:13
&lt;&#x2F;span&gt;&lt;span&gt;|
&lt;&#x2F;span&gt;&lt;span&gt;124 |         let platform_specific = &amp;quot;&#x2F;usr&#x2F;share&#x2F;veloren&#x2F;assets&amp;quot;.to_string();
&lt;&#x2F;span&gt;&lt;span&gt;|             ^^^^^^^^^^^^^^^^^ help: consider prefixing with an underscore: `_platform_specific`
&lt;&#x2F;span&gt;&lt;span&gt;|
&lt;&#x2F;span&gt;&lt;span&gt;= note: #[warn(unused_variables)] on by default
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Some of the warnings&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;A task force comprised of @Timo, @Songtronix, @Slipped, and @Qutrin remedied this problem. Much of it consisted of cleaning and removing &quot;dead&quot; code, or other things that were out of place. Now, the warnings have been fully eradicated.&lt;&#x2F;p&gt;
&lt;p&gt;To keep this from happening in the future, CI is set to fail when any warnings are given on a branch. This will force whoever is working on that branch to fix all of these warnings before merging.&lt;&#x2F;p&gt;
&lt;p&gt;The next step is another level of verification. There is a Rust project called Clippy that provides even deeper linting on top of what is given by the Rust compiler. Linting is defined as:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;Linting is the automated checking of your source code for programmatic and stylistic errors. This is done by using a lint tool (otherwise known as linter). A lint tool is a basic static code analyzer.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The checks that Clippy does help improve performance, maintain readability and find redundant code. There is, however, an issue with Clippy. It is quite nit-picky.&lt;&#x2F;p&gt;
&lt;p&gt;This can be alright in certain situations, but in others can be detrimental. For example, when working on preliminary ideas for complex modules of Veloren, it can be obnoxious to make sure that your code is always readable.&lt;&#x2F;p&gt;
&lt;p&gt;The first results of Clippy CI showed that it intruded too much into the development process. For now, we are going to try and get at least a small portion of Clippy working. That way, as we add more of the features Clippy has to offer, we can make sure it doesn&#x27;t intrude on any developer&#x27;s work.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;597882052779704348&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The dark tunnel to where the unresolved warnings used to be stored :P &lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;general-work&quot;&gt;General Work&lt;&#x2F;h3&gt;
&lt;p&gt;This week, we saw many smaller contributions.&lt;&#x2F;p&gt;
&lt;p&gt;@Qutrin has been working on a build mode. This was done quite easily due to the ray casting API and @Zesterer&#x27;s work on block updates.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;597162897633706017&amp;#x2F;screenshot_1562445063748.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The Linux Mint logo partly built in Veloren!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Pfau has also been putting in work on some new models. He has created both Acacia trees and tower ruins. He has also set up the bag UI so that it scales with the available space. Lot of work has also been put into crosshair designs to make them more customizable, and user-friendly.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;597436869139103755&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A look at the new crosshair. Great cliffs too!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Timo has finished their work on opening the command chat with &lt;code&gt;&#x2F;&lt;&#x2F;code&gt;. This was complex in the past because conrod, the 2D GUI library Veloren uses, doesn&#x27;t allow cursor position to be changed easily.&lt;&#x2F;p&gt;
&lt;p&gt;The problem was that when the chat input was empty and &lt;code&gt;&#x2F;&lt;&#x2F;code&gt; was inserted into it using code, the cursor was in front of it so it looked like this: &lt;code&gt;|&#x2F;&lt;&#x2F;code&gt; (&lt;code&gt;|&lt;&#x2F;code&gt; is cursor, &lt;code&gt;&#x2F;&lt;&#x2F;code&gt; is slash). @Timo updated our fork of conrod to remedy this problem. Now, it is easy to enter the chat box through the code with:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;TextEdit::new(input)
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;460.0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;color&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;TEXT_COLOR&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;font_id&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.fonts.opensans)
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cursor_pos&lt;&#x2F;span&gt;&lt;span&gt;(pos);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;597826574095613962&amp;#x2F;597836986786643969&amp;#x2F;screenshot_1562445991127-1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@imbris modified the client to spawn .vox models with the new block modification capability&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Cedric has been working on integrating mod support into Veloren. However, there are some technical difficulties with this task. It is important that memory is passed properly between the core game and the mods. @Cedric has first started by trying to make animation mods.&lt;&#x2F;p&gt;
&lt;p&gt;By modularizing them, there can be a more effective separation between the math that runs the animations and how they execute in game. This will also allow animations to be tweaked while the game is running. Since it takes quite a bit of time for Veloren to compile, this will greatly improve development time.&lt;&#x2F;p&gt;
&lt;p&gt;This methodology of designing for separation would help Veloren out in the long run, however much of what has already been implemented would have to be re-organized. We will look further into this in later posts.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;597875321496141855&amp;#x2F;screenshot_1562614858073.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;View from a tower at sunset. See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 22</title>
          <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-22/</link>
          <guid>https://veloren.net/blog/devblog-22/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Zesterer, @timo, @Slipped, @LunarEclipse, @Qutrin, @Cedric, @Songtronix, @Pfau, and @Mujina!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @LunarEclipse for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;595358502650642444&amp;#x2F;4Anm6JGeQp-wXrMWdcJb9MmeHAMFgOTSpAhZRyO9nKU.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flying with the starts at sunrise by @LunarEclipse&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;hr&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;595332941316620298&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A view of the current path system from above&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;heads-and-hands-by-slipped&quot;&gt;Heads and hands by @Slipped&lt;&#x2F;h3&gt;
&lt;p&gt;Hello!&lt;&#x2F;p&gt;
&lt;p&gt;I worked a bit on adding new player heads into the game this week. @zesterer managed to integrate some skeletal attributes that allow us to treat different player heads uniquely in the animation code. This allows each head to look proper and natural even at varying sizes, and with beards or long hair.&lt;&#x2F;p&gt;
&lt;p&gt;After @zesterer&#x27;s work, I was able to get everything into place. @Pfau came through for some much-needed cleanup to get everything looking neat, tidy, and decapitation-free!&lt;&#x2F;p&gt;
&lt;p&gt;Finally, we&#x27;re able to show off the six unique races that we have so far in Veloren: humans, dwarves, elves, orcs, undead, and our unique race, the danari.&lt;&#x2F;p&gt;
&lt;p&gt;Each race has a male and female option, with some races being a bit bigger or smaller than others. The result is a really unique and varied feel that we plan to continue to build on as we add more characteristics, like hair, hair color, eye color, and other unique racial traits, at a later time.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542712513767145484&amp;#x2F;595243334864338954&amp;#x2F;Veloren_2019-06-29_16-45-48_Trim-1.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;p&gt;Second, the other thing I worked on this week were wielding animations, which allow the player to actually hold their weapon instead of just putting it right back onto their back each time they swing it.&lt;&#x2F;p&gt;
&lt;p&gt;These animations are the first step toward fleshing out combat, they should work as a nice compliment to every future combat animation, tying everything together. These animations are in the game but not triggered yet so they&#x27;re never seen, but that should come in the next few days.&lt;&#x2F;p&gt;
&lt;p&gt;The next plan is to start building out unique animations per-weapon, so that axes, swords, etc. have some unique behavior.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542712513767145484&amp;#x2F;595243901388849172&amp;#x2F;unknown-1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Avengers assemble!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;595327162479935638&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A look at the current fog system&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;595256448426967051&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A good looking cliff&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 21</title>
          <pubDate>Mon, 24 Jun 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-21/</link>
          <guid>https://veloren.net/blog/devblog-21/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @Qutrin, @AngelOnFira, and @imbris!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @Pfau for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;593088893889413130&amp;#x2F;u-aey2dM52SKwve_U2sF-idBMxtKEaBQI6PaLN6Ag4A.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Sunrise in Veloren by @Pfaunauge&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;This week, lots of ongoing tasks were worked on. This means that not much has been merged, but lots of systems will be ready for next week. @zesterer is working on worldgen for cities, @Timo is working on animations, and many others are making progress of their own.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;592713174466428949&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;592725819969896489&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some of the preliminary work for city worldgen by @Zesterer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;0-3-task-reassessment-meeting&quot;&gt;0.3 Task Reassessment Meeting&lt;&#x2F;h3&gt;
&lt;p&gt;Last weekend, the development team met to take a look at the current progress of 0.3. Since we are about halfway through the milestone, it&#x27;s important to look at how much progress we made, and where we need to be. Another important part of this meeting is assessing the original definition of the milestone, and pushing back tasks that are out of scope.&lt;&#x2F;p&gt;
&lt;p&gt;We looked into six key fields that encompassed much of the definition. These fields were combat, inventories, progression and classes, animation, movement, and collisions. We discussed what we wanted to see in each one, but used the idea of Minimal Viable Product (MVP) to keep the ideas from being too abstract.&lt;&#x2F;p&gt;
&lt;p&gt;For example, if you want to have special kinds of attack for different characters, it&#x27;s important to have a generic character that can do two separate attacks first. That way, the systems are in place to scale to further attacks. Also, by implementing everything required for 0.3 as MVP features, you can make sure you get more functionality in by focusing on the foundation of each feature rather than the polish.&lt;&#x2F;p&gt;
&lt;p&gt;Feel free to take a look at the meeting notes &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;10PfwMBZE3zBRfcNBlNtrgrLEQdYSaqc-4YFd6cCYpds&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;592409059680845854&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A warrior at sunset&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;blockquote&gt;
&lt;p&gt;See you next week!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 20</title>
          <pubDate>Mon, 17 Jun 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-20/</link>
          <guid>https://veloren.net/blog/devblog-20/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors this week, @zesterer, @timo, @liids, @slipped, @Qutrin, @Pfau, @LunarEclipse, and @Cody!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @zesterer for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;590577672090812456&amp;#x2F;Z0FVteCSdQQ6K-bMOItdtuDj3CUBigE8ydGvFPkUj2s.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some snow and grass by @zesterer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;airshipper-by-songtronix&quot;&gt;Airshipper by @Songtronix&lt;&#x2F;h3&gt;
&lt;p&gt;Sometimes developers, and especially users, just want to play the game. Therefore, I started to work on Airshipper (credit goes to Qutrin for the name). Airshipper allows you to download, manage, and play multiple releases, as well as compile the game for yourself.&lt;&#x2F;p&gt;
&lt;p&gt;A question came into mind on how to do this cross-platform with all dependencies Veloren has. The launcher has to make sure that Git, Git LFS and Rust is properly installed. I accomplished this by using &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;subprocess&quot;&gt;subprocess&lt;&#x2F;a&gt;. With it, I try to run e.g. &lt;code&gt;git --version&lt;&#x2F;code&gt;. This is an easy way to clone, compile and test if the requirements are installed on all platforms.&lt;&#x2F;p&gt;
&lt;p&gt;After many design iterations, I settled with a backend and multiple frontends. The backend is a standard rust library, which will deal with about everything needed - from cloning the repository to compiling the game - and I made sure that I won&#x27;t be lazy by forcing me:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;590542187222138951&amp;#x2F;deny_docs.PNG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;ouch&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Currently, the GUI doesn&#x27;t get any attention at all due to many issues that need to get solved, but the terminal version is &lt;em&gt;usable&lt;&#x2F;em&gt;. Now, taking a look at the code, error handling and logging is a very important piece and sometimes monstrosities like this happened:&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;590304034175451166&amp;#x2F;590542201331777558&amp;#x2F;error_handling.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This helper function checks if the dependencies aren&amp;#x27;t installed&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;It&#x27;s a good example to show the current state of Airshipper because this function should say if something else broke instead of telling that the dependency just does not exist while it does.&lt;&#x2F;p&gt;
&lt;p&gt;Currently, Airshipper is in a &lt;em&gt;usable&lt;&#x2F;em&gt; state. You can run it and if all dependencies are installed it should all by itself clone the repository and compile master for you.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;control-system-revamp-by-slipped&quot;&gt;Control System Revamp by @Slipped&lt;&#x2F;h3&gt;
&lt;p&gt;This week I worked with @timo and @Midge on the merge request (MR) to revamp the control system and add a roll animation, focusing on the animation and physics. I got a few things done in this MR:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Added a ~half second roll that can be used with middle mouse to quickly get out of the way of an attack.&lt;&#x2F;li&gt;
&lt;li&gt;Reworked the run to a slower pace. By doing this we allow the player to take in more of the world, emphasize gliding, and we now have a player speed that fits the more compact worldgen that @zesterer recently adjusted to.&lt;&#x2F;li&gt;
&lt;li&gt;Reworked the glider animation to respond to player speed, by rotating up and down and allowing the player to hang lower when you aren&#x27;t moving at all with the glider. This is just the start of what we have planned for glider modifications.&lt;&#x2F;li&gt;
&lt;li&gt;Added the foundation for &quot;wielding&quot; animations, where you can run and stand with your weapon drawn. This isn&#x27;t finished yet so the game doesn&#x27;t visualize any of it, but more to come next week on this!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;world-generation-by-zesterer&quot;&gt;World Generation by @zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;This week, I&#x27;ve spent some time improving world generation. I&#x27;ve redesigned how we do world generation such that world features are cached at multiple layers throughout the system, speeding things up. I&#x27;ve also started work on spawning proper forest varieties: so far we have palm forests, oak forests, pine forests, and snowy pine forests. In the future, I&#x27;ll be adding rainforests, alpine birch forests, savannah trees, mountain shrubs, and many other kinds of plant.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also adjusted mountains to make them consist of more distinct horizontal &quot;levels&quot;. I believe that these levels are more interesting to experience since they distinctly segment the world into interesting areas, rather than having the whole world be a smooth mush of hills. To accompany this, I&#x27;m going to be adding more interesting cliffs, overhangs, and terrain features such as chasms and craters. Right now the world feels quite empty, but this will change.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;590509110336946216&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;589747932941778954&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some of the different types of forests&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;other-work&quot;&gt;Other Work&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;ecs-work-by-midge&quot;&gt;ECS Work by @Midge&lt;&#x2F;h4&gt;
&lt;p&gt;I helped in a group effort involving @Timo and @Slipped to revamp the Control system into the much better Controller system, improve animation, and generally clean up and organize the ECS systems. It&#x27;s a better and more organized &quot;pipeline&quot; that will make future development easier by being much clearer on how the parts connect together.&lt;&#x2F;p&gt;
&lt;p&gt;Looking forward, I can say that @Slipped, is soon to be working on better animations, especially in terms of combat. We were discussing some things earlier and I believe the next step is to implement a weapon-drawing and holstering system. And personally, I&#x27;m taking advantage of the now well-organized systems to finally be able to work on physics overhauling.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;documentation-by-lunareclipse&quot;&gt;Documentation by @LunarEclipse&lt;&#x2F;h4&gt;
&lt;p&gt;I&#x27;ve rewritten the download and compiling sections in the book so new users should find it easier to follow and updated the AUR package so it actually works with 0.2+. While working on the book I found out we can put a rust-toolchain file in the repo so rustup automatically selects nightly without users needing to manually set up directory override.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;590442925947748352&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;See you next week!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 19</title>
          <pubDate>Mon, 10 Jun 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-19/</link>
          <guid>https://veloren.net/blog/devblog-19/</guid>
          <description>&lt;p&gt;Thanks to all of the contributors from the last two weeks, @zesterer, @desttinghim, @scorpion9979, @cody, @timo, @Pfau, @imbris, @JMS, and @Songtronix!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;saturday-screenshot-winner&quot;&gt;Saturday Screenshot winner&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to @Qutrin for this week&#x27;s screenshot. We&#x27;re excited to see what comes out next week!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;585537727190269972&amp;#x2F;screenshot_1559673462249.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An interesting biome transition by @Qutrin&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;Lots of work has been this week in improving the game&#x27;s performance. @desttinghim changed how friction was calculated so that the player could reach top speed at any FPS. @zesterer implemented frustum culling which reduces how much needs to be rendered. @Midge is working on setting up a FPS slider in the settings as well. With all of these improvements, the game is becoming more capable on a wider range of devices.&lt;&#x2F;p&gt;
&lt;p&gt;@zesterer has been working on worldgen again, and this time we are seeing the beginning of cliffs! There is still a lot of work to go on it, but there are already some pretty cool images of them.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;587626309249662977&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A cave going through a cliff&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Another idea that has been going around is varying the look terrain a little. Each block won&#x27;t look exactly the same as the one beside it, but quite similar. This gives an interesting variation that makes the terrain feel more alive. Also, shadows from trees interact really nicely with them.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;587574129486725131&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A player in the forest with the new terrain.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;586148057897500683&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;586148304165797899&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Improved shadows from trees and in caves&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;586088715491737600&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Showing how only terrain that needs to rendered is shown. Terrain that is beyond the fog doesn&amp;#x27;t get rendered.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;585970361439485982&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Gliding over a desert of trees (to be fixed :P)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 18</title>
          <pubDate>Mon, 03 Jun 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-18/</link>
          <guid>https://veloren.net/blog/devblog-18/</guid>
          <description>&lt;p&gt;This week was supposed to be a bit slower after the crunch time of 0.2. That said, a meeting was still held to discuss 0.3. The blog will be a little bit shorter this week to promote breaks and downtime for healthy development :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;Just as a reminder on how much progress we&#x27;ve made in the last month, here is an image from the beginning of May&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;585052316017623087&amp;#x2F;noo6hytyoeu21.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;And here is one from now&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;585052433634426880&amp;#x2F;3czqevfo7n131.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Let&#x27;s keep up this great progress for 0.3!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;screenshot-saturday-by-slipped&quot;&gt;Screenshot Saturday by @Slipped&lt;&#x2F;h3&gt;
&lt;p&gt;We are announcing the return of Screenshot Saturday! Those who have been with us for a while will remember the competition that we held every week to find the best screenshot and feature it at the top of the sub, on Discord and on Twitter. We moved away from it as we started rewriting the engine, but now with a fresh version released and the world looking better than ever, it&#x27;s time to bring it back! The guidelines:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;In order to be considered, you need to make an individual post in this subreddit, so no replies or Discord posts will be considered. Captions help!&lt;&#x2F;li&gt;
&lt;li&gt;The new week will begin as soon as the winner thread is posted, which will be at around 18:00 [GMT+0] on Saturday.&lt;&#x2F;li&gt;
&lt;li&gt;In order to be considered, you&#x27;ll have to be using the master branch of Veloren. Experimental branches won&#x27;t be considered, to keep the competition accessible.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And that&#x27;s it! This time around we&#x27;re considering some rewards like in-game mentions or pet names for the victors each week that might be programmed straight into the game, so keep an eye out for more news. The first winner will be picked this Saturday, good luck!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;583662031438217216&amp;#x2F;screenshot_1559225872419.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New shadow system in a forest&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;initial-0-3-meeting&quot;&gt;Initial 0.3 meeting&lt;&#x2F;h3&gt;
&lt;p&gt;Last Sunday, a group of the devs met up to discuss what 0.3 would look like. Here are some of the important notes, but feel free to check out the document for yourself &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;15i50N7dISQBaGif1ilfVwhhmt3Ylh46Lam-Lw3l8Gcg&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;584816144959930368&amp;#x2F;Discord_0SpUt0my2d.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The devs in the meeting&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;definition&quot;&gt;Definition&lt;&#x2F;h4&gt;
&lt;p&gt;An important part of a release is having a definition for it. This helps when assigning tasks. If the tasks seem to be required for the definition to be completed, then it should be part of the release. Here is the working definition of 0.3:&lt;&#x2F;p&gt;
&lt;p&gt;A player should be able to progress by completing objectives or combat. There should be a variety of creatures in the world for the players to kill. An online service should keep track of the player’s progress across the different official server.&lt;&#x2F;p&gt;
&lt;p&gt;The game should generate more features that the player can explore. This should also include creature spawning as well as NPC spawning. The player should experience a world with weather and day&#x2F;night cycles.&lt;&#x2F;p&gt;
&lt;p&gt;The player should have access to an inventory that allows them to collect items from killed enemies, or different resources around the world. The player should move and attack in an elegant manner. They should also have full access to customizing their character’s look.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;584821471470419974&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The beginnings of the winter biome&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;timeline&quot;&gt;Timeline&lt;&#x2F;h4&gt;
&lt;p&gt;With 0.2 taking about 2 months, we decided to continue with that estimate for 0.3. The &lt;em&gt;tentative&lt;&#x2F;em&gt; release date is July 31st. Even though we have more ambitious goals for this release, it is important to try and keep a standard release schedule. This has a few reasons.&lt;&#x2F;p&gt;
&lt;p&gt;First, the end users of Veloren, the players, will have a schedule that they can rely on. This will become more important in the future, once releases approach 1.0, and after that. Players will know when the next version will drop, which can help keep them coming back. They might drop out for a bit, but they know when to come back. There was a great section of a talk at GDC by the Path of Exile people on this topic, check it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;tmuy9fyNUjY?t=1076&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Second, adding constraints, such as deadlines, to projects is super important. With no deadlines, it can be easy to keep working on things that are out of the scope of a release. It can help make sure that if there are too many things to get done in one release, tasks can get moved to the next release.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;584177728916291589&amp;#x2F;screenshot_1559348833873.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau working on buildings&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 17</title>
          <pubDate>Wed, 29 May 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-17/</link>
          <guid>https://veloren.net/blog/devblog-17/</guid>
          <description>&lt;p&gt;This week we saw the release of 0.2! We take a look at some of the testing, as well as the new combat system by @Timo. Make sure to check out the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;veloren.net&#x2F;welcome&quot;&gt;downloads page&lt;&#x2F;a&gt; to download and play the release!&lt;&#x2F;p&gt;
&lt;p&gt;Big thanks to all of the contributors who have contributed to 0.2! @Zesterer, @imbris, @Timo, @slipped, @Pfau. @Desttinghim, @Algorhythm, @Yeedo, @robojumper, @AngelOnFira, @Qutrin, @xMAC94x, @Cody, @JMS, @LunarEclipse, @humb1t, @Timchenko, @YuriMomo, @RustyBamboo, @Erocs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;analysis-by-yurimomo&quot;&gt;Analysis by @YuriMomo&lt;&#x2F;h3&gt;
&lt;p&gt;Last weekend, there was a large emphasis on testing. We ran two organized server stress tests. This was so that we could see how the server handled many people the server could handle, but also find as many bugs as possible.&lt;&#x2F;p&gt;
&lt;p&gt;During the testing, many issues were found that slowed down the game. YuriMomo did quite a bit of analysis to help find problems. From this, we got lots of cool information.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;581930423945527300&amp;#x2F;Dbhs6OiJFe.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;p&gt;In this video, we can see how a frame is rendered. There are a few steps to this.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Render terrain&lt;&#x2F;li&gt;
&lt;li&gt;Render character&lt;&#x2F;li&gt;
&lt;li&gt;Apply post-processing, such as gamma correction, saturation adjustment, and FXAA&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;With tools that can break apart the frame, we can look a lot deeper into issues, and where processing time is being spent.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;581933705770041363&amp;#x2F;AqGKx5t5f9.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Another example of a frame rendering&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307840938377217&amp;#x2F;581932430336983051&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Veloren with part of the terrain rendered. As you can see, although Veloren stores what is underground, it is not rendered. This is an optimization that prevents rendering anything that isn&#x27;t visible. This is a technique known as &quot;face occlusion culling&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;On top of that, Veloren also makes use of back-face culling, which hides polygons that are facing away from the camera. In the future, Veloren will also start using frustum culling. This will prevent anything that is not in the field of view of the camera from being rendered.&lt;&#x2F;p&gt;
&lt;p&gt;All of these optimizations help Veloren run on slower systems, which is a key principle of the development.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;combat-by-timo&quot;&gt;Combat by @Timo&lt;&#x2F;h3&gt;
&lt;p&gt;Fighting with and against other players or NPCs is something that immediately made the game much more fun. This week the combat MR was merged, enabling players to attack one another with knockback, damage, death and respawning.&lt;&#x2F;p&gt;
&lt;p&gt;There are 4 main parts this needed work on:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;A better input system&lt;&#x2F;li&gt;
&lt;li&gt;Communication between client and server&lt;&#x2F;li&gt;
&lt;li&gt;Damage and Death&lt;&#x2F;li&gt;
&lt;li&gt;Respawning&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Extras:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Red color damage indicator&lt;&#x2F;li&gt;
&lt;li&gt;Kill command&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;1-a-better-input-system&quot;&gt;1. A better input system&lt;&#x2F;h4&gt;
&lt;p&gt;In order to allow inputs from the mouse to be treated the same as input from the keyboard, I decided to create a &lt;code&gt;KeyMouse&lt;&#x2F;code&gt; enum containing possible &lt;code&gt;Key&lt;&#x2F;code&gt;s and possible &lt;code&gt;Mouse&lt;&#x2F;code&gt;buttons. The &lt;code&gt;key_map&lt;&#x2F;code&gt;, previously used to map mechanical keys to in-game inputs, was changed to map a &lt;code&gt;KeyMouse&lt;&#x2F;code&gt; event to an in-game input. In order to not confuse the names, this input to the game is called &lt;code&gt;GameInput&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;An example for a &lt;code&gt;KeyMouse&lt;&#x2F;code&gt; type is &lt;code&gt;KeyMouse::Mouse(Left)&lt;&#x2F;code&gt; while the default corresponding &lt;code&gt;GameInput&lt;&#x2F;code&gt; is &lt;code&gt;GameInput::Attack&lt;&#x2F;code&gt;. A player can change the &lt;code&gt;key_map&lt;&#x2F;code&gt; as they wish to make a mechanical key trigger an attack or make mouse buttons move the player.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;2-communication-between-client-and-server&quot;&gt;2. Communication between client and server&lt;&#x2F;h4&gt;
&lt;p&gt;A client shouldn&#x27;t be able to control how much health an enemy has, because this would be very easy to abuse. Therefore the client has to ask the server to make an attack for him and send the results back. But because games need to have fast feedback to make actions like attacking feel good, the client simulates the effect of the attack locally. The structure of the project makes this very easy, as most of the code is shared in the &lt;code&gt;common&lt;&#x2F;code&gt; crate anyway.&lt;&#x2F;p&gt;
&lt;p&gt;So when a client front-end like &lt;code&gt;voxygen&lt;&#x2F;code&gt; wants to start an attack, it asks the client to do so. Because things like jumping and attacking are event based rather than continuous like movement, there are NullStorage components for these actions. These components are used as flags to communicate a client is doing something. When the client has a &lt;code&gt;Attacking&lt;&#x2F;code&gt; flag, an ECS system can check for that and act accordingly. When the attack is over, the flag can be removed.&lt;&#x2F;p&gt;
&lt;p&gt;This was my initial plan, but as it turned out later, players could build a bot to spam attack hundreds of times per second, killing everything in sight. To solve this problem, I added some data to the &lt;code&gt;Attacking&lt;&#x2F;code&gt; component: A &lt;code&gt;time&lt;&#x2F;code&gt; field used to determine the time since the attack has started. Now, if a client requests to attack, but the last attack was 1 nanosecond ago, we can just deny it.&lt;&#x2F;p&gt;
&lt;p&gt;As the ECS systems run on both client and server, no extra effort had to be made in order to simulate an attack locally, before the server has time to sync it.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;3-damage-and-death&quot;&gt;3. Damage and Death&lt;&#x2F;h4&gt;
&lt;p&gt;When the ECS system responsible for parsing player inputs realizes an attack has been made, it tries to find out which entities are hit by it. For this, the following code is used:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; entity != b
&lt;&#x2F;span&gt;&lt;span&gt;&amp;amp;&amp;amp; !stat_b.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;is_dead&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;&amp;amp;&amp;amp; pos.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;distance_squared&lt;&#x2F;span&gt;&lt;span&gt;(pos_b.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;) &amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;50.0
&lt;&#x2F;span&gt;&lt;span&gt;&amp;amp;&amp;amp; dir.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;angle_between&lt;&#x2F;span&gt;&lt;span&gt;(pos_b.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span&gt;- pos.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;to_degrees&lt;&#x2F;span&gt;&lt;span&gt;() &amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;70.0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This code checks if the entity is even alive, otherwise it wouldn&#x27;t make sense to attack it. Then it determines if the entity is near enough to the player in order to be affected by it. The last line checks if the player looks in the direction of the target, so if the sword-swing-animation was already implemented, it would hit the entity.&lt;&#x2F;p&gt;
&lt;p&gt;If all of these conditions are true, the entity&#x27;s health is reduced and knockback is applied (this works by adding some values to the velocity).&lt;&#x2F;p&gt;
&lt;p&gt;If an entity has zero health, another ECS system gets activated and adds the &lt;code&gt;Dying&lt;&#x2F;code&gt; component flag to it (We still need to implement a check to see if the client is already dead).
With this flag, the next time the server ticks, the entity is hidden or removed, depending on whether it is a player or an NPC. As a player needs to be able to respawn, we can&#x27;t fully delete them.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;4-respawning&quot;&gt;4. Respawning&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;Respawn&lt;&#x2F;code&gt; is an input like any other. What&#x27;s special is that &lt;code&gt;Respawn&lt;&#x2F;code&gt; only works when the character is dead, while &lt;code&gt;Attack&lt;&#x2F;code&gt; or &lt;code&gt;MoveForward&lt;&#x2F;code&gt; only work when the player is alive.
Respawning a player is very simple, as it never really died. We just need to increase the player&#x27;s health and tell him &quot;Hey, you are alive again&quot; and that&#x27;s it. For a better experience, we also set his position a few blocks in the air to indicate he respawned and was not just invisible for a short time (which technically he was).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;581930884840816655&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A view of the depth buffer&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467861553178345502&amp;#x2F;583298164380139551&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;583322890036838410&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;583271689085779969&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The beginning of cave systems!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;583314381140525132&amp;#x2F;screenshot_1559143315941.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;583270036890845185&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new shadow system&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;582950491554578435&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A group during the community testing day&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;582948284587442205&amp;#x2F;screenshot_1559056090798.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Beach day!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;582654239646548012&amp;#x2F;Screenshot_20190527_213941.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The first recorded Veloren &amp;quot;rage quit&amp;quot;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 16</title>
          <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-16/</link>
          <guid>https://veloren.net/blog/devblog-16/</guid>
          <description>&lt;p&gt;This week, we make a call for testers! We also take a look at some of the work that contributors have been doing. We have updates from @Zesterer, @Slipped, @imbris, @Desttinghim and @Algorhythm.&lt;&#x2F;p&gt;
&lt;p&gt;Thank you to this week&#x27;s contributors, @Zesterer, @imbris, @Desttinghim, @Slipped, @AngelOnFira, @Pfau, @Cody, and @Qutrin!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;call-for-testers&quot;&gt;Call for testers&lt;&#x2F;h3&gt;
&lt;p&gt;This week is all about one thing: testing! With the 0.2 release just a week away, our main priority is switching from feature addition to bug finding and fixing. This weekend, fixes will be the team&#x27;s only focus.&lt;&#x2F;p&gt;
&lt;p&gt;If you are willing to help, we would be super grateful! The more people with diverse computer hardware, the better. In the Discord server, feel free to make use of the #testing and #support channels to find out what you can do. Another way to submit issues you find is through the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;issues&quot;&gt;GitLab issue tracker&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;vignette.wikia.nocookie.net&amp;#x2F;half-life&amp;#x2F;images&amp;#x2F;8&amp;#x2F;88&amp;#x2F;GLaDOShd_Portal_2.png&amp;#x2F;revision&amp;#x2F;latest?cb=20120621172636&amp;amp;path-prefix=en&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Your specimen has been processed and we are now ready to begin the test proper.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;chonks-by-zesterer&quot;&gt;Chonks by @Zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;The storage of world data is currently rather primitive. The terrain exits in large, heap-allocated arrays called &quot;chunks&quot;. These had some issues, however.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If a chunk was all the same type of block, it still required a lot of memory to store&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Chunks took a long time to generate&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;We can&#x27;t represent really tall things in the game without using a lot of memory&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;To solve all of these issues, I decided to start work on an alternative system to store terrain data. These structures are a combination of &quot;columns&quot; as used in older versions of Minecraft) and 3D &quot;chunks&quot;. &quot;Chonks&quot; was the natural combination of these two words.&lt;&#x2F;p&gt;
&lt;p&gt;Chonks work by splitting the world up into square-based columns. Each column has an &quot;offset&quot; value that determines at what altitude its data is intended to represent. After that follows any number of &quot;sub-chunks&quot;: cubic chunk-like structures that contain block data. The important thing to realize is that these structures are dynamic, and so will grow only according to the complexity of the information they have to store. Above the sub-chunks, the chonk returns &quot;air&quot; and below the offset, the chonk returns &quot;stone&quot;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;580130550937944084&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Visual representation of Chonks&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Sub-chunks also have an additional optimization: homogeneity. Sub-chunks can be represented by a single block if all of their constituent blocks are identical. This ends up being an extremely common thing, with homogeneous blocks making up most underground spaces and virtually all above-ground spaces.&lt;&#x2F;p&gt;
&lt;p&gt;After implementing this system, the game experienced a massive reduction in memory usage, huge improvements in terrain generation performance, significantly lower network bandwidth, faster collision detection, and the ability to create arbitrarily high mountains (the maximum limit is actually only a little under 12x the distance to the moon).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;580025873814781962&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;579829649048207379&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Here, we can see that the new generation system only works to generate what it needs to. This means that worlds will load much faster.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;work-by-contributors&quot;&gt;Work by contributors&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;animations-and-pets-by-slipped&quot;&gt;Animations and pets by @Slipped&lt;&#x2F;h4&gt;
&lt;p&gt;First thing I was able to do this week was swapping out the &#x2F;pet spawn from a duplicate of the player into a pig! Check him out, he&#x27;s pretty cute. This marks the first quadruped that we&#x27;ve bought into the game, and it&#x27;s especially nice because it should make bringing in a whole lot of other 4-legged animals much easier since we&#x27;re going to be able to use its skeleton as an animation template for others. With minor tweaks, we should be able to really amp up the number of mobs. We&#x27;ve rigged up the pig and taught it how to idle, jump and run just like the player does, and he&#x27;ll follow you around as long as you&#x27;re in-game.&lt;&#x2F;p&gt;
&lt;p&gt;Second, in a really cool team effort we&#x27;ve managed to get hang gliders in this week! Zesterer got some awesome physics completed for it, Pfau created a great model, and I managed to create the new gliding animation. Gliding from mountain to mountain is a ton of fun, so check it out, especially with a group!&lt;&#x2F;p&gt;
&lt;p&gt;Third, the WIP part of my update is combat animation. Timo has nearly gotten the huge attack merge request completed, and that means that we&#x27;ll soon be able to fight the pigs and other players! Sorting out how to integrate combat animations into the existing skeleton is a bit tricky, I&#x27;ve been exploring the options for the cleanest way to do it that will provide all the options we could need. The goal for 0.2.0 is a simple swing with a 2-handed sword, and I&#x27;m hoping I&#x27;ll have something to show around the middle of this week.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ui-interactions-by-imbris&quot;&gt;UI interactions by @imbris&lt;&#x2F;h4&gt;
&lt;p&gt;We had a lot going on this week as the date for feature freeze is rapidly approaching. This week I added a new widget, the ImageSlider. It is based on conrod&#x27;s slider widget but uses images instead of just drawing rectangles. Additionally, it can be used to select discrete (i.e. integer) values which will be useful in the character selection screen and other menus.&lt;&#x2F;p&gt;
&lt;p&gt;On that note, I worked with @Pfau to create a slider to adjust the volume of the newly added music and lowered the default volume to 50%. Additionally, @Pfau, @Zest, and I added another slider for adjusting the view distance. The currently allowed range is from 1 to 25 chunks with a default of 5. Both these sliders can be found in the settings menu in-game.&lt;&#x2F;p&gt;
&lt;p&gt;In complement to this, I have also added three new buttons for: screenshots (F4), toggling the debug window, which shows fps (F3), and toggling full screen (F11). For maximum immersion, you can enable full screen and then hide the hud using F2 (perfect for screenshots).&lt;&#x2F;p&gt;
&lt;p&gt;In addition, I fixed the crash that occurred when minimizing the voxygen&#x27;s window. This was due to a resize event to a size of zero which actually triggers two separate panics.&lt;&#x2F;p&gt;
&lt;p&gt;First, the new pre-processed render target texture was resized to 0 which panics. Second, the camera was assigned NaN for its aspect-ratio. The former was fixed by not resizing the buffer to have dimensions &amp;lt; 1 and the latter was fixed by defaulting to an aspect ratio of 1.0 if the calculated ratio was not normal. Learn more about that &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;std&#x2F;primitive.f32.html#method.is_normal&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You may have also noticed this week that we now have backtraces automatically produced without having to set any environment variables. This was accomplished by using the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;backtrace&quot;&gt;backtrace crate&lt;&#x2F;a&gt; in our custom panic hook. Finally, I have worked on displaying character&#x27;s names and health bars via drawing conrod widgets within the 3d world.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;579712435817152522&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Fun with specs!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;audio-work-by-desttinghim&quot;&gt;Audio work by @Desttinghim&lt;&#x2F;h4&gt;
&lt;p&gt;This week I worked on implementing the beginnings of the audio layer for Veloren. Right now, the system is only capable of handling music and playing one audio file at a time. Music is selected at random whenever one song ends.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;chunk-meshing-by-algorhythm&quot;&gt;Chunk meshing by @Algorhythm&lt;&#x2F;h4&gt;
&lt;p&gt;I re-wrote some of the chunk meshing code to make it more efficient. The previous system re-meshed a lot of chunks several times per tick and cloned mesh data over 1 voxel at a time, which for 34^3 = 39304 voxels per chunk wasn&#x27;t very efficient. Now the meshing code uses a HashMap to remove duplication and only clones around Arc&lt;Chunk&gt; which is much faster. With @Zesterer&#x27;s other improvements, chunk meshing is now really fast.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;548997130774380544&amp;#x2F;579925416471560214&amp;#x2F;screenshot_1558333148007.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Health bars and name tags&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;548997130774380544&amp;#x2F;579926729758474250&amp;#x2F;screenshot_1558335672982.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;View distance with new changes&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;579914157550338070&amp;#x2F;screenshot_1558329169265.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;579355989375975434&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Flight!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;579816852503527424&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Interesting terrain generated by cosine interpolation&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 15</title>
          <pubDate>Mon, 13 May 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-15/</link>
          <guid>https://veloren.net/blog/devblog-15/</guid>
          <description>&lt;p&gt;Lots of great art this week! In programming, we take a look at the ever-approaching 0.2 milestone and its tasks. Thank&#x27;s to @Pfau for carrying this blog with his art section! It includes great content from greats, including @Yurimomo and @Slipped. Enjoy!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Timo, @Zesterer, @imbris, @Pfau, @Yxo, @humb1t, @AngelOnFira, @MidgeOnGithub, @Yurimomo, @Slipped, and @robojumper!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;0-2-task-meeting&quot;&gt;0.2 Task Meeting&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;task-reassessment-and-milestone-definition&quot;&gt;Task reassessment and milestone definition&lt;&#x2F;h4&gt;
&lt;p&gt;This week, a group of contributors met to reassess the tasks to be completed for the 0.2 milestone. Feel free to check out the meeting notes &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;13u8x_FwSP6fT6lSJoorMHYkLpUE6K4ZT_fddi_7YZWc&#x2F;edit?usp=sharing&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The key focus points were determining what still needed to be done, and what was assigned to the 0.2 milestone that could be pushed to 0.3. To encompass both points, a definition of the milestone was created.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;In 0.2, a player should be able to enter a server and see other players. A player should be able to move around a procedurally generated world. They should be able to interact with NPCs by attacking them with 1 type of weapon and 2 kinds of attacks.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;By looking at this definition, we could more easily see what problems were out of the scope of 0.2. Another deciding factor was which tasks were required to make a requirement work, and which would be just nice to have. Nice to have ones were moved to 0.3, and if there is time at the end of 0.2, then we can start pulling tasks from 0.3.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;577496663518740481&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The current trajectory of progress won&amp;#x27;t arrive at zero for the release, so we need to step up the work in these last few weeks before 0.2. Let&amp;#x27;s turn the red arrow into the green arrow!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h4 id=&quot;feature-freeze&quot;&gt;Feature freeze&lt;&#x2F;h4&gt;
&lt;p&gt;On May 24th, the project will go into feature freeze. This means that all of the features that are still in the 0.2 milestone will be moved to 0.3. All that will be worked on from that point until release is bug finding and fixing. There will be lots of information in the coming weeks on how to help test Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;During this phase, there will also be a rewriting of the GitLab history. This is because PNG files have been stored in the repo before, and need to be removed quite forcefully. At the moment, the current plan is to use the BFG repo cleaner. This tool will automatically rewrite each commit and make sure each PNG file is purged. This needs to be done when the least amount of people are working on the repo because there will be massive changes to each person&#x27;s Git repository.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-coding-challenge&quot;&gt;Veloren Coding Challenge&lt;&#x2F;h3&gt;
&lt;p&gt;With the looming deadline for 0.2, the coding challenge will take a break until after the release. Be sure to keep an eye out for it when it comes out!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;577140237000769586&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;577138992143663104&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;576811960302305294&amp;#x2F;image.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Having fun with NPCs that are set as pets of each other&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;577596751268151307&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;577593670467977236&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;577595582051385399&amp;#x2F;EwrweYYSen.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;576757595004600342&amp;#x2F;onk4VjCBHa.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;They are better than lemmings!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;577687973533843457&amp;#x2F;MM3FHPc.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;Most recent version of the dwarven tank&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;577440431508553738&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;WIP of the new character selection screen&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;577676596069138433&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A sad blob that won&amp;#x27;t animate into proper form. Titled &amp;quot;the pig puddle&amp;quot;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 14</title>
          <pubDate>Mon, 06 May 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-14/</link>
          <guid>https://veloren.net/blog/devblog-14/</guid>
          <description>&lt;p&gt;This week, we take a look at the new asset storage system and the current state of the 0.2.0 milestone. Lots of neat art this week as well!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors to the main repo, @Pfau, @AngelOnFira, @imbris, @robojumper, and @Yeedo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;asset-storage-system-change&quot;&gt;Asset Storage System Change&lt;&#x2F;h3&gt;
&lt;p&gt;This week, the project changed from using Git Submodules to Git Large File Storage (LFS). There were many reasons for this, primarily that Git Submodules required a lot of support for people wanting to contribute for the first time.&lt;&#x2F;p&gt;
&lt;p&gt;The way Git Submodule works is that it is essentially another repo inside the main Veloren one. This way, the art assets can be put in their own repo. A problem with this is every time the asset repo is updated, the main repo also has to be updated with information about the latest commit on the asset repo. On top of this, extra commands have to be used to download the submodule, and sometimes these can break.&lt;&#x2F;p&gt;
&lt;p&gt;The original reason that we needed to switch to an asset storage system in the first place is that the main repo was getting cluttered with PNG files. Each of these files was part of the Git history, and so every time someone would clone the repo, they would have to clone the code and the image files.&lt;&#x2F;p&gt;
&lt;p&gt;However, even after the PNG files were deleted from the main repo, they still had to be downloaded. This is because the way that Git calculates what the current files are is based upon the full history of the repo. Every time a PNG file is changed, Git would store the old copy and the new copy in the history.&lt;&#x2F;p&gt;
&lt;p&gt;The new solution we are moving to is Git LFS. This method allows us to work naturally with one repo, and simply tell Git which files should be stored differently. What this means is that any time a file of a certain type (PNG, VOX, TTF, WAV, OGG) is encountered in the repo, it is uploaded to LFS. These files must only be downloaded once when cloning, even if there are multiple versions of them.&lt;&#x2F;p&gt;
&lt;p&gt;This solution should provide all of the functionality we need in regards to storing assets, but without as many issues.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;575288688091856896&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The LFS files have special tags on the repo&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The next step on this course is to look into Git BFG, which will allow us to re-write history on the repo so that we can remove the PNG images. Since this is something that will mess up every branch that is being worked on, we are waiting until the code freeze at the end of 0.2.0 to do this.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;current-state-of-0-2-0&quot;&gt;Current state of 0.2.0&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;575297063613497344&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The current state of the 0.2.0 burndown chart&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Now that it is May, the deadline for 0.2.0 is approaching quick. As you can see in the burndown chart, we have been decreasing at some points, but generally looking at an upwards trend. This is because as we add more functionality, we see more that needs to be done, and we add more issues.&lt;&#x2F;p&gt;
&lt;p&gt;This weekend, a group of the core contributors will be meeting to discuss what tasks should get done for 0.2.0, and what should be bumped to 0.3.0. Once these tasks get shifted, then the chart should start to look more achievable.&lt;&#x2F;p&gt;
&lt;p&gt;Take a look &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;milestones&#x2F;1&quot;&gt;here&lt;&#x2F;a&gt; for more details on the milestone.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;575267581510811648&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Current graphical state of Veloren, with Ambient Occlusion, FXAA, terrain gradients, and a new sun recently implemented&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;recap&quot;&gt;Recap&lt;&#x2F;h3&gt;
&lt;p&gt;This week, there has been a lot of work that ha&lt;&#x2F;p&gt;
&lt;p&gt;@desttinghim has taken up the task of the audio system, which is being worked on from scratch. @Yeedo got their work on the help window merged.&lt;&#x2F;p&gt;
&lt;p&gt;@Zesterer has locked himself away to work on an entirely new networking protocol that implements the benefits of TCP but without the excess and unneeded overhead. He has also improved compression on networked messages, which will allow for easier terrain information sending in the future. Here is an explanation of the system by @Zesterer&lt;&#x2F;p&gt;
&lt;p&gt;So effectively, there are 4 layers to the system&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Ordering&lt;&#x2F;li&gt;
&lt;li&gt;Fragmentation&lt;&#x2F;li&gt;
&lt;li&gt;Reliability&lt;&#x2F;li&gt;
&lt;li&gt;Checksum&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;You can choose to use any combination of those layers in the configuration of 256 independent &quot;streams&quot;. Except for the first one, that&#x27;s mandatory due to network limitations. The message descends through the layers, picking up various networking guarantees as it goes.&lt;&#x2F;p&gt;
&lt;p&gt;The first layer, ordering, makes guarantees about the order that packets may appear in relative to the stream they were sent down.&lt;&#x2F;p&gt;
&lt;p&gt;The second layer, fragmentation, splits the message up into smaller chunks called &quot;fragments&quot;. This is needed because UDP has a pretty tiny maximum message size: too tiny for chunk data.&lt;&#x2F;p&gt;
&lt;p&gt;The third layer, reliability, manages ACKs and ensures that messages always reach their destination and does so in a very low-latency manner that I&#x27;m actually quite proud of.&lt;&#x2F;p&gt;
&lt;p&gt;The fourth layer applies a checksum to the entire packet and ensures that only packets that have correct checksums are received on each side.&lt;&#x2F;p&gt;
&lt;p&gt;@Zesterer has also worked on terrain gradients and FXAA.&lt;&#x2F;p&gt;
&lt;p&gt;@Slipped has been working on character jumping.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542712513767145484&amp;#x2F;574305585986797574&amp;#x2F;Veloren_2019-05-04_13-35-07.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;p&gt;@imbris has done some debugging on the FPS drop due to thread spawning. They have also been working with @Timo and @Pfau on the asset system.&lt;&#x2F;p&gt;
&lt;p&gt;Something else that @Timo has been working on is cleaning the UI code. The hud right now is over 2000 lines of code, which makes it extremely difficult to work with. This will be changed, with the files becoming much more modular. Each file will have its own purpose, such as map.rs, and skillbar.rs. From @Timo,&lt;&#x2F;p&gt;
&lt;p&gt;&quot;Each file will contain one main struct that is a custom conrod widget (impl Widget for Map). When some piece of information needs to be shared with the rest of the hud (like when show_debug is toggled in the settings) the structs update method will return an Event that says what happened. This is also useful when closing windows because they can emit Event::Close and the hud will not render it anymore&quot;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-code-challenge-iii-v2&quot;&gt;Veloren Code Challenge III v2&lt;&#x2F;h3&gt;
&lt;p&gt;We&#x27;ve had very few responses to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren-coding-challenges&#x2F;tree&#x2F;master&#x2F;coding_challenge_3&quot;&gt;last week&#x27;s challenge&lt;&#x2F;a&gt; on our &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;bix3zw&#x2F;veloren_coding_challenge_3_solutions&#x2F;&quot;&gt;reddit&lt;&#x2F;a&gt;, so we&#x27;re going to leave this challenge up for another week!&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Knowing that you have very little time to spare, you run down to a plot of farmland that has been prepared for you. This land has been tilled to prepare for normal crops, but the three beans that you have should be planted in the most fertile soil.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;art-by-pfau&quot;&gt;Art by @Pfau&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;573830503224967171&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;573602495520309248&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New buttons and input fields&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;574294114380677131&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;WIP of the controls tab in settings&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;573105720908840970&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Grass colour gradient&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;574294692250779668&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;New character model on master&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;544233838541406208&amp;#x2F;572992409714163746&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;imbris&amp;#x27;s plans to add Multisampling for some of the interface elements to prevent them from being distorted. Top: original, rounding corrected, AA with 4 samples using different interpolation filters: triangle, gauss, catmull, lanczos3. Bottom: in magica no shadows, shadows, AA with 9 samples (same filters)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;572892470959144971&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Dwarven Mine Guard Model&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;574341933011304448&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;548902454645751812&amp;#x2F;574728064148176907&amp;#x2F;bone_Golem.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Slime Golem and Bone Golem from @Kidsnextdorks&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 13</title>
          <pubDate>Mon, 29 Apr 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-13/</link>
          <guid>https://veloren.net/blog/devblog-13/</guid>
          <description>&lt;p&gt;This week, we have content written by many different contributors! The topics include character animation, GitLab CI, asset loading, and FPS issues. This week&#x27;s blog was edited by @AngelOnFira and has sections by @Slipped and @imbris. As always, the art section has been curated by @Pfau!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to this week&#x27;s contributors, @Zesterer, @Timo, @Slipped, @desttinghim, @Pfau, @robojumper, @AngelOnFira, and @Algorhythm!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;character-animations-by-slipped&quot;&gt;Character Animations by @Slipped&lt;&#x2F;h3&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542712513767145484&amp;#x2F;572263335001587722&amp;#x2F;Veloren_2019-04-28_23-29-44.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;hr&gt;
&lt;p&gt;Here is a short clip displaying the new idle and run animations that were merged this week! The big addition to this run from earlier iterations is the velocity tilt, which leans the player forward giving the realistic impression of the character&#x27;s speed. The change here is a new bone which works a little differently from the rest, but I&#x27;ll digress to run through the basics of animation as we haven&#x27;t really covered it in a weekly post yet.&lt;&#x2F;p&gt;
&lt;p&gt;Veloren will animate its mobs, NPCs, and players through a series of &quot;skeletons&quot; that cover specific categories. These categories include anything that needs to be distinctly animated, and the big two, are bipeds and quadrupeds. I&#x27;ve experimented with the quadruped (and also the dragon :P) skeleton mostly for fun and as learning experiences, but the biped has been my recent focus and is by far the most fleshed out. The skeletons work through the placement of &#x27;bones&#x27; which usually get assigned a VOX model. They are then placed in space and given a rotation point--we want the foot to rotate as if the character has a leg. So when we add those feet we need to tell it that there&#x27;s some imaginary &quot;hip&quot; above it where it pivots from.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the movement for the left hand in the run animation:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;next.l_hand.offset = Vec3::new(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.0 &lt;&#x2F;span&gt;&lt;span&gt;- wavecos * &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2.5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;7.5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;12.0 &lt;&#x2F;span&gt;&lt;span&gt;+ wave * &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1.5&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;next.l_hand.ori = Quaternion::rotation_y(wavecos * &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0.9&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here, we perform a few offsets (the constants) to get pieces in correct positions, but more interestingly we use a negative cosine wave in the X (forward&#x2F;back) and a positive sine wave in the Z direction (up&#x2F;down) to create a circle! (trigonometry really works, who knew?) Or more accurately, an oval, since we&#x27;re multiplying by different constants. Finally, the next line is used to spin the hand back and forth through another wave expression. We use an equation like this for every body part, and we can switch a skeleton&#x27;s &#x27;state&#x27; (thanks @Qutrin!) to another state to get entirely new equations to run, such as in the idle animation.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, the last thing I&#x27;ll run through is the torso bone, which is what made velocity tilt possible. The torso bone is the only bone that doesn&#x27;t have a VOX file, we keep it invisible and simply use it as a multiplier for all the other bones, meaning, that we can tell the torso to do something and everything will listen. Here, we simply tell the torso to lean and everything follows, but that&#x27;s hardly all of its potential. Eventually, we can use the torso to tell the body to jump, or roll, or...hang glide. All exciting possibilities that we can start exploring in the future.&lt;&#x2F;p&gt;
&lt;p&gt;- @Slipped&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fps-counter-slowdown-investigation-by-imbris&quot;&gt;FPS Counter Slowdown Investigation by @imbris&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;This week, @imbris and @YuriMomo worked together to solve some issues with FPS slowdowns. The following was written by @imbris.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After the addition of the FPS counter, some users noticed large FPS drops (60 FPS -&amp;gt; 20 FPS) when it was enabled while others were unaffected. Initially, we thought this might be due to an inefficiency in glyph caching since the FPS text is constantly changing and also because it causes the UI to be updated every frame triggering a reprocessing of widgets into draw commands which includes accessing the glyph cache for text widgets.&lt;&#x2F;p&gt;
&lt;p&gt;For context, the UI is redrawn every frame, but the meshes&#x2F;draw commands used to draw the UI are only regenerated if the UI is updated (i.e. there is a change in one of the widgets). We also discovered that CPU-integrated GPUs did not experience any of this slowdown leading me to theorize that it could be these inefficiently cached glyphs being resent to the GPU&#x27;s memory every frame. Nevertheless, after drawing the glyph cache to the screen it appeared that there were no changes from frame to frame even if the text on widgets was changing ruling out this as the potential culprit.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;550759403591303199&amp;#x2F;570890636996116490&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Consequently, I extended this idea to the sending of new meshes to the GPU every frame was the issue and wired up the L key to turn off generating new meshes when the UI updates. @YuriMomo then tested this using the key and found that FPS was restored. Upon profiling, @YuriMomo discovered the key culprit which is a function creating the vertex buffers for the meshes that are created when the UI is updated (~20 buffers are recreated when the hud UI is updated with a combined vertex count of ~1400).&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;550759403591303199&amp;#x2F;571056132395630592&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The obvious solution, which I will be developing, is to not resend the vertices for unchanged widgets or at least not recreate the vertex buffers which hold the vertices for drawing the UI. However, a mystery still remains. After running the game for ~5 minutes this FPS drop seems to disappear. The only clue is a spike in swap_buffer call time before stabilization of the FPS.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;550759403591303199&amp;#x2F;571062129520672787&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;- @imbris&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gitlab-ci-setup-by-angelonfira&quot;&gt;GitLab CI setup by @AngelOnFira&lt;&#x2F;h3&gt;
&lt;p&gt;The new Continuous Integration system is finally up and running! This new system makes use of Docker, which gives testing multiple benefits;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Every run will always be clean since the containers that run the tests restart every time.&lt;&#x2F;li&gt;
&lt;li&gt;Every run will always be predictable since the tests are all running from the same initial image. If it fails on one runner, it won&#x27;t run on the other runners, and can, therefore, be debugged with relative ease.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You can see an example of what a new build looks like &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;pipelines&#x2F;58870376&quot;&gt;here&lt;&#x2F;a&gt;. As you can see, there are different stages of the pipeline. First, the CI tries to compile the code. If this fails, then the entire pipeline fails. This is because you don&#x27;t want to allow anyone to push broken builds to master.&lt;&#x2F;p&gt;
&lt;p&gt;Next, many tests are run in the &quot;Test&quot; and &quot;Post-build&quot; sections. Unit tests help prevent regression in the code and benchmark tests make sure that the codebase&#x27;s performance is stable. These tests need to be written manually, which will be a task that comes up soon.&lt;&#x2F;p&gt;
&lt;p&gt;Clean-code, clippy, and coverage all look over the code base for code best practices. They don&#x27;t prevent the code from being merged into master as of right now, but hopefully, in the future we enforce all of them passing.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;571751596371869696&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Since we are getting information about builds, we&amp;#x27;ve added some shields to the [Veloren Readme](https:&amp;#x2F;&amp;#x2F;gitlab.com&amp;#x2F;veloren&amp;#x2F;veloren)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;We are still ironing out some issues with the new system, but if you are interested in donating compute time, we will start looking for volunteer runners next week. Keep an eye out for that!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;asset-loading-by-imbris&quot;&gt;Asset Loading by @imbris&lt;&#x2F;h3&gt;
&lt;p&gt;@imbris has implemented a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;timokoesters&#x2F;veloren&#x2F;merge_requests&#x2F;1&quot;&gt;system to load assets&lt;&#x2F;a&gt; which will allow sharing of assets so that they are not loaded up in different places in voxygen. This will save time loading them and save memory storing multiple copies. Additionally, asset loading code, in general, will be simplified. In the future, this system should abstract away from working with the filesystem and also allow the loading of assets provided by mods. The final goal is for an interface that looks similar to this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; my_image = common::assets::load::&amp;lt;Image&amp;gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;core.ui.backgrounds.city&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)?;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The only part missing is mapping names like &quot;core.ui.backgrounds.city&quot; to the filesystem. So it looks more like this right now:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; my_image = common::assets::load::&amp;lt;Image&amp;gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&#x2F;voxygen&#x2F;background&#x2F;city.png&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)?;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;An improvement from:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; my_image = image::load_from_memory(
&lt;&#x2F;span&gt;&lt;span&gt;common::assets::load(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&#x2F;voxygen&#x2F;background&#x2F;city.png&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Error loading file&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;as_slice&lt;&#x2F;span&gt;&lt;span&gt;(),
&lt;&#x2F;span&gt;&lt;span&gt;)?;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A global hash map holds all the loaded assets and ensures that an asset is only loaded once using ARC&#x27;s (asynchronous reference counted pointer) to hold references to the assets which can be passed around by cloning them.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;lazy_static! {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;static ref &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;ASSETS&lt;&#x2F;span&gt;&lt;span&gt;: RwLock&amp;lt;HashMap&amp;lt;String, Arc&amp;lt;dyn Any + &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;static &lt;&#x2F;span&gt;&lt;span&gt;+ Sync + Send&amp;gt;&amp;gt;&amp;gt; =
&lt;&#x2F;span&gt;&lt;span&gt;RwLock::new(HashMap::new());
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;An &lt;code&gt;Asset&lt;&#x2F;code&gt; trait is used to enable the loading of assets. Consequently, any type that implements this trait can be loaded using the same interface via this function:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;load&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;A: Asset + &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;&amp;#39;static&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;specifier&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; Result&amp;lt;Arc&amp;lt;A&amp;gt;, Error&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;Ok(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;ASSETS
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;entry&lt;&#x2F;span&gt;&lt;span&gt;(specifier.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;())
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;or_insert&lt;&#x2F;span&gt;&lt;span&gt;(Arc::new(A::load(specifier)?))
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;downcast&lt;&#x2F;span&gt;&lt;span&gt;()?)
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;- @imbris&lt;&#x2F;p&gt;
&lt;h2 id=&quot;image-ids-macro-by-imbris&quot;&gt;&lt;code&gt;image_ids!&lt;&#x2F;code&gt; Macro by @imbris&lt;&#x2F;h2&gt;
&lt;p&gt;@Timo has created a macro for declaring structs to hold image ids for the UI. This macro removes the tedium involved with updating the image ids struct with a new image or removing an old one by generating the fields of a struct and the function to load all of the images from a much more compact definition. Previously something like this,&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub struct &lt;&#x2F;span&gt;&lt;span&gt;Imgs {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;button1&lt;&#x2F;span&gt;&lt;span&gt;: ImgId,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;button2&lt;&#x2F;span&gt;&lt;span&gt;: ImgId,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;background&lt;&#x2F;span&gt;&lt;span&gt;: ImgId,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;blank&lt;&#x2F;span&gt;&lt;span&gt;: ImgId,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;impl &lt;&#x2F;span&gt;&lt;span&gt;Imgs {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;load&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ui&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; Ui) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;Self &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;load_vox &lt;&#x2F;span&gt;&lt;span&gt;= |&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ui&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; UI| {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; .vox loading code here
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;load_img &lt;&#x2F;span&gt;&lt;span&gt;= |&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ui&lt;&#x2F;span&gt;&lt;span&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; UI| {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;&#x2F;&#x2F; image loading code here
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;Imgs {
&lt;&#x2F;span&gt;&lt;span&gt;button1: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;load_vox&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;filename1.vox&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, ui),
&lt;&#x2F;span&gt;&lt;span&gt;button2: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;load_vox&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;filename1.vox&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, ui),
&lt;&#x2F;span&gt;&lt;span&gt;background: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;load_img&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;background.png&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, ui),
&lt;&#x2F;span&gt;&lt;span&gt;blank: ui.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;new_graphic&lt;&#x2F;span&gt;&lt;span&gt;(Graphic::Blank),
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;becomes this, notice there is only one place that needs to be changed here as opposed to the two above&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rs&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-rs &quot;&gt;&lt;code class=&quot;language-rs&quot; data-lang=&quot;rs&quot;&gt;&lt;span&gt;image_ids! {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;pub struct &lt;&#x2F;span&gt;&lt;span&gt;Imgs {
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;VoxelGraphic&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;button1&lt;&#x2F;span&gt;&lt;span&gt;: &amp;quot;filename1.vox&amp;quot;,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;button2&lt;&#x2F;span&gt;&lt;span&gt;: &amp;quot;filename1.vox&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;ImageGraphic&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;background&lt;&#x2F;span&gt;&lt;span&gt;: &amp;quot;background.png&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;BlankGraphic&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;blank&lt;&#x2F;span&gt;&lt;span&gt;: (),
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;other-work&quot;&gt;Other work&lt;&#x2F;h2&gt;
&lt;p&gt;There have been lots of other work done this week, here is a short recap,&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;@desttinghim worked on the server list UI and loading the config file from the OS config directory instead of the project directory.&lt;&#x2F;li&gt;
&lt;li&gt;@robojumper &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;merge_requests&#x2F;84&quot;&gt;added ambient occlusion&lt;&#x2F;a&gt;, a task that was by no means trivial!&lt;&#x2F;li&gt;
&lt;li&gt;@Timo did some code cleanup and fixed a couple of errors with ray casting code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;572425337296781333&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Current burndown status of 0.2&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;veloren-code-challenge-iii&quot;&gt;Veloren Code Challenge III&lt;&#x2F;h2&gt;
&lt;p&gt;Make sure to have a go at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren-coding-challenges&#x2F;tree&#x2F;master&#x2F;coding_challenge_3&quot;&gt;this week&#x27;s challenge&lt;&#x2F;a&gt;! Also, take a look at &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;bg8er9&#x2F;veloren_coding_challenge_2_solutions&#x2F;&quot;&gt;last week&#x27;s solutions&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;You have just calculated the Harmonic Convergences of each day, and have found that there are three days with the same greatest GHC, the 52nd, 53rd, and 54th day. As you figure out what day these are, you realize that today is the 54th day! Knowing that you have very little time to spare, you run down to a plot of farmland that has been prepared for you. This land has been tilled to prepare for normal crops, but the three beans that you have should be planted in the most fertile soil.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;art-by-pfau&quot;&gt;Art by @Pfau&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;572176486786924625&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Updated UI design applied to the map window&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;572176663471718400&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Settings Window in the works&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;567747595510874141&amp;#x2F;571758222306836500&amp;#x2F;SIGzUCxtSA-7aOVm6S4LouogciYvHk9UvVnb1CUyuJ9qAhiVBA_jwCNNzSoS_oXdlCoyH-fV1n7sPM85Hnu89m_pXkmEx0nzjFUM.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Quick sketch of Dwarven automatronics&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;567747595510874141&amp;#x2F;571996356932272138&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;WIP for the Worker by @Vechro&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 12</title>
          <pubDate>Mon, 22 Apr 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-12/</link>
          <guid>https://veloren.net/blog/devblog-12/</guid>
          <description>&lt;p&gt;This week, there was a ton of progress on the engine. In this blog, we take a look at how 0.2 is coming, as well as what certain programmers have worked on. We have a large section about networking written by @Zesterer, and a new coding challenge! This week&#x27;s blog was edited by @AngelOnFira, with the art content by @Pfau!&lt;&#x2F;p&gt;
&lt;p&gt;Thank you to this week&#x27;s programming contributors, @Slipped, @imbris, @Pfau, @timo, @zesterer, @Algorhythm, @desttinghim, @Qutrin, @LunarEclipse, and @YuriMomo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;progress-on-0-2&quot;&gt;Progress on 0.2&lt;&#x2F;h3&gt;
&lt;p&gt;This week, we set the (tentative) deadline for 0.2 to be May 28th. This is the anniversary of the Veloren repo being created, so we want to try and get something in working condition to celebrate!&lt;&#x2F;p&gt;
&lt;p&gt;Since we have a due date on 0.2, we now have a burndown chart! This allows us to see how many issues are still left vs how much time is left. You are able to see what the velocity of work being done is, and therefore predict if you are going to hit the deadline. As of right now, we don&#x27;t have enough Merge Requests completed to see this. But, as we approach the deadline, it will start to have a line tend towards 0. You can take a look at the 0.2 milestone &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;milestones&#x2F;1&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;569871457627144203&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The burndown chart for 0.2. It hasn&amp;#x27;t been decreasing, as there aren&amp;#x27;t many merged requests just yet.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;The team has also been working on making tasks more accessible. We&#x27;ve been creating many issues to be discussed and worked on, as well as adding tags. This means that there are lots of beginner tasks ready to be worked on! You can see all of them &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;issues?scope=all&amp;amp;state=opened&amp;amp;label_name%5B%5D=beginner&quot;&gt;here&lt;&#x2F;a&gt;, and we will keep working on adding more in the next few weeks.&lt;&#x2F;p&gt;
&lt;p&gt;Also, we have seen a massive rise in the number of weekly commits to Veloren this week. Two weeks ago, there were 12 commits by 2 people. Last week had 36 commits by 6 people. This week had 100 commits by 10 people. This is almost half the commits since the beginning of the year! This is great to see, as it means the engine is starting to become more accessible to more contributors.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-programming-progress&quot;&gt;Other programming progress&lt;&#x2F;h3&gt;
&lt;p&gt;@Qutrin has been putting in quite a bit of work this week on quality of life issues and other fixes. He has worked with @Zesterer on animation states, as well as fixes to the single player version and some cleaning of constants. He has also started working on camera zoom interpolation, which is adding some new tick functionality to the engine.&lt;&#x2F;p&gt;
&lt;p&gt;@Timo has also been putting in lots of work on the engine. One of the big changes he is currently working on is client states. This gives a distinction between clients that are connected, registered, character, spectators. This allows the game to have a state that allows the client to use certain features. For example, a client that is only connected can&#x27;t play because they are not yet registered. And a client with the character state would require certain information, such as player position.&lt;&#x2F;p&gt;
&lt;p&gt;@Timo has also been working on restrictions of networking animations, as well as animation smoothness. He also made some improvements to the Readme. Finally, he is working on character creation, which includes quite large changes to some of the character ECS. The character selection screen is in the game already, but it is not yet functional. It will be part of the 0.2 release though, and should be complete in the next week or two!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;568910068146241567&amp;#x2F;Screenshot_20190419_232513.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Character meshes are generated using their Character struct. Here, each weapon is using a random mesh. The same works for changing the head, arms or any other part.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@desttinghim has made a lot of progress as well this week. He has worked on creating functioning singleplayer by creating a background thread that will run a private server. He has also worked on setting up a key binding and setting file so that chosen settings can be saved after closing Veloren. He is currently working on networking settings and multiplayer UI improvements.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;networking-notes-by-zesterer&quot;&gt;Networking notes by @Zesterer&lt;&#x2F;h3&gt;
&lt;p&gt;Hello, Zesterer here. This week, we’ve made a truly enormous amount of progress. Of particular interest is the way in which the networking systems for Veloren have evolved. Below, I&#x27;ll explain some of the challenges we&#x27;ve come across, and the way in which we&#x27;ve solved them.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ecs&quot;&gt;ECS&lt;&#x2F;h4&gt;
&lt;p&gt;Veloren uses an ECS (Entity Component System). This is an architecture in which components of each in-game entity are stored separately, but are all tied together by a single &lt;code&gt;Entity ID&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As an example, an NPC might have a &lt;code&gt;Position&lt;&#x2F;code&gt; component to store its position in the world, a &lt;code&gt;Velocity&lt;&#x2F;code&gt; component to store the speed at which it is moving, a &lt;code&gt;Character&lt;&#x2F;code&gt; component to store information like the species, gender, and class of the character, and an &lt;code&gt;Agent&lt;&#x2F;code&gt; component to inform the game as to how the NPC should be controlled.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sphynx&quot;&gt;Sphynx&lt;&#x2F;h4&gt;
&lt;p&gt;We need to synchronize all of these entities and components (including new components, deleted components, and modified components) over the network such that all connected clients see the same world state. To do this, I&#x27;ve created a Rust library named &lt;code&gt;sphynx&lt;&#x2F;code&gt;. Sphynx is a layer that sits on top of the existing ECS and watches for changes to entities and components while the game is running. Every tick, it can wrap all of these changes up into a bundle of information that can be sent over the network to clients in other to inform them about how the world state has changed since the previous tick. This works perfectly for most systems and is a really reliable and easy way to do networked gameplay.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;network-fighting&quot;&gt;Network fighting&lt;&#x2F;h4&gt;
&lt;p&gt;However, Sphynx also has some issues. For example: when the player moves around, we don&#x27;t want to be sending a message to the server to indicate that the player wants to move, waiting for the server to respond, and then updating the position. Such a delay for movement input is simply unacceptable. Instead, we want to be doing movement client-side, informing the server, and then have the server only correct us if we did something illegal (such as trying to fly).&lt;&#x2F;p&gt;
&lt;p&gt;But, Sphynx doesn&#x27;t understand that this is how we want to do things, and as a result, we end up with the client and the server &quot;fighting&quot; for authority over the player&#x27;s position. This results in a lot of jittery, glitchy movement.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sphynx-can-t-do-everything&quot;&gt;Sphynx can&#x27;t do everything&lt;&#x2F;h4&gt;
&lt;p&gt;To solve this problem, we&#x27;ve had to move synchronization of the physics information (position, velocity, and direction) away from Sphynx and towards a custom system that&#x27;s more lightweight and provides the dynamic control we need. We&#x27;ll still be using Sphynx for most things (like synchronizing inventories, character models, classes, abilities, etc.), but for specific systems that need more subtle control, we&#x27;re forced to use a custom solution. Thankfully, the code for this has ended up being very neat and we&#x27;re very happy with the progress of this.&lt;&#x2F;p&gt;
&lt;p&gt;In the future, we&#x27;ll be using more advanced interpolation techniques such as &#x27;Hermite interpolation&#x27; to make networked physics butter-smooth.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;client-states&quot;&gt;Client states&lt;&#x2F;h4&gt;
&lt;p&gt;Another thing that&#x27;s come to our attention is the need for distinct &#x27;client states&#x27;. Unlike in most games, Veloren allows clients to choose the way in which they&#x27;d like to play the game. We permit chat-only clients (that don&#x27;t have an in-game character), spectator clients (that can fly around, but cannot interact with the world) and character clients (normal gameplay as you&#x27;d expect). In the future, we&#x27;d like to support additional client states that allow the game ecosystem to be even more capable than it currently is.&lt;&#x2F;p&gt;
&lt;p&gt;The solution we&#x27;ve come up with is a system that looks very much like the state machines you&#x27;ll be used to if you&#x27;ve ever studied Computer Science. Each client can be in one of several distinct states, and the game can conditionally move clients through these states according to a set of &lt;em&gt;transition rules&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve realized that this idea is more powerful than we first imagined, and so we&#x27;re working on integrating extra states like a &lt;em&gt;death state&lt;&#x2F;em&gt; (used for the period between a player dying and them respawning) and a &lt;em&gt;visitor state&lt;&#x2F;em&gt; (used to allow clients to ping servers and request information, such as when looking at the server list screen). We&#x27;re confident that this design is the best route to follow, and we&#x27;re looking forward to exploring just how powerful this design will be in the future.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;veloren-coding-challenge-ii&quot;&gt;Veloren Coding Challenge II&lt;&#x2F;h3&gt;
&lt;p&gt;With a new blog comes a new coding challenge! If you want to give it a try, you can check it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren-coding-challenges&#x2F;tree&#x2F;master&#x2F;coding_challenge_2&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Also, be sure to check out some of the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Veloren&#x2F;comments&#x2F;bdvyxa&#x2F;veloren_coding_challenge_1_solutions&#x2F;&quot;&gt;answers from last week&lt;&#x2F;a&gt;! There were lots of great solutions, and many used very different techniques to solve them.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;569977243187806229&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Better interface scaling, switch to .vox imports, new small buttons near the bag and new window frames&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 11</title>
          <pubDate>Mon, 15 Apr 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-11/</link>
          <guid>https://veloren.net/blog/devblog-11/</guid>
          <description>&lt;p&gt;We saw a large influx of users on the Veloren Discord this week! We also take a look at the current 0.2 milestone, and what&#x27;s required to reach it. We also introduce the Veloren Coding Challenge and take a look at the newly found networking issues. This week&#x27;s blog was edited by @AngelOnFira, with the art section curated by @Pfau!&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;566361011586596925&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Veloren from above&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;newcomers&quot;&gt;Newcomers :)&lt;&#x2F;h3&gt;
&lt;p&gt;This week, we&#x27;re seeing lots of new potential contributors joining the Discord. This was from a post on &#x2F;r&#x2F;rust that can be seen &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rust&#x2F;comments&#x2F;bb7a6d&#x2F;veloren_the_opensource_voxel_mmorpg_is_looking&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. It&#x27;s always great to see new contributors, and they motivate the whole team to push further.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;weekly-code-challenge&quot;&gt;Weekly code challenge&lt;&#x2F;h3&gt;
&lt;p&gt;Often in the Discord, there are many people who want to get involved with Veloren but feel that their Rust competence is not good enough. We want to make this an issue of the past!&lt;&#x2F;p&gt;
&lt;p&gt;A solution that we want to try is a weekly Rust code challenge. The challenge will be one that is designed to teach important concepts of Rust but remain accessible to Rust newcomers. We hope that discussion around the weekly challenges will spark excitement in the community around Rust. It would be great to see a lot more people feel more comfortable around the codebase.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to give it a try, check out the challenge &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren-coding-challenges&#x2F;tree&#x2F;master&#x2F;coding_challenge_1&quot;&gt;here&lt;&#x2F;a&gt;. The challenges are currently being made by @AngelOnFira, with writing help from @Kidsnextdorks.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;567174041069420544&amp;#x2F;fantasy_map_1555295102766.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;It is a dark time in Bagh Maldir. Over the last few years, famine has spread across the kingdom. You, a traveling wizard, are the king&amp;#x27;s last hope, lest his rule fall to shambles.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;asset-storage&quot;&gt;Asset storage&lt;&#x2F;h3&gt;
&lt;p&gt;An issue that was addressed this week was how to store assets. Before the discussion, there were over 200 PNG files in the GitLab repo. The problem with this is that anyone who wants to work on the project must download these files, even if they are removed.&lt;&#x2F;p&gt;
&lt;p&gt;The structure that Git uses doesn&#x27;t actually keep track of all of the files that are current. Instead, every time you need to update the current files (by switching branches or downloading the repo), Git constructs the current files based on all of the previous commits. And since the PNG files were in the repo at some point in history, they are required to construct the repo.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few different options to this. For most game development, Git Large File Storage is used. The problem is that the data needs to be hosted somewhere. We don&#x27;t want to rely on a contributor to host it, as it would incur costs for them, and if they leave in the future then the problem would have to be assessed again. A few other ideas were thrown around, including Google Drive and Dropbox. But these all have their issues. As @zesterer put it;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;How do we ensure that all developers have access to the asset storage?&lt;&#x2F;li&gt;
&lt;li&gt;How do we effectively integrate it with the existing build system?&lt;&#x2F;li&gt;
&lt;li&gt;How do we ensure it&#x27;s always up, throughout the entire lifetime of the project, even if members move elsewhere?&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;A solution to this problem hasn&#x27;t been found yet. One of the potential solutions being examined right now is Git subtree. More to come on this topic next week.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;some-website-changes&quot;&gt;Some website changes&lt;&#x2F;h3&gt;
&lt;p&gt;With the amount of other content starting to form around Veloren, there have been talks of changing parts of the veloren.net site. @Wulkan has spent some time this week adding a new navbar to the site (veloren.net). They have also expressed interest in changing the static site builder, in the hopes that it can start to become a homepage site rather than just a blog site.&lt;&#x2F;p&gt;
&lt;p&gt;There has been more work done on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.veloren.net&#x2F;&quot;&gt;book&lt;&#x2F;a&gt; as well, as well as &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.veloren.net&#x2F;veloren_voxygen&#x2F;index.html&quot;&gt;automated documentation&lt;&#x2F;a&gt;. Be sure to check it out!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;networked-physics&quot;&gt;Networked physics&lt;&#x2F;h3&gt;
&lt;p&gt;As has been the case in the last few weeks, networking is still a big topic. @xMAC94X, @LunarEclipse, and @YuriMomo have all been providing support in different channels to make sure that bugs are being fixed.&lt;&#x2F;p&gt;
&lt;p&gt;A bigger networking problem lies in the current method of sending world data over the network. Here is an excerpt from @zesterer on the topic.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;p&gt;Ok, so I&#x27;ve been thinking about how we synchronize chunks between clients and the server. And I&#x27;ve realized that it&#x27;s not a trivial problem, unfortunately. So there are two main models I think are useful to think about when doing this. &quot;push&quot; updates and &quot;pull&quot; updates. With the first, the server would automatically send new chunks or updated chunks to clients as and when they appear. With the second, the client must first request a chunk for it to be sent back. Now, this is all well and good, but it gets more complex when including things like view distances. How do you figure out whether to generate a chunk? Well... perhaps you iterate through all chunks that are within range of all clients, and then figure out which ones are generated and which aren&#x27;t... then generate the ones that aren&#x27;t. But that&#x27;s a lot of chunks to be iterating through every tick (or every few ticks). Let&#x27;s say the player has a view distance of 1000 (i.e: large, but not totally insane). With a chunk width of 32 and a world height of, say, 16 chunks, that&#x27;s like... Uh. I hope I just got this wrong. Volume of a sphere is PI &lt;em&gt;(r ^ 3)&lt;&#x2F;em&gt; 4 &#x2F; 3. The radius in chunks is 1000 &#x2F; 32 = ~32. So that&#x27;s PI &lt;em&gt;(32 ^ 3)&lt;&#x2F;em&gt; 4 &#x2F; 3 = ~140,258 chunks. Is that really right?. Because... God help us if it is. I guess it&#x27;s smaller for a world height of 16 chunks only. But still... not smaller by much. And we&#x27;d have to iterate through that every tick for all players.&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;p&gt;Basically, what the problem boils down to is how to send as little information over the network as possible while still representing the game world properly. Some of the ideas being thrown around to try to include some AI solutions, and other ways of representing color data.&lt;&#x2F;p&gt;
&lt;p&gt;In other networking news, there was an issue brought up where the client and server weren&#x27;t communicating properly. You can check out the issue on GitLab &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;issues&#x2F;13&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;566258230179790848&amp;#x2F;W6qhuJqoGl.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449654102553788417&amp;#x2F;566260209409064990&amp;#x2F;sJImUGim62.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Issues with the client and server fighting for control&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;bigger-push-on-gitlab-issues-with-milestones&quot;&gt;Bigger push on GitLab issues with milestones&lt;&#x2F;h3&gt;
&lt;p&gt;With all of the new people joining the Discord server, it has become apparent that certain work has to be made. Better instructions on how to get up and running, more clear communication from the leads, and tasks distribution that can lead towards the greater goal. GitLab issues is a solution to this.&lt;&#x2F;p&gt;
&lt;p&gt;You can see the current 0.2 milestone &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;milestones&quot;&gt;here&lt;&#x2F;a&gt;. If you go into the milestone (&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&#x2F;milestones&#x2F;1&quot;&gt;here&lt;&#x2F;a&gt;), you will see the issues that need to be completed for the milestone to finish. Now, that said, this is not to say that we are super close to finishing 0.2 because there are only X issues left. Issues are added as big tasks break down into smaller tasks, and as previously unknown problems come up.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;567135412435550208&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The current issues in the 0.2 milestone&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Also, the core dev team is going to start making use of the &quot;beginner&quot; tag on GitLab issues. These issues are designed for new contributors to get up and running with the engine. If you are hoping to get involved in contributing, start taking a look at these issues!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;566727367062454292&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;566773448471478274&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Characters with many different facial hair options&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;566672516589027328&amp;#x2F;book.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Icon for the Documentation by @Piedro0&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;566057533861789698&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Bow models from @Demonic&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;565927255939874846&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Beard&amp;#x2F;Hair&amp;#x2F;Eyebrow combination tests&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;566725387690704906&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Steadily growing collection of facial&amp;#x2F;head Features&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 10</title>
          <pubDate>Mon, 08 Apr 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-10/</link>
          <guid>https://veloren.net/blog/devblog-10/</guid>
          <description>&lt;p&gt;Lots of UI concepts this week. Also, a big change to the GitLab repo, and the start of a programming manual for Veloren. This week&#x27;s blog was edited by @AngelOnFira, with the art section curated by the one and only @Pfau!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;A pretty big change this week involving the GitLab repository. While we&#x27;ve been refactoring the codebase, we&#x27;ve used the name &quot;fresh&quot;. Now that we are at a more stable state, it&#x27;s about time that it was changed. You can see the new repo &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;veloren&quot;&gt;here&lt;&#x2F;a&gt;. As you may notice, there is only one star on the repo right now. Let&#x27;s change that! Stars help projects become more visible and more reputable. Also, the old version of Veloren has 82 stars, so it seems much more attractive than this version. If you could add a star it would really help. :)&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;539518074106413056&amp;#x2F;564907699062571089&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new veloren repo :)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@xMAC94x has been putting in lots of work this week on the networking side of things. He and @Yuri have been working to solve some networking issues. Most of the work was on creating a better log system for the public server. An issue that came up was if a client&#x27;s ping was too high, they would be kicked from the server.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, there has been ground work on the Veloren programming manual. You can see how it&#x27;s going &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;manual.veloren.net&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;. This documentation will be automatically generated automatically from the codebase. A lot of work needs to be done to get it to a usable state, but hopefully it will help new developers get on board more easily.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;
&lt;p&gt;Lots of art content this week! One thing that&#x27;s new this week, instead of making SVG files for better scaling we decided to render actual VOX files for the interface elements. This will help with scaling for different computers while keeping the icons looking the same.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;563342034245517314&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept of the character window&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;563851682564276247&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;How it actually looks like in the game right now. XP-bar, health and mana bar (colors are subject to change!)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;563783087977136128&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Again, alongside with other windows. The most interesting thing here is the inventory with the locked slots and the scrollbar.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;563754012436856858&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept of the mouseover. The text is subject to change and was just for testing purposes.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;564508848342171668&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;564502406113787924&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Beardstyle experiments&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;563684535460429844&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Possible look of future item icons&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;563693846651994118&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Empty item slots background art&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;564592243265110036&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Birds by @Demonic&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 9</title>
          <pubDate>Mon, 01 Apr 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-9/</link>
          <guid>https://veloren.net/blog/devblog-9/</guid>
          <description>&lt;p&gt;Big news this week, we&#x27;ve finally heard from Wollay! In other news, lots of info on the world sim system. No art section this week, but we&#x27;ll return next week with a full blog! The blog this week was edited by @AngelOnFira, with a section on world sim by @Zesterer himself!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;wollay&quot;&gt;Wollay&lt;&#x2F;h3&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;562073100573736960&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Hopefully this will lead to some exciting progress on Veloren. Make sure to stop by and say hi in the Discord, his handle is @wollay.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;world-sim&quot;&gt;World Sim&lt;&#x2F;h3&gt;
&lt;p&gt;World simulation on a large scale is a complex problem. Simulating the intentions, objectives and actions of hundreds of thousands of entities in the world cannot usually be done in real-time. Take a look at Dwarf Fortress: with little more than a handful of dwarves, the game begins to lag.&lt;&#x2F;p&gt;
&lt;p&gt;To solve this problem, we&#x27;ll have to borrow from other areas of research. The simulation of large crowds can often be done by assuming that human-like agents, when simulated en masse, tend to behave in a way that simulates the properties of a fluid. Fluid simulation itself is also an expensive operation, but there is a shortcut: some forms of cellular automata can be used to roughly simulate similar outcomes and have indeed been used to great effect to simulate the flow of human beings through an environment.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, simulating the flow of people does not in itself produce interesting world simulation. To go from &#x27;fluid simulation&#x27; to &#x27;world simulation&#x27;, we will need to add more complexity to the cellular automata system. If you&#x27;ve seen &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bitstorm.org&#x2F;gameoflife&#x2F;&quot;&gt;Conway&#x27;s Game of Life&lt;&#x2F;a&gt;, you&#x27;ll be familiar with the way in which cell death occurs due to population and cell life starts through underpopulation. In a similar (yet more complex) manner, we can simulate the flow of material resources with trade, the flow of agents, overpopulation, disease, natural disaster and war using very simple systems that work on the level of cellular automata. Our hope is that combining many smaller systems on a large scale will produce complex and interesting behaviour that gives us the world simulation system we want.&lt;&#x2F;p&gt;
&lt;p&gt;Here is an explanation of a cellular automata that represents predators hunting prey.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;v7Z2euv7kwY&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;hr&gt;
&lt;p&gt;So far, visual prototypes have been worked on to get a better understanding of the fluid systems. Here are some of the results.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449650240350453760&amp;#x2F;558028469594750977&amp;#x2F;Screenshot_from_2019-03-20_20-38-22.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;562096555998576641&amp;#x2F;TO9O0km.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;444005079410802699&amp;#x2F;562096253387800584&amp;#x2F;1vQMimS.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;div class=&quot;ratio169&quot;&gt;
    &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;XfhNlTt3zeQ&quot;
    title=&quot;YouTube video player&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;&lt;hr&gt;
&lt;p&gt;Until next week, and happy April Fools Day! :P&lt;&#x2F;p&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 8</title>
          <pubDate>Mon, 25 Mar 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-8/</link>
          <guid>https://veloren.net/blog/devblog-8/</guid>
          <description>&lt;p&gt;This week has only the art section curated by @Pfau. I (@AngelOnFira) just got back from a trip, and I&#x27;m still getting back into the swing of things. Expect a much large dev blog next week! :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560200143782019093&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Char Selection Window: Right now everything is still pre rendered and layered images only. But in the future we plan to have the background and all the figures live rendered!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560201031858913280&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Char Creation Window: It all starts with choosing your race and Body Type.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560201273425788928&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560201877569142785&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;You&amp;#x27;ll be able to choose from one of the seven starting weapons, but more weapon types are waiting inside the game&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560202377135652902&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Afterwards you&amp;#x27;ll be able to further customize your player character of course.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560202377135652902&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept for the character creation. Every Race will have their own colours to pick from. The &amp;#x27;brightness&amp;#x27; slider will give the last touch to it to make your character really unique&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560216988182380544&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Buttons for the stuff shown by @Piedro0 and @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;560311492004675584&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Slight changes to the settings window, new background for the help window.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 7</title>
          <pubDate>Mon, 18 Mar 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-7/</link>
          <guid>https://veloren.net/blog/devblog-7/</guid>
          <description>&lt;p&gt;This week, we&#x27;ve seen a few different contributors getting tasks completed. There is also more discussion about networking and character animation. This week&#x27;s blog was written by @AngelOnFira, with the art section curated by @Pfau.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;@imbris has been working on the chat box. The network side of programming is far enough that an event calls can be made once a message is received. @imbris was able to get a prototype working, that displays a message from the server being broadcast to the client.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;556678246549159946&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@imbris sending chat messages from the server to the client&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Zesterer and @LunarEclipse sat down to go over more updates to the networking code. Most of the work consisted of guaranteeing matching client and server entities. Moving towards a Universal ID (UID) system will help with this. Another topic was distributing messages to clients. There are many cases to be handled, such as update a single player, update all players, update all player except X, and so on. An example of updating all players would be sharing players movement each server tick. An example of updating all players except X would be sending a chat message. If X sent the message, then they don&#x27;t need to receive it.&lt;&#x2F;p&gt;
&lt;p&gt;A bigger topic that was discussed is how to choose what the client should know about entities in its area. A player should know about units that are moving around them, but they shouldn&#x27;t know about a unit moving around three cities away. The solution that was found is to subscribe the player to the region or chunk they are in. They would also be subscribed to the surrounding chunks. Then, any units that are in that region will have their information sent to the player.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, there were more discussions about animation. The character animations in Veloren are quite simple compared to ones seen in AAA games, where you have to use techniques like inverse kinematics, or complex skeletal structures. In Veloren, there is simple movement of each part of a character&#x27;s body, such as an arm moving back and forth while walking. Therefore, Veloren is able to make use of vertex shaders to do these movements. This offloads lots of the CPU work to the GPU when rendering characters. In the long run, it will hopefully allow Veloren to be run on lower performance computers.&lt;&#x2F;p&gt;
&lt;p&gt;But there are problems while using vertex shaders for animations. For the 3D modelers and animators, they will have to put in some extra work to prepare models for Veloren. Hopefully, we can create a process that allows this to be more seamless. On top of that, we may run into restrictions if there is something that we&#x27;re not able to do wither vertex shaders. But I think that bridge will be burned when we arrive at it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;556592986876805122&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Have you wanted to know how your characters will look like without their armour? Here they are!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;557239241218850817&amp;#x2F;image7.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;These could be the starting clothes you’ll spawn into the world with&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;557239213226065941&amp;#x2F;image2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept art for pause menu&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;557239220549320705&amp;#x2F;image1.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;557239242711891988&amp;#x2F;image5.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Multiple other windows are also in place already. Now they just need to be filled with content!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;557239261141663744&amp;#x2F;image6.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Early concept of the character creation screen&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;555860125018226709&amp;#x2F;Veloren_ccr_elf.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;555860162569568358&amp;#x2F;Veloren_ccr_human.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some more game icons by @Piedro0&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;556772473274892288&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;556773383442923560&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;556776369309351936&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Seb playing around with character accessories&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 6</title>
          <pubDate>Mon, 11 Mar 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-6/</link>
          <guid>https://veloren.net/blog/devblog-6/</guid>
          <description>&lt;p&gt;This week has been a slower week on the programming side. More than anything, lots of discussions have occurred to problem solve future issues. Lots of concept art though! This week&#x27;s blog was written by @AngelOnFira, with an excerpt from @xMAC94x, and an art section curated by @Pfau.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;The biggest push forward this week were the discussions on character rendering and animation with many entities on screen. Of the talks, some of the big topics include entity caching, and choosing what to render based on occlusion culling.&lt;&#x2F;p&gt;
&lt;p&gt;Also, the netcode is much close to being ready for networked multiplayer. The main task is to get the different modules communicating, and then work on the next steps. There will also be some technical issues to overcome. One is about sending unique information about the player, such as animation progress.&lt;&#x2F;p&gt;
&lt;p&gt;Another heavily discussed topic was world simulation. Since Veloren can be arbitrarily large, it can be difficult to have simulations working at this unknown scale. Here is an excerpt from @xMAC94x:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;One other question which is still open is how to cover world simulation. Because [Veloren] aims for a really immersive experience, we need to have strong world simulation. That covers everything from wars between cities to volcanos exploding over groups of birds flying south when it becomes colder. This needs to be calculated on a larger scale. However, this cannot be done in detail everywhere on current hardware. So we need to focus on the area where players are, but not miss out areas with no players. We want a game where a region could change after a week even if a player hasn&#x27;t visited it. We don&#x27;t want chunks to be unloaded like in Minecraft and then just not worked on. Because we want the world to constantly be calculated everywhere, we cannot have an infinite world.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This current state of the discussion focuses on techniques that could be used to assist with this world simulation. The idea is ambitious, however, an open sourced game has the benefit of trying these new ideas without heavy repercussions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;554342570394648593&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;554289191102709770&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau&amp;#x27;s current concept of the Veloren&amp;#x27;s UI&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;553614126358724619&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;553620773034524688&amp;#x2F;Veloren_icon_quest.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;553630059609718787&amp;#x2F;Veloren_icon_quest.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Piedro0&amp;#x27;s WIP of the quest indicator&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;553263588723392533&amp;#x2F;SushiSchool2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@McKAOS working on some fish concepts&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;553217836516900874&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Character window button by @Piedro0 and @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;541307708146581519&amp;#x2F;554614795488460811&amp;#x2F;mmap_icons.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Toolbar icons by @Demonic, @Piedro0, and @Pfau&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;490620627242450955&amp;#x2F;554300377864994839&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Concept of the spellbook by @Piedro0&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;&#x2F;h2&gt;
&lt;p&gt;A piece by @Aeronic&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449655372618137618&amp;#x2F;552397271631659032&amp;#x2F;Vast_Onslaught.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Vast Onslaught&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 5</title>
          <pubDate>Mon, 04 Mar 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-5/</link>
          <guid>https://veloren.net/blog/devblog-5/</guid>
          <description>&lt;p&gt;With the netcode in a state that is useable, lots of functionality has been making its way into the refactor. There is also lots of new concept art, so be sure to check that out! This week&#x27;s blog was written by @Pfau and @AngelOnFira.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;With netcode primed and ready, we have started to see other functionality becoming part of the refactor. @imbris has merged in their movement work, and you can now try it out in the main branch of fresh. There have also been some improvements to the netcode, as @LunarEclipse and @Zesterer have been working closely together to make sure that it is up to snuff.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;551877002060103680&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;After the netcode was finished last week, @Zesterer got the server and client into contact. Yay! Amazing things are on their way to come.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@Zesterer sat down and gave a general idea of the next steps for the programmers. The general gist is as follows. First, we will set up a simple 2-way chat. This is based on the old engine&#x27;s headless module. We will try to set up all of the core systems required to do this, including initiating connections with the server, exchanging messages, and graceful disconnects. Much of the new networking will be based off the concepts from the previous engine, as it has proven to work well enough. Finally, the synchronization of ECS components will be worked on.&lt;&#x2F;p&gt;
&lt;p&gt;Since the Veloren refactor is centered around an ECS (Entity Component System) architecture, ECS networking is a fundamental foundation for all future multiplayer in Veloren. ECS is an architecture that focuses on building entities with components rather than having entities inherit behaviour. It allows developers to design program architecture in a way that treats the game as a series of interconnected pipelines that process data. This is known as composition over inheritance. &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=wfMtDGfHWpA&quot;&gt;Here is a great example of that.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;551936033781055527&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some concepts of the login menu you’ll see when opening the game. The structures in the background are our elven buildings. Later on, we will have a 3D rendered background that might even have NPCs walking through it. We also hope to provide a server index that will be accessible through the “Servers” option.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;551948505216712734&amp;#x2F;Veloren_Logo_a01.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The Veloren Logo got a little alpha tag!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;551896966196363266&amp;#x2F;Logo_Square.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;An upgrade to the Discord server logo.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;550633452450349056&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Interface Element: WIP of the “Belt-Bar” beneath the bag icon. It will lead you into sub-menus such as settings, the map, and your equipped armour and weapons. Those functions will also be accessible by hotkeys, too.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;550795590456442881&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Belt-Bar integrated into the actual UI.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;video controls
  
  
  
  
  &gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;467073814208053248&amp;#x2F;551729308142665748&amp;#x2F;2019-03-03_12-34-28.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
    Your browser does not support the video tag.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;
    &lt;p&gt;&lt;i&gt;This video shows a static placeholder login menu. You can also see the grid of the skill bar, a WIP minimap frame, the belt-bar and the bag in action!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;551457989295341568&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;551458119671087114&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Our armour and weapons specialist @Seb created this unique piece. A WIP ‘Crow-Armour’&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;551538540517785629&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;This servant of a mythical underwater creature was brought to us by @Kidsnextdorks!&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;&#x2F;h2&gt;
&lt;p&gt;An early version of a piece that @Aeronic is working on.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449655372618137618&amp;#x2F;551300023267360778&amp;#x2F;Epic_battle_theme_early..ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Battle Theme&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 4</title>
          <pubDate>Mon, 25 Feb 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-4/</link>
          <guid>https://veloren.net/blog/devblog-4/</guid>
          <description>&lt;p&gt;The netcode was merged into the refactor! Lots of concept art has been worked on, with lots of interesting new creatures. We also discuss the weird benchmark results from last week&#x27;s blog, and the refactoring of Veloren&#x27;s GitLab CI.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;The netcode has been merged into the main codebase of Veloren. This opens lots of new doors for development on Veloren, as it was a pre-requisite for many other tasks. The first steps now are to get the netcode working in the &lt;code&gt;server&lt;&#x2F;code&gt; and &lt;code&gt;client&lt;&#x2F;code&gt; modules. Then Veloren can get a nice proof of concept working with a simple chat server.&lt;&#x2F;p&gt;
&lt;p&gt;In last week&#x27;s blog, you might have seen the odd menu benchmark results that @YuriMomo got. The CPU was running at 35%, and the GPU at 40%. This is much higher than in-game, which uses 2% CPU and 10% GPU while idling. It was determined that it was this high as there was nothing capping the game to a maximum frames per second (FPS). Therefore, it was running at around 800-1100 FPS, which is as much 35% CPU is able to do.&lt;&#x2F;p&gt;
&lt;p&gt;The fix is quite simple, as @imbris showed with a simple line of code.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;clock.tick(Duration::from_millis(1000 &#x2F; FPS));&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This tells the engine to wait until time has passed before rendering the next frame.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449602562165833760&amp;#x2F;548714245382995974&amp;#x2F;ui.gif&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@imbris working on improving the UI code&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;@AngelOnFira is working on getting automatic builds ready with GitLab CI. This gives multiple benefits to the refactor. First, it allows easy night builds of the game. Second, it allows for quick testing of new code, and better development practices. Although this pipeline has already been thoroughly written by @xMAC94x, @AngelOnFira has some improvements to add to the old system.&lt;&#x2F;p&gt;
&lt;p&gt;As code is added to the codebase, it should be tested. This helps prevent many issues, like regression. This means having code that worked in a previous version of the engine, but doesn&#x27;t anymore. Well designed testing pipelines prevent this issue. By simply writing tests for different functions, we can easily detect when an anomaly occurs. Writing tests while you write the code is known as test driven development. It requires a bit more work while writing functions for the first time, but prevents many issues from occurring in the future. These tests will be automatically run by GitLab CI.&lt;&#x2F;p&gt;
&lt;p&gt;Another benefit of the GitLab-CI pipeline is building nightly versions of Veloren. A version will be compiled every day for people that want to try the latest features of Veloren, but don&#x27;t want to compile the engine themselves. Note that these versions are bound to be bug-ridden, and are by no means official versions of Veloren.&lt;&#x2F;p&gt;
&lt;p&gt;One of the main changes @AngelOnFira hopes to implement is the switch to using Docker for the builds. Docker is a tool that allows each build to run in its own unique container. This prevents issues like files from old builds that stick around and affect new builds. It also allows people who want to volunteer their computer the Veloren GitLab Runner pool to do so much more easily. All they have to do is install Docker, and our image will automatically be downloaded for them. There are still some problems with @AngelOnFira&#x27;s method, which are being discussed. One of the main ones is how compile time will be affected, as it is still unclear how to build the Docker images efficiently.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;
&lt;p&gt;Lots of concept designs were worked on this week.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;546891221562294272&amp;#x2F;548922023724711993&amp;#x2F;All_in_one.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;546891221562294272&amp;#x2F;548922024257650738&amp;#x2F;Panthuron_rendered.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Further work has been done on @Maddin&amp;#x27;s Panthuron. It is still very much in the concept phase, but there is lots of discussion around these creatures.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;548614792147894286&amp;#x2F;Winged_Eye.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;548540215090741248&amp;#x2F;Toucan.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;549374733905559553&amp;#x2F;servant_of_Athuhu_fin.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Some more beasties. The first two are by @Maddin, and the last is by @Kidsnextdorks.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;547469859051667456&amp;#x2F;9lUgCSiBmMjF89RLxVcdNkddU93kYvJydEKL-2sI7BdK9K9e0T4b5rokszIf0PRA0OoxSRIJJk7n1HM16L5WBb-pmc1LKgANG6z3.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;548553902916763648&amp;#x2F;Syrinx_2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;A concept drawn by @Pfau, modeled by him and @Maddin.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;essence-of-nature&quot;&gt;Essence Of Nature&lt;&#x2F;h3&gt;
&lt;p&gt;By @Belosceani&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;548898973193338908&amp;#x2F;548901433378865152&amp;#x2F;Essence_of_Nature.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Essence of Nature&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 3</title>
          <pubDate>Mon, 18 Feb 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-3/</link>
          <guid>https://veloren.net/blog/devblog-3/</guid>
          <description>&lt;p&gt;This week is the week of netcode. With @LunarEclipse working heavily on it, lots of progress has been made. There is still a little more to do, but this is a crucial part of the refactor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;There has been a significant amount of work done to the netcode of the refactor. @LunarEclipse as completed most of the work on it, and it is almost ready to be merged in. If you want to see the WIP, feel free to check it out &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;veloren&#x2F;fresh&#x2F;merge_requests&#x2F;6&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Lots of discussion about the implementation has been had in #programmers, so be sure to check it out if you want more details. Wireshark has been this week&#x27;s MVP tool for debugging issues :P. Other than a few other features and polish, the netcode is nearly ready! Once this chapter of the engine is done, it will open the floodgates for much more.&lt;&#x2F;p&gt;
&lt;p&gt;@YuriMomo did some benchmarks with the refactored code, and here were the results.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-txt &quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span&gt;--------------------------
&lt;&#x2F;span&gt;&lt;span&gt;Main Menu
&lt;&#x2F;span&gt;&lt;span&gt;average cpu usage ~35%
&lt;&#x2F;span&gt;&lt;span&gt;Ram Usage ~100mb
&lt;&#x2F;span&gt;&lt;span&gt;Gpu 3D Average usage ~ 40%
&lt;&#x2F;span&gt;&lt;span&gt;----------
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Ingame&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;CPU usage ~ 2%
&lt;&#x2F;span&gt;&lt;span&gt;Ram usage ~ 150mb
&lt;&#x2F;span&gt;&lt;span&gt;GPU usage ~10%
&lt;&#x2F;span&gt;&lt;span&gt;--------------
&lt;&#x2F;span&gt;&lt;span&gt;--------------------------
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;He didn&#x27;t see anything out of the normal in terms of memory leaks, however, much more extensive tests will be run in the future to get a better idea of the capabilities of the Veloren engine.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;545285444322197505&amp;#x2F;Moai_deactivated.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;545289326515453955&amp;#x2F;Moai_activated.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Maddin doing some concept art for Moai that pop out of the ground when approached&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;542935073054392330&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Demonic&amp;#x27;s concept art for tiny tree creatures&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;546340316257583104&amp;#x2F;Smaragd_Hippo2.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Maddin&amp;#x27;s Panthuron. It is still being discussed what the length of the feet should be, and how quadruped animations should work in general.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;&#x2F;h2&gt;
&lt;p&gt;@Aeronic took some time to prepare this track for the blog :)&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;542711080544370689&amp;#x2F;546870018571370496&amp;#x2F;wandering_voices.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Wandering Voices&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 2</title>
          <pubDate>Mon, 11 Feb 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-2/</link>
          <guid>https://veloren.net/blog/devblog-2/</guid>
          <description>&lt;p&gt;This week has had another big push on the refactoring front. Also, big strides will be coming to the netcode soon!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;@zesterer took the time to do a Q&amp;amp;A to answer lots of engine questions for the programmers. Since the Discord server is seeing multiple potential programmers join each week, we need to make sure to get them up and running as quickly as possible.&lt;&#x2F;p&gt;
&lt;p&gt;@LunarEclipse is on winter break and is ready to put a heavy two weeks into Veloren’s netcode. She’s been quite busy in the Discord this week getting input from lots of programmers on certain topics in the domain.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;460500916085456927&amp;#x2F;544295220334952479&amp;#x2F;voxygen.PNG&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@AlexW doing some benchmarks. i5 3570k, GTX 670, 8GB DDR3 RAM. 1080p resolution with a view distance of 4.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;
&lt;p&gt;Lots of voxel concept art has been thrown around in #voxel-art. We are trying to post some of this content to Twitter periodically, so be sure to &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;velorenproject&quot;&gt;follow us&lt;&#x2F;a&gt; if you haven’t already.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;544450900505395208&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau’s completed deer, next it needs animations&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;543158945934606337&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau’s super early models of elementals.&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;450039871650660374&amp;#x2F;543520824750112768&amp;#x2F;SzKL5RmsGT-zGJoBCNRzYGH_edjyDUcsWaPYpWrsoQxklYUFuyv-yMH_QSWm1e1HtfSpxUobMo5HGIH6lkM5fr3vENe2HqBR7YSX.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Later, he decided to draw the concept above, and concluded with the version below. You can watch the progress of the elemental build [here](https:&amp;#x2F;&amp;#x2F;www.twitch.tv&amp;#x2F;videos&amp;#x2F;376656222)&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;543748964382539786&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The plans are to add particle effects instead of the cartoon flames :P&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;523568428905398283&amp;#x2F;543507549790535710&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Demonic’s render of some docks and a ship&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;&#x2F;h2&gt;
&lt;p&gt;Early test by @Aeronic.&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449655372618137618&amp;#x2F;543197446310985728&amp;#x2F;The_Sunshine_Breaks_Early_Test.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The Sunshine Breaks Early&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
        
        
          
        
        <item>
          <title>This Week In Veloren 1</title>
          <pubDate>Mon, 04 Feb 2019 00:00:00 +0000</pubDate>
          <link>https://veloren.net/blog/devblog-1/</link>
          <guid>https://veloren.net/blog/devblog-1/</guid>
          <description>&lt;p&gt;This week has seen a lot of new programmers join the project. With the refactor still ongoing, it is a great time to give tasks out to beginners to help them learn the code base.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programming&quot;&gt;Programming&lt;&#x2F;h2&gt;
&lt;p&gt;With @AngelOnFira and @thatkindof joining the crew of programmers, some of the refactoring tasks have been handed off to them. One of the most important parts of refactoring is getting as many people as possible familiar with the new code base. This also makes sure that there are fewer issues going forward if there was some code that wasn’t written properly.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;481112886308110339&amp;#x2F;539543160603541520&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau playing with the generation of tree canopies&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Other than that, @LunarEclipse has also been working on the network code of the game. With the refactor comes the opportunity to change lots about the networking approach. We’ll be sure to see more updates about this in future blogs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art&quot;&gt;Art&lt;&#x2F;h2&gt;
&lt;p&gt;In #voxel-art this week, there have been quite a few updates and discussions on future content. Here are a couple of the results.&lt;&#x2F;p&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;539612690184929291&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Slipped made some new Sabre Tooth models&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;540992346267975706&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;@Pfau discussing the different colours of trees&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;





&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449660795857403905&amp;#x2F;541202400820854785&amp;#x2F;unknown.png&quot;
    
    loading=&quot;lazy&quot;
    &gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;The new tree colour applied to @Demonic’s temple&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;&#x2F;h2&gt;
&lt;p&gt;@Demonic has been working on some music pieces, check them out here:&lt;&#x2F;p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449655372618137618&amp;#x2F;539725107967557641&amp;#x2F;Wayward.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Wayward&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;audio width=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;s3.eu-central-2.wasabisys.com&amp;#x2F;veloren-blog&amp;#x2F;cdn&amp;#x2F;449655372618137618&amp;#x2F;539728292354457600&amp;#x2F;Mysteries_of_Veloren.ogg&quot; type=&quot;audio&#x2F;ogg&quot;&gt;
    Your browser does not support the audio element.
  &lt;&#x2F;audio&gt;
  
    &lt;figcaption&gt;
      &lt;p&gt;&lt;i&gt;Mysteries of Veloren&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
    &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
</description></item>
    </channel>
</rss>