The Littlest Keyboard
Posted on March 23, 2017 at 09:16
This is going to be a hard one to type. I say that because I'm typing this on a 40% keyboard, which I just plugged in this morning to my computer for the first time. I have virtually no idea how to touch type on this thing when not just typing letters, which, by the way, is exquisite on these cherry mx browns, which actually feel a lot better on this board than on the other board with browns that I have.
If you're not indoctrinated into the wonderful world of mechanical keyboards, this will all be gibberish. Actually, it won't be, this isn't actually complicated.
I bought this keyboard
and it arrived last night. late
last night. So, I picked it up this morning and replaced my old board with it. I say "old", but really it was just a few months, which my fiancee pointed out quite a few times.
To give a sense of just how little this thing is, here's a picture of my pasty white hand in comparison to it:
Anyone else here got a fun keyboard to share?
Posted on March 21, 2017 at 09:23
Let's see if I can crank out a decent enough post in the next 10 or so minutes before I head to work.
I got a switch launch-week. Very lucky after not pre-ordering to find that a coworker pre-ordered two, just to be sure. I bought his second one from him, and we did this dead-drop situation where he left it at his desk over the weekend in the office for me to pick up. Covert ops.
Of course if I got a Switch, its because I wanted to spend too much money on a Zelda machine. I'm looking forward to the lineup of games coming down the pipeline, but for now, yeah, Zelda (and snipperclips!) machine. Snipperclips is actually very fun and you should try it, though.
Zelda is amazing. I'll not just sit here and add to the swirling river of praise this game gets, but I will say it is well deserved. I want to talk briefly about something else that really makes me just love the switch: speed.
I'm not talking about processing power here, because it could for sure use some more of that. What gets me is that when I turn on the switch, I get right back into the game in single-digit seconds. This may not sound impressive, but it feels so good when I pick up the controller, press Home to turn on the console, then press "A" and I'm right where I left off in my game. It acts similarly to the 3DS, where when you close the lid, it just state-pauses. Only, this feels like a home console, not just a handheld.
I find it to be a killer feature, really. Its obvious that both this console, and Breath of the Wild, were designed to respect the fact that Nintendo's playerbase have largely grown up and have other responsibilities, or limited time. I can get into the game in notime, play for as long or as little as I'd like, then put the console to sleep without having to go through a save process, and knowing I can just resume immediately the next time I swing by it.
If you haven't played with a Switch yet, be sure to see this for yourself. It is much more impressive in person.
Who else has a Switch by-the-by? Are we in need of a "share yer friend codes" blog or do we have one? Don't put your codes here though, since this is a public facing blog. We can set up something more official if there is a desire.
edit: Ayy, 7 minute writing time. I did it. Off to work.
Posted on March 20, 2017 at 09:16
I made the first commit of my game in May 2016, so I'm coming up on a year of development time here soon. In some ways, it doesn't show. For one, I haven't spent all of that time working solely on the game - I've taken long breaks, and even when working on it, I only have the time that is outside my normal working hours.
In other ways, it definitely shows. In the codebase itself, I've formed a foundation which is a joy to work in. The majority of the time spent over the last year has been engine and toolchain development, both internal to the game code and external.
Some of the work I've done in the realm of "foundation" is already open source. gdash
, which I've already posted about here a while back, is an open source gml package with a bunch of very useful data manipulation functions that are either missing or sub-par in GML. While it isn't rampantly popular, it has 13 stars as of today, which is actually pretty good for a GML repo on Github.
The GameMaker community isn't exactly the most technically advanced bunch on the whole, but at least from my vantage point, it seems like there is a shift in the wind. With the release of GM:S2 and what seems like a renewed focus on making GameMaker a really nice utility, I've been tinkering with the idea of packaging up a lot of the foundation work I've done as an open source project, so that others may get going quickly with a project idea they may have.
The foundation work I've done is largely game-agnostic. I purposefully kept it so while writing it so that I could re-use it in other projects. It covers things from data manipulation (gdash), to game state management, to saving/loading, to custom event and timer implementations to provide an alternative to GameMaker's frame-focused timers. Not to mention just a big folder of scripts that are basically my answer to "how the hell does GML not have this function?" Examples include "ds_list_add_map" and "mouse_is_hovering".
My current proposed toolchain would be a handful of GML packages that work well in tandem to make for a better starting point inside of GameMaker. No game logic, just tools to help make the game happen. I've spent a year building these tools, which is a year of time not
spent building content. Luckily, I'm on the content building phase now, and thanks to a great foundation (which does include game-specific tooling as well, not to be included in this proposal), I can sit down and crank out new content in short bursts, rather than having to build endless situation-specific code.
If this is something at all interesting, I'd like to know. I've been on the fence about this for weeks. I'd like to gauge general interest vs preferring to roll your own solution. Though, I just realized this is absolutely the wrong community to ask the question do you prefer to home-roll solutions
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.