096 - Art Does Not Scare Me Anymore

December 06, 2020

This week I continued working on trying to make attacking enemies with a bow and arrow feel good.

The player now holds bows properly, as opposed to last week where players held bows at a weird angle.

The arrow now fires straight instead of sideways, although there is still room for more cleanup since the arrow does not yet point towards its velocity vector as one would expect. Also, the arrow currently launches before the bow string recoils. For that I just need to move the pose marker in the bow's Blender file, since that is what the sequence is based on.

I also made it so that entities stick around for a few of seconds after they die so that I can start to add in death animations.

Also, the client was not showing the damage that dealt the final blow, and it wasn't showing the empty hitpoints bar when an entity died. So I fixed that.

All in all I would say that Bowman feels better than it did a week ago, but there is still more work to be done.

You didn't know that possums could fly? Yes, I still need to make a possum mesh and I am currently using the mosquitoes as a placeholder.

Art Does Not Scare Me Anymore

About a month ago I spent time thinking about how I could set myself on a path towards becoming a good artist.

To get good at something, you need to spend a lot of time doing it.

In order to spend a lot of time doing something voluntarily, it needs to interest you.

So, I set out to design a system for myself that would involve consistently working on visual art that I found interesting.

I got inspiration for designing my art learning system by looking at other skills and activities that I've honed over time.

Namely coding and exercise.


Prior to 2018, if you asked me what my number one hobby was I would tell you that I loved to code.

I've come to realize that that answer would have been misleading.

If you tasked me with writing an operating system in Visual Basic, my frustration to fun ratio would have me seeking out a new project fairly quickly.

No, it isn't just about coding for me. The tools that I get to use matter. What I am building matters.

My answer today would be that I love the feeling of using well-designed programming languages and tools to make progress on large, challenging software projects that I find interesting.

When I'm working on Akigi I'm having the time of my life. I absolutely (completely, utterly, ..., n - 1, superbly) love writing Rust. I love learning and applying new techniques to graphics programming. I get a thrill from going from research to breakthrough to implementation and then back again.

I don't think that I would feel the same way working on VB OS™.

My takeaway from thinking about why I continue to progress as a coder after many years was that being excited about what you are doing and how you are doing it is important when building a skill.

To maximize my chances of becoming a good artist over time I would need to point myself towards work that I felt naturally excited by and tools that gave me joy to use.


Unlike working on software, exercise isn't something that I was immediately obsessive about.

I initially started exercising because it's important for my health and wellness, not because I had some strong impulse that compelled me to spend enormous amounts of time doing it like I do with code.

It took me almost a decade to finally become un-breakably consistent with exercise.

What I came to realize is that committing to doing something six days a week is much easier than doing it 4 days a week.

When I was exercising four days a week I used to skip a day if it was raining hard. Or skip a day if I was deep in the zone with code. Or skip days if I was traveling.

Every now and again I would get completely off the rocker for one reason or another and miss a full week. Or two.

With 4 days a week, you have wiggle room to skip a day and pick it up the next day when something comes up.

Once you start learning that it's okay to de-prioritize exercise, you become more likely to end up folding when the pressure is on. You might just take that week off when you're visiting family overseas.

A few months ago I started exercising six days a week. Monday, Wednesday and Friday are for running. Tuesday, Thursday and Saturday are for lifting. Sunday is for rest.

Since I started this cadence I have not missed a single day of exercise. This is a milestone for me, as someone who in the past might have skipped a day if I looked outside and there was a light drizzle.

More important than the streak though is that my mindset has crystallized into a place where the idea of missing a day is as unimaginable as going a day without brushing my teeth.

What also helps is the rhythm that comes from alternating between run, lift, run, lift, run, lift. I haven't thought too deeply into it, but something about that cadence has resonated with me. I'd benefit from sitting down and thinking more about this some day.

I see art as similar to exercise in my activity taxonomy.

There aren't any natural forces that push me towards art. I'm really only learning art so that I can use it while building large software projects.

But, I expect that over time I will come to enjoy art in its own way, much like I came to truly enjoy exercise after originally viewing it in a purely utilitarian light.


So, my driver in learning code was being very interested in what I was working on.

My driver in exercise was leaving almost no room for decision making. I know exactly what I am going to do everyday. There is no "I'm tired, but it's fine I can just do this tomorrow."

I wanted to bring these pillars into my art world.

I first thought about what would inspire me artistically. I've taken to African history, culture and mythology over the last year or so, so that seemed like a good starting place to explore.

From there I wanted to apply the 6 day a week a,b,a,b,a,b formula.

What I landed on was that Monday's, Wednesday's and Friday's I would work on going through a course. This would help me understand how to think as an artist and to build good habits and technique.

On Tuesday's, Thursday's and Saturday's I would do self-directed work on some aspect of Akigi. Just me and my canvas. This would give me the space to discover what types of tools and projects inspire me the most. So far I'm enjoying taking inspiration from different African references in these sessions.


I'm about a month into my new art regiment.

Right now I'm going through the Learn Professional 2D Game Asset Graphic Design in Photoshop course on Udemy. I'm learning quite a bit and it's making me more and more confident as an aspiring artist.

I know that I will get good. I'm no longer worried about that, at all.

As I write this I'm thinking back to Christmas day in 2016 when I wrote about my art struggles. What a stark contrast of emotions, then and now.

Man, it feels great to feel confident. The future will be bright.

We move!


Here's my latest self-directed work. It's an icon for the Bowman skill. I found a few references and worked on it all by myself!

The Udemy course has helped me tremendously in understanding how to approach 2d art. I'm having fun!

I know that it will take months and years of this 6-day ababab system for me to start doing truly impressive work. I recognize that right now I'm producing beginner quality work.

Nevertheless, I'm feeling stoked about the level of control and comfort that I felt as I worked on this first icon. It will only get better from here.

Bow icon Check me out! I made something on my own! Woooo! Excited to keep learning and improving!

De-coupling the Editor from the Game

I first started working on my engine's game editor in back in July.

The editor depended on both Akigi's client and server applications so that I could quickly get the game running in the editor, knowing that in the future I would want to de-couple them so that the editor could be used for other titles in the distant future.

As of this week the editor is now fully de-coupled from Akigi!

From the editor's eyes Akigi is just a folder that follows a directory structure and points to a couple of compiled dynamic libraries.

Here's a small snippet of code showing how the editor uses dynamic libraries in order to be able to run any game client or server that implements trait EditableApp or trait EditableServer, respectively.

// A small snippet showing the editor making use of dynamic libraries to
// in order to be able to run any game client or server that implements
// `trait EditableApp` or `trait EditableServer` respectively.

use libloading::{Library, Symbol};

pub type BoxEditableApp = Box<dyn EditableApp + Send + Sync + 'static>;
pub type BoxEditableServer = Box<dyn EditableServer + Send + Sync + 'static>;

type EditableAppCreate =
    unsafe fn(config: EditableAppConfig) -> *mut (dyn EditableApp + Send + Sync);

type EditableServerCreate =
    unsafe fn(config: EditableServerConfig) -> *mut (dyn EditableServer + Send + Sync);

/// Information about the project that is currently being edited.
#[derive(Debug)]
pub struct ActiveProject {
    project_dir: PathBuf,
    game_app_dylib: Option<Library>,
    game_server_dylib: Option<Library>,
}

#[allow(missing_docs)]
impl ActiveProject {
    pub fn create_editable_app(&self, config: EditableAppConfig) -> BoxEditableApp {
        let lib = self.game_app_dylib.as_ref().unwrap();

        unsafe {
            let constructor: Symbol<EditableAppCreate> = lib.get(b"new_editable_app").unwrap();

            Box::from_raw(constructor(config))
        }
    }

    pub fn create_editable_server(&self, config: EditableServerConfig) -> BoxEditableServer {
        let lib = self.game_server_dylib.as_ref().unwrap();

        unsafe {
            let constructor: Symbol<EditableServerCreate> =
                lib.get(b"new_editable_server").unwrap();

            Box::from_raw(constructor(config))
        }
    }
}

Other Notes / Progress

  • Read over Unreal's [Aim Offset] documentation as inspiration for my engine's additive blending support that I plan to work on this coming week.

November's Finances

The finances for November 2020 were:

itemcost / earning
revenue+ $4.99
Stripe fees- $0.44
aws- $270.62
adobe substance- $19.90
GitHub- $9.00
adobe photoshop- $10.65
adobe illustrator- $22.38
Datadog- $8.12
Udemy Art Courses- $91.65
Domain Name Renewal- $14.90
------
total- $442.67

After talking with Forest from the Veloren team he helped me realize that I was burning a little over $40/mo on container insights that I was not using.

I shut those off mid-month, so the AWS bill should go down next month by around 40 bucks.

There are a few other places that I can save more on the AWS bill. When will I get to that? Who knows.

Next Journal Entry

I'm going to stick with the theme of working on making Bowman feel really good.

I'm going to work on adding support for additive animation blending to the engine and then use that to have the character aim the bow higher or lower depending on the distance from the enemy and the height of the enemy.

I'm also going to add an XP gain indicator that shows briefly whenever you gain experience.

One of my design goals with Akigi is to minimize the amount of things on screen. So, I will try to have the indicator keep a low profile.

I also need to make a possum and add a few animations to it. I'll work on that during my self-directed art sessions this week.


Cya next time!

- CFN