<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JustLeviDev</title>
    <description>The latest articles on DEV Community by JustLeviDev (@justlevidev).</description>
    <link>https://dev.to/justlevidev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1070480%2F7f15306d-c005-4909-880b-ecd4fa48784d.png</url>
      <title>DEV Community: JustLeviDev</title>
      <link>https://dev.to/justlevidev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justlevidev"/>
    <language>en</language>
    <item>
      <title>DevBlog - How to Save Data in Unity</title>
      <dc:creator>JustLeviDev</dc:creator>
      <pubDate>Thu, 06 Jul 2023 21:20:09 +0000</pubDate>
      <link>https://dev.to/justlevidev/devblog-how-to-save-data-in-unity-5102</link>
      <guid>https://dev.to/justlevidev/devblog-how-to-save-data-in-unity-5102</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Hello there, nice to see you.&lt;br&gt;
My name is Levi and I'm a Unity-Games-Programmer/Developer.&lt;br&gt;
Today I'd like to talk a little bit about how I save and load data in my projects.&lt;/p&gt;
&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;The games I usually work on are Singleplayer games built in Unity for Windows using the language &lt;code&gt;C#&lt;/code&gt; and &lt;code&gt;JsonUtility&lt;/code&gt; from &lt;code&gt;System.IO&lt;/code&gt;.&lt;br&gt;
I'll mention a small addition to use the code that should encrypt it, but I can't guarantee that it'll work for different engines using different languages.&lt;br&gt;
With all of that said:&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Let's begin!&lt;/strong&gt;
&lt;/h2&gt;


&lt;h1&gt;
  
  
  The Core
&lt;/h1&gt;

&lt;p&gt;The main part of the System is a script called &lt;code&gt;SaveSystem&lt;/code&gt; (I know, very authentic).&lt;br&gt;
This class includes the 4 most important functions:&lt;br&gt;
Save, Load, Clear and Exists.&lt;/p&gt;


&lt;h2&gt;
  
  
  Save
&lt;/h2&gt;

&lt;p&gt;The save function takes in a &lt;code&gt;generic T&lt;/code&gt; and a filename and uses &lt;code&gt;JsonUtility.ToJson&lt;/code&gt; in order to convert the generic into a string in the json format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;SaveClass&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;infoToSave&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;persistentDataPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;\\&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonUtility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;infoToSave&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While this approach works for my use cases, it has one minor downside, as this could lead to the player being able to easily change the file and give themselves more items, health or anything else they might want to have in their inventory, whenever they load the game again.&lt;br&gt;
Since it's supposed to be used for singleplayer games that isn't really a problem, but if you want to use this code for any multiplayer game that gets hosted on the players computer, you might want to encrypt your json before calling &lt;code&gt;File.WriteAllText&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This approach uses &lt;code&gt;Application.persistentDataPath&lt;/code&gt; as a save location, but you could just change the first line like followed to use whichever location you want to place your save files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;SaveClass&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;infoToSave&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonUtility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;infoToSave&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;\\&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Those changes can be added to every function following, but for the sake of keeping it simple I won't mention it again.
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Load
&lt;/h2&gt;

&lt;p&gt;The load function just takes in a filename, but has a &lt;code&gt;generic T&lt;/code&gt; as the return type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;LoadClass&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;persistentDataPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;\\&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;tempClass&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonUtility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromJson&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tempClass&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And while loading a class or struct is how most data gets saved, I've added another version that allows the loading of Scriptable Objects, since then you can't use &lt;code&gt;FromJson&lt;/code&gt;, but you have to use &lt;code&gt;FromJsonOverwrite&lt;/code&gt; instead.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;LoadScriptableObject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ScriptableObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;persistentDataPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;\\&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//this can be removed, but ensures that it doesn't throw an exception if the file doesn't exist&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;tempClass&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ScriptableObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateInstance&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="n"&gt;JsonUtility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromJsonOverwrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tempClass&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tempClass&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A problem of those methods is that they will not work if the path doesn't exist, which is why there is another method called &lt;code&gt;Exists&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exists
&lt;/h2&gt;

&lt;p&gt;Exists just checks whether the specified file actually exists or not and should be used inside an if-statement before calling Load.&lt;/p&gt;

&lt;p&gt;public bool Exists(string fileName)&lt;br&gt;
{&lt;br&gt;
    string path = $"{Application.persistentDataPath}\{fileName}.json";&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return File.Exists(path);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h2&gt;
  
  
  Clear
&lt;/h2&gt;

&lt;p&gt;Last but definitely not least we have Clear.&lt;br&gt;
The sole purpose of Clear is to delete a specified file if it exists.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ClearFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;persistentDataPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;\\&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Calls
&lt;/h1&gt;

&lt;p&gt;Just using the &lt;code&gt;SaveSystem&lt;/code&gt; as is could lead to some human errors occuring, which is why I added a &lt;code&gt;SaveManager&lt;/code&gt; as a wrapper around SaveSystem.&lt;br&gt;
This class implements a singleton-pattern and gets placed on an otherwise empty GameObject in Unity to be called from everywhere at all times.&lt;br&gt;
It also has an instance of the SaveSystem (I called it "save") which gets instantiated in Awake.&lt;br&gt;
The main purpose of this script is to store the filenames, which I did using a struct that consists of only an enum and a string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Serializable&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;SaveFileNames&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ESaveType&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At runtime during &lt;code&gt;Awake&lt;/code&gt; the array of &lt;code&gt;SaveFileNames&lt;/code&gt; will be used to fill a &lt;code&gt;Dictionary&lt;/code&gt; that takes the enum &lt;code&gt;ESaveType&lt;/code&gt; as input and gives out the filename via string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ESaveType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;GetFileName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Save
&lt;/h2&gt;

&lt;p&gt;This Save-function basically just uses the given enum to get the filename from and uses the generic T again for taking in any type of data to save.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;ESaveType&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SaveClass&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GetFileName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Load/Exists/Clear
&lt;/h2&gt;

&lt;p&gt;The only difference between the Save-function and the other 3 functions is that they only require the enum as parameter and have the same return type as their counter-parts in the SaveSystem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;Load&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;ESaveType&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GetFileName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="c1"&gt;//saving the string allows for additional changes&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Load&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;LoadScriptable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;ESaveType&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ScriptableObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GetFileName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;LoadScriptable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;Exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ESaveType&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetFileName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Clear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ESaveType&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ClearFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetFileName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;After adding the SaveSystem and SaveManager into any new Unity project I can call the save-, load-, exists- and clear-functions given by the SaveManager, allowing saves to be made using just a single line.&lt;/p&gt;




&lt;h1&gt;
  
  
  Outro
&lt;/h1&gt;

&lt;p&gt;Thank you for reading my first DevBlog that was a little bit more educational than the others.&lt;br&gt;
Hopefully you could learn something along the way :)&lt;br&gt;
Regarding my next Blog, I'm not quite sure what it will be about. Maybe about the polishing on my project "The Farm", maybe about a new project I've started working on, or maybe just another insight on a system I've made that allows me to develop faster and easier.&lt;br&gt;
But regardless of what the next topic will be, thank you again for reading this.&lt;br&gt;
If you want to see more of what I'm doing check out my &lt;a href="https://linktr.ee/justlevidev"&gt;socials&lt;/a&gt; and drop me a message.&lt;br&gt;
Thanks for your time and I'll see you in my next Blog, have a good night.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>unity3d</category>
      <category>csharp</category>
      <category>coding</category>
    </item>
    <item>
      <title>DevBlog - The Farm 04 - Menu &amp; Saves</title>
      <dc:creator>JustLeviDev</dc:creator>
      <pubDate>Thu, 22 Jun 2023 17:02:40 +0000</pubDate>
      <link>https://dev.to/justlevidev/devblog-the-farm-04-menu-saves-4kdp</link>
      <guid>https://dev.to/justlevidev/devblog-the-farm-04-menu-saves-4kdp</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Hello again and welcome back to the DevBlog about my Project "The Farm".&lt;br&gt;
It's been 2 weeks again and I've added something that probably no one expected, a main menu.&lt;br&gt;
On top of that I've added a system to save, load and clear the progress, so that the game doesn't need to be replayed from the beginning every single time, making it future-proof for any new additions that increase the playtime.&lt;/p&gt;




&lt;h1&gt;
  
  
  Main Menu
&lt;/h1&gt;

&lt;p&gt;The main menu currently consists of just 4 buttons: "Play", "Options", "Survey" and "Quit".&lt;br&gt;
The "Play" button loads up a new menu from which you can create, load and delete previous save files.&lt;br&gt;
The "Options" button is supposed to allow the player to change the games settings like the resolution or the audio volume. Currently it doesn't have any functionality though.&lt;br&gt;
The "Survey" button loads up the Google-Forms link I created for giving players a way to quickly give me feedback on the game.&lt;br&gt;
The "Quit" button is just quitting the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EKSmlqJ1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zbh4oznh3bmwdg9tmtu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EKSmlqJ1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zbh4oznh3bmwdg9tmtu.gif" alt="A gif showing the Main Menu" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Save Menu
&lt;/h2&gt;

&lt;p&gt;The probably most important part of the main menu is the save menu.&lt;br&gt;
Through this you can create new save files, load already created ones and delete existing files.&lt;br&gt;
To give the player a little more information about what is saved in what save slot, I added a few informations about that specific slot.&lt;br&gt;
Those informations currently include the time of the last save, the games version that save was made in (with the purpose of allowing players that made a save file in a previous version of the game to still use that save for the current version) and the playtime.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4PtPdUvQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xserln6jrvp3jvnqcmyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4PtPdUvQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xserln6jrvp3jvnqcmyc.png" alt="A picture showing the Save Menu" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And to prevent the player from accidentally deleting a save file, I added a little pop-up window that asks you once more if you want to delete the save file or not.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9n73TFxW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibn87767xrs7gjojp38n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9n73TFxW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibn87767xrs7gjojp38n.png" alt="A picture showing the Pop-Up Window before Deleting a Save" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Save System
&lt;/h1&gt;

&lt;p&gt;With the addition of the main menu I thought it was a good time to implement a save system, which isn't and easy task considering that I hadn't thought that I would get this far with this project, especially considering that I originally had around 6 months of time to make it.&lt;br&gt;
What gets currently saved are the player inventory, the tiles placed, the objects placed including their inventory, the trades progress and what memories the player has already visited.&lt;br&gt;
To prevent the player from accidentally losing progress I also added the saving to the "Quit" button in the pause menu, so preferably close your game like that if you want to keep your progress.&lt;br&gt;
I would have to lie if I said that this wasn't/isn't the hardest and most complicated part of this project yet, but I feel like it is a necessary implementation if I want the game to be bigger than what it currently is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xwowBq_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8hgywyhcb8402wpxmen.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xwowBq_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8hgywyhcb8402wpxmen.gif" alt="A gif showing the Save System" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  What's next?
&lt;/h1&gt;

&lt;p&gt;To be fully honest, I don't know what I'm gonna work on next.&lt;br&gt;
My next goal is to get this project to be playable to the end of what I consider the "early-game" first, and then think about what I'm gonna do next.&lt;br&gt;
Just yesterday I had an idea that could be a completely different game, or maybe it could be used as a part of the "mid-game" of this project, but I haven't decided that yet.&lt;br&gt;
That also means that my next Blog might not even be about the project "The Farm", but I'm not gonna promise anything yet.&lt;br&gt;
Regardless of what my next Blog or future projects will be about, if you have any questions, ideas or just wanna say hi, feel free to check out my &lt;a href="https://linktr.ee/justlevidev"&gt;socials&lt;/a&gt; and follow wherever you feel fitting.&lt;br&gt;
I hope you enjoyed reading about my projects, thanks for your time and I'll see you in my next Blog, have a good night.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>devjournal</category>
      <category>development</category>
      <category>showdev</category>
    </item>
    <item>
      <title>DevBlog - The Farm 03 - UI &amp; Map Additions</title>
      <dc:creator>JustLeviDev</dc:creator>
      <pubDate>Thu, 08 Jun 2023 21:53:14 +0000</pubDate>
      <link>https://dev.to/justlevidev/devblog-the-farm-03-ui-map-additions-40ld</link>
      <guid>https://dev.to/justlevidev/devblog-the-farm-03-ui-map-additions-40ld</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Hi there! Glad to see you again here on my DevBlog about the Project "The Farm".&lt;br&gt;
It's been 2 weeks since my last Blog and I can assure you, I've made a lot of progress towards my vision of the game.&lt;br&gt;
But since there are too many changes for just one Blog, I'll focus on adding to my last 2 Blogs about &lt;a href="https://dev.to/justlevidev/devblog-update-01-ui-overhaul-46l4"&gt;UI&lt;/a&gt; and &lt;a href="https://dev.to/justlevidev/devblog-update-02-map-overhaul-6n5"&gt;Maps&lt;/a&gt; to show some of my changes.&lt;/p&gt;




&lt;h1&gt;
  
  
  UI-Changes
&lt;/h1&gt;

&lt;p&gt;The last time I talked about this topic I specifically mentioned the new Trading-UI and the new Chest-UI, but now there is another completely new Window: &lt;em&gt;the PC-UI&lt;/em&gt;!&lt;br&gt;
While I won't go into much details about the whole story of the game (since that will be its own Blog when it's ready to be talked about), I can probably already mention that one of the most important parts about the game is the interaction with an AI the player found after first waking up.&lt;br&gt;
And since it's not very realistic to have an up until this point random person to be able to just build machines, the AI will take care of the whole building aspect of the game. (besides maybe some smaller things of course).&lt;br&gt;
For that the AI has a few different &lt;em&gt;modes&lt;/em&gt; that do something different.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building
&lt;/h2&gt;

&lt;p&gt;The building-tab is focused around building Objects and placing them into the world.&lt;br&gt;
Currently those range from chests with different inventory sizes to farmTiles, which the player needs in order to plant his crops on.&lt;br&gt;
Maybe I'll add some system to sort for items, but since there are only 5 different ones at the moment I will keep that idea for later to instead focus on the more important parts of the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zQPyQhl8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxkp4b9oqzslw06p4i70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zQPyQhl8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxkp4b9oqzslw06p4i70.png" alt="A picture showing the Building-Tab-UI" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI-Talk
&lt;/h2&gt;

&lt;p&gt;In order to progress the story, get some help with understanding the games mechanics or just to feel a little less alone I've added the option to "talk" with the AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lERZ-zTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gd2ju6ojg6klcya5qg9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lERZ-zTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gd2ju6ojg6klcya5qg9j.png" alt="A picture showing the AI-Tab-UI" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those "talks" can go from just asking how to plant crops to asking the AI to open a door for you, but there will be A LOT more options added later on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XIy7L6s---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jpahzfh3b18bjympnuw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XIy7L6s---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jpahzfh3b18bjympnuw.png" alt="A picture showing the AI-Talking-UI" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Map-Changes
&lt;/h1&gt;

&lt;p&gt;During my last Blog I've shown the changes on the Tutorial-Map from the moment it first got created, and now there is another addition to it, but not for the first time you enter this map.&lt;/p&gt;




&lt;h2&gt;
  
  
  House-03/Memory-03
&lt;/h2&gt;

&lt;p&gt;Throughout the game the player will learn (or to be more specific remember) informations and skills, which they used to know but forgot.&lt;br&gt;
But real memories usually don't stay the same everytime you revisit them, so there is no reason for the map to stay the same everytime you remember it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XTfBAlVL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3k1qvjqgtdls8rek9b8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XTfBAlVL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3k1qvjqgtdls8rek9b8s.png" alt="A picture showing the spawn of the third Memory-Map" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So this time you won't have to grow a specific amount of crops to progress (or wake up again), but instead you'll need to walk through a gate that suddenly appeared to press the button on the other side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hxC7FI24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zap1fya8seczihxzfjvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hxC7FI24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zap1fya8seczihxzfjvn.png" alt="A picture showing the second area of the third Memory-Map" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that may not seem that interesting to some, but please remember that everything I talk about is going through constant changes, some bigger, some smaller.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kibmTSME--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/stl3bc03kpz9r7jvn1fo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kibmTSME--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/stl3bc03kpz9r7jvn1fo.png" alt="A picture showing the end of the third Memory-Map" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the future this will be changed, but for now it works.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dome
&lt;/h2&gt;

&lt;p&gt;During game testing I found out that the main room in the Dome is a little big for its contents, so I reduced its size to fit comfortably onto the players screen.&lt;br&gt;
To those of you wondering where the path at the top leads to, don't forget that, since it's going to be very important in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kb41vaux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ym53voi5468hrbzlvdd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kb41vaux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ym53voi5468hrbzlvdd.png" alt="A picture showing the changed Dome" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  What's next?
&lt;/h1&gt;

&lt;p&gt;Sadly I couldn't show every change I made today, mostly because they are part of vastly different topics, but I'll talk about more of them in my next Blog.&lt;br&gt;
Another unfortunate point is that me being a student limits the time I can invest into the game, since I have to work on another game at the same time. (I might show it sometime in the future if anyone is interested in seeing that)&lt;br&gt;
But even though I can't work on it as much as I'd want to, I'm not gonna stop making improvements and adding new thing to this game.&lt;br&gt;
I currently can't give any promises regarding how long it'll be until the game is fully playable to the end of what I call "the early-game", but it's getting closer every single day.&lt;br&gt;
The core elements are already in the current version of the game, so I'd guess that it won't take too long for the rest to be added.&lt;br&gt;
Anyway, thank you once again for your time.&lt;br&gt;
If you have any questions, ideas or just wanna say hi, feel free to check out my &lt;a href="https://linktr.ee/justlevidev"&gt;Socials&lt;/a&gt; and follow wherever you feel comfortable.&lt;br&gt;
I hope you enjoyed reading some more about my journey to become a full time Game Developer.&lt;br&gt;
See you in my next Blog, have a good night.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>devjournal</category>
      <category>development</category>
      <category>showdev</category>
    </item>
    <item>
      <title>DevBlog - Update 02 - Map Overhaul</title>
      <dc:creator>JustLeviDev</dc:creator>
      <pubDate>Thu, 25 May 2023 21:57:36 +0000</pubDate>
      <link>https://dev.to/justlevidev/devblog-update-02-map-overhaul-6n5</link>
      <guid>https://dev.to/justlevidev/devblog-update-02-map-overhaul-6n5</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Hello and welcome back to my Development Blog about whatever I'm currently working on, which is currently the Project "The Farm".&lt;br&gt;
It's been 2 weeks again, so here is the promised Blog about the Map Overhaul!&lt;/p&gt;




&lt;h1&gt;
  
  
  The Changes
&lt;/h1&gt;

&lt;p&gt;When I first started working on the game it obviously didn't have any map (to be fair, it wasn't even supposed to have a character to control in it aswell).&lt;br&gt;
But after finishing the Crop-System I decided that I would need a map to keep the player inside of.&lt;br&gt;
But after spending so much time on StoryIdeas, a full on ItemSystem (if anyone is interested in me explaining how I did that feel free to leave a comment about it or just msg me somewhere else :) ) and a way to place any type of object I would give the Player, the time was right to make a change to the Map.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;p&gt;The TutorialMap was the first one I worked on and therefore had the most changes throughout the project (with a few more being planned and currently in development).&lt;/p&gt;




&lt;h3&gt;
  
  
  First Version
&lt;/h3&gt;

&lt;p&gt;The first Image I would like to show here is the first Version of the Map, even before I added PlayerAnimations or even the PlayerSprite which is currently being used (and yes I drew the Character myself, there's a reason why I'm a programmer and not an Artist yet).&lt;br&gt;
The most noticeable difference to the next Versions is my try of using a Shader to lead the Player through the Tutorial (which might be added in a similar way in the future).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SOWuzVtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e95wx2rodtqj4zkiixlf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SOWuzVtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e95wx2rodtqj4zkiixlf.png" alt="A picture showing the first Version of the Tutorial Map" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature-Demo Version
&lt;/h3&gt;

&lt;p&gt;The next Version of this Map is the one I used for the first official Upload on &lt;a href="https://justlev1.itch.io/the-farm"&gt;itch.io&lt;/a&gt;.&lt;br&gt;
The changes leading up to this Version were that the Player finally got Animations and 2 new Boxes.&lt;br&gt;
Those Boxes were placeholders for the bookReading and placing of Objects, which have been changed in the newest Version to fit the meaning better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ay1m2E-v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ax8tl8yze5em1ozxa1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ay1m2E-v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ax8tl8yze5em1ozxa1v.png" alt="A picture showing the Feature-Demo Version of the Tutorial Map" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Version
&lt;/h3&gt;

&lt;p&gt;The current Version of the TutorialMap features changed Walls (making them connect properly to each other), new Sprites for the Chest, Book and Trade, and finally the most obvious change, &lt;em&gt;the House&lt;/em&gt;.&lt;br&gt;
The whole Idea of the Tutorial Area is to be the original home of the main Character, so adding this house should make a lot more sense than just a random piece of land without any meaning.&lt;br&gt;
Here one could ask why even bother adding all those things into the Map and where did the FenceGate in the bottom go, but I won't give you the answer now, so stay tuned for the future DevBlogs to find out about all those things.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R9_Wj08c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m0vz9jqar9eyx1zp718s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R9_Wj08c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m0vz9jqar9eyx1zp718s.png" alt="A picture showing the current Version of the Tutorial Map" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Dome
&lt;/h2&gt;

&lt;p&gt;Before talking about the Dome in more Details I should mention that this place is not anywhere close to being done and should be considered in a similar state to the first TutorialMap.&lt;/p&gt;




&lt;h3&gt;
  
  
  Entrance Room
&lt;/h3&gt;

&lt;p&gt;When entering the Dome the Player is going to wake up in a strange unfamiliar Room in which the first Interaction with the second main Character will happen (which isn't shown yet, since I'm going to make a separate Blog about the Storyline, so check out the newest Blog about this Project).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oGHQ2jxl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r3wi7kzj2m2jhlc6m5fg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oGHQ2jxl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r3wi7kzj2m2jhlc6m5fg.png" alt="A picture showing the Entrance Room of the Dome" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  First Room
&lt;/h3&gt;

&lt;p&gt;This Room is currently kept extremely simple and only to the most important aspects.&lt;br&gt;
The overall shape should give the impression of some type of unfamiliar structure, maybe from a different culture or even a different Planet? (&lt;em&gt;foreshadowing intensifies&lt;/em&gt;)&lt;br&gt;
Regardless of that there will be more than just the one Entrance on the bottom. If I'll stick with the Exit on the top or add one to the right hasn't been decided yet and I'll talk more about Room-Layouts when that has been already added to the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KYb4IU2z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grspontce3dc391uqlbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KYb4IU2z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grspontce3dc391uqlbt.png" alt="A picture showing the First Room of the Dome" width="800" height="634"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  What's next?
&lt;/h1&gt;

&lt;p&gt;Since the Game is currently working and able to be played until the end of the "early-game" I will take some time to polish as much as possible to make the part as smooth and interesting as possible.&lt;br&gt;
While not working on the polishing I spend most of my time writing about different ideas for the Story, ideas for new Features and so on.&lt;br&gt;
If you have any ideas for anything that you would like to see in the game feel free to comment your ideas or feedback down below.&lt;br&gt;
If you would want to test out the currently available FeatureDemo (which as of writing this Blog doesn't have all the mentioned new UI and Maps yet) you can download it on &lt;a href="https://justlev1.itch.io/the-farm"&gt;itch&lt;/a&gt;.&lt;br&gt;
And if you would like to stay updated on this Project or on any of my future projects follow me on &lt;a href="https://twitter.com/JustLeviDev"&gt;Twitter&lt;/a&gt;, where I will post about any new Blogs, Updates on itch and everything else.&lt;/p&gt;




&lt;h1&gt;
  
  
  Outro
&lt;/h1&gt;

&lt;p&gt;Thank you for your time, I hope you enjoyed this short little Blog and I'll see you in the next one, have a good night.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>gamedev</category>
      <category>devjournal</category>
      <category>development</category>
    </item>
    <item>
      <title>DevBlog - Update 01 - UI Overhaul</title>
      <dc:creator>JustLeviDev</dc:creator>
      <pubDate>Thu, 11 May 2023 17:40:04 +0000</pubDate>
      <link>https://dev.to/justlevidev/devblog-update-01-ui-overhaul-46l4</link>
      <guid>https://dev.to/justlevidev/devblog-update-01-ui-overhaul-46l4</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Hello and welcome back to this Development Blog about the game "The Farm".&lt;br&gt;
Since the last Blog was used as a way to get everyones understanding to what's already in the game, this blog focuses more on one of the newest updates, the UI-Overhaul! (that isn't the only change I made, but those will have their own Blog so stay tuned for that)&lt;/p&gt;




&lt;h1&gt;
  
  
  What has changed
&lt;/h1&gt;

&lt;p&gt;Since I just wanted the core Mechanics to work properly first, I had decided for the UI being just a few squares with simple colors and that was that.&lt;br&gt;
But since those Mechanics (which can be read about in the &lt;a href="https://dev.to/justlevidev/devblog-pilot-blog-everything-has-to-start-somewhere-7cj"&gt;previous DevBlog&lt;/a&gt;) are now working I decided to make at least the UI look good.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trading
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it looked like
&lt;/h3&gt;

&lt;p&gt;In case of the Trading-UI, during first Playtests I got the Feedback to have a Button for trading faster, which I added via the Button in the middle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aIBaKkNh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gxjm1zk9w1u1r0mzk0s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aIBaKkNh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gxjm1zk9w1u1r0mzk0s2.png" alt="A picture showing the old User-Interface for Trading" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What it looks like now
&lt;/h3&gt;

&lt;p&gt;For the new Version of the Trading-UI there are 2 different Versions.&lt;br&gt;
The first Version will be used to simply unlock certain parts of the Story, new Items or just to get you out of the Tutorial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Hd6eHgb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4lzo8ixwlxnvqp3xhjwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Hd6eHgb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4lzo8ixwlxnvqp3xhjwf.png" alt="A picture showing the new User-Interface for Trading, specifically the Tutorial Version" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second Version will be the mainly used Trading-UI, since it allows for different Trades which will be used to progress through different aspects of the game, each Trade being part of a "Chapter", allowing the Player to decide what Items or what new Information the Player gets first.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PMe9laV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yg0z5rszjkt0w2rumr0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PMe9laV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yg0z5rszjkt0w2rumr0p.png" alt="A picture showing the new User-Interface for Trading, specifically the standard Version" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Chest
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it looked like
&lt;/h3&gt;

&lt;p&gt;For the Chest there are 2 separate parts to the UI:&lt;br&gt;
The Chest-Inventory and the Player-Inventory.&lt;br&gt;
Additionally the Chest have different types of interactions.&lt;br&gt;
Just clicking on an ItemSlot puts the Item from the Chest into the Player-Inventory, or from the Player-Inventory into the Chest (if there is enough space in said Inventory).&lt;br&gt;
While holding left Shift you can move only 1 Item from one Inventory into the other.&lt;br&gt;
While holding left ctrl/strg you move half of the Items in that Slot into the other Inventory; if the amount is uneven you just move half of amount - 1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X3tlY_S5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0x71czy8pa7hmij7duq9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X3tlY_S5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0x71czy8pa7hmij7duq9.png" alt="A picture showing the old User-Interface for the Chest" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What it looks like now
&lt;/h3&gt;

&lt;p&gt;The Chest is still working the same way it did in the Feature-Demo, now only looking A LOT better.&lt;br&gt;
And just to have a little bit of extra &lt;em&gt;flair&lt;/em&gt; I added those things in the top-left and bottom-right.&lt;br&gt;
Maybe those will be added to all of the UI-Elements at some point in the future, but currently those are only used in the Chest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LGziGYKi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2px4u6z4rgssxuhhx28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LGziGYKi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2px4u6z4rgssxuhhx28.png" alt="A picture showing the new User-Interface for the Chest" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  What next?
&lt;/h1&gt;

&lt;p&gt;In the next DevBlog I will talk more about the other Visual-Overhaul I have been working on: &lt;em&gt;The Map&lt;/em&gt;.&lt;br&gt;
So if you're interested in hearing about that aspect of the game or would like to support the games development make sure to check out the publicly available Feature-Demo on &lt;a href="https://justlev1.itch.io/the-farm"&gt;itch.io&lt;/a&gt;, follow me &lt;a href="https://dev.to/justlevidev"&gt;here&lt;/a&gt; to be notified of the next DevBlog or just follow me on &lt;a href="https://twitter.com/JustLeviDev"&gt;Twitter&lt;/a&gt;, where I'll be giving Updates and Teasers about new changes, new DevBlogs and maybe even an Update to the Demo. (but who knows)&lt;/p&gt;




&lt;h1&gt;
  
  
  Outro
&lt;/h1&gt;

&lt;p&gt;If you have any Feedback, Ideas or just want to say something feel free to write a Comment under this DevBlog, message me on Twitter or on Discord, whatever you think fits best.&lt;br&gt;
Thank you for your time, I hope you enjoyed this little Blog and I'll see you in the next one, have a good night.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>gamedev</category>
      <category>devjournal</category>
      <category>development</category>
    </item>
    <item>
      <title>DevBlog - Pilot Blog - Everything has to start somewhere</title>
      <dc:creator>JustLeviDev</dc:creator>
      <pubDate>Thu, 27 Apr 2023 02:32:52 +0000</pubDate>
      <link>https://dev.to/justlevidev/devblog-pilot-blog-everything-has-to-start-somewhere-7cj</link>
      <guid>https://dev.to/justlevidev/devblog-pilot-blog-everything-has-to-start-somewhere-7cj</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Hello there!
&lt;/h2&gt;

&lt;p&gt;So, how do I start this now?&lt;br&gt;
First of all, thank you for reading this.&lt;br&gt;
To clear things up, this is the first Blog about the game "The Farm".&lt;br&gt;
In here I wanna start with explaining what's already in the game at the current time.&lt;br&gt;
We are at the stage of having a core-feature-demo, meaning there is currently no story, further meaning or replayability in the game, but that is what we are here for.&lt;br&gt;
This Blog will go into coding specific details at some points, since this is just as much for me to keep track of my own progress as it is for others to read.&lt;/p&gt;

&lt;h1&gt;
  
  
  Core Features
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Farming
&lt;/h2&gt;

&lt;p&gt;Farming is the core-mechanic that every other mechanic should require or build upon on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Crops
&lt;/h3&gt;

&lt;p&gt;There are currently 3 different types of crops implemented: Wheat, Potatoes and Carrots.&lt;br&gt;
Each crop can have a specific tool assigned to it, making it un-harvestable with every other tool. (there is an option to have it be harvested by any tool too!)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--evy55R0f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cxhrkw3hmnwmk2sevsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--evy55R0f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cxhrkw3hmnwmk2sevsl.png" alt="An Image showing the Code-Implementation of a Crop" width="448" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;p&gt;The current tools are Hoe, Sickle and Shovel.&lt;br&gt;
The Sickle will be needed to harvest Wheat.&lt;br&gt;
The Shovel will be needed to harvest Potatoes.&lt;br&gt;
The Hoe currently has no specific crop or use, with the idea being that it could be used to plow dirt later on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BH6LWuh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epctaj70nqbevi7rzshr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BH6LWuh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epctaj70nqbevi7rzshr.png" alt="An Image showing the Code-Implementation of a Tool" width="449" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Currently the Tools have a very specific use, but in the future there may be some more features or interactions added.&lt;br&gt;
This should turn each Tool from just a way to harvest crops into a more useful Item.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building
&lt;/h2&gt;

&lt;p&gt;To allow the Player to change the world to however they would want it to be, there are different Objects which can be placed wherever there is still some free space left.&lt;br&gt;
If the Player wants to remove an already placed Object, they will get a certain amount of the resourves needed to build it back.&lt;br&gt;
In addition, to prevent the Player from accidentally deleting items which were in a chest, the removal of an Object with an inventory can only be done, if said inventory is empty.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chests
&lt;/h3&gt;

&lt;p&gt;There are currently 3 different sizes of Chests, those being Small, Medium and Large.&lt;br&gt;
The current slots are 8 for Small, 16 for Medium and 24 for Large, but depending on the amount of different Items those sizes may be rebalanced in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KMvAEfW9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxeuvn1fbvdrp0ju28q4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KMvAEfW9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxeuvn1fbvdrp0ju28q4.png" alt="An Image showing the Code-Implementation of a Chest" width="447" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Trading
&lt;/h2&gt;

&lt;p&gt;What I mean as Trading is basically every exchange of Items, on which there currently exist 2 different types of (with at least 2/3 more planned).&lt;/p&gt;

&lt;h3&gt;
  
  
  Trades
&lt;/h3&gt;

&lt;p&gt;The Trades itself are currently the major (and only) way to progress in the game.&lt;br&gt;
They consist of what Items to put into, what Items to get out of and whether any of those actions have already been done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ny_7UJKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ytg5kysrzt2qotpqlvq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ny_7UJKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ytg5kysrzt2qotpqlvq0.png" alt="An Image showing the Code-Implementation of a Trade" width="448" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Shop
&lt;/h3&gt;

&lt;p&gt;The Shop is currently used to prevent accidental Soft-Locking by allowing the Player to exchange Crops gotten through Trading into the Crops the Player got beforehand.&lt;br&gt;
The currently most used Crop is the Potato, since it can be sold for Wheat and for Carrots, while the Carrot can be sold for a Potato, meaning you would have to get to the Potato in order to use the Shop.&lt;/p&gt;

&lt;h1&gt;
  
  
  Reading
&lt;/h1&gt;

&lt;p&gt;The current version of the game has one readable book, with a lot more being added later on. The whole point of having books is in order to give the Users who want to learn more about the World, Player and everything else a way to read about it inside of the game, instead of having to find a separate Wiki or anything similar to that. (That doesn't mean that there won't be one with detailed information about every Item, Object and everything else in there :) )&lt;/p&gt;

&lt;h1&gt;
  
  
  Outro
&lt;/h1&gt;

&lt;p&gt;Those are all the features currently in the game. Of course there will be a lot more added in the future. If you would want to know what's currently in the game, I'd recommend reading the newest versions of this DevBlog, check out my Twitter or Discord Channel (if that has already been created).&lt;/p&gt;

&lt;p&gt;If you have any feedback, ideas or just want to say something feel free to write a comment under this DevBlog, message me on Twitter or on Discord, whatever you think fits best.&lt;br&gt;
Thank you for your time, I hope you enjoyed this little Blog and I'll see you in the next one, have a good night.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>devjournal</category>
      <category>showdev</category>
      <category>development</category>
    </item>
  </channel>
</rss>
