catnapsoftware
catnapsoftware
eating the elephant
4 posts
The story of an impending dad's journey into solo game development
Don't wanna be here? Send us removal request.
catnapsoftware · 3 months ago
Text
The GAS to AFS pipeline
or how I learned to love the component
So I learned early on in my tinkering with Unreal Engine, that while I would like to use the Gameplay Ability System - I could not use the Gameplay Ability System.
There are all sorts of store assets and guides and walkthroughs and tutorials on setting it up and making it functional, but it's not an ease of use problem. In fact, I suspect that my solution is going to be at least twice as much of a headache to implement. For my trouble, I will have a solution that matches my project, and any future projects in the same vein (looking at you, multiplayer) perfectly.
What is the Gameplay Ability System?
I'm going to try to translate this in the way non-UE folks will understand, and I am only explaining it with the limited knowledge that I have - so don't come for me in the comments or anything.
The Gameplay Ability System, or GAS as it's known colloquially, is a Module/Plugin for Unreal Engine that provides a toolkit for "making characters do stuff".
Things GAS handles:
character attributes (health, stamina, mana, strength, etc)
gameplay abilities (move, jump, shoot, swing sword)
gameplay effects (stun, heal, burn, slow)
There's more stuff it does, but the gist of it is that you plug all of this in, build it up, and it takes care of shit™. The pieces communicate with each other, whether internally for one character or externally as Character A shoots Character B, and it'll handle network communication for all of that in online multiplayer.
They use it in Fortnite, and Fortnite made a bunch of money. It's good code (if old), it's tested, and it works.
Why doesn't it work for me?
GAS is made for real-time action - plain and simple. Every single example project, tutorial, or game that uses GAS is an action game. Shooting, slashing - it's in the name acronym.
ELWN is a strategy RPG, and while there is shooting and slashing, and there IS action, it is not real time. It's also not multiplayer, so I don't particularly need all the online stuff yet.
I do have attributes, abilities, and effects, but the way I need them implemented in my game is not the way GAS implements them out of the box. That left me with two options:
Modify the Gameplay Ability System Plugin to support Turn-Based Combat or Build my own system
What is the Action Framework System?
Using ttrpg rules as a basis for the gameplay in my game gives me a very big canvas to paint in. I have a lot of actions, and a lot of things that modify those actions. I also have skills, and also ALSO everything I just mentioned runs off a turn based, dice rolling ruleset.
So I says to myself, as I'm tinkering away with GAS, scouring forum posts from 2019 and being absolutely RIDICULED on the Unreal Slackers discord channel (jk I'd have quit months ago if it weren't for that gang xoxo) - I says to myself, I like what they're cooking here, I just wish I could put a little more spice in it. Also, I don't know why they used cheddar cheese. So I made notes, I researched very specific things in the API calls, and then I got to work.
The Action Framework System, or AFS if you want to enunciate through an acronym that doesn't sound as catchy, is a chunk of code that provides a toolkit for "making characters do stuff".
Tumblr media
Anticlimactic, I know.
Essentially, every character (playable or otherwise) will have an "Action Framework Component" attached to them in the code. This component will manage their attribute modifiers, and grant and remove gameplay tags that are associated with actions (skill actions or encounter actions) or conditions (buffs/debuffs/attribute changes) they may gain or lose over the course of gameplay.
I'm pretty sure they'll also handle faction interaction (it's essentially a point based system).
I also think it'll handle some other stuff by the time I'm done with it, but that's okay - it's meant to take care of shit™.
I have a cool diagram for how all the classes interact with each other, but it's on paper and I don't want to post a photo of my doodles because they're doodles and also the camera on my iphone is permanently blurry, a witch's curse no doubt.
I expect to have something done up this weekend, once I finish up the first round of coding on it. I don't want to toot my own horn, but if this works it'll be pretty darn unique.
Hopefully I'll get another post up this weekend with the results of all my messing around - in the meantime, STAY CREATIVE, MY FRIENDS.
0 notes
catnapsoftware · 3 months ago
Text
Lowering Expectations
I'll never be able to finish my dream game from my current position. And that's fine, it's good and honest to say that out loud, but it doesn't mean I intend to scrap the idea of finishing my dream game.
So what, in my opinion, CAN I finish from my current position?
The first prototype, I'm calling "Seven Days to Dice". It will be on a small "farm" map, with a place for the player to grow crops and a place for the player to sleep. At the end of seven days, monsters will attack the farm, attempting to kill the player and/or burn and loot the farm. The player will fight the monsters, be rewarded with experience, and then the cycle repeats.
I'm building off of a modified version of the Pathfinder 2nd Edition Remaster ruleset - which I think I can do, so long as I follow the ORC rules. This simplifies a lot of design choices for me, and will give me a solid foundation to build mechanics on.
WHAT DO I NEED FOR THIS PROTOTYPE?
I already have some stuff I'm going to be bringing over from my previous work - I'll be rebuilding it manually, so I'm hoping I can sneak in some good coding practices and optimizations along the way without taking too long.
I will need a functioning Character Class.
This means some kind of mesh, and various components that will make up what would be its "character sheet" in a tabletop setting. These components will be data-driven, allowing me to easily test various different mechanics on the fly, as they are created.
This means controls. I have a lot of this already set up, but I want to make sure they are optimized. It's a weird situation, because Unreal wants to make a First or Third person game, so it wants a player to "possess" a character, with a camera either inside the mesh or floating behind it - this ties the functions of the PlayerController directly to a character. For a cRPG, the player is "possessing" the camera, so I have to make use of AI Controllers to move around the character (unless I learn differently, I'm actually going to ask about that after I finish this post).
I will need to develop a number of systems.
On the surface, I need time to pass. This is going to be tweaked a thousand times a thousand times between now and any sort of playable testing, but it's one of the most critical components. I need a time of day system, I need plants to grow, and I need days to pass - or none of this works.
I need interactions. I have a barebones version of this system already (I got bogged down making a UI entirely in C++, like the silly little masochist I am) - I need to tighten it up IMMENSELY. Planting seeds is an interaction. Watering them is an interaction. Harvesting is an interaction. Sleeping is an interaction. You get it.
I need an inventory. It doesn't have to be the final product, but you need to be able to pick up seeds, collect what you grow, collect items from enemies, equip stuff.
I need farming. Again, doesn't have to be anything crazy. 3 vegetables, with different models and different grow times, and different "sustenance values" - because I forgot the next thing should probably be higher on the list.
I need hunger. I know you're thinking "aw man, nobody likes hunger systems, they slow down everything" and you're right, I just don't care. It's part of the sandbox. You'll be hungry, NPC's will be hungry, if I'm real lucky I'll make monsters hungry too. If we hand-wave too much away for the sake of the gameplay loop, we risk damaging one of the core pillars of the dream: role-based story generation**.
I need to finish combat mode.
Somewhere I have the code to generate a square hex grid procedurally on demand. I have it tested to 1000x1000 tiles with no performance hit. I won't need 1000x1000 tiles - I'm still not 100% sure if I will tile out the entire zone when combat mode starts, or if I'll just spawn a X by X "combat zone" around all active combatants to track who is in combat, who is fleeing, who gets dragged into a fight, etc.
I have to build the ability framework. I have notebooks upon notebooks of GAS notes. I have so many saved Reddit posts and websites bookmarked. GAS works, and it works well - for action rpg, fps, or MOBA gameplay. For a turn based game with combat decided by rolling dice, it is a gallon of chocolate ice cream when all you asked for was a vanilla cone. There is a TON of good there, I just don't need half of it, and I don't need most of what I DO need in the way it was built. So I'm going to build my own custom, cool acronym system of handling abilities, taking the pathfinder 3 action system into account.
I have to build a turn based combat system. This is pretty straightforward, but the back end will need a lot of UI, so I'm not looking forward to it.
I need it to look marginally better than shit.
I'm probably going to use Synty assets. There's a perception (at least in the indie dev world) that Synty assets are "low effort", and most people will assume that games that use them are low quality, by extension. That is unfortunate, but I'll circle back to immersion being important: the Synty assets all share a similar look, which will help keep the player engaged in the things that are happening as they play the game.
I really hate UI. I want to love it! I love expressing myself, I think UI is a great way to really get the feeling of the game right - I think it is an integral part of the entire shebang - I just suck at building it right now and I frustrate myself. I really don't want to use assets from the store. (I honestly don't know how they work)
I am honestly not super concerned about polish - I've been drawing up sprites for things like cursors, I've been looking through some music options, and I even licensed a variation on the Final Fantasy Tactics font to use! (I suspect people will hate this, and I will have to change it)
Tumblr media
That's it for now, I think. I have some housework to do, and I'll get the project set up (blog post about it, maybe) and then start working on it tonight. Speaking of these posts, it's important to me that I am as active as I can afford to be on social media (is tumblr social media)? Both from a professional project standpoint (gotta get eyes on the game) and as a solo developer (grow, learn, community). I don't know how I'm going to do that yet. I used to be a streamer, and that can very easily suck tens of hours of your week - hours that would be better spent devving games. Stay curious, friends.
0 notes
catnapsoftware · 3 months ago
Text
The plan (fuck jobs)
My dream video game? Well, it plays a lot like a TTRPG.
Think of any cRPG from the last ten years (Divinity, Baldur's Gate, Solasta, Pillars, the Pathfinder games) - it's a lot like that, mechanically. Click the ground, read some books, roll some dice, chat up some folks. There's a sandbox, a series of events, and time passes during gameplay. After the tutorial, you choose a towne to start in, and you're given a bed. From there, it's all you. The start of the game introduces you to the three paths available - adventure, tender, or advisor. You are not locked into any particular path, although focusing on a specific path is suggested. The path you travel down, as well as your choices in the sandbox, will impact how the series of events play out.
editors note - you will have a combat class (or multiple) and a non combat profession (or multiple)
ADVENTURE
Pretty much what you expect from looking at the tin. Explore the land, sneak into places you don't belong, fight monsters, save the occasional day. As an adventurer, you can lead a party - friends you make along the way, or mercenaries you hire. You won't control them directly, either in or out of combat, but you can give direction. Party members will consider their rapport with you, as well as the danger of the direction, and then take their turns accordingly.
Bond with your allies, make a name for your party, and join a militia - or maybe even reform the legendary Towneguard!
TENDER
Everybody's gotta eat, right? And where do you suppose adventurers get all their dings un-dung and their swords sharpened? Tenders keep the wheels of society turning. Start a farm, catch some fish*, seek out natural resources that you can turn into powerful weapons - or moving works of art!
It's up to you to do your part to make sure your towne thrives - and if you can make a little money doing it, more power to you!
ADVISOR
You think saving the world is hard, brother, you should try public speaking. Gather information, raise your social status, acquire a manor, and throw your weight around! You want to serve your towne as an upstanding cog in the wheel of governance? You want to convince the traveling merchant they need to pay for your protection lest something unfortunate were to befall them when they pack up for the next towne? Here's your megaphone - get gabbin'.
No matter how you wield it, there will come a time where your knowledge and influence are needed to turn the tide!
Tumblr media
Unfortunately, I'm probably not gonna get to see that game get built.
Maybe in the morning, I'll outline what IS going to get built, and then we can compare 😅
3 notes · View notes
catnapsoftware · 3 months ago
Text
How do you eat an elephant?
One bite at a time.
This blog will serve as a home for talking about the game I've been working on for the last fourteen months. I don't currently have a name, but I've been using the working title Project ELWN.
I started working on game dev a little before I found out I was going to be a father. I proudly told my wife "I'll have a prototype ready before you'll have a baby ready!"
Y'know, like an idiot would do.
I had started out in Gamemaker. I had some very limited experience with coding, and maybe 200 hours in various iterations of RPG Maker throughout my entire life. I spent maybe three weeks tinkering, and got a silly platformer built with pixel art of my three cats, 8 frames of animation, and you could hop on a slime cube to kill it.
Okay, cool - I could make something. It wasn't what I wanted to play, and it wasn't going to pay for my daughter's college, but I could start to finish a game. It wasn't fun, it wasn't engaging, but you could play it. I immediately got to work in a notebook, figuring out how to make it either more fun, more engaging, or hit the jackpot and do both.
I decided I would have a vacuum chase the cats from the basement of my house, to the garage of my house, where they could effectively hide from it. I wrote out all the steps I would need to take, I sat down at my computer, and I downloaded Unity. I had confirmed to myself I could make a game, so I decided to make my game. The game I wanted to play, that nobody else had made yet - the dream project.
I hated Unity, I uninstalled it forty five minutes into tinkering with it.
So I've been working in Unreal for the last year or so - first with blueprints, following along with tutorials until I realized I was in a loop. Then I started making my own things, little systems, testing my knowledge of the engine. Nothing serious, parts of systems that would maybe make up a whole. I'd build a system, start a new project, recreate that system and make a new bit of code to go with it, start a new project, recreate all of that and add to it - ad nauseum for about three months.
Then I was told blueprints are basically C, +, and + in a trenchcoat, so I took the same approach there. Follow some tutorials, figure out what was going on, make something in C++, test, start over, rebuild it, add to it, and repeat. That's where I'm currently at - on the verge of starting over, likely for the last time.
Baby's going to be here soon, and if I don't get a solid foundation of developed code I can work with on the design side, I won't have time to put meaningful work into the project. I don't begrudge my daughter that - thems the breaks when you start a family.
Tumblr media
I'm going to fold some laundry, and then I'll come back and write up a post about what this dream game looks like, and what it will likely actually end up being.
Stay curious, friends.
2 notes · View notes