This service tests the validity of an RSS 2.0 feed, checking to see that it follows the rules of the RSS specification. For advice from the RSS Advisory Board on how to implement RSS and handle issues such as enclosures and HTML encoding, read the RSS Best Practices Profile. This checker is also a validator of Atom and RSS 1.0 feeds.

Use this tester regularly to ensure that your RSS feed continues to work well in the wide audience of RSS readers, podcast clients and other software that supports the format.

 

Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

  • line 2, column 196: Self reference doesn't match document location [help]

    ... hulties.github.io/atom.xml" rel="self"/><id>https://joshulties.github.io ...
                                                 ^

Source: https://joshulties.neocities.org/atom.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <feed xmlns="http://www.w3.org/2005/Atom"><title>Joshulties Games</title><link href="https://joshulties.github.io/" rel="alternate"/><link href="https://joshulties.github.io/atom.xml" rel="self"/><id>https://joshulties.github.io/</id><updated>2025-08-18T06:10:00-04:00</updated><subtitle>A blog page for game development</subtitle><entry><title>The Railway Level</title><link href="https://joshulties.github.io/posts%5Chow-i-do-level-design.html" rel="alternate"/><published>2025-08-18T06:10:00-04:00</published><updated>2025-08-18T06:10:00-04:00</updated><author><name>Joshulties</name></author><id>tag:joshulties.github.io,2025-08-18:/posts%5Chow-i-do-level-design.html</id><summary type="html">Progress and info on the next level</summary><content type="html">&lt;p&gt;As of early August, I essentially completed &lt;code&gt;Commercial_02&lt;/code&gt;, the level that I had been working on for the past 6-7 months. While that does sound like a lot of time for just one level, I had been dealing with personal responsibilities such as finishing up school and job hunting, and only had time to work on Oneirality on and off in my free time. But with those out of the way (for the most part for the latter, at least), I&amp;rsquo;m now able to continue onto the next level.&lt;/p&gt;
  3. &lt;p&gt;For this new level, dubbed &lt;code&gt;Railway_01&lt;/code&gt; in the files, I chose to go about things differently. For one, I would design the main focus of the level first before making all the other sections/areas of the level that lead up to it.&lt;/p&gt;
  4. &lt;p&gt;The main gimmick of &lt;code&gt;Railway_01&lt;/code&gt; is that the player has to fend off incoming enemies as they wait for a train to arrive to clear the obstacle, so that they can move onto the next area. Similar to &lt;em&gt;Left 4 Dead 2&lt;/em&gt; areas where a horde will occur the moment the players do something to clear the path forward.&lt;/p&gt;
  5. &lt;p&gt;&lt;img alt="Block out of the Railway level" src="../images/railway_level_blockout.png"&gt;&lt;/p&gt;
  6. &lt;p&gt;&lt;img alt="Railway platform in game" src="../images/railway_platform_2.png"&gt;&lt;/p&gt;
  7. &lt;p&gt;I&amp;rsquo;m honestly quite happy with the platform as it came out. I added two new tiles specifically for this level &amp;mdash; the low barrier and a staircase tile &amp;mdash; which does a lot to introduce height to a game that has so far been on a flat plane.&lt;/p&gt;
  8. &lt;p&gt;I quickly scripted a wave sequence that would spawn enemies offscreen and move towards the player&amp;rsquo;s position. I was so surprised to see it work so easily! There still needs to be playtests in order to tweak the difficulty; see if there should be more waves or less, and what enemy combinations should be sent in.&lt;/p&gt;</content></entry><entry><title>Weighted Drop System</title><link href="https://joshulties.github.io/posts%5Cweighted-loot-system.html" rel="alternate"/><published>2025-08-05T08:16:00-04:00</published><updated>2025-08-05T08:16:00-04:00</updated><author><name>Joshulties</name></author><id>tag:joshulties.github.io,2025-08-05:/posts%5Cweighted-loot-system.html</id><summary type="html">Changing how supplies are given to the player</summary><content type="html">&lt;p&gt;Two years ago, I uploaded a video about &lt;a href="https://www.youtube.com/watch?v=xz5smVlerOg"&gt;dynamic drops&lt;/a&gt; from boxes when the player destroys them. These items can range from food items, bandages that heal the player, pills to restore their energy, or ammo for any weapons they are carrying. The main inspiration for these came from this &lt;a href="https://developer.valvesoftware.com/wiki/Item_dynamic_resupply"&gt;Valve dev community wiki page&lt;/a&gt;.&lt;/p&gt;
  9. &lt;p&gt;However, two years ago, I was an idiot.&lt;/p&gt;
  10. &lt;p&gt;The loot system that I wrote &lt;em&gt;did not&lt;/em&gt; give items that the player needed. Instead, if a box is broken, it runs a random chance to see if it should drop an item; once it passes that and if the player needed a specific category of item (healing items, energy items, ammo, etc.) then it is added to a list referred to as a &lt;code&gt;raffle&lt;/code&gt;. The system chooses a random item from the &lt;code&gt;raffle&lt;/code&gt; to give to the player.&lt;/p&gt;
  11. &lt;p&gt;This system is what was used in my public demo, and only yesterday night did I try and revise it with my new knowledge so far.&lt;/p&gt;
  12. &lt;h3&gt;Enter weights&lt;/h3&gt;
  13. &lt;p&gt;Going back to that article, it said that it spawned an item that the player needed the most. So I needed to get a measurement of what the player needed.&lt;/p&gt;
  14. &lt;p&gt;I revised my &lt;code&gt;LootSystem.gd&lt;/code&gt; script to include weights variable.&lt;/p&gt;
  15. &lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;Dictionary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  16. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;none&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  17. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;health&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  18. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;food&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  19. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;mana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  20. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_pistol&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  21. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_shotgun&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  22. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_smg&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  23. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_flamethrower&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  24. &lt;span class="p"&gt;}&lt;/span&gt;
  25. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  26.  
  27. &lt;p&gt;The weights are a value between 0.0 and 1.0, which are determined by subtracting 1 from the percentage of the respective category. Using health as an example: &lt;code&gt;1.0 - (player's current hp / player's maximum hp)&lt;/code&gt;.&lt;/p&gt;
  28. &lt;p&gt;The function to set these weights were pretty simple because of that:&lt;/p&gt;
  29. &lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calc_weights&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  30. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;player_hp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_hp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  31. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;percent_health&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;player_hp&lt;/span&gt;
  32. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;player_mana&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mana&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_mana&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  33. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;percent_mana&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;player_mana&lt;/span&gt;
  34. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pistol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;W_Pistol&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  35. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shotgun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;W_Shotgun&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  36. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;smg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;W_SMG&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  37. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flamethrower&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Global&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weapon_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;W_FlameThrower&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  38.  
  39. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update Health weight&lt;/span&gt;
  40. &lt;span class="c1"&gt;#   print(str(&amp;quot;Chance to drop a medkit: &amp;quot;, percent_health))&lt;/span&gt;
  41. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;health&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;percent_health&lt;/span&gt;
  42.  
  43. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update Mana weight&lt;/span&gt;
  44. &lt;span class="c1"&gt;#   print(str(&amp;quot;Chance to drop a pep pill: &amp;quot;, percent_mana))&lt;/span&gt;
  45. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;mana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;percent_mana&lt;/span&gt;
  46.  
  47. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update Food weight&lt;/span&gt;
  48. &lt;span class="c1"&gt;#   print(str(&amp;quot;Chance to drop random food: &amp;quot;, player_hp))&lt;/span&gt;
  49. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;food&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;player_hp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  50.  
  51. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update Pistol ammo weight&lt;/span&gt;
  52. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_pistol&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_get_ammo_percentage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pistol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  53.  
  54. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update Shotgun  ammo weight&lt;/span&gt;
  55. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_shotgun&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_get_ammo_percentage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shotgun&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  56.  
  57. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update SMG  ammo weight&lt;/span&gt;
  58. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_smg&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_get_ammo_percentage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;smg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  59.  
  60. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Update Flamethrower ammo weight&lt;/span&gt;
  61. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ammo_flamethrower&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_get_ammo_percentage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flamethrower&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  62.  
  63.  
  64. &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_get_ammo_percentage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weapon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Firearm&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  65. &lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weapon&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ammo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weapon&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_ammo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;weapon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;
  66. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  67.  
  68. &lt;p&gt;With that done, all I had to do was update my &lt;code&gt;dynamic_drop&lt;/code&gt; function to use the new weights and choose the key with the highest value. And the result is as you&amp;rsquo;d expect &amp;ndash; players will be given items they need the most.&lt;/p&gt;
  69. &lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="go"&gt;{&lt;/span&gt;
  70. &lt;span class="go"&gt;    ammo_flamethrower:0, &lt;/span&gt;
  71. &lt;span class="go"&gt;    ammo_pistol:0.233333, &lt;/span&gt;
  72. &lt;span class="go"&gt;    ammo_shotgun:0.775, &lt;/span&gt;
  73. &lt;span class="go"&gt;    ammo_smg:0.666667, &lt;/span&gt;
  74. &lt;span class="go"&gt;    food:0, &lt;/span&gt;
  75. &lt;span class="go"&gt;    health:0.43, &lt;/span&gt;
  76. &lt;span class="go"&gt;    mana:0.7, &lt;/span&gt;
  77. &lt;span class="go"&gt;    none:0&lt;/span&gt;
  78. &lt;span class="go"&gt;}&lt;/span&gt;
  79. &lt;span class="go"&gt;Chosen category: ammo_shotgun&lt;/span&gt;
  80. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  81.  
  82. &lt;h3&gt;Possible changes&lt;/h3&gt;
  83. &lt;p&gt;Some things that I would change are how &lt;code&gt;food&lt;/code&gt; and the &lt;code&gt;ammo&lt;/code&gt; types are dropped. Currently, these weights are linear; ideally I&amp;rsquo;d like for them to be exponential, where the closer to 0.0 the weights are, the higher it will be. That way the player isn&amp;rsquo;t getting ammo when they&amp;rsquo;re half way full of it and they really need something else.&lt;/p&gt;
  84. &lt;p&gt;And for food, it should be a quadratic function, where it&amp;rsquo;s most likely to drop if the player is at half health. If the player has high HP, they are less likely to get it, and the closer they are to 0, it won&amp;rsquo;t drop because that&amp;rsquo;s where the bandages will be given instead.&lt;/p&gt;
  85. &lt;h3&gt;Closing Note&lt;/h3&gt;
  86. &lt;p&gt;I&amp;rsquo;m really happy with this change. I&amp;rsquo;m also pretty happy about having my own written blog too! There&amp;rsquo;s a lot of minor things that I&amp;rsquo;ve done for my game + other separate game projects that I&amp;rsquo;d like to talk about or show, but it&amp;rsquo;s not really that possible since it wouldn&amp;rsquo;t be interesting visually for a short video. (Not to mention having to record it&amp;hellip;)&lt;/p&gt;
  87. &lt;p&gt;Thank you for reading!&lt;/p&gt;</content></entry></feed>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.rssboard.org/rss-validator/check.cgi?url=https%3A//joshulties.neocities.org/atom.xml

Software created by Sam Ruby, Mark Pilgrim, Joseph Walton and Phil Ringnalda