Update #71 - Recipe Book, Flora, & Pigs

Hello again. It’s the first update of 2019! How has your week been? Let me know in the comments below.

  • Merchantry: Improved some world UI code.

  • Merchantry: Added some depth to iron tools.

  • Website: Reverted back to standard theme.

  • Website: Added "Steam Group" block to the Community page.

  • Website: Reduced logo size significantly. The website should load a bit faster now.

  • Merchantry: Added dust to books.

  • Merchantry: Changed transition from fade to panel sliding.

  • Merchantry: Added a temporary vignette.

  • Extensions: Moved extensions and helper classes into a new class library. Merchantry and Aeta UI both use this .dll.

  • Aeta UI: Renamed Offset (and subsequent variables) to Position. Also, positioning now uses the SmoothVector class.

  • Merchantry: If an item has been crafted, hovering over the craft button will display a tooltip with the recipe name.

  • Merchantry: Player will approach each object he uses.

  • Aeta UI: SmoothFloat's Interpolation variable is set to null when it's Result variable is set.

  • Merchantry: Added a "Take All" button to storage objects.

  • Merchantry: Removed the restriction which prevented the tooltip from displaying when an item is being dragged.

  • Merchantry: ObjectMemory now uses tags as a key instead of a single string.


Recipe Book

The recipe book will likely be temporary for the alpha release. However, the book isn’t hardcoded for recipes, so I can add anything to any page. The video above is a good demonstration.


Flora

floraGrassStumpFlowers.png

The flowers have been in here previously, but the tree stump and grasses are new. I’ve been attempting to get a tree texture right, and may not be added before the alpha release. For now, it’s kind of low priority.

treesWIP.png

Pigs

I added some cute little creatures! I call them gorgers, both in code and game. They were inspired by the pigs seen in Wind Waker (see below).

DwlZ-RbWkAEvl_8[1].png

They have a basic AI, wandering around town. If one strays too far from home (starting position), he will make his way back. I might make them scurry away from characters, and will certainly make feeding them a special item have a special outcome.


Current Goals: Character code, events, buying and selling, polishing details.
Future Goals: Alpha release.

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

Yearly Review - 2018

Hello! I hope you had an excellent 2018, and I’m wishing you a great new year. In this post, I’ll discuss the highlights of 2018. Let’s go!

The Year

I started out on strong footing with the release of the Pilgrimage of Embers’ alpha, which allowed myself to choose to move on to other projects. Following that, I set up a Patreon page and created Monument. To help with future projects, I compiled two important code libraries: one for user interfaces, and a simple particle engine. I’ve made extensive use of the UI library.

social.png

Later in the year, I rebranded from Enckling Games to Emberium Studios. I’m much happier with the name, and the changed logo and website which followed it. Then I announced a new project, codenamed Merchantry. Here are some noteworthy features:

  • Tile, item, object, and interface textures.

  • Simple crafting system.

  • Inventory, context, and dialogue interfaces.

  • Pathfinding & AI.

If you haven’t seen it yet, some screenshots are posted below.

update70Scene.png
alphaCrafting1.png
potions.png

Lastly, here are some fun stats I gathered from the year:

  • Devlog Updates - 18

  • Minor Changes - 268

  • Tweets (#update) - 163

  • Lines of Code - 15,503


What’s Next?

I’m planning to put Monument off to the side for now. I’ll upload content directly to Patreon, which I hope will make it more appealing to future patrons. The software still works great, so I can switch back if necessary.

I’d like to make some more code libraries. It’s really satisfying to complete something, and then be able to use it. I’m still planning to add in the editor for Aeta UI, allowing the coder to position all of the elements while the program is running. I would like to go back to the wind simulation I started earlier this year, improve and expand it.

For my game project, I’m getting close to an alpha release. Here’s my current to-do list:

Pre-alpha:

  • Characters. Add randomized daily routines. Sounds small, but it’ll take some time.

  • Events. Random and scheduled events.

  • Flora & Fauna. Add in trees and the cardinal.

  • Cycle. A temporary screen fade to represent a transition from day to night.

  • Tutorial. Simple tutorial for the player.

  • Outro. A blank screen containing what’s next, social links, website info, company name, etc.

Post-alpha:

  • Overhaul Inventory. “But you just did the inventory?!”. I know, but this will be a much better design. It’ll be similar to a blend between Slime Rancher and Stardew Valley, but still keeping my tab-system. Limited space (twelve per tab, five tabs), so world storage containers aren’t just for decoration anymore.

  • Atmosphere. Weather, wind, night/day, shadows, sounds. Maybe even temperature.

  • Energy. Crafting objects consumes energy, sleeping replenishes it.

  • Game Editor. An in-game tile/object editor for my sanity.

  • Worldbuilding. New characters, new events, .

  • Economy. It’s a capitalist game — this is mandatory.

  • Professions. Apothecary, blacksmith, sage, baker, clothier, wordsmith. Most (or all) of these will use their own world UI (e.g. blacksmith has furnace and anvil).

  • Customizable Player. Textures, backstories, starting class, etc. Probably some hats.


Final Words

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 #70 - Textures, Pathfinding, & Interfaces

Merry Christmas and Happy New Year! It’s the last update of 2018, and the seventieth at that. Let’s start with the minor changes:

  • Merchantry: Moved render-oriented variables from RenderObject up to WorldObject.

  • Merchantry: Objects can now attach to each other.

  • Merchantry: Added the Calendar class.

  • Merchantry: Added a UI for transitions.

  • Merchantry: Added a matrix to WorldObject.

  • Merchantry: Added ObjectPath to WorldObject.

  • Merchantry: Added DirectionalTile to pathfinding, and changed what class calculates the cost.

  • Aeta UI: SortByRenderOrder() now returns a list of elements.

  • Aeta UI: Added DrawElement method, and another DrawElements method which accepts a list of elements as a parameter.

  • Merchantry: Added worth values to most items.

  • Merchantry: Added six new recipes: Iron pickaxe, axe, hammer, spade, longsword, dagger, wooden bow, iron bow.

  • Merchantry: Fixed a game crashing bug caused by rapidly adding and removing items from the inventory.

  • Merchantry: Inventory bug from above was not fixed, now it is. Events weren't being removed properly.

  • Merchantry: Goals can now contains other goals.

  • Merchantry: New character textures. Child red, child blue, child green, adult red, adult blue, adult yellow, adult white.

  • Merchantry: Added DepthTile. Similar to an object, this sets its depth from the world automatically.


Textures

In this first picture is the current version of what the alpha map will look like. I still need to add in some shelves to place items for sale on, and various decorative objects.

Dirt/grass textures

Dirt/grass textures

New alpha characters, complete with arms and pants.

New alpha characters, complete with arms and pants.

A collection of 14 potions and 2 empty bottles.

A collection of 14 potions and 2 empty bottles.


Pathfinding

An implementation of A* pathfinding with tile costs. In the video above, grass tiles cost 10, whereas path tiles cost 1. This influences characters to stay on the path as opposed to treking through grass. Towards the end of the video are two rows of 5-cost tiles, which are directional. The top row has lower cost if travelling from right to left (1-cost), but higher if travelling the other way (10-cost). The bottom row is the exact opposite. This allows me to easily create two-lane streets.

Rather than specify a “wall” type, I simply don’t add it to the grid. This means that tile will never get searched because it doesn’t exist. My pathfinding grid uses a Dictionary<Point, PathTile> instead of a 2D int[,], so it’s a bit easier to do that.

Here’s a brilliant guide on pathfinding. His examples use C++ and Python, but it’s easy enough to translate to C# (or whatever other language you use!).


Interfaces

I added two UIs: a transitions UI, which I’ll use for fading in/out, company splash screen, etc. A HUD UI, which displays the time of day and the controlled object’s currency to the player. You can see it in the pictures above, but here’s a closer look.

hud.png

The time follows a complete calendar system. Four quarters in a year, thirty days in a quarter, twenty four hours in a day, sixty minutes in an hour, and mostly importantly, two hundred milliseconds per minute (temporary value for alpha). One real-time second equals to five in-game minutes, and about five real minutes per in-game day. Additionally, I can hook-up C# events to specific times (down to the minute), which works perfectly for game events.


Current Goals: Character code, events, crafting recipes, temporary recipe book, flora textures.
Future Goals: Alpha release.

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 #69 - Message UI & New Textures

Hello! I hope you’ve been doing well. Even though I took a couple of days off around Thanksgiving, I got a lot done in the past couple of days. First, here are the minor changes:

  • Merchantry: Added "IsEnabled" to shapes. Disabled shapes don’t intersect.

  • Merchantry: Added string Group to shapes. Any two shapes of the same group can intersect.

  • Merchantry: Crafting the same recipe multiple times without removing the output items will now add to the stack. If different output item or max stack, it gets spit out into the game world.

  • Merchantry: Clicking an item on the player will add it to his storage, showing up in the inventory UI.

  • Merchantry: WorldItem is now compliant with LeftClick() standards.

  • Merchantry: The selected object's LeftClick(), RightClick(), and ItemClick() methods are now ignored when the mouse is inside a UI.

  • Merchantry: Crafting an item takes time, and can be queued by clicking the craft button multiple times.

  • Merchantry: Added right click events to world UI elements.

  • Merchantry: Now you can decrease the crafting queue count by right-clicking the craft button.

  • Merchantry: Context UI supports infinite options.

  • Merchantry: Storage objects can be emptied via Context UI.

  • Merchantry: UI click detection functions, and the inventory tabs and BaseUI titlebar have click detection.

  • Merchantry: The game stops when the window is inactive.

  • Merchantry: Added a currency item.

  • Aeta UI: Added key and mouse control delaying to Controls.cs.

  • Aeta UI: Removed the control delaying from UserInterface.cs.

  • Aeta UI: InterfaceManager.cs now passes its Controls instance to added UIs.

  • Merchantry: Added LayerObject, allowing layers to have WorldObject functionality.


Message UI

The Message UI is a multi-purpose screen for displaying character dialogue, random events, or system messages. You can see the first of these in the video above.

Each message packet can contain a custom icon, title, subtitle, description, and unlimited button options.


New Textures

update69Scene.png

The picture above contains most of the art assets completed this week. I’m very happy with how they all look!

Tiles:

  • Wooden fences (16 tiles)

  • House (42 tiles)

  • Stone paths (22 tiles)

Objects:

  • Flowers (3 textures)

  • Mailbox

  • Signs (3 textures)

Items:

  • Token (currency)

  • Coal

Also, here’s a video of a bouncing house. It uses a tile layer and is attached to a LayerObject. This gives it similar functionality as a regular world object. Once I make some changes to collision physics, the house can be allowed to be pushed by other game objects.


Current Goals: A few more object and tile textures, character code, pathfinding, crafting recipes.
Future Goals: Pause UI (simple overlay), escape key UI.

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 #68 - Storage UI, Spatial Grid & ObjectShape

Hey, how have you been this week? I’ve been working hard on Merchantry. I’m amazed at the quick progress I’m making, and even more incredible that I’m not spending much time solving bugs, errors, or re-writing code.

Anyway, here are the minor changes:

  • Aeta UI: Added a minumum move distance variable to the Camera class. Moves if the distance from TargetPosition to Position exceeds the value.

  • Merchantry: The camera now can focus on WorldObjects, adding a stronger gamefeel and flexibility.

  • Merchantry: Added proper object selection. If the mouse is hovering over two objects, the one with higher depth is selected.

  • Merchantry: Added storage grid using the world-based UI framework.

  • Merchantry: Improved how world UI item slots handle drag-to-UI transitions. More shortcuts such as LMB+CTRL allow more control.

  • Merchantry: Added text above StorageObjects, telling the player how many items are in the storage.

  • Merchantry: Added trajectory and "per second" calculations to ObjectPhysics.

  • Merchantry: Objects now have mass. Low-mass objects are easily pushed around by high-mass objects.

  • Merchantry: Removed temporary code in the Inventory, and hooked up the controlled object's storage.


Storage UI

Making use of the same UI framework for crafting, I’ve added in another UI: Storage! You can see most of its functionality in the video above.

potStorage.png

Width and height variables are passed to the Storage UI through thr constructor, so it can be easily fit to any other object. In this case, a pot and a barrel.


Spatial Grid

spatial.png

This is a non-recursive spatial grid designed to optimize how objects interact with other objects. Let’s look at this in the context of collision detection. Without, each object would check with collision with all other objects in the map. With, they only need to check in their sector plus neighbours.

The sectors use a lazy approach, only being created when an object steps into where a new sector should be. If the sector no longer contains objects, it is added to a recycled list after a small duration. If another object steps into it, the sector is recycled back instead of being created again.

When an object moves into a new sector, it removes itself from the previous sector’s list of objects and adds itself to the new one.


ObjectShape

With this, any object can have a shape used for collision detection. I’ve created the Shape class which has the basic functionality (Offset, Contains, Intersects, etc.), and two classes which derive from it (Box and Circle).

The only parameters I need to focus on is the Shape’s offset (automatically relative to the Object’s offset), and it’s size. Circle is radius, box is width/height. If I want an object to take on a complex form, simply add more shapes.


Final Words

Current Goals: Object textures, tile textures, character code, pathfinding, crafting recipes, dialogue UI.
Future Goals: Pause UI (simple overlay), escape key UI, message 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