Thursday, December 29, 2016

Harvest Booze Update #9: Shitventory

I've been a lazy piece of shit for the past couple of weeks, but 0.0.2 is officially complete. You can now actually collect stone, logs and plant fiber from the rocks, trees and grass. The game keeps track of what you have in a simple inventory system, which you can't interact with yet except by gazing upon its glory:

Also note the dude-sized logs. Just toss those in the backpack, no prob.
So, moving on. The big ticket items for 0.0.3 are:
  • Inventory system that you can actually interact with
  • Crafting system & the first few crafting recipes (basic tools)
  • Getting all those tools working in the game
  • Maybe a save system
And, you know, whatever little things I stumble on along the way. The save system might end up becoming a version update all on it's own, I'm not really sure how big of a job that's going to be, but it seems like it's probably going to be a huge pain in the ass. Kind of needs to happen sooner than later, though.

But all of that sounds hard so I'm probably just going to play Rogue System for a couple of weeks, see ya.

Tuesday, December 27, 2016

Introducing Dog Catcher Jones of the Sequel

I teased it a while back, but I cannot in good conscience keep you in suspense any longer, dear fans. Yes, Dog Catcher Jones of the Sequel is in development.

Fear not, I'm still serious about working on Harvest Booze, but in the midst of final exams last semester I just needed something really, really stupid to work on. So this is it.

If you haven't played the first game, Dog Catcher Jones of the Future, do yourself a solid & check it out at potatoclockgames.com. It was the first video game I ever made, so yeah, it's pretty good.

This new installment in the series plays like an idle clicker game, with a couple of grueling twists; if you idle, you lose, and you have to play for 24 hours straight in order to win. No pausing, no saving. Just you, the terminal, and the fate of the universe resting on your shoulders for a miserable 24 hours.

Good luck, Jones.

I really don't have a schedule in mind for release, just depends on how much I feel like working on this over Harvest Booze. A month, maybe? A decade? You'll be the first to know.

Monday, December 19, 2016

Harvest Booze Update #8: Bustin' Makes Me Feel Good

With the semester having wound down last week, I've finally been able to put some quality time into developing the first real gameplay elements of this thing. We have:

Rock kickin'!
Grass yankin'!
And my personal favorite,

Tree punchin'!
The trunk is drawn separately from the branches & even the bark patterns, and I was having a hell of a time one night figuring out how to make everything move together. I went to bed & had weird dreams about triangles & woke up like, oh yeah, trigonometry is a thing. Brains are fucking nuts.

Anyway, as is probably evident, this was a really fun update. Most of the blowy uppy effects are thanks to GameMaker's built in particle system, which I probably went too far with, but whatever, if it makes me giggle then it stays, consarn it. I want the early game resource gathering to be sort of tedious to really encourage players to put some time into building automated systems in the mid & late game, but with some decent sound effects along with these visuals, I hope breaking shit is satisfying enough to temper the tedium. You'll be able to craft basic tools within the first few minutes of gameplay, so you won't be stuck kicking rocks for too long, but tools will be able to break so you'll always have the option of man vs. wild hand-to-nature combat.

I'm working on a very basic inventory system right now, that's the last official task for v0.0.2, then onto crafting & more in 0.0.3; I think the first crafting recipes will be for the tools which already have a use in the current game: ax for bustin' trees, pick for bustin' rocks, and scythe for bustin' grass.


Sunday, December 18, 2016

More Tree Fails

I've got the falling trees working now (baaaaaasically...), but showing off things actually working just seems so boring after this:





A little bit of cleaning up to do, real update coming in hot tomorrow, probably.

Thursday, December 15, 2016

Invincible Leaf Fountain

Here's a quick preview of what's to come, but I mostly just wanted to show off this invincible leaf fountain that I made by mistake:

I spent like an hour trying to justify not fixing this.
A few things to work out, still, I guess.

Tuesday, December 13, 2016

Welcome Back, Jones

Welcome back, Jones. Things sure have changed. We can now catch dogs with ease from the terminal. The government pays us when we catch the dogs.

And now for the bad news: dogs are increasing at an exponential rate.

There is a problem with spacetime caused by Butterbean, who went rogue after your last mission. There are microscopic dogs and one dog that is the size of the whole universe so you'd better get moving, Jones.


And Jones, one more thing ... let's catch these bastards.

[Cue music: Back in Black by AC/DC]

Friday, December 9, 2016

Harvest Booze Update #7: Version 0.0.1 is Complete

It's been a rough week between my laptop shitting the bed for a minute & finals week looming but I've managed to push through the last bit of the historic version 0.0.1.

Organizing my "shit to do" list into version numbers really helps to keep me on track, and it lets me feel every once in a while like I've actually finished something. The last task of 0.0.1 was a basic collision system, which is now up & running; you can't walk though trees & rocks, you don't get stuck in shit, and everything is drawing at visually sensible depths.

0.0.1 was all about getting a basic procedurally generated forest working; 0.0.2 is all about destroying that forest. Rock kicking, tree punching & basic resource gathering are all on the agenda here. This should be a fun one.

Thursday, December 1, 2016

Harvest Booze Update #6: ROCKTIMIZATION

Got some rocks up in here. These little guys are your standard crafting game rocks; they're fairly easy to break up, you get some stone resource, and then they're gone.

Only rocks have shadows, duh.
Some light procedural generation here, just to avoid looking copy pastey. I've also added a bedrock ground type. Extracting resources from the bedrock will be more difficult, but it will never completely deplete. The idea here is that you gather the easy rocks in the early game & save the hard stuff for the late game when you can build drills to do the work for you. These bedrock patches generate in the same way as the grass, so most of the work was already done.


I also pushed through another round of optimizations & got the FPS up around 300 which is sort of a relief. Little bit of breathing room. I'm basically totally deactivating any object outside of the player's view, updating that about 3 times per second. Updating more often than that causes the overhead of the activation/deactivation process to eat more CPU than it saves. There's still some tweeking to do there, and I'll have to redo the time system, but we're running smoothly for the moment, anyway.

Of course, there's still no game here. You can't interact with anything yet. First order of business on that front is getting basic collisions working, so you can't, like, walk through trees. That's the last planned task for version 0.0.1, then on to tree punching!

Sunday, November 27, 2016

Harvest Booze Update #5: Grass!

Ok, grass. No sweat, bucko, just throw some green squares down & call it a day, on to bigger shit.

It looks sort of ... what's the word ... stupid?

Well, fuck. That kind of seemed like it would work. After a brief  "Christ, who am I kidding" panic & a couple of beers, I stepped calmly back to the drawing board. Sure, this looks like shit. Let's figure out why & let's fix it.

First, grass just doesn't grow like that; I can't drop single patches randomly. That method works fine for the trees, because that's kind of how trees grow; as an individual plant in competition with it's neighbors for resources. Grass grows in patches, though, spreading outward when it can. My first idea for generating random grass patches was this recursive algorithm:
create_grass_patch(x, y, patch_size) {
    Create a grass patch at (x,y)
    If patch_size > 0, then with each adjacent dirt_tile:
        With some chance (maybe 50%?):
            Call create_grass_patch(dirt_tile.x, dirt_tile.y, patch_size-1)
          }

Now, I'm not the type of dude who just whips up recursive algorithms, so I was as surprised as anyone when this happened:


Here I'm generating 10 random patches of increasing size just by increasing the patch_size variable by 1 at a time. So far so good, but it still looks really flat. Maybe we can generate grass blades kind of like how we did with the tree leaves?


Alright, not bad! Another performance drain for another day, but not bad, otherwise. It still looks weird, though, the edges are all squarey. But wait, these games always happen on grids, right? How come everyone else's squares look so much better than mine? Here's why:

Elder Statesman Harvest Moon (SNES)
If you look closely, the grass squares on the outside edge of the patch aren't quite squares; the edges are sort of ragged, letting the dirt show through. I chose the above screenshot because, you know, Harvest Moon, & those cows are fucking adorable but this isn't, like, a Harvest Moon thing; tons of games do this, I just never looked that closely. So this means we need a bunch of sprites for the different ... edge cases (har har), and we also need to make the grass smart enough that it can look at the neighboring grass tiles to figure out which sprite it should use. But most of the different edge pieces can really be the same one, just rotated differently, so I only need this little sprite sheet:



It's kind of hard to see, but there are six tiles there; the pink parts are actually transparent & the rest will be colored programmatically. It was a little tedious, but not really difficult, to make the grass smart enough to choose it's own tile. It can decide which tile to use by counting the number of adjacent grass tiles, then it chooses the rotation of the tile by looking at which sides those adjacent grass tiles are actually on. And, voila:
IT'S GRASS!
We're back down to running at like 2 frames per second, but I think it looks pretty good. Apparently every small victory is going to be followed by a grueling round of code optimization, so I guess that's what I'm doing next!


Wednesday, November 23, 2016

Harvest Booze Update #4: Game Optimization 101

Remember how I thought that drawing all of those leaves individually might be a bit of a drain on performance, but whatever, I'll just deal with it later? This is just painful:

Just don't worry about the acorn numbers?

Yeeeah, check the (low)-single-digit FPS in the upper left there. Turns out I've got to deal with it now.

Quick side note first, I love how huge these trees are. Trees are always way too small in games. These guys are big enough to make it feel like you really are a little dude in the woods. I'm into it.

Anyway, the first problem is that GameMaker draws everything that it knows about, many times per second, even if the thing it's drawing is outside of the screen. A single line of code in the tree's draw event stops the game from drawing it when it's outside of the player's view. We see a pretty huge performance gain here:

Also don't worry about how he glitches through that tree at the start.

Still not good enough, though. The game is supposed to update 30 times per second, so any FPS below 30 is slow. And, like, we have a shitload of stuff to add to this game, still. It's just fucking dirt & trees! I'm playing on a mediocre laptop & performance takes a hit from the screen recording software, but still.

At this point, I wasn't really sure what to do. I knew that the problem was that I was drawing a million leaves, but I didn't want to compromise on my original plan & I was liking the way the trees looked & Ok, actually I just didn't want to redo shit. A little bit of research led me to GameMaker's surface drawing functions, which, as it turns out, are super useful. GameMaker calls the thing that it's drawing to a surface; this is, by default, the gameplay screen. But you can instead draw to another programmer-defined surface, basically a virtual canvas, and then draw that surface to the screen whenever you want. So instead of trying to draw a million leaves while calculating their color, rotation, coordinates & scale 30 times every second, I can draw all of that just once to a surface, then draw that single surface, with it's single color, rotation, yadda yadda, 30 times per second. That's like, at most, 1% of the work we were doing before. Each leaf clump has about 100 leaves, and the tree is doing a handful of calculations for each one, but by drawing it all to a surface I can skip all of those calculations and just draw one thing. Anyway, it works:

Let me take a moment to point out that masterfully crafted custom mouse cursor & the sick scroll wheel zoom action.

Well, that's better. It's actually 50+ when the screen recording software isn't running. Any gains over 30 won't have a noticeable effect, but that's headroom that I'm sure I'll need later. Like, when the game is more than dirt & trees & a dude. Like, soon, hopefully?

Sunday, November 20, 2016

Harvest Booze Update #3: Trees!

Check out these trees:


I want trees of the same species to look similar, of course, but I also want enough variation to keep things from looking too copy & pasty. I also really don't want to draw a bunch of shit. So all of the above trees (and over 18 quintillion more #NoMansFarm) are procedurally generated from this humble set of art assets:


The game resizes, colors & assembles these pieces on its own whenever it needs a tree. There are a few bonuses to this general method; for one, it means I can animate the tree growing over time by basically having all the pieces start out small & green, then slowly stretching them into the adult tree. Also, since all of the leaves are colored & drawn individually, it should be easy to have them change color naturally in the fall & to drop from the branches individually as winter approaches. I suspect there may be performance-related problems with this approach, treating each leaf individually, but I'll deal with that later.

I think I'll hold off for now on making the trees actually grow so that I can get into some gameplay stuff sooner. I'm going to get rocks & grass into the game, then start working on the inventory & crafting systems. Once we can start crafting tools & collecting wood, I should at least have a nice little lumberjack simulator on my hands.

Monday, November 14, 2016

Harvest Booze Update #2: The Miracle of Time

So I'm working on getting trees into the game, but here's the thing: trees have to grow. That growth is somehow tethered to time. WHAT IS TIME?

Most farming games deal with the problem of things growing over time by just having them grow while you're asleep. So you just need a few sprites for the various growth stages of a tree, and it updates between days, so you'll wake up to find that the oak tree which was a sapling last night is now an adult tree. It's a weird convention, I guess, but it works just fine as long as you force the player to sleep every night. I really want to let the player sleep wherever & whenever they want, though, which poses a couple of problems.

First of all, events in time clearly can't be synced to the player's sleep schedule. There will be good reasons to work during the day & sleep during the night, just like there are in life (e.g. it's pain-in-the-ass dark at night), but I want the player to decide how they spend their time in the game. So, if I stick with my planned sleep system, I won't know ahead of time when a player will sleep or even for how long. I need another way for things in the world to keep track of time. What's more, I need to be able to speed up time when the player is sleeping, so time passing in the game world can't rely on a constant clock or on time passing in the real world like some always-on games (Farmville & so on) do. And everything in the game needs to be on board, marching in sync.

The other thing is, with this system, I can't have just a couple of sprites for different growth stages. I mean, I could, but it would be goofy if a sapling suddenly changed into a mature tree as you were walking by. I could just draw a bunch of in between sprites so the transition isn't so jarring, but, like, what a pain in the dick, I'm not going to do that. Even if I had a program interpolate the in between sprites, I would have to load all of those into the game, which would probably have a noticeable effect on loading times once I have all of the plants finished. So I need a better way.

I've finished a time keeping system which I think solves the first problem. It keeps track of time in the game world, updating a few times per (real world) second to move time along and call an update function which iterates over everything in the game world, letting the trees & everything else know that a minute or whatever has passed. Then the objects themselves, the trees & whatnot, use that information to take care of themselves. I can easily change how many minutes pass per update, so I can speed up the passage of time when I need to. So I have an acorn object in the game now that is born with a "time_to_sprout" property. Once planted, whenever the time keeping system tells it that some time has passed, the time_to_sprout decreases by that same amount. When the acorn sees that time_to_sprout is zero or less, it starts to grow a tree.

That still doesn't solve the problem of how to visually represent the tree growing in a smooth, gradual way. I've got a plan which I think will work, though, so that's what I'm working on now. Next post will either feature a nice forest growing from a bunch of acorns, or a hilarious glitched out mess. Should be good either way.

Thursday, November 10, 2016

Harvest Booze Update #1: A Guy In Overalls Walking Around a Field of Dirt

Well, I'll be damned.


A vast, procedurally-generated field of dirt, mind you (#NoMansFarm).

And don't worry, got the buggy infinite scroll wheel zoom working as well:


Ok, we're having fun again. Better give this dude some glitchy trees to punch, you think? Stay tuned, pals.


Wednesday, November 9, 2016

Project Codename: Harvest Booze

Yeah, haven't been making much progress on Haunted Monster Cocktail Party of Doom. I've got all the excuses locked & loaded, but really, I'm just not having any fun working on it. So I'll get back to it at some point, and in the meantime I'm getting started on something more fun.

Harvest Booze (that's a working title, officially) is pretty much what it sounds like; a Harvest Moon-like focusing on booze production. You'll farm crops for beer, wine & liquor, craft tools & machines, build Factorio-like production lines and manage a little tavern in the woods. I'm pretty sure you're a backwoods-type brewing beer for the anthropomorphic forest creatures, but maybe that will change.

I've been wanting to make a hardcore-ish automation-heavy Harvest Moon-inspired game for a while. I've got a ton of notes, but I've pared the design down to just the booze makin' parts, just to keep the project small enough that I might actually finish it. It's still the "biggest" game I've ever really thought about making. I know myself well enough to be skeptical that I'll make it past the "you're a dude in overalls walking around a field of dirt and you get stuck in walls sometimes and the game crashes when you walk off the screen" phase, but I'm feeling pretty excited to get working on it all the same.

I promise to let you know as soon as I get a guy in overalls walking around a field of dirt.

Thursday, October 6, 2016

Haunted Monster Cocktail Party of Doom Update #2: Ghost & The Mechanics of Possession

Which would be a sick band name, by the way.

It's taken me a lot longer than expected to get rolling on this, mostly because of school & work but also because I've rewritten the basic movement mechanics twice now. The system is, like, embarrassingly simple, & the first two systems worked fine, but I wanted a general solution that would allow me to easily add new movement patterns for different monsters. GameMaker code is always pretty quirky though, no way around it, so at some point you've just got to call it good enough. That point has been reached, apparently.

The Ghost is complete. (Also a sick band name). For now, the player starts the puzzle by placing the ghost on any empty tile, though I suspect that will change. Also, "play" and "puzzle" are being used pretty loosely at this point. Anyway, once placed, The Ghost can spend one move to travel any distance horizontally or vertically, and is allowed to pass through walls & other monsters.

Join with me in the comforting illusion that this hastily drawn placeholder art & complete lack of animation is not actually indicative of what the game will eventually look like:

This is an Inky spinoff Pac-Man prequel now.

Tiles that you're allowed to move to are highlighted in blue & tiles that you can attack are highlighted in red. I figured it was worth getting this working off the bat, there's nothing fun about having to memorize a bunch of different movement patterns. That's why chess is possibly the least popular game of all time? Too late to rethink opinions, buddy.

The Ghost is unique in that its attack doesn't actually kill the monster, but possesses it, allowing the player to take control of it. These placeholder monsters can't do a hell of a lot, but man are they ever happy to be here:


You can depossess (I guess?) a possessed monster at any time, either to land on an empty tile or to possess another monster, following The Ghost's movement rules, as shown above.

Next, let's get an actual monster up in the mix. First up is The Orcish Cowboy. It's got a projectile weapon, so it has to be a cowboy. But it can't be a regular cowboy, because of the name of the game. Orcs are monsters, right? STOP THINKING JUST DO IT.



Friday, September 23, 2016

Haunted Monster Cocktail Party of Doom Update #1: Basic Mechanics

I didn't get started on this until yesterday, but it only took a couple of hours to get a basic demo up & running. So far so good. So today I'd like to address the question burning in the minds of rabid fans and detractors alike: "What the fuck is Haunted Monster Cocktail Party of Doom all about?"

Well, calm down. It's a little grid-based puzzle game. You're a ghost in a room with a bunch of monsters, and for some reason you want to kill all of them. Also, apparently they are at a cocktail party. Look, I've gotta make this title work. The catch is that, as a ghost, you don't have any sort of attack abilities. But you can possess the other monsters and use their attack abilities against each other. So the goal is to clear the room of monsters in as few moves as possible.

The thing that I hope will make the game interesting is that in addition to having unique movement and attack patterns, the different monster types also have some action that they perform upon death. Like, maybe one explodes, killing any adjacent monsters, and triggering those monsters' death actions & so on. So you can be clever and chain multiple kills together in a single move.

That's it. I've basically got the ghost working, as well as one placeholder monster type. There are probably only going to be like 5 monster types, however many it takes to make interesting chains possible, but not so many that it becomes tedious to try to remember all of the movement and attack patterns.

Stay tuned for the next episode, in which I enthrall you with the movement and possession mechanics of the main ghost character. Gonna try to get some GIFs up in there as well, if making GIFs doesn't turn out to be too much of a pain in the ass. Probably going to be a pain the ass, though, right?

Tuesday, September 20, 2016

Potato Clock Games Fall Lineup Q&A

Q: Where you been, bro?
A: Stardew Valley.


Q: What up?
A: So, Ok, don't get weird about it, but GameMaker & I got back together. Sure, we had some bad times, but man, oh man, when it was is good is was good. Like that time there was a Humble Bundle where instead of paying like a grand for the pro edition & all the output modules I got them for 15 bucks. Good times like those.

I made Flood in GameMaker as sort of a warmup (always fucking warming up) and as a, like, 85% successful test of exporting to HTML5. The online version pretty much works, but you can't save your progress & all of the numerical values hilariously show up as NaN ("not a number", for the less nerdy out there) for some reason. Math? Probably math.

I'm going to start working, today hopefully, on another little puzzle game that I've been wanting to make for a couple of years now, called Haunted Monster Cocktail Party of Doom. FYI, I'm way better at coming up with titles and nebulous sequel/remake ideas than I am at the whole actually making games bit. Anyway, more on that one soon probably.

I'm also working on a long-winded, handwritten design document for the game that will make me famous. So stay tuned for that crushing disappointment.


Q: Wait, what?
A: SEE YA.

Wednesday, September 14, 2016

Release Announcement: Flood

Flood is a small, casual puzzle game based on the ancient Tibetan art of the paint bucket fill tool. Check it out at potatoclockgames.com!

Sunday, September 4, 2016

Space Wizard Ultra Demo Re-Release!

I have succumbed to the crushing weight of public demand and spent a few miserable hours figuring out how to to compile the old Space Wizard Ultra demo into something playable.

You know where to find it, baby.

Tuesday, June 7, 2016

Earthwood Preserve

Well, get your eyes checked, bucko.
Earthwood Preserve is a mod I made for EarthTongue by Erichermit. You can get EarthTongue on steam or at itch.io (where you can choose to pay in fan art instead of money).

I've released the mod on Steam Workshop and at potatoclockgames.com.

Saturday, April 2, 2016

Wumpus Bastards Update #3

Alright, Wumpus Bastards is feature complete, including a jankity online leaderboard. Lots of work left to do in terms of writing, CSS formatting and UI stuff but I'm at the point where I could quit & still have a game that I'm pretty happy with.

Probably just, like, you know, a week or so to go TM.

Wednesday, March 16, 2016

Wumpus Bastards Update #2

So web development, as it turns out, is a pain in the ass. Browsers rarely complain; it's probably part of the reason that the internet got so popular so quickly and it makes it hard to fuck up a simple text & images sort of website, but it also makes debugging a bit of a nightmare. Here's the sort of error message you usually get:
Just Google "WHY DOES NOTHING WORK WHAT IS HAPPENING IT'S JUST WHITE".
 Or, if you're lucky:

SHIP IT.
And debugging webshit is sort of a bubblegum & shoelace MacGyver kind of situation:

I finally spotted the missing parens while cropping this in mspaint.

It was more of a struggle than expected just to get a basic Hunt the Wumpus game going, but it's done. I've got quite a bit of new stuff in there, too; the biggest new mechanics are level exits, which open when you kill the wumpus & lead to ever more dangerous caverns, and a stamina gauge which decreases every time you move, adding a little more tension to exploration. I've added enough stuff that just about every room has something interesting going on, from cave taco oases to the classic instakill bottomless pits. Lots of UI stuff to go, balancing, that sort of thing. Probably like half done? Which means, like, 10%, you know.

Saturday, March 5, 2016

Wumpus Bastards Update #1

Had to take a Wumpus Bastards break to concentrate on another project for school; that project was another game which will probably morph into a Potato Clock Games title in the near future. I'm thinking of calling it Cockblockalypse. You'll just have to wait & see.

Anyway, now it's back to Wumpus Bastards. I have the next week off, so hopefully I can resist the siren call of Kerbal Space Program & get some REAL WORK done.

Monday, February 29, 2016

Introducing Wumpus Bastards

Hunt the Wumpus ranks right up there with Rogue as one of The Great Original Computer Games. As a kid, I played a bunch of the Texas Instruments graphical remake of Hunt the Wumpus on what, in my memory, was a Commodore 64 (though may have actually been a TI99) but it wasn't until quite recently that I played Gregory Yob's original masterpiece. As a dude who likes to draw his own maps in video games, I found the original text-based version to be quite a bit more engaging. Also, dodecahedrons. No offense to toroids, but I mean, come on.

Dr. Charles Owen, who is a member of my karass, recently assigned the HTML5/PHP implementation of a particularly Yob-like Hunt the Wumpus game in a web app development class I'm currently taking. Now I'm reworking the interface & rebuilding the game engine with plans to add in a bunch of additional gameplay elements to give it more of a dungeon crawly feel. There will be multiple levels with multiple Wumpus*, hence the working title Wumpus Bastards.

It feels like this bad boy is going to be finished in like a week, which probably means it'll be done in a couple of months or so.

* I really want to say 'Wumpii' or maybe 'Wumpuses', but if I'm being real, Wumpus feels like an invariant noun.

Friday, February 26, 2016

We're back, baby.

The Potato Clock Games team has put aside their fundamental religious, political & sexual differences, their seething animosities and their dark lust for the arcane wisdom of the ancient underworld to come together for a grand project, a king scheme, the realization of a plan hatched in a madman's fever dream:

Woe to the beast. Woe to its hunter.

"Failure is not an option."
-popularly attributed to NASA mission control Flight Director Gene Kranz but actually made up by some Hollywood guy.