Twitch Compilations 32-40

Posted on March 27, 2026

I’ve been pretty good about getting a new video out every week, which includes a lot of highlights of Fist of the Forgotten development.  Even so, I’m not sure I’ll ever catch up as, after 40 videos, I’m still in clips from 2019.  😅

I don’t plan to stop any time soon, though, so enjoy these development highlights, and feel free to check out My YouTube channel for more videos.

Fist of the Forgotten Gamedev Highlights 32 - Crashes and Karaoke (And Gal Godot):


Fist of the Forgotten Gamedev Highlights 33 - Abnormal Normals:


Fist of the Forgotten Gamedev Highlights 34 - Boss Robot + Questionable Cloth Physics:


Fist of the Forgotten Gamedev Highlights 35 - Bouncy Boss Robot:


Fist of the Forgotten Gamedev Highlights 36 - Shiny Crystals!:


Switching to Euler Broke All My Animations! - Fist of the Forgotten Dev Highlights 37:


Blender, Bugs, & Boss Battle Building - Fist of the Forgotten Dev Highlights 38:


Fist of the Forgotten Gamedev Highlights 39 - Trippy and Jiggly Shaders:


Fist of the Forgotten Gamedev Highlights 40 - Window & Portal Shaders:


And, like last year, I did another indie game showcase.  This was a bit more organized and consisted of 15 second mini trailers of over 300 games!

2025 Indie Game 15 Second Showcase:


New Demo!

Posted on May 16, 2025

A new demo is live!  I’ve been holding off on an update for a while because I wanted to complete the new cutscene and make sure everything was as solid as possible before making it live.  In addition to the new cutscene, the other big change is the addition of analytics.  I’ve made these completely optional, and you have to explicitly opt-in.  If you’re playing the demo for the first time or you haven’t completed the demo, I’d really appreciate it if you opt in to sending analytics.

This is all custom-coded stuff, so hopefully there are no issues, but it will allow me to do things like generate heatmaps of where players have died and see what players were doing when they quit the game so hopefully I can identify and smooth out friction points where players are quitting the game early.

If you haven’t tried out the demo, you can grab it off of the Fist of the Forgotten Steam Page.

Twitch Compilations 24-31

Posted on May 16, 2025

Yeah, it’s been a long time since I’ve updated, and I even forgot to upload my last update.  Oops!  Anyway, here are a bunch of new dev highlight videos.  Lots of sound chaos, funny hair physics, and other blunders.

Fist of the Forgotten Gamedev Highlights 24 - Camera Scribbles:


Fist of the Forgotten Gamedev Highlights 25 - Knocking Stuff OUT!

Fist of the Forgotten Gamedev Highlights 26 - Sound Chaos!

Fist of the Forgotten Gamedev Highlights 27 - I'm not a robot!

Fist of the Forgotten Gamedev Highlights 28 - Into the Depths! (& Sounds)

Fist of the Forgotten Gamedev Highlights 29 - Collision Polygon Z Illusion

Fist of the Forgotten Gamedev Highlights 30 - Big Bits & Grapple Trigonometry

Fist of the Forgotten Gamedev Highlights 31 - Stiff Hair Physics

I also did a little indie showcase where I checked out a bunch of other indie game trailers and such.  It’s so difficult to get visibility as an indie dev these days, so I’m trying to help out a little myself!


Hopefully I can find time to do more of these.

Grappling With Game Design

Posted on October 12, 2024

Game design is wild sometimes!  In Fist of the Forgotten, I was just trying to do a classic game design maneuver where I effectively trap the player in an area that they can only escape with a new ability.  After defeating this boss, the player gains the grapple ability and has crazy mobility, but I didn’t want the player to just go back and wander about the level with no clue how to use it or that they even had it.

I’m also not a fan of heavy handed tutorial text screens that explain things before the player even has a chance to figure them out on their own, so this type of scenario is probably my favorite game design technique.  You’ve likely experienced it in a number of games – getting thrown into a pit where the new jump ability is the only way to get out, or maybe you’re trapped in a cave where the only escape is to break the floor with the new heavy attack you unlocked.

It presents the player with a very simple problem and a very simple solution: Just use the new tool you’ve unlocked the way it’s intended, and can teach the player how to use it without a single word.

I was just trying to do that for the grapple ability by placing a room high above the player with a switch to open the doors to escape.  The thing with Fist of the Forgotten, though, is that, unlike many games, the player doesn’t have a specific jump height or movement speed.  You can build up momentum sliding down slopes and also use ramps to jump higher, and at on point during a development stream, I realized it might be possible to reach that room without that grapple.  And after a couple attempts, I realized it wasn’t all that difficult to get up there.  But I thought surely I couldn’t get past the rest of the level without the grapple, right? (Wrong.)

Reaching the end of the level was pretty much a guaranteed soft lock.  Maybe some speed runners would figure out how to do a no-grapple run, but for the mere mortals playing, they wouldn’t be able to progress, though I was confident it wouldn’t be possible to get past the giant laser without the momentum of the grapple.  I was also wrong there.

So then I was faced with a conundrum: I didn’t want to make the beginning area with the grapple too challenging, as players were just starting to learn the mechanic, but the other mobility options in the game made it almost impossible to create easily grappleable areas that were inaccessible even without the grapple.

And then Woland reminded me of another mechanic I had for the grapple.  The grapple can grab switches!  Using the grapple to remotely grab switches was something I planned to teach the player later on in the game, but it seemed like a perfect solution here.  I just needed to create wall with a small gap in front of the switch.  Of course I was still concerned players would find a way around this and I didn’t even get to finish my thought when I somehow crouched and punched just right and slipped through the gap.  A little player clip addressed that issue.


I do wish every game design problem I’ve run into could be solved this cleanly!

Twitch Dev Compilations 22-23

Posted on October 12, 2024

I’ve been regularly posting videos every Thursday on my YouTube channel, so I have been posting videos more frequently than I update this page.  Here are a couple more from back in March of 2019.

Fist of the Forgotten Gamedev Highlights 22: Procedural Boss & Hair Animation


Fist of the Forgotten Gamedev Highlights 23: Pictionary Celebration


Twitch Compilations 13-21

Posted on August 2, 2024

OK, it’s been a while since I’ve posted any devlogs up here, and I’ve been doing a lot better about posting videos on my YouTube channel, so there are a LOT of new Twitch compilation videos up there.  I’ve been pretty good about posting a video every Thursday, so be sure to check back there weekly!

Even so, we’re still back in videos from March of 2019.  Not sure I’ll ever catch up.  Lots of interesting and funny things happen while streaming game development, and editing videos is very time consuming!

Here’s highlight video 13 - Blender Animation Confusion


And 14 - Drawing is my specialtree

15 - Beard Ornaments (Jingle beard!)

16 - So many hats (& sounds)!

17 - Breaking blender and new fist model

18 - Questionable rock model

19 - Marketing is Gross & Rock Sculpting Fails

20 - 100th stream and horrible death sounds

21 - Hair physics and crouch sliding

Also, here’s a more recent video that I originally made for TikTok and reformatted about a strange jump step bug:


Feel free to browse through my TikTok channel for more videos about my games and other nonsense!

Change in Focus

Posted on August 2, 2024

So I’ve been working on Fist of the Forgotten for like 5 years, which is longer than initially expected, as is typically the case with game development.  I thought I could knock this project out in 2 years, but here we are!  While I still intend to finish this project, it always feels like it’s about 2 years away from being completed, ever since its inception.  Even after 4-5 years of development, it still feels like it needs another 2 years to be completed.  Things like building out content for levels and creating boss battle just take an obscene amount of time, especially solo.

On top of that, I feel like I haven’t been getting the wishlist numbers I feel are necessary in order to sell enough copies to cover the development costs.  As such, I’ve decided to pivot my primary project to KOOK.  I had been working on KOOK on the side a little bit here and there, and I feel like it has a lot more potential to be successful.  Retro FPS games have been pretty popular lately, and given my history with modding and mapping for the Quake series, I know the target audience a lot better, and there’s a more concentrated audience for these types of games in general.

I actually cover my change in focus in my “The State of Things” video for April 2024 here:


Also, here's the follow up video talking about my income as an indie in 2022 vs 2023:

That said, I’m not abandoning Fist of the Forgotten.  It has just switched to my side project instead of my primary focus.  I’ve been doing “Fist of the Forgotten Fridays” on my Twitch stream to continue to progress on it, though its release will likely come after KOOK, and probably take much longer than 2 years.  Apologies to the fans that really want to play the full game, but at the end of the day, I’ve gotta make money if I want to keep doing this indie thing, plus I think KOOK is going to be a lot of fun and hopefully generate more interest in Fist of the Forgotten as well!

Twitch Compilation 12: Parallax Trees

Posted on April 18, 2023

One of my first devlog entries was about how I created the parallax tree effect using the red, green, and blue channels, and I’ve just now gotten around to creating the Twitch highlight compilation video that covers me struggling through creating this shader (and other nonsense).

This video is also available on dailymotion.

GDC 2023

Posted on April 18, 2023

FOTF at GDC 2023

I recently got back from the Game Developers Conference.  W4 sponsored a Godot booth, and I was invited to show off Fist of the Forgotten!  I had a great time, met a lot of awesome people, and saw some really interesting projects.  It was also a great opportunity to see areas of my game that needed improvement for first-time players.  It’s hard to overstate the importance of watching people play your game for the first time!  So many little things to tweak to improve the first time player experience!

I also created little TikTok and YouTube shorts about my experience.

https://www.tiktok.com/@jitspoe/video/7221366595208154414

https://www.youtube.com/shorts/G7tVrXXYq28

Note: I had to cut a little content for the YouTube version to keep it under 1 minute.

Twitch Compilation 10 and 11: Animal Sounds and Questionable Bead Boss

Posted on February 21, 2023

Here are a couple Twitch stream highlight compilations from streams several years ago.  They’re mostly silly nonsense, and I hope you find the entertaining!

This video is also available on dailymotion.

#11 might not be appropriate for children (or anybody, to be honest):

This video is also available on dailymotion.

It does show how much the blender interface has improved over the years, though!

Coming to G.Round

Posted on June 9, 2022

Fist of the Forgotten (or at least the first part of it) is coming to G.Round (gameround.co) and will be available for testing June 15-July 12.  If you’re not familiar with that platform, it provides a way for game developers to have their game tested by large community, and the players have various incintives to play the games and provide feedback.

If you’d like to try it out and provide feedback, you can sign up with jitspoe’s referral link and visit the Fist of the Forgotten G.Round Page.

If you missed this, you can always sign up for the mailing list to make sure you don’t miss out on major events.  I also occasionally trickle out alpha keys to get new testers from the mailing list subscribers as well.

   
           
   

Video Devlog 3

Posted on June 9, 2021

It’s been a while, but I’ve finally put together another video development log.  Have a look to see what I’ve been up to these past several months.

This video is also available on dailymotion.

The IWOCon booth mentioned in the video can be viewed by downloading IWOCon on Steam.

Twitch Compilation 8 and 9: Volumetric Fog and Chair RIPage

Posted on February 3, 2021

It’s been a hot minute since I’ve posted a devlog update, so here are a couple development stream highlight compilations.  These focus mostly on some volumetric fog attempts, which I ended up dropping due to performance reasons, but they’re still interesting to look at.

This video is also available on dailymotion.

Also, RIP my chair.  Sometimes, even when you do your best to budget, you still have unexpected expenses.

This video is also available on dailymotion.

Indie Recap Year 2 and Video Devlog 2

Posted on September 18, 2020

It’s been 2 years since I started working on Fist of the Forgotten.  Here’s a little video just talking about my experience as an indie for the second year.  I cover some info about finances and other challenges.

I also put together another devlog video covering what I’ve been working on for the past 2½ months.  Lots of new stuff in there:

This video is also available on dailymotion.

I have interaction animations, fancy new fog color gradients, reflective water with 3D ripples, level iterations based on feedback, more music, a new enemy, more FX, grapple redirection mechanic, and more.

SCons Python Error

Posted on August 31, 2020

This is really just a blog entry for anybody who has this error and is searching for a solution.  Godot updated the version of SCons required, and I started getting this error:

Python 3.5 or greater required, but you have Python 2.7.15

I had Python 3.7, so why was I getting the error?  Turns out “python27” was taking priority in my %PATH% variable.  I think this was because I installed Python 3 first, then later had something that required Python 2.7, so I installed that AFTER Python 3.  You can manually edit the path variable in Windows, or you can simply reinstall Python 3, which should correct these values.

Also, I needed to delete all the *.gen.* files because they did not get regenerated properly.  I was getting errors like ‘‘‘main\default_controller_mappings.gen.cpp(3): fatal error C1083: Cannot open include file: ‘main/default_controller_mappings.h’: No such file or directory’’’ because of that.

Hopefully, this was the answer you were looking for, and if it helped, consider adding Fist of the Forgotten to your wishlist on Steam! *wink!*

First Video Devlog Plus a Compilation

Posted on July 9, 2020

I decided to put together a proper video development log.  This covers some of the things I worked on in May and the first half of June, 2020.

This video is also available on YouTube.

I’ve also put together another Twitch highlight compilation (#7), if you want to see what I was working on over a year ago:

This video is also available on dailymotion.

I still have a lot of content to catch up on.  I’m trying to get better about putting together highlight videos, but video editing takes a ton of time.

My Producer is a D20

Posted on April 8, 2020

It often helps to have somebody dictate what to work on on any given day, but what do you do if you’re a solo dev?  For me, that someone is a D20:

FOTF Producer

I call it my producer.  Look how much this poor thing has been through, working tirelessly to help determine tasks to work on and also the fate of my D&D characters (RIP Jeremy Silvertongue).

Before my development streams, I roll my producer.  If I roll a 4, for example, I would would go to the 4th line in my TODO text file and work on that:

FOTF TODO List

As you can see, I’ve spared no expense on my project management software.  I had to buy an entire operating system to get notepad.exe!

I used to just focus on one task, but recently, I’ve started a system where I roll until I have 3 different tasks and try to spend a couple hours on each.  The reason you only see 2 starred here is because I already worked on the first task, and now I’m working on the second one and updating the website.  If I complete a task, I move it to the done list.  If I don’t complete it, I try to get to a good stopping point, then I move the task to the end of the TODO list if it’s not critical.  If it is critical, I move it down 10-20 lines so I’ll work on it more frequently.

I find it’s important to work on a large variety of tasks rather than focusing on specific tasks and trying to complete them.  Games have a lot of inter-dependencies, so different aspects influence the development of others.  That’s why I’ve moved to a system where I’m trying to do multiple tasks per day just to iterate on as many things as possible and address the most critical aspects of each.  Randomly selecting items to work on helps force me to work on things I might otherwise neglect, and they often have a large impact on other systems.

For example, I had a level with hazards that turned on and off at a certain interval, and when I went to add music to the level, I realized it was very difficult to time the movement through the hazards when the tempo of the music did not match the interval the hazards cycled at.  That meant I had to change the music tempo, the rate of the hazards, or both.  Everything needs to work together in a cohesive manner to make a good game, and if I were to neglect working on the music until the end of the project, I might not be aware of some issues and how to design around them.  It’s important to iterate on many things so they all work together!

I don’t use the producer to select tasks every day, though.  I keep Friday as my do-what-I-want day.  I think it’s important to have some time where you just work on the things you, personally, find important.  It’s also a time where I try to finish/polish areas to use for a #ScreenshotSaturday post on Twitter.

Menu Sounds

Posted on March 17, 2020

I thought it would be neat to allow players to create music simply by hovering over menu items, so I created several note samples from a PANArt Hang.  When the user moves up in the menu, it attempts to randomly play a note that’s higher than the most recently played note.  Moving down in the menu attempts to play a lower note.  Notes wrap around if they are past the end.

This video is also available on dailymotion.

I still need to add some ambient background music to go with this, but it’s still pretty fun to play with.  I may even go so far as to have different keys in the background music and only play menu hover notes that fit with that particular key.  We’ll see!  I have to be careful not to get too caught up in the little details and actually finish this game!

For those wondering how to hook up menu sounds in godot, I created a function to recursively go through all of the nodes in my menu and add callbacks on the buttons:

func AddMenuSoundCallbacks(MenuInstance : Node, ItemBindNumber : int) -> int:
	if (MenuInstance is Button):
		var ButtonInstance : Button = MenuInstance
		ButtonInstance.connect("mouse_entered", self, "_on_MouseEnterButton", [ ButtonInstance ] )
		ButtonInstance.connect("focus_entered", self, "_on_MenuItemHover", [ ItemBindNumber ] )
		ButtonInstance.connect("button_down", self, "_on_MenuButtonPress")
		ItemBindNumber += 1
	var MenuChildren := MenuInstance.get_children()
	if (MenuChildren.size() > 0):
		for MenuChild in MenuChildren:
			ItemBindNumber = AddMenuSoundCallbacks(MenuChild, ItemBindNumber)
	return ItemBindNumber

The “bind number” is simply there to keep track of menus relative to each other for the different sound pitches.  If you’re just doing one sound for hovering, this isn’t necessary.

The mouse enter event simply makes the mouse hover behave the same as moving through the menu with a controller or keyboard.  I did this to prevent double sounds from playing when you hover over something and then click on it.  This also makes the visual behavior more consistent, since there isn’t a separate concept for a “selected” button vs. a button the mouse is hovering over.

func _on_MouseEnterButton(ButtonInstance : Button):
	ButtonInstance.grab_focus()

Here’s where the magic happens:

func _on_MenuItemHover(ButtonIndex : int):
	if (MenuStack.size() < LastMenuStackSize):
		LastMenuStackSize = MenuStack.size()
		return # Don't play a hover sound when backing out of a menu
	LastMenuStackSize = MenuStack.size()
	if (ButtonIndex < LastMenuButtonIndex):
		LastMenuRandomSoundIndex -= int(rand_range(1, 3))
	else:
		LastMenuRandomSoundIndex += int(rand_range(1, 3))
	LastMenuButtonIndex = ButtonIndex
	LastMenuRandomSoundIndex %= HoverSounds.size()
	PlayMenuSound(HoverSounds[LastMenuRandomSoundIndex])

I have a special function for playing menu sounds because I have multiple audio stream players that I cycle between so the sounds don’t get cut off abruptly:

func PlayMenuSound(stream : AudioStream):
	CurrentMenuSoundIndex = (CurrentMenuSoundIndex + 1) % NUM_MENU_SOUND_PLAYERS
	var MenuSoundPlayer : AudioStreamPlayer = MenuSoundPlayers[CurrentMenuSoundIndex]
	MenuSoundPlayer.stream = stream
	MenuSoundPlayer.play()

The hover sounds are just an array of preloaded resources that I set in the _ready() function:

	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_1.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_2.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_3.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_4.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_5.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_6.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_7.wav"))
	HoverSounds.append(preload("res://Sound/UI/menu_item_hover_1_8.wav"))

This is no a complete, comprehensive implementation of menu sounds that I’m sharing here, but hopefully it’s enough to get you started if you want to implement something similar!

Steam Page Is Live + Marketing Notes

Posted on January 21, 2020

Fist of the Forgotten now has a Steam page!

As a developer, I believe it’s good to get a Steam page up sooner rather than later.  This allows people interested in the game to add it to their wishlist.  While developing a game, you also need to be marketing it and building up a community of interested followers.  If you just share screenshots and videos with no action items, potential players will likely forget about the game or not be aware when it launches.  I’m still very new to the concept of self promotion, but I’ve heard that around 30% of a game’s budget should be spent on marketing.  When working without much of a monetary budget, I guess that budget equates to time.

I haven’t been very good about promoting my game, if I’m being honest.  Now that the Steam page is live, though, I can encourage people to wishlist the game when I post updates, screenshots, and videos.  I honestly feel a bit weird talking about marketing.  It makes me feel dirty.  It’s absolutely necessary these days, though.  There are so many games being released that it’s very difficult to rise above the noise.  Also, I’m trying to be completely open about all aspects of game development while I work on this project.

So, while we’re being open, I’m going to disclose the current number of people who have added Fist of the Forgotten to their Steam wishlist: 197

Steam Wishlist Chart

I actually made it to 200 wishlists, but there were a couple deletions.

The other advantage to having a Steam page up early is being able to get an idea of how well your game may sell.  In one of my videos, I mentioned that I need to sell around 10,000 copies to break even.  I need to sell approximately 10 copies per day of development.  I think the conversion rate from wishlists to sales is around 20%, so that means I’d need around 50 wishlist additions per day.  Unfortunately, after the initial burst of wishlists from the first couple days of the Steam page going live, I’m only getting around 5-6 wishlists per day.  I need to increase that by around 10x.

It’s kind of a daunting number, but at least I know where I currently stand.  I need to focus more on building up an interested community and promoting the game.  Building up the numbers necessary to be successful is a very difficult task.  One in which I have no experience in.  At least now I’ll have the data to make an informed decision on if I should work with a publisher or PR firm when the time comes.

Twitch Compilation 6: Movement and Sound

Posted on November 6, 2019

More old clips and highlights from development streams.  Here I start the development of wall jumps, air jumps, and punching objects, but things don’t exactly work as expected.  Also, I do a little bit of sound design, which pretty much sounds like farts.

This video is also available on dailymotion.

Twitch Compilation 5: the Wolf and the Hair

Posted on September 25, 2019

Another compilation of twitch highlights and clips.  Here I attempt to add physics to the hair and become a little hairier myself.

Note: You may want to change the quality setting to 1080, as the default is very low.

This video is also available on YouTube.

First Year Indie Recap

Posted on September 25, 2019

It’s been a little over a year now since I started my adventure as a solo indie developer.  I thought it would be good to do a recap video going into detail about all the financial numbers and such.

One thing I neglected to mention in the video is the improvement in work-life balance.  I think it’s important to maintain a healthy lifestyle even when doing solo indie projects.  If you have to sacrifice all of your free time and sleep and exercise just to make things work out, it’s not worth it.  The advantage to setting my own schedule is that I can sleep when it’s natural for my body to sleep (which is at like 7:00AM).  I always try to make sure I get enough rest and take a walk every day.  If I’m unable to to do these things as well as take care of other personal activities, I just cut back on development time.  I’m attempting to complete this project without crunch (excessive working hours).

Twitch Compilation Videos 3 and 4

Posted on September 2, 2019

More Twitch clip/highlight videos!  I still have a number of clips to catch up on, so these are still from the very early stages of development.  Witness the propeller with legs and other nonsense/bloopers, as well as maybe some informative content.

Video 3

This video is also available on dailymotion.

Video 4

This video is also available on dailymotion.

Using RGB Channels as Parallax for Trees

Posted on July 25, 2019

One of the advantages to the Fist of the Forgotten art style is that there is no color data necessary for textures.  This allowed me to explore some creative uses of the RGB channels.  Another advantage is that the camera is at a fixed angle due to the game being a 2.5D platformer.  Here’s a clever solution to getting detailed tree silhouettes with (hopefully) less performance cost than traditional 3D tree models.


Here's a breakdown of how it works.  First, I draw a tree in 3 layers on an atlas texture in Krita: Blue = background, Red = medium height, Green = max height.  I chose these colors simply because of the order of brightness (originally went with RGB, but it was difficult to see blue on top of everything):

Tree Parallax Atlas


Next, I make a simple mesh in Blender and use the vertex colors to determine how much parallax (and wind sway) to apply to each vertex on the mesh.  The parallax is in UV coordinates, so it needs to be scaled relative to the size of the mesh in relation to the size of the texture.  Setting the scale per-vertex also lets me do things like taper the amount of parallax near the top or bottom of the tree.

Tree Parallax Blender Mesh


Finally, in a shader, I generate offset uv's for the red and green channels.  Then I do texture lookups for those colors with the offset UV's and use them as an alpha mask.  The color is generated the same way as my normal shader (a simple curve based on z-depth for the fog fading from black to light blue).  To make it simpler to see the effect, I've modified the shader to show the original colors:
When it's all said and done, it should add a little more dimensionality to the background scenes without the performance cost of full 3D trees, though I haven't actually done any performance tests to verify this.  It just sounded like a good idea at the time.  The player will likely never know that it's all smoke and mirrors and completely breaks down when viewed from the side:
Special thanks to badcodebot who had an alternative approach to applying the parallax effect that did not require a matrix inverse.  My original shader was something like:
// Original implementation
world_coordinates = (WORLD_MATRIX * vec4(VERTEX, 1.0)).xyz;
camera_location = CAMERA_MATRIX[3].xyz;
float parallax_scale = 0.0625  * COLOR.r;
vec3 view_dir = normalize(camera_location - world_coordinates);
mat3 magic;

// Not 100% sure on this
// just tried different combinations until it worked.
magic[0] = TANGENT;
magic[1] = -BINORMAL;
magic[2] = NORMAL;
magic = transpose(magic);

// TODO, unsupported in GLES2:
view_dir = (inverse(WORLD_MATRIX) * vec4(view_dir, 0.0)).xyz;

vec2 parallax = (view_dir.xy * vec2(1.0, -1.0)) / view_dir.z;

parallax_uv = UV + parallax * parallax_scale * 0.5;
parallax_uv2 = UV + parallax * parallax_scale;`

Badcodebot suggested something like:
// badcodebot suggestion
vec4 w = WORLD_MATRIX * vec4(VERTEX, 1);
vec4 c = CAMERA_MATRIX * vec4(0, 0, 0, 1);
vec3 d = c.xyz - w.xyz; vec3 v = normalize(d);
vec2 o = vec2(dot((WORLD_MATRIX * vec4(TANGENT, 0.0)).xyz, v),
    dot((WORLD_MATRIX * vec4(BINORMAL, 0.0)).xyz, v));
parallax_uv = UV + o * parallax_scale * 0.5;
parallax_uv2 = UV + o * parallax_scale;

I've translated it into something with more human-readable variables here:
// badcodebot->human translation
vec3 view_dir = normalize(camera_location - world_coordinates);
vec2 offset = vec2(
    dot((WORLD_MATRIX * vec4(TANGENT, 0.0)).xyz, view_dir),
    dot((WORLD_MATRIX * vec4(BINORMAL, 0.0)).xyz, view_dir));
parallax_uv = UV + offset * parallax_scale * 0.5;
parallax_uv2 = UV + offset * parallax_scale;

The advantage to this method, aside from not requiring the matrix inverse, is that it also clamps the amount of UV sliding that happens, so at extreme angles, the texture does not slide completely off of the polygon.

Twitch Compilation #2

Posted on June 13, 2019

Here’s the second Twitch development stream compilation video, featuring the lovable “Lenny” test model.  This one is also from very early on in the project where I was still prototyping basic movement.

Enjoy the first iteration of ramp jumping and a number of bloopers!

This video is also available on dailymotion.

First Twitch Compilation

Posted on April 17, 2019

This is a compilation of highlights from the very first handful of Twitch development streams.  Fist of the Forgotten went from nothing to something here, though most of the highlights are just silly moments.  I’m using the Godot engine for the very first time on this project.

Note: You may want to change the quality setting to 1080, as the default is very low.

This video is also available on YouTube.

Web Dev Is Still a Nightmare

Posted on April 11, 2019

It’s been decades since I last really built a website.  Back then, everything was awful.  Nothing worked consistently between web browsers, and eventually you were forced to slap tables around tables around tables to get things to behave consistently.  Now that we’ve had about 20 years to fine-tune this technology, everything just works flawlessly and consistently across all… oh, nope.  It’s still a nightmare.  Everything is broken when you switch browsers.  Now there are just more layers of things to break.

This is why it’s taking me a while to get this site fully online.  I thought I could just slap some stuff together and have a cool site, but, nope.  At least there are some cool new tools to help make things a little easier.  What’s old is new again, and I’m making a static site, but this time I’m using Hugo to generate it instead of writing manual HTML.

Sorry if this isn’t a very interesting blog post, but, to be honest, I’m mostly just testing out the formatting with multiple posts.  I’ll post more interesting things in the future!

Just Getting Started

Posted on March 15, 2019

It’s about time I started a development blog for Fist of the Forgotten.   I’ve been developing it since August 2018, so that’s about 7 months now.   Fist of the Forgotten was my third game idea after I realized the first two were just too large in scope to complete in a reasonable period of time.  While I wanted to try some things that were new and unfamiliar, like story-based games, the more I thought about the massive dialogue trees and story paths that would be necessary, the more I realized the projects would not be something I could complete before I ran out of money in my bank account.  I had to start with something I knew well.

What do I know well?  Player movement.  I’ve worked on some seriously momentum-based movement mechanics in mods and games based on the Quake series of engines, such as Digital Paint: Paintball 2 as well as movement mechanics for LawBreakers.  I can make a character move like butter on a hot skillet.  I grew up primarily on first person shooters, but given the difficulty to gain traction in the market these days and the amount of work it would take to build a shooter, I decided to go with something I could realistically finish: a platformer.

I know, there are so many platformers out there, but I feel I can bring a unique perspective to the genre and a different feel.  I certainly haven’t played all the platformers out there, but nothing I’ve played so far feels quite like what I’m working on.  There are often little quirks and frustration points, like jumping in the air killing the momentum you gained from a platform boost.  I’m constantly tweaking things to ensure the player has plenty of tools to maintain or increase momentum instead of losing it.  I want the first handful of levels to be a joy to fly through for veteran speed runners, even if they’re just teaching basic jumps to new players.

As for the visual style, it’s difficult to pinpoint an exact point of inspiration.  I think this photograph by Chris Button of a dust storm on Sydney Harbour Bridge might have played a large part in my desire to create silhouetted 3D geometry in fog.  Not only do I like the look, but it significantly reduces the time I’ll spend texturing things, which is important as a solo developer.  Game development is insanely time consuming, so I need every break I can get!

The fist?  I guess I’m a sucker for the small character, big weapon aesthetic.  As I went from project idea to project idea, I finally settled on the most minimal thing I could think of to start with, knowing it would expand:

  • Platformer
  • Smooth movement
  • Giant fist for both combat and movement abilities
  • No dialogue (Can I tell a compelling story with just visuals and music?)

Ideas will expand as I work on them.  If I try to flesh out a full game idea before I start working on it, it’s going to be 10x’s bigger than I anticipated by the end, then I’ll either have to spend more time than I want on it or cut features.  If I start simple, I have room to grow and shift.  What’s the backstory of the character?  How does she find the fist?  What does it do?  I didn’t plan that out ahead of time.  I just focused on the most basic of basic pillars and, as I tossed and turned, struggling to fall asleep as I do most nights, I thought up all sorts of ideas on just this simple premise.  If I execute all of them, this project will likely go well beyond the time frame I have available.