FM - Log 1
Old Unreal Engine 5 log
April 29, 2024
I strongly suggest reading dev log 0 first if you haven't already.
This is week, uhh... 1, of working on Forgotten Memories? I said I was going to try to make this a weekly thing, but it looks like I failed. I guess it will be a monthly thing.
I didn't realize before embarking on this dev log journey how many hobbies I already have that I need to juggle. I thought I could pump these out every week or every other week. What was I thinking? I don't think it's possible to make these dev logs a weekly thing, because I can't reasonably make enough progress in a week that's worth sharing. Plus, writing these logs can also take a while.
Now that I got that out of the way, let's dive into some cool things I've been doing for this past month!
Procrastination
I spent most of the time procrastinating.
I know, very anti-climactic. I could have been cooking for an entire month, but I haven't been.
But that doesn't mean I haven't been doing things. Like I said earlier on this page, it turns out that I have a lot of hobbies I need to juggle, and I can't exclusively focus on game dev-ing this game after work hours.
But honestly, that seems like a copout. There have definitely been evenings and weekends when I know I could have sat down to work on this damn game, but decided to do other things instead.
Procrastination is going to be a lingering topic throughout this entire dev log. I didn't write it like that to beat myself up though. I'm simply hoping to provide some insight for myself (and hopefully you, my dear and wonderful reader) into why we often procrastinate.
Cozy Campfire Scene
One of the core pillars of Forgotten Memories that I've been planning since I came up with the concept for the game are the campfire segments. These are supposed to be the intermediary levels between the core gameplay levels, which are meant to be difficult and stressful. The intention is to give the players a chance to wind down and prepare for the next level, while seamlessly providing exposition for the main characters as they also wind down and talk to each other.
The first thing I did for FM this month was to begin prototyping this campfire level. You can preview it above (warning before clicking: it is very cozy). The fire is a simple placeholder niagara particle effect, and the firewood is just Unreal's cylinder primitives. I'm more proud of the point light on the campfire actor. The light fluctuates in intensity, just like how fires do in real life, but I also added a little randomized offset to its position to make the shadows move around slightly. You can see that in the video. It didn't take a lot of time to make, but it was an easy and fun way to begin laying out the framework for those campfire levels.
Those orange arrows you see are indicators that these characters can be talked to. I'll get into dialogue...
Dialogue Framework
...now.
For a while, one of my biggest sources of procrastination was the Epic Marketplace. Pretty early (2 years ago, when I was just starting the Unreal Engine prototype), I knew I wanted to have a dialogue system, and I knew exactly how I wanted it to look like.
Gameplay levels: minimal dialogue that very rarely interrupts gameplay. Occasional barks coming from significant enemy characters to give them personality.
Campfire levels: interactable NPCs with some simple dialogue branches, followed by acted out cutscenes that progress as the player clicks through a mostly linear conversation.
Cool, I knew what I wanted. Now, one thing I knew for sure: I did not want to write an entire dialogue and cutscene framework from scratch. It would have been a very poor use of my time, which I've grown to value a lot more as I found myself balancing hobbies for the past few weeks.
"I'll just go to the Marketplace and buy one," Vlad said to himself, "I just have to pick one and not get stunlocked by analysis paralysis!"
You'll never guess what happened next (click to reveal spoiler)
There are a lot of dialogue frameworks on the Unreal Marketplace, and picking one that was A) within my budget, and B) did exactly what I needed it to do, was nearly impossible. I was scared to death of buying the "wrong" dialogue system. What if the one I purchased proved to be underpowered, and I had to buy another one? I would have felt so terrible about wasting my money.
So naturally, I put off making this decision for as long as possible.
But a few weeks ago, as I set a block of time to commit working on this project, I revisited this exact problem. This time, I was going to pick a dialogue system once and for all. That was the only goal for my session that evening; anything beyond that was just bonus objectives.
And what did I pick?
TA-DA!
This one. It has all of the features I was looking for. And the best part is: it cost me absolutely nothing!
Epic likes to give away a bunch of Marketplace assets for free every month. I have been claiming those for years every month, without fail.
I am also a long-time subscriber of Humble Bundle, and I check all of their game, software, and book bundles in case I see anything interesting.
Essentially, the choice was already made for me. I must have claimed this dialogue system in one of those monthly Epic giveaways, or I had it bundled into one of those Humble Bundles. This meant that I had a risk-free way of trying to integrate a premade dialogue framework into my prototype.
However, this also meant I couldn't use the lack of a premade dialogue system in my possession as an excuse to procrastinate anymore :(
My stance on AI
I figured it was very important to mention here, as you'll see some AI generated portraits in this preview.
I've been following the AI art discourse for a while. I think in its current state, the use of generative AI models comes with some serious ethical issues that need to be addressed. As far as my use of generative AI goes, it's either to fuck around, or to get some placeholder assets into the engine. I never have, and never will, claim AI generated art as my work.
I believe it's fine to use for brainstorming or for personal projects. If this project ever becomes anything more than my pet project, I will remove all AI assets and un-taint it by replacing them with human-made assets.
Now that I got that disclaimer out of the way, you can see the dialogue system in action. I spent a few hours integrating it into the project, tweaking UI colors, and shearing a few other features that I won't need. This framework doesn't just give me the features I need: it gives me more than I need!
I'll need to dive into it deeper at some point. I need to figure out how to create branching dialogue. It's doable; I saw it in their provided demo scene. I just don't know how yet. I will also need to find a way to do a dialogue -> level sequence -> dialogue type of event. I don't know how I'm going to do it, but I think if I really sit down and dig into it, I'll figure it out. It's such an overpowered framework, honestly. It even allows you to trigger events through dialogue. I think I'll be able to get some use out of this in the future.
From this point, I decided to pop the brakes on the dialogue for a little bit, and instead focus on the main gameplay loop first, because I figured it's more essential to nail down first.
But before I did that, I went on another procrastinatory tangent.
Ludum Dare 55
Holy shit, let me just start off by saying that I do not miss doing short-term game jams. The toll they take on my mental and physical health is nothing to scoff at.
But let me follow that up by proudly announcing that during the weekend of LD55, I made one of my greatest jam games! It's called The Unsummoner.
The basic gist is that: you play as a janitor. A local necromancer went mad and committed an unhinged spree of summoning a bunch of undead in a crypt. It is your job to clean up the mess by un-summoning these summons. You do that by summoning ethereal guns. The theme for the jam was Summoning, if you couldn't already tell.
I did this jam with my programmer friend, Joel Hanson. I was responsible for game design and art. So unfortunately, I didn't code the super cool "drawing sigils to spawn guns" mechanic, but I made all of the visual things you see.
Anyways, this log isn't about The Unsummoner. If you wish to read about my experience with this jam, you can read about it here (if the link is gray, that means I haven't written the article yet).
This jam occupied an entire weekend, from Friday night to Sunday night, and even the evening from Monday. There was no way I was putting in any hours into FM that weekend. I'm still on the fence whether I should consider this another form of procrastination or not, but if it is a form of procrastination, then it's a form of procrastination that I'm okay with.
For me, game jams are an excellent way to put my current arsenal of skills and resources to an intensive time-limited test. Even if the final outcome doesn't come out the way I wanted it to, I still walk away with a ton of useful insights about my tools and processes.
Shortly after jams, I write down some notes in a post-mortem style to document what went well, what went not so well, and where to go from here. You can read my unfiltered notes on this jam here.
Most valuable insight I had from this experience:
• I didn't do the best job of prioritizing tasks and implementing things. I noticed that there are certain things I wanted to do from the beginning, like giving the FPS hands a black drape, but I procrastinated on that. And at some point, I had moved on to other tasks and completely lost momentum on the FPS hands, so the hands remained bare forever. I can think of a few more instances where this thinking led me to not implement things that could have been beneficial to the game. In short, sometimes it's better to execute the idea I want to do now rather than to put it off for later, in fear of missing the opportunity to do a cool thing.
The main idea is: I already do a very good job of spotting opportunities, both in real life and creative endeavors. But I need to do a better job of taking advantage of those opportunities. Sometimes I procrastinate on that because I have blind faith that another equally or more valuable opportunity will come along.
Here's the harsh truth that I had to realize: sometimes these opportunities don't come again. By procrastinating on once-in-a-lifetime opportunities, even if it's something as trivial as a tertiary detail in a throwaway game jam game, I'm fucking myself big time stagnating my growth because that mindset transfers to bigger once-in-a-lifetime opportunities in the real world.
Honoraball
To continue my procrastination streak, I began working on a prototype for Honoraball. I swear, I will do anything but work on FM.
The high-level idea is:
Honor: what rhymes with honor? Samurai.
Ball: what rhymes with ball? Basketball.
Essentially, the idea is about a bunch of samurai duking it out on the basketball court. The idea is to score points within the framework of a typical game of basketball, except the players are allowed to slice each other to pieces. I came up with this idea about a month ago, but procrastinated starting a prototype until about 2 weeks ago.
My first evening of working on Honoraball was quite productive! I started with the most essential mechanic for a basketball game: the ball and the hoop. The player can pick up the ball, and as they get closer to the hoop, their chance to score increases. This is the percentage you're seeing in the video. I had this mechanic solidified in my brain when I programmed it, so it was a pretty smooth ride. Beyond the 50% threshold, you're scoring 2 points. Below 50% though, you have a higher chance to miss than you do to score, but if you score, it would be a 3-pointer.
Day 2 was quite productive too. I refined some systems that I programmed on the first day to make them more modular and scalable, then juiced up the throw mechanic by making the ball actually fly at the hoop when thrown.
Things were going pretty smoothly with the prototype as I was knocking out tasks that I already knew how to handle. However, from the beginning I knew that handling teammate and enemy AI would be a monumental task. AI programming is one of my weakest areas in gameplay programming, and I didn't even know where to begin.
After a long session of weighing my options (5 minutes), I decided to put Honoraball on an indefinite hiatus. I've only worked on this project for 2 evenings, so I didn't feel like I was committing infanticide (the article is about writing, but I find that this concept applies to many other creative fields).
I still think it's a cool concept and I want to continue it some day. But even though it will remain unworked-on for a while, and it was yet another source of procrastination from working on FM, it taught me one very important thing. I got a lot better at video game programming over the past 2 years. I was knocking out tasks like it was nothing! Those 2 evenings working on Honoraball were spent in the state of uninterrupted flow. I wanted to see if I could transfer that feeling to my Forgotten Memories sessions.
More FM
Finally, we're getting back to the juicy part of this log - actually working on Forgotten Memories.
After updating the project to 5.4 version of Unreal Engine, I finally opened it up. I was excited to work on the game after all of the insights I obtained during these tumultuous weeks, when I wanted to do anything but work on FM.
It was right there and then that I understood why I didn't want to work on FM.
Refactoring
2 years ago, when I was figuring out the frameworks for the game, I was cooking! I was cooking spaghetti. Spaghetti code. The things I wrote should be considered crimes against humanity!
Turns out, my biggest source of procrastination was the overwhelming fear of confronting the shitty code I wrote years ago. And when I say it was shitty, I mean it.
Say hello to the BP_FMGameMode blueprint. If you're an experienced Unreal dev, you might be wondering, "why does your gamemode blueprint have an event graph? Isn't it supposed to be a data-only blueprint?"
It's a valid question to ask, and you are correct, it is supposed to be a data-only blueprint. Here's my justification at the time. I plan to have 4 distinct main characters. They are their own unique actor blueprints, even though there is a lot of overlap within their core behavior. It didn't occur to me at a time that I could make a BP_FMCharacterBase blueprint with the behavior that would be shared across these characters, and make these 4 characters children of that blueprint where I can detail character-specific behavior.
Instead, I decided to put all shared logic into the gamemode blueprint. If there's ever an instance of the main character taking damage, it gets cast to the gamemode blueprint. Same with any adjustments to the blood meter.
This is pure garbage. All of this logic should just be handled in the main character blueprint. I just had to commit a few hours and actually sit down and re-wire everything. The tricky thing is, I already knew what I needed to do and how I was going to do it. I passively obtained this knowledge not from coding, but from a solid year of doing game jams alongside Joel Hanson. By actively observing his coding process and asking stupid questions, I was able to pick up on a few game programming techniques.
It took me a few hours to re-write this shit, but they flew by because I was able to replicate the state of flow that I had while working on Honoraball. With the spaghetti finally untangled, I am happy to announce that I no longer dread opening the Unreal project for Forgotten Memories!
Trello Board
I made a Trello board. I've tried to set up a task tracking board for FM in the past, but I couldn't stick to it. The first one was in Notion. The second one was in Obsidian using a community plugin called Projects. Neither of those have stuck. I'm hoping that I'll have better luck with Trello.
I wanted to make a Trello board because when I was browsing the Unreal Marketplace (a tried and true method to procrastinate), I saw this plugin called Ultimate To-Do list. I noticed that it has direct integration with Trello, and other task-tracking programs like YouTrack and Asana. I haven't bought the plugin yet because I don't see a need for it for now, but it inspired me to make and maintain a Trello board in case this plugin goes on sale and I find myself wanting to integrate it into the FM project. I figure it will be pretty useful if I plan bringing other people on board.
In the meantime though, feel free to check out the board. I intend to keep it updated with the latest tasks I'm working on.
Zombies
The zombie enemy has been a long constant in this project. The logic was created by following a behavior tree tutorial I watched about 2 years ago.
Welcome to the Enemy_AI_Stuff folder. It's a hot mess. I clearly didn't go into this with a lot of foresight. The blueprint for the zombie enemy is even named BP_TestEnemy. I figured the most productive thing would be to delete this folder entirely and start from scratch. The only thing I preserved was the death logic for the zombie, where they create a blood VFX and ragdoll when they die.
Programming enemy AI is a whole can of worms. And I opened it. In order to have a vertical slice worth playing, I need to lay the groundwork by having at least one enemy type that feels balanced and fun to fight. Zombies are stupid: they beeline at the player, and strike when they get close enough. Hopefully by getting just one simple enemy type right, I will open up the pathway to creating other, more complicated enemy types that feel equally as fun and balanced. I expect that getting the zombie AI just right to be one of my main tasks in the next few coming weeks.
Other Things
The blood is red again. Yippee!
I added a red box as a visualized for the attack hitbox. I don't know, I think it will be useful for debugging and balancing. It can be toggled on and off.
I added a main menu so you can try different levels in the future builds. Each level is like a self-contained prototype.
Deadline
I have a deadline on May 21st. It's a soft self-imposed deadline though. No one will fire me or murder me if I won't make it. The worst that will happen is I'll be a little disappointed in myself. There will be an open demo night, and I intend to bring a playable demo of FM there. This deadline will force me to prioritize some tasks over others. Some of them may not be as fun as others, but that's ok. As long as I can stay in a state of flow for a prolonged period of time, I have confidence that I can knock them out one by one.
While I think my idea for Honoraball is baller (pun intended), I need to pick one project to focus on for the deadline. I think Forgotten Memories is a much better target for that. A) it's mechanically simpler. You go from point A to point B while killing some enemies in between the points. B) I have a dev log series dedicated to it, so there's another source of external pressure that makes me want to work on it.
Conclusion
This past month has been an odyssey of procrastination. I spent the majority of the month being a victim of it. I think by laying out my experience with it in this dev log, I have a better understanding of the triggers and other internal processes that lead me to procrastinate.
Procrastination is a pretty universal experience, especially in the creative field. There are many reasons why we might procrastinate, but I believe they are all rooted in fear. Irrational fear of the unknown. The fear that the outcome of your labor may not align with your vision that you've grown so attached to.
It's a very uncomfortable feeling, but if you can't push through it, you're going to spend more time daydreaming than creating. It gives you an illusion of progress because you may be inclined to count the time you're "thinking about the project" the same as the time you're actually working on the project. This is a mental trap, one I've fallen into far too many times. The only way I found to avoid this trap, is to push through that discomfort enough times until it becomes easy. It does get easier, but you have to do it enough times before it starts to get easier.
P.S.
If you read dev log 0, you may have noticed this "plan for next week" section at the bottom of the page. I'm not doing this again. A lot of these were game design wiki focused, and the wiki is internal. If you'd like an update on the tasks, you may check out the public Trello board.
Also damn, I expected this log to be shorter than the first one. But it turned out to be just as long, even though I procrastinated for the majority of the month. I'm either an excellent yapper, or I did more than I thought.
















