Posted on February 24, 2017 at 08:19
I got a few requests in IRC yesterday to talk about how I structure my GM:S projects. My current project has a whole lot of resources, and needs to be able to have a whole, whole, whole lot more resources while still being manageable. I'll go over my general process, and talk a bit about other relevant subjects as I see them fitting in.
The first, and probably most difficult resource type to manage is objects. You generally need a lot of them, and sometimes they don't quite lump together in the same way that, say, sprites would lump together under a given purpose. That said, there are still plenty of ways you could try to lump together your objects.
In my project, I have the following top-level object structure, all of which are groups:
walls and objects
I see these as the highest level of taxonomy in my game. Under each is either the terminal of the resource tree with leaves being objects, or more directories to more objects.
Beyond grouping into these lumps, alike objects are named with a deterministic naming pattern, such that when I am searching for one type of object, anything related will show up as I search. GM:S2 has a GoToAnything search (Ctrl+T by default) to bring up any resource that matches your string. This is immensely useful in general, and naming with a solid schema helps here as well. Let's dig down into spells -> elemental -> ice spike, one of the lower level spells in the elemental category in my game.
In there, I have the following objects:
Everything is prefixed with "obj_spell_ice_spike_". This pattern is the exact same for every spell in my game. I know to search "obj_spell_" to list out every possible spell related object, then its just a matter of narrowing down what spell, then what part.
This pattern is similar everywhere that I could make it in my project. NPCs are all "obj_npc_whereTheyAppear_npcName". This way, I can look up all the NPCs in a given location.
When you start to use this namespacing pattern, natural groupings will appear. From there its just preference how much you want to chunk down into groups.
My project increasingly relies on scripts to do almost all of the heavy lifting. I've built myself up a really strong foundation to manage save/load, world data, item lookups, inventory management, npc movement, spellcasting, hud management and so much more. As much "business logic" as possible is done in scripts. This lets me re-use them anywhere, and write out good documentation in the heading of the script, so that GM:S2 displays context completion when using them.
I name scripts in such a way that they would feel like any other gml function. I see it as "adding on" to gml to create a GameMaker specifically for my game. With that in mind, my naming schema for scripts is:
Breaking this down:
Let's look at a group of scripts I have: data management. I'll use the script that generates the controls data. The system name here is "data". Everything with the prefix "data" will relate to ephemeral, modifiable data in my game's runtime.
What is this script doing in the system? Well, I'm initializing data, specifically controls data. So, my directive is "init".
Now we have "data_init_".
Finally, this script is initializing controls data, as we've said, so, "data_init_controls" is the final name of the script. Along side that script, I have:
Sometimes you need an action as well. Often this is something like "get" or "set" or "delete". The action should go last
. Some examples:
Keeping the order to further specify the system you want to leverage, working you way to the action you want to take can not only help keep you sane when coding, but make it that much easier to just change the last word should you need to refactor.
This is very similar to the object structure, though with a focus on namespacing scripts that work in the same "system". Keeping to this structure means you won't have confusion with name collisions when you've got a bunch of scripts, and as I'm typing a script name, my suggested completions are only related scripts, not something that happens to have the same start to it.
This may all seem super basic, but its something I've learned from previously structuring projects with no real regard for the long term. Being mindful about naming resources has lead to a very nice time expanding the resource tree. The rare cases that don't follow these patterns get me every time.
With these concepts, you can probably structure any resource type. I do a very similar pattern for rooms as I do with objects, only using "rm_" instead of "obj_" as my prefix. I do not use prefixes for scripts, to keep with the concept from before of trying to "extend" gml.
If anyone found this helpful, let me know. I'd be happy to also do a write-up about object structure, going over how I manage data between objects and the save system, and how I handle local variable structure and code structure within objects vs scripts.
Minor Gameplay Videos
Posted on February 22, 2017 at 08:30
I've been posting a few small gameplay videos to twitter recently, and figured it'd be fun to post them here too.
One-shotting a weaker enemy with one of the core light spells, Smite
Healing from a water source with the right passive skill applied (passives are the circular icons in the bottom right corner)
Setting a town as "home" by lighting a beacon. Press the assigned hotkey at any time to teleport home after 5 seconds. If you get hit, you'll be interrupted, so don't expect to escape fights!
Going to try to keep these little videos coming. Easing myself in to a true announcement :D
Edit: I've linked to the videos directly as well, in case your browser is incompatible, or in case 64Digits' css was written literally years ago.
Posted on February 21, 2017 at 08:30
A large focus of my game is writing. The save system requires the player character to make some sort of written impact on the world. If you die, the death screen tells you about the last known writing about you. There are books about the world for your reading pleasure, either to give you the edge on a particularly difficult opponent, or to recount the history of the town you're visiting.
Beyond literature, the conversations with NPCs are written in such a way that I am trying to convey feelings, thoughts, hopes, goals and fears from these characters.
Every NPC in my game has more than just a line to say. They have hopes, hurts, goals and loves.
My goal is to provide a world to the player that isn't just full of NPCs that stand around and spew the same, irrelevant-after-first-interaction lines. Even the ones that are currently just standing around all day have some kind of integration into the town they live in. They have some connection to the others in the town, be it family, deeds or shop ownership. The shopkeepers aren't open at your leisure - they go home to get some damn rest after dealing with you trying to sell them 100 suits of armor all day.
Here's a few examples of the NPCs you may meet in your journey:
Ellis and Henry Lanwell
This couple runs a tavern in a town that relies heavily on traffic to it's arena. The tavern isn't the biggest in town, but it's the first most people see when the come in from the south or east. In that way, they hope to catch thirsty travelers.
They have two divergent approaches to business, however. Henry is upset about their situation - competing with a bigger tavern near the arena means they can hardly afford their house. Because of that, he tries to upcharge on most pints - jacking up prices and taking that money from unaware passers-by. Ellis, on the other hand, tends to drop prices down a bit, in the hopes to make a good reputation for the bar.
The two haven't talked to each other about this, probably because they spend all day working. They each take 10 hour shifts, just barely passing each other on the walk to and from work (see linked screenshot at the top of the post).
It is my hope that they'll rekindle their love.
Do you love books? Alaina loves books. She loves books so much that she wants the world to be reading.
Also pictured above, Alaina runs a small bookstore in the same town as the Lanwells, though her business skills are lacking. She encourages her guests to read freely, but has a hard time securing an actual purchase.
If you watch her go about her day, you may notice that at night, she has to retreat to the local bunkhouse, a shoddy building for those unfortunate enough to not afford any other bed in town. Regardless, she goes on with a smile, hoping that someone in town will find a book worth their time.
It will be rough to write all these characters. While I'm hopeful that every character can have something
of interest, I know it will be a long journey. Between this, writing a D&D campaign for my group, taking debugging notes on my game, and a couple of other side projects, I find myself in a flurry of half-written documents. Because of this, I've been toying with an idea for a more human-like note-taking system. I've tweeted about it recently, but I'll save that for another post, when I have more of it to show. The goal being to let me just use one document and jump around as-needed. I'm excited about the progress there.
More to come soon. Started real work on the game's website last night. Once that is finished, it'll be a bit of branding work before I can really announce the game in full.
Music and Sound
Posted on February 15, 2017 at 07:35
This past weekend, I focused a lot more on the music and sound work in my game. Up until now, its only had two tracks, which, given the limited world size right now, didn't get too much in the way. Though, I realized that I wanted to begin to give areas more definition, and one of the best ways to handle that is music.
The track above is titled "The Stories Woods can Tell." Much of the inspiration for this game, and previously Elicti, were the woods behind my house growing up. My room's window overlooked a forest that went really far back, into a preserve. During the spring and fall, I'd leave my window open to smell the fresh air from the woods, which always gave me a rush of inspiration to work on whatever my current project was.
That hasn't changed still. Fresh air in a breeze through the window still puts me on cloud nine.
The game begins in a very small town, borderline an outpost in the forests. You can head in most directions if you can navigate the forest and end up in a larger town, but starting you off in a slow-paced village, surrounded by woods full of mystery makes for a nice introduction to the world. The more extreme ends of the map will contain significantly harder terrain, enemies, quests and events, but to ease you in, you'll begin by seeing a small town go about their business, unhooked from the rest of the world.
Music plays during daytime hours, and you'll be greeted with a quiet, darker ambiance at night. During the night, as darkness encroaches, it becomes dangerous to travel without torches, or a spell to help illuminate your path. Enemies may jump you out of the veil of darkness. Travelling at all is a difficult task, and travelling at night is a borderline death sentence. The sound design of the game needs to convey that.
As I begin the foray into sfx and more music, I'll post more tracks and concepts as they come. Excited to be working in the music space again, and hoping I learn more as I go to make an inspiring soundtrack to explore the world with.
Posted on February 11, 2017 at 21:45
Reaching the right level of mechanics in my game has been an interesting ride so far, and I'm nowhere near a "done" state. I started development with the ideas in mind on how things would interact, and how the basic gameplay would work. Beyond changing up controls, I've been tweaking mechanics to make sure they work how I'd like.
I still have a lot to do, especially towards creating enemies and environments that cultivate a game that is fun
and not just a giant cheesefest. I want to ensure that the mechanics of the game, combined with the level design, enemy design and spell design work together to create a system where the player is always enjoying their time playing against the game. Turns out that is real hard to do.
There are some high level mechanics decisions, like "what kind of power will spells give?" or "what can items do?" as well as some more niche things, like "what should the inventory size be such that its just restrictive enough to require some thought?"
Then, there's even deeper mechanics decisions. I'm talking stuff about the nearly-invisible-to-the-player restrictions that make the game work a certain way. A good example for this kind of decision I've implemented in my game are cast durations.
If you've played a game like DotA, you may be familiar with Cast Animations. A cast animation is, funnily enough, not an animation, but the amount of time it takes for an ability to be used. An ability may take .1 seconds to activate, then have a .6 second "backswing" time where you also can't perform anything. This helps to balance things out such that you aren't able to just drop four abilities down in one frame and wreck face.
At first, my game allowed for just that. I found myself strolling around, dumping out spells like a fountain. Beefing up enemies didn't make my time in the game more enjoyable, it just made me find more ways to run in circles casting the same spells for longer.
To mend this, I've implemented slight windows where no spells can be cast after casting a given spell. It differs for each spell, based on the power of the spell, what it is even doing, and if there is some kind of prolonged effect. The goal being to give some sort of meaning to pressing the "cast" button. I need to be sure about what spell I want to use. Beyond putting it on cooldown, I need to know that if I cast this spell, I will have a few frames of total vulnerability before I can do something else.
To the 99 percent of people who would play this (oh man, I'd love for 99 people to play it ever
), the concept of cast animations would be totally invisible. If I did my job right, it just looks natural and nobody would think anything of it. But I hope that someone out there who would play this game will enjoy this small addition for what it adds to the game: pace in fighting, and more dynamic spell loadouts.
More to come soon. TM.
Posted on February 07, 2017 at 09:17
A few weeks ago, I had a terrifying realization: the font I was using literally everywhere in my game is not free
. I did not even think about that when I was designing all of my UI code.
This sent me into a panic, and I spent about two weeks scouring the internet for good font options that were royalty free. I don't really have a budget for my project, and I'm not about to drop thousands on a font license. So, I took to the web and found a few (actually, found a lot but most of them were not a good fit).
After finally settling on a couple of fonts and fixing up my UI layouts to work with them, I was back on track. Though, I was thinking a lot more about my UI and how it is basically just white on black, and figured I should probably do literally anything but that.
Long story short, see screenshot above. It's a rev 1, but it is already lightyears beyond the black box / white outline situation I had going on before.
I'm feeling pretty good about the UI overall so far. The HUD itself could use some tweaks and polish, but that will all come with iteration as the game itself becomes more polished over time.
Though it has recently ballooned after an extensive playtest of my own, my Trello to-do list is slimming down for the next external playtest. I still don't think its ready for any kind of open beta test, but I'm encouraged by y'alls kind words so far, so keep in touch if you're interested when that time comes.
More to come after I get this playtest out the door. I'd like to finish my work on the website soon enough so I can begin actually publicizing.
Posted on February 06, 2017 at 08:18
It's been a rough week at la casa de my apartment. Things are starting to look a little bit better, but for about three days last week, I hardly slept at all.
Some people might scoff at that and say thats their norm, but I generally take sleep seriously. I tend to go to bed early (9:30 even, some nights) and wake up around 7. I really love sleep, and love to feel refreshed in the morning, and ready to tackle the day. Yet, for some reason last week, I just outright could not sleep for three days.
After the second night, I had to take a day from work because I was simply too disoriented. Even then, I still couldn't sleep. I went for a nearly two hour walk on a trail in a nearby park in an attempt to further tire myself out, but couldn't sleep that night still.
Third sleepless night came, and I decided I should really try to go into work, which was a huge mistake. I ended up having to leave around noon, but not before making a fool of myself in some meetings by being only half conscious of what I was even saying.
On the way home from that, I swung by a pharmacy and got a sleep aid. Was finally able to rest that night.
I'm hoping I don't end up having to rely on a sleep aid, especially given that this was never really an issue for me until it abruptly began last week.
No real moral here. I just wanted to type all of this out. One of the problems I'm noticing is that I'm laying in bed, telling myself I should be able to sleep, then staying awake because I'm concentrated on falling sleep. Hoping that brain dumping this gets it out of my head. Who knows.
I'd like to post another entry soon about game progress. I'm coming up on 9 months of dev time on it, and while the breadth of the content may still be kinda low, the depth of the gameplay remains high, which has been my goal. There is a lot of ways to go about playing, and the systems I have in place should allow for pretty rapid content expansion once I'm ready to fully commit to content.
Will post more on that later. I'd also like to post some tech overviews about how I'm approaching the development. Might post it here or on the game's site, which isn't up yet. Depends on getting that site launched.
Posted on January 03, 2017 at 09:20
Still on the upswing from the Pneumonia. It seems like this will be a bit of a long process. I don't feel comfortable going out into the world again yet. Tried going to the store yesterday and it took a lot out of me still. Instead, I'm working from home as much as I can. I'm pretty tired of feeling like I'm not doing much.
To fight that feeling over the past few days, I've tried to work on my game as much as I could. I find that I get a bit dizzy after a while at the computer, so I have to work in chunks, but I've managed to get a decent amount of progress. I have a few screenshots to share, some new, some of older stuff, but hopefully all exciting...
...except the first one. I think I'm the only one who will be excited by this.
The UI of the game has always felt like it doesn't belong. A lot of floating text. I randomly tried adding a bit of a backing shadow (drop shadow if you will) to the floating text of the UI, and things suddenly just *felt* so much better. While the UI will have some serious iteration to come, I think this is a step towards feeling better about the whole look and feel of the game.
This is the "overview" screen. Think of it as a scoreboard in an online game. It's only up while you hold a hotkey, and shows your current progress, as well as some info about the area you're in. It's nothing major, but it's a nice way to see where you're at.
This is rev 1.1 of the actual spell selection screen. What you're seeing is all of the icons for Psychic spells (as of right now). The background has a neat, dynamic transparency cloud going on, giving a feeling that the background is just a smoke. Squares are active spells, circles are passives. Grayed out spells are locked until a given level.
The player starts with 4 active slots and 1 passive slot. Passive slots will unlock from major missions, which will add to the power of the player. I currently plan to have them as quest rewards for not-main-questline-quests to encourage the player to explore to become more powerful, rather than take the path of least resistance.
Finally, a preview of a town I just started building last night. A tiny, tiny preview. As you enter the town, the dirt road you've been travelling becomes cobblestone (wip texture), and you're greeted with a sign announcing the town's name, as well as a little desire path directing you to the nearest inn.
The trees in this town are also much more varied in color, as the town is slightly further north.
This town, as with most in this game, can also be found in the Elicti games. This game's world can be considered a future / AU of Elicti. For those who played the game, if you can recall (I barely can), it was the town with the bullet hell minigame in it!
I tweeted the other day saying that I'm noticing it's hard to stop playing when testing the game. Through a few overhaul tweaks to the gameplay over the past couple of weeks, I feel that it has become much more enjoyable to play. My goal is to tune the gameplay to a refined edge, in the hopes that it just becomes a joy to play, even when fighting the simplest enemy.
Hope all is well in your new year. I'm hoping to have some
kind of release this year, even just beta.
Pneumonia & Screenshots
Posted on December 31, 2016 at 15:39
Last Friday, the 23rd, I got into bed after feeling fine all day, and suddenly started violently shivering. Like, really violently. I almost called out to my fiancee for help, but it subsided after a bit. It was kinda spooky, but I chalked it up to just being cold outside.
Well, I started feeling pretty dang bad over the next few days. Christmas was a bit of a blur, I mostly slept in the guest bed at my parents' house, and what time I did spend with my family, I was horizontal on the couch, and barely eating.
I really figured it was just a bad cold, so my dumb ass was protesting, saying I'd be fine. Well, Tuesday rolled around and I thought I was feeling better. Then around 3, I felt like I got hit with a sickness train. Fiancee took me to the urgent care center, where they took a chest x-ray, and oh shit, I have pneumonia.
I do not recommend getting this shit, y'all. Apparently there's actually a pneumonia vaccine. Go get it.
I've spent all week not really being able to breathe. Its made me dizzy, weak and have no appetite. Not the best way to see out the year.
Anyway, I got the medication I need, and I've been on a slow upswing, but a definite one. I'm feeling a lot better (which is to say, I can breathe a bit now). I've managed to get a bit of dev work done on my game, even. So, here's a few more screenshots. This actually doesn't contain anything too new, but here they are anyway.
One of the more densely forested places right now. A trail that runs north/south between two towns. Well, it will run between two towns when I have more than the one town I have built out.
A few pink trees and a campfire. I really like the effect I have for fires, with a subtle glow and some smoke coming off of them. It looks wonderful when the game is running, with a bit of a flicker.
I want to do a lot with colorful trees. These pink trees as-currently-planned will generally designate safe areas in the wild.
One of the dark spells, "Hunger" - releases spirits that seek out any soul to latch on to. If the spirits don't find a soul to eat, they return to eat your own, dealing some damage. The Dark school of magic has this theme throughout, where if spells are misused, they hurt you. A little blood magic to keep things interesting.
To make up for the dark magic hurting you, the first dark passive spell you get is called "Soul Feast", and heals you up to half health when you get Dark school experience, dropped when killing a target with dark magic. As long as you're killing, you're alive.
I'd love to post more screenshots as I have stuff worth sharing. Maybe some gameplay videos or something too. I need to get going with content additions, I've been spinning for a while on what I do have built out, tuning it quit a lot. I need to pull back and just build out locations, spells, NPCs and enemies. I have been a bit, but not at the rate I need to if I want to reach the scale I'm looking at.
Looking forward to a New Year full of good development, game or otherwise. I hope everyone finds 2017 to be a successful year.
Stay warm. Stay healthy. Tell your loved ones you love them. If I could, I'd hug you all and invite you all over for a NYE celebration.
Maybe next year.
Posted on December 19, 2016 at 08:35
Well its been pretty dang real for the past month or so. Stuff at my work has been kinda hectic, I got engaged, and now the holidays are coming up.
Post-engagement was fun. My fiancee's mother came to town for Thanksgiving and we all went ring shopping. Was a bit out-of-order, given that I proposed without a ring and all, but it worked out, and now she's got a ring she herself loved without me having to guess what she'd like, which would have been damn near impossible, because she said she knew nothing about rings.
Now that I've got a few minutes, I want to drop a couple of tidbits about what I've been doing recently.
If you follow me on twitter
, first of all I'm so sorry, but second, you might have seen me tweeting about a tabletop game I'm working on.
I was toying around with an idea about a bit of a role-reversal game. I got the idea in my head that I wanted to make a game where you play as an NPC, trying to get the hero to do your quests. Ultimately, I realized it'd work well in a tabletop format, and began to do some rulecrafting.
I've got something now that is pretty exciting. I made a paper prototype and took it into my office's happy hour, where a group of coworkers joined me in playtesting it. We had a good time, even though it was horribly imbalanced, and we came up with a bunch of ways that it could be improved and balanced.
One of my friends at work tweeted about it even
I think for rev 1, once I get past the prototyping and balancing stage, I will be making this a web based game. It's something I can make pretty quickly, and I wouldn't need to coordinate with a fabrication company or a publisher. If it gets any kind of attention, I'd definitely look towards getting it published, but I think at least a prototype part 2 as a web client would be good.
Another thing I've been helping out with is my fiancee's blog. I retweet it a lot, so sorry about that, but she's been (and me sometimes) blogging about simple living and financial independence. It's been eye opening to turn my life 180 about how I treat things and money. Right now I'm saving as much as I can per paycheck in an attempt to get a sizeable down payment for a house, alongside bigger sums to support a dream of early retirement. My dream remains to find a tranquil place with some land where I can work for myself, hopefully making games of some kind.
If you want to read stuff like that, see her blog
That's all for now. Gonna do some more work on my main game project and think about new years resolutions that I'll be breaking.