Update #67 - Crafting, Chatting & AI

Hey, how’ve you been? As I surge ahead with Merchantry, it’s getting so much better.

  • Merchantry: Fixed the ObjectAnimation states' Initialize action not being called.

  • Merchantry: Changed WorldObject's UseObject() method to LeftClick() and RightClick().

  • Merchantry: Added a basic character class, which all characters (PCs and NPCs) will derive from.

  • Merchantry: AI now makes use of priority checking (as a float). The highest priority goal is the current goal.


I’ve got the foundation for crafting in place! It’s very functional, just need to do a little bit of polishing. While I hoped to use Aeta UI for this interface, I ended up coding some new classes just for game world UIs (Element, ButtonElement, ImageElement, ItemSlot). All world UIs derive from UIObject, which then derives from WorldObject. Let me walk you through how crafting in Merchantry works.


Pictured above is the crafting table, as viewed from the perspective of the player (ignore the doggos). Clicking on the crafting table will zoom up really close, allowing you to use it properly.


The UI is intentionally positioned on the right-side of the screen to make room for the inventory, which opens up on the left. Currently, the crafting table has similarities to how Minecraft handles it. Drag your items onto the grid, and if the item placement matches a recipe, the red “X” changes to a hammer. Clicking the button will create the item(s), placing it into the output slots below.


Now you can grab the items and put it into your inventory. Nice job! One important distinction is that the UIObject contains its data, so walking away (exiting) from the UI won’t force the items out like in Minecraft. I’ve placed items in it, exited out, and starting pushing the table around. I really enjoy how connected this UI feels to its world.

Even though its used for crafting, I can easily create different UIs. An anvil for reinforcing/repairing tools and armor, a furnace for smelting ores and baking food, etc. All I need is the object’s texture, position the elements, and set up recipes to match the slots.



Nothing too fancy or much to say about it, but it gets the job done. Each object has it’s own ObjectChat class. This is where all of the important chat data comes from. While you can send a string directly, the best way is to add a a string with a key. The key is called, and a random message is sent. Fairly helpful!


In Merchantry, AI is goal-oriented, making use of a float for priority. The highest priority goal is focused on first.

In this example, the dog has two goals: Follow, and Rejoice. Follow’s priority is calculated by the distance from the player, and Rejoice’s priority is at a fixed value. If the player moves too far from the doggo, he’ll move towards the player. When he reaches the player, he celebrates by jumping and barking.

I may need to make some tweaks in the future, but it works well.

Final Words

Current Goals: Polish existing features, various world textures, object selection code, character code, pathfinding code.
Future Goals: Pause UI (simple overlay), escape key UI, message UI, dialogue UI, professions.

If you have any support, ideas, constructive criticism, or just want to tell me how much you dislike my creations, you can:

  1. Send me an email.

  2. Tweet to @Soestae.

  3. Gab to @Soestae.

  4. Toot to @Soestae.

  5. Comment below.

Do you want to support my projects? Here's what you can do:

  1. Become a Patron here!

  2. Tell your friends and family about my projects!

  3. Retweetrepost, retoot, and share!

Thank you for reading!
Soestae, Emberium

Update #66 - Context UI, Item Transferring, Tile Layers & More

Hey, how are you? I’m going to be with family on Friday, so this week’s update comes early. As you’ll see, I’ve got quite a bit of small, but important topics. Here are the minor changes:

  • Aeta UI: Renamed "IsMouseHover" to "IsContainsVector", adding a Vector2 as a parameter. More freedom!

  • Aeta UI: Added two useful methods to UserInterface. ContainsElement(Vector) checks for any elements containing the vector, whereas ContainsBackground(Vector) checks if any clickboxes contain the vector but no elements contain it.

  • Aeta UI: Renamed ActionQueue to TimeQueue, and cleaned up the code in that class.

  • Aeta UI: TimeQueue is now public. If you have a sub-class that needs to make use of the instance, it now can!

  • Aeta UI: Removed all methods relating to TimeQueue from UserInterface.cs. It makes more sense to call the class directly (Queue).

  • Aeta UI: Some variables in Camera now have default values.

  • Aeta UI: Added Max*Speed variables to Camera, where * is Move, Scale, or Rotation.

  • Koah Particles: Completely changing everything about how this is structured, replacing "Emitters" in favor of a ParticleManager.

  • Aeta UI: Completely removed the "Clickbox" class used by the UserInterface class to check for mouse clicks, replacing it with good ol' rectangles. Same functionality.

  • Aeta UI: Added OnResize event to the UserInterface class.

  • Website: The Community page now has a working link for the Discord invitation.

Art Assets


I’ve done a bit of work on textures. Mostly fodder, but it looks great. The blue pots were inspired by the ones found in Wind Waker, with the green being “earth-like” copies. The grass is nice, too!

Context UI

Pictured above, the context menu is opened by right-clicking an element (such as an item). In this case, it lists up to three item-specifc buttons, plus an option to get rid of the entire stack.

Similar to the Tooltip UI, I’ll set up a variety of different layouts for various situations.

Item Transferring

Shown above is the fluid transition of an item from the inventory being dragged into the game world. The improved particle engine and basic object physics are very noticeable, too!

Tile Layers

Tile layers are a simple solution to displaying the game world, primarily images that have little interaction and movement.

Each layer uses it’s own matrix for positioning, as well as it’s own rotation and scale which go into the matrix. This allows all tiles in a layer to move in unison. This functionality is pointless for backgrounds (like a grassy field), but great for things like large gates and towers that need to move.

Also, I’m using sheets for textures instead of individual images like I did in Pilgrimage of Embers. It’s much easier to manage a small collection of logically-named texture sheets (biome*Grass, town*Structures, etc.) instead of a few hundred images for a map region (grassCornerTL, grassEdgeLeft, etc.).

Final Words

Current Goals: Crafting UI, more world textures and code, character art style.
Future Goals: Pause UI (simple overlay), Escape key UI, Message UI. Simple character textures (pre-alpha).

If you have any support, ideas, constructive criticism, or just want to tell me how much you dislike my creations, you can:

  1. Send me an email.

  2. Tweet to @Soestae.

  3. Gab to @Soestae.

  4. Toot to @Soestae.

  5. Comment below.

Do you want to support my projects? Here's what you can do:

  1. Become a Patron here!

  2. Tell your friends and family about my projects!

  3. Retweetrepost, retoot, and share!

Thank you for reading!
Soestae, Emberium

Update #65 - Merchantry Inventory & Aeta Improvements

Hello, how are you? So, I’m doing something a little different… just this once. All changes related to Merchantry will be placed under the Merchantry section, and likewise for Aeta UI.

Merchantry Inventory

The inventory for Merchantry is in a very functional state, and I’m extraordinarily satisfied with how it’s structured. There are small changes I’ll make later, such as more information to the tooltip layout, various display icons for items, and finishing the tab icons. As stated in the intro, here are the minor changes to Merchantry:

  • Merchantry: Completely changed how the inventory data is handled. Much more reliable!

  • Merchantry: Renamed ItemObject's "Attributes" to "Enchants".

  • Merchantry: Added "Attributes" to ItemObject, meta data for characters and other situations.

  • Merchantry: Added an advanced tooltip UI. The inventory uses this very well!

  • Merchantry: Added EnchantAssets.cs and ItemAssets.cs. These contain items and enchantments for copying.

  • Merchantry: Fixed an issue with ItemObject's RandomID not using a properly seeded Random, thus ruining everything.

  • Merchantry: Fixed a mistake that caused the consumables and resources tabs to be interlinked.

  • Merchantry: Items can now be dragged out of the inventory.

  • Merchantry: Added icons to the tabs [2/5].

  • Merchantry: Fixed a lot of issues with the current font. Much nicer!

Aeta Improvements


Since release, I’ve made a large number of improvements to the Aeta UI library. I was very happy with how useful this library was on release, and with more improvements and fixes I get happier. I won’t list all of the changes since version 1.0 here, but I will soon.

Anyway, here’s the reason why Aeta has it’s own section. When I’ve got a bit more of the library worked out, I’ll post Aeta 1.1 in the next week or two.

  • Aeta UI: The size of an interface can now be easily changed through SetSize() or setting Size directly.

  • Aeta UI: To keep elements from jittering, some vectors have been converted from floats to integers.

  • Aeta UI: Elements now use their UI's ActionQueue rather than creating their own. Less memory usage, and more reliable when modifying the element's dictionary.

  • Aeta UI: Improved the method for keeping user interfaces inside the screen.

  • Aeta UI: Renamed variables in Camera.cs: LookAt() to Focus(), ForceLookAt() to ForceFocus(), DelaySpeed to MoveSpeed, WorldToScreen() to ToScreen(), ScreenToWorld to ToWorld(), Zoom* to Scale*.

  • Aeta UI: Improved how the Camera's scale interpolation is handled. It now behaves very similar to movement.

  • Aeta UI: Added another dimension to the Camera's scale, allowing vertical and horizontal stretching. More freedom!

  • Aeta UI: Removed the parallax vector parameter in Camera's View() method.

  • Aeta UI: Improved the Camera's IsOnScreen() method.

  • Aeta UI: Fixed a critical error inside a method that checked if the mouse was inside any maximized UIs. Caused by an invalid conversion.

Final Words

Current Goals: Crafting UI, game world textures and code, character art style.
Future Goals: Pause UI (simple overlay), Escape key UI, Message UI. Simple character textures (pre-alpha).

If you have any support, ideas, constructive criticism, or just want to tell me how much you dislike my creations, you can:

  1. Send me an email.

  2. Tweet to @Soestae.

  3. Gab to @Soestae.

  4. Toot to @Soestae.

  5. Comment below.

Do you want to support my projects? Here's what you can do:

  1. Become a Patron here!

  2. Tell your friends and family about my projects!

  3. Retweetrepost, retoot, and share!

Thank you for reading!
Soestae, Emberium

Update #64 - Merchantry Progress & Monument 1.1.0

Hello! How are you doing today? In this update, I’ll touch on the progress I’ve made on my new game project and Monument. Okay, let’s start with the minor changes:

  • Monument: Analytics functions again.

  • Monument: Mailing works... again. If you sent me an email through Monument in the past few months, I did not receive it. I apologize for the inconvenience.

  • Monument: Updated the links in the about page from Enckling to Emberium.

  • Monument: Changed my avatar, added the new Emberium logo, and changed "Latest Posts" to "Emberium".

  • Monument: Opening a non-exe download now goes to the expected folder.

  • Monument: Buttons are now properly positioned after loading the library.

  • Monument: Posts on the About screen are functioning again, now loading from a text files rather than Squarespace. More work, but more flexibility.

  • Aeta UI: Added StretchBoxElement. For images that need to stretch without losing corner quality.

Monument 1.1.0

The improved About page in Monument.

The improved About page in Monument.

To all of my Patrons, I’ve released an update for Monument which fixes a lot of bugs, replaces previously broken features, and some nifty stuff on the About screen. To not break from the typical post format, I’ve listed all the minor changes in the section above.

When launching Monument online, it should auto-update. If it does not, you can download it from here. If there are other issues, please let me know.

Merchantry Progress

So, what the heck have I been doing on this project these past few weeks? I’ve taken a break from item icons, done some UI asset design, and focused more on coding the foundation of the game. First, I’d like to show off some more of the icons I made earlier. They’ve got an fairly awesome style!


Above, you’ll see (mostly) iron tools. A pickaxe, wooden arrow, lockpick, dagger, axe (or hatchet), iron arrow, longsword, and round shield. The other stuff were particle effects I was experimenting with. The other images is foods I was experimenting with.

The great part of this style is it’s so much more efficient, and still looks great. In Pilgrimage of Embers, I put a lot of detail into my icons, which meant most icons took between 30 to 60 minutes each. In this new project, each icon uses between 3 and 7 colors, and take between 10 to 15 minutes each.


Since we’re still talking about art, here are some of the UI assets! Similar to the icons, the interface textures have a simple but effective look. With a timber and rope theme, it goes well in a game about crafting and trading.

Alright, let’s talk about how the code is going. I’ll list all of the features so far in Merchantry:

  • Camera. It’s fairly smooth, and works well. I may need to add some additional details.

  • Calendar. An incremental system, primarily used for scheduling game events.

WorldObject. Objects in the game world derive from this:

  • Scaling and rotation. The “formula” that decides how it scales and rotates can be easily replaced (lerp, smooth lerp, loose, etc).

  • ObjectStats. Level, experience, and professions. Partially complete.

  • ObjectMemory. Short and long term. Useful for characters.

  • ObjectAnimation. A short and powerful class for full control over a texture’s animation.

  • ObjectStorage. A class used by WorldObjects to hold items. It is used directly by the inventory UI.

ItemObject. Used by UIs:

  • Basic meta. ID (string, not int), name, description, texture icon, quantity, worth, tab (enum).

  • Attributes. Keywords that modify item worth. “Damaged”, “Cursed”, “Flame Enchant”, etc.

  • Quality. An enum value as either low, medium, or high. Boosts item worth.

  • Efficient stacking. Items are added to a Dictionary with ID plus stats (quality, attributes, etc) as its key. This makes it really easy for the game to decide if the item being added can merge into an old stack (increase quantity) or needs a new one.


  • Base UI. A simple class that has some of the standard features set up, such as the border, title bar, background texture, and masking. All other UIs should derive from this class.

  • Inventory UI. See video above. Currently re-writing parts of it, but coming along well.

Final Words

Current Goals: Inventory UI, character art style.
Future Goals: Crafting UI, Pause UI (simple overlay), Escape Key UI. Simple character textures (pre-alpha), game world textures.

If you have any support, ideas, constructive criticism, or just want to tell me how much you dislike my creations, you can:

  1. Send me an email.

  2. Tweet to @Soestae.

  3. Gab to @Soestae.

  4. Toot to @Soestae.

  5. Comment below.

Do you want to support my projects? Here's what you can do:

  1. Become a Patron here!

  2. Tell your friends and family about my projects!

  3. Retweetrepost, retoot, and share!

Thank you for reading!
Soestae, Emberium

Update #63 - New Game Project

Hello! I hope you've been well. This last week and a half has been incredibly exciting, as I've been writing the documentation for a new game. Surprisingly, I have no minor changes to mention, so let's get started!

Project Merchantry

Prototype image for demonstration (not actual art).

Prototype image for demonstration (not actual art).

This game project, known as Project Merchantry, is about the experiences of a travelling merchant and craftsman in a low-fantasy medieval-era world. Unlike Pilgrimage of Embers, this game is a small to medium project. Since the game will take place mostly in one place (initially), this means I'll need significantly less artwork and animations than what I would need in a larger game. The core features of the game will be:

  • Crafting. Create tools, brew potions, and bake foodstuffs from ingredients.
  • Trading. Buy, sell, and barter with the townsfolk and merchants.
  • Professions. Select a profession, earn experience points, and unlock recipes through levelling up.
  • Characters. Converse and trade with immersive characters.
  • Time. Seasons change, and day turns to night.

If I were to divide the expected time spent on activities and add it to a fancy pie chart, it would be:

I'll go into detail on the gameplay, locations, characters, and other topics next.


Prototype image for demonstration (not actual art).

Prototype image for demonstration (not actual art).

Basic crafting happens at the crafting table UI, which you start out with by default. The player clicks on the table, and the camera zooms in where he can place items from his inventory onto the grid. If the pattern matches a recipe, then the result will appear in the three output slots directly below. To encourage staying in the game, recipes can be bought from others or discovered through a dream (for more on dreams, see the Time section). In the picture above, the notable differences are the buttons and the progress bar. If I make crafting take a short amount of time (seconds, not minutes), then the buttons will increase/decrease the crafting queue. I'm still toying around with how it should work.

Besides the crafting table, some professions have specific interfaces. Blacksmiths have the furnace, apothecaries have the brewer, and sages have an enchanting table (for more info, see Professions below).


At the start of the game, you'll pick a profession. For the prototype, I'll only focus on one of these (likely the blacksmith). Once you've chosen, you're restricted to that profession for the rest of the game. These professions are:

  • Blacksmith. Smelts ores into ingots, and uses ingots for creating tools and certain apparel like armor. For smelting, requires access to a furnace.
  • Apothecary. Brews ingredients into potions and posions. Requires access to a brewer.
  • Sage. Uses various items to make spellbooks, and gives items special effects through enchanting. Enchanting requires access to an enchantment table.
  • Baker. Uses ingredients to bake cakes and breads. Baking requires access to a furnace.
  • Clothier. Uses strings to weave fabrics, and fabrics to make apparel.

I'm open to adding a few more. If you have a suggestion, please let me know.


I'm taking some inspiration from Stardew Valley for the yearly cycles. Years have four similar seasons, and each will last thirty days. Each hour lasts thirty real seconds, so a full day will take twelve real minutes.

The player has full control of when he should sleep, and can wake himself up if necessary. If the player pushes through without sleep, he may experience side effects such as sluggishness and harder/longer to wake up the next day. Going days with little sleep, he can collapse from exhaustion and may skip an entire day. Sometimes, an order may need extra preparation time, making it useful to stay up late. Other times, a character may need assistance late at night, and they will call for your name.

An important aspect of sleeping is dreams. A variety of events can occur when you dream, which are:

  • Knowledge. Knowledge of a crafting recipe may be partially (or fully) revealed to you.
  • Prophecy. Knowledge of a future event. This is shown as keywords on the screen. Keywords that seem disconnected will likely not happen -- sometimes a dream is just that. However, it will if you have a couple dreams that have similar keywords.

The game will likely write down dreams to the player's logbook automatically.


The locations in Merchantry were one of the first things I worked on. I couldn't work on characters unless I knew where they come from -- they should be a product of their environment. Similarly, I couldn't work on plenty of items, because items should be designed as apart of the game world. Fruits, vegetables, meats (from fish, livestock, birds, monsters), woods, ores, etc. You get the picture how important it is to do this first. For the most part, these will remain the same.

The lands are divided into three provinces, with a monarch who rules each one. These are:

  • The Northlands, where it's cloudy and cold.
  • The Westerly Coast, where it's sunlit and fair.
  • The Easterly Steppes, where it's windy and warm.

The Northlands

Vale of Wintertide. A large valley in the center of the Northlands, covered in snow and clouds.
Dwelling of a Cold Monarch. A castle in northeast of the Vale. The monarch of the Northlands rules here. It is surrounded by a deep, icy ravine. The only way to the castle is across the bridge.

Hiemal Alps. Snow-covered mountains located on the upper coast of the Northlands.
Town of Moira. A large town located on the middle of the Hiemal Alps, and extends down partially into the Vale.

River of the Northlands. The largest river in the Northlands. It goes straight through the middle, then snakes down and splits into two smaller rivers that flow to the Westerly Coast and Easterly Steppes.
Apricity Hythe. A small port town on Northlands River.

The Westerly Coast

Citadel of a Fair Monarch. A whitestone castle built on a hill, it overlooks Nairne.
City of Nairne. A coastal city named after Nairne the Prophetess, located on the western shore in the middle.

Keepsake Sanctuary. A temple of burial and remembrance. There are small holes in the stone walls where the family of the deceased place keepsakes and letters.

Lesser Mire. A swampland located to the north-west in the Westerly Coast.
Lake Oro. A large, wide lake that cover the north and north-eastern parts of the Westerly Coast.
Meadows Hamlet. A small village located just south-east side of Lake Oro. There is a meadow of flowers towards the south.

Stormridge Mountains. A range of mountains in the     
Isles of Alisa. A group of islands located near the Westerly Coast.

The Easterly Steppes

Palace of a Brooding Monarch. Located just before the promontory.
Settlement of Lilias. A village located slightly north-west of the palace.

Huntsmen's Promontory. A peninsula on the south-east corner of the Steppes.
Easterly Beacon. An ancient lighthouse located on the tip of the promontory.
Thousandth Acreage. Thick woods covering most of the promontory.

St. Ava's Mountain. A mountain named after St. Ava. Located in the center of the Steppes.
Lightveil Falls. A waterfall that flows out of the mountain.

Haven of Gusts. A deep, redstone basin with a large pit that extends down indefinitely. Wind pushes outward from the pit, causing a perpetual whirlwind. Located in the south-west of the Steppes.
Nomad's End. An ancient place of many homes, shops and temples carved into the sides of the Sanctum of Gusts.


The characters I've imagined fall into four categories:

  • Dialogue. Living characters that talk to the player.
  • Lore. Dead characters mentioned in legends and lore.
  • Inconsequential. Simply fodder to buy from, sell to, or fulfill special orders.
  • Creatures. Beings used for lore and items. Most of these will remain unseen.

For now, I'll list all of the dialogue characters. These are separated by nationality. Please note that some of these may change later or, or get removed entirely.

The Northlands

  • Kynne, Monarch of the Vale. The current ruler of The Northlands.
  • Merle of Moira. An old man from the city of Moira in The Northlands. Known for his potions and poisons.
  • Brae of Apricity. A girl from Apricity Hythe.
  • Storr the Mighty. A viking-esque man who was born by the Northlands River in a wolfskin hut. Known for his strength and endurance.
  • Shieldmaiden Nessa of Moira. A young woman from the city of Moira. She is decent with spears and shields.
  • Ellard the Sage. An aged man, born in Hiemal Alps.
  • Edana the Wroth. A young girl raised in the Vale, separate from society. She has a tendency to magically ignite things.
  • Spellsword Keane. A man born at the southern edge of the Vale. He is known for his skills with both sword and spell.
  • Ferrymaster of Apricity. A man born at the docks of Apricity Hythe. Known by the locals as ferrymaster.

The Westerly Coast

  • Eleora, Monarch of the Coast. The current ruler of The Westerly Coast.
  • Sir Gower of Nairne. A man born to a commoner in Nairne, eventually becoming a respected knight.
  • Celia the Pilgrim. A woman from the the city of Nairne, born to a merchant family. She lives in the Sanctuary of Keepsakes.
  • Orestes of the Mountains. A rugged individual who dwells on the Stormridge Mountains. Often comes down weekly for supplies.
  • Daisy of Meadows. A woman from the hamlet of Meadows. She sells flowers and dyes.
  • Guildmaster Cavell. A shorter man, he is the guild leader in Nairne. He hates you, as you are not apart of the guild. He feels you are not doing it the proper way. You skipped the fees and hoops that everyone else had to do.
  • Marmion the Apprentice. A young lad, apprentice to the Guildmaster. A product of his environment, he is cynical and mischevious.


The Easterly Steppes   

  • Lonn, Monarch of the Steppes. The current ruler of The Easterly Steppes.
  • Okes of the Acreage. A man from the Thousandth Acreage on the Steppes' promontory. Known for his herbs.
  • Dawn of the Dusk. A girl born to a nomadic family on St. Ava's Mountain. Excels at magic.
  • Tynan the Short. A wayward dwarf with no roots. He is an adequate baker.
  • Eara the Butcher. A tall, thin woman born in Lilias. A quiet individual known for her meat.
  • Yitma the Ratling. A small, rough, humanoid rat. Understandably abandoned, he's no friend of humans. Sells bits and pieces of monsters... among other creatures.
  • Una the Masker. A short woman born on the outskirts of Nomad's End. Well known for her clothes and masks.        


  • The Silent Knight. An individual whose face is hidden. He's the "hero of the game", the "player". As time goes on rumors will spread of his appearance when places or people are saved. Merely a subtle parody.
  • The Postman. Deliverer of mail (model after the one in Minish Cap?).

Art Style

As with the opening picture, the perspective will be on a 45° angle.

Style A


One of my earlier thoughts was to still do it in pixel art, but slightly different. I like the chunkier, blocky texture that some of these offer.

Style B


A newer thought was cartoon style, but make a lot of the game objects (characters, items, trees, etc.) look like stickers by adding a white outline. Animations would be minimal, relying mostly on rotation and scale effects for actions like walking. Characters could have different poses to show emotions (surprised, frustrated), always facing the screen. I would probably opt for the first image, due to the lightheartedness it gives.

Final Words

Alright, those are most of my ideas on this project. If you read the whole thing, thank you for sticking with it! In the coming weeks, I'll do some experimenting and prototyping. It's gonna get crazy soon!

If you have any ideas, constructive criticism, or just want to tell me how much you dislike my creations, you can:

  1. Send me an email
  2. Tweet to @Soestae
  3. Gab to @Soestae
  4. Toot to @Soestae
  5. Comment below

Do you want to support my projects? Here's what you can do:

  1. Become a Patron here!
  2. Tell your friends and family about my projects!
  3. Retweetrepost, retoot, and share!

Thank you for reading!
Soestae, Emberium