Monday, June 27, 2016

Hammer devlog 31


Title logo w/ animation, working title.

Also: level loader! I can load the player in at arbitrary coordinates within an arbitrary level - just point to a set of room coordinates on the target map and an entry point within that room. Totally seamless. This is important to have in place, given how I intend the world structure to work.

I'm rapidly reaching the point where I'm going to need to start looking seriously at doing more detailed systems balancing and designing actual content.

I haven't written a design doc yet, because I was just doing prototyping up until now, but at this point I have a firm enough handle on things that I'm going to have to do that. Uh, well.

Friday, June 24, 2016

Hammer devlog 30


Testing a more feature-complete take on the in-game menus.

The System tab will eventually let you respawn immediately, open the options menu (this is the entire reason that the options menu is decoupled from everything else on the title screen to the extent that it is - I want to be able to prefab it, drop it in, and have it pop up here), exit to title, or quit to desktop, but right now it does exactly none of that.

The gear tab is still very much incomplete - you should notice a bug in this gif!

The weapons tab is nothing new, although that horrible background is gone now, so that's nice.

This is a new font; it's probably not the last font I'm going to try, because I'm not that thrilled. I can get really nice rasterized rendering out of it, but it's not as legible as I'd like.

Wednesday, June 22, 2016

Hammer devlog 29

I have been very busy today, but mostly because I decided to say "fuck it" with my homegrown input manager, suck it up, and implement the old-ass free version of InControl. There was, in fact, much less headache in dealing with the lack of updates than I'd expected there - literally, the only thing that's come up right now was a single one-line fix. And that'd still compile; it was just a deprecated thing that spat complaints into the console window.

But I did do one more visible thing. It wasn't actually a lot of work - just gluing some things I'd already done together - but cool features that come for free because of good development practices are the best kind of cool features.


Nifty little blizzard effect. Not too overstated, but it doesn't compromise visibility too much and it makes the outdoor areas of this test map (since I'm probably gonna recycle some variation on this tileset when I get to doing actual content) look a lot nicer. The heavy lifting's done by the generic scrolling-layer-looper thing I'd already done; the only new things here are the blizzard graphics and the FX layer thingy that makes sure the scrolling layer is only active if you're in (or entering) an applicable room.

Sunday, June 19, 2016

Hammer devlog 28

Took a break from horrible boring menus and behind-the-scenes data management because I was going to put a pair of scissors through my temple if I kept that up. I felt like an application programmer, except I was trying to build my application in Unity and the UI tools were off limits. It was like living a nightmare.

A nightmare I still have to go back to, mind you, because that shit's not nearly done...

Anyway, though:


Ledges! You can hop down them. They make a hoppy sound. For some reason the hoppy sound doesn't show up in the gif, and I can't seem to make it no matter how many times I try. Why does the jiff specification not allow the embedding of hoppy sounds?

Also visible at the end of the gif: I fixed up the way player hit detection works a little bit. Hit anim is nicer, stun is less obnoxious, and you carry more useful i-frames out of a hit.

Monday, June 13, 2016

Hammer devlog 27

Oh, right, another thing:

One of the passive upgrades is something I've had an inkling about for a while, but I haven't really been clear on how it'd work. I like the idea of having autoscrolling rooms, you see? I thought it seemed like a fun genre changeup that still maintains enough of the main gameplay loop that autoscroll rooms are a "change of pace" without feeling disconnected from the rest of the game in a mechanical sense. You still have the same character, same resources, same controls; it's just that now you're trying to fire and maneuver as you're whisked from point A to point B at a breakneck pace, instead of putting those tools to use in the more cerebral game about space control and pattern recognition that the "standard" combat is.

"Cerebral" is a relative term, of course - because combat is never exactly slow. I love Dark Souls to death. I even tolerate Dark Souls II, mostly for its DLC. I haven't been able to buy Dark Souls III yet on account of being broke af, but I'll probably like that, too! But I'm bringing these up because, while there are definitely some Souls-y aspects to this game, they also offer a really useful contrast as far as pacing goes. Dark Souls wants you to watch patiently, avoid going in half-cocked; it's a fairly gentle game moment-to-moment that finds difficulty to allowing your mistakes to accumulate. Hammer does not do that. Hammer is the kind of game where if you're doing perfect for 90% of the battle and then you spend a couple seconds dropping the ball, you're dead. The player is much more powerful relative to foes than they are in Dark Souls because they have to be - you're expected to perform with speed, efficiency, and precision in equal measure. But the nature of playing efficiently does preclude the purest sort of reactive arcade action - the energy system will punish you for tackling encounters without a gameplan, right? You have to prioritize targets and use space to maximize your own opportunities for offense while minimizing the times at which you're exposed.

Autoscroll rooms, then, are a "different" kind of shooter: pure bullet hell, fast enough to make ground combat seem kinda pokey, with much more emphasis on simply... reading stimuli and reacting to it. No level terrain, no cover, no hazards or obstacles - just you and wave after wave of foes, and your goal is just to keep yourself alive until you're automatically delivered to your goal. The situation is too fluid to make a plan that'll do you a damn bit of good, and while there's less mechanical complexity here it can be difficult to stay alive in spite of that just because of how fast everything is shifting and changing.

I don't want autoscroll rooms to be a frequent thing, mind you; they should be a fun, kinda stressful break from the more standard gameplay rhythms. Equal parts refreshing, even relaxing - you're not expected to be working out battlefield tactics with bullets flying at you from all directions; you have exactly one tactic, "dodge things, fire at them," if you get into the zone it should feel kinda Zen - and harrowing. You're having a blast the whole autoscroll interlude - let's say we want these to be about 90 seconds long on average - and then you're really glad it's over.

So basic gameplay rules of an autoscroll room:

a) you're automatically pushed forward along a "room" without room collision at considerable speeds. You can maneuver freely around the screen with the same controls you'd use for walking.
b) enemies fly in - mostly, but not always, from the same direction you're moving in. These are fast-moving, somewhat more regular in their patterns than standard foes so as to be easier to read, and typically very deadly and very frail. You're going to have great difficulty taking more than two hits and surviving, in most cases, but you can also kill something with basically whatever weapon feels good, and the free flow of energy lets you be cavalier with expensive things that you normally have to be much more reserved about playing with.
c) the bottom of the screen has a progress meter - literally, a track representing the total length of the autoscroll room w/ a player icon that moves from one end to the other; you know exactly how much longer you need to hold out at all times, which can be both reassuring (just a little longer) and really harrowing (FUCK I AM GOING TO DIE LIKE FIVE FEET FROM THE END OF THIS STUPID THING FUCK)

As for the role autoscroll rooms play in larger game structure: well, I think I'd be remiss if I didn't take advantage of the obvious fact that, given the Metroidvania aspects of this game, you're going to notice that 90 seconds of autoscroll is a long fucking room. That's enough to cross a huge amount of space.

So: autoscroll rooms act as quick transport between outlying regions. An autoscroll room is mechanically and aesthetically "other," compared to the more standard gameplay types, and it takes place in a space which suits that. When you enter the autoscroll area, you're shunted off into a... "tunnel" or "wormhole." Aesthetically, I like the idea of rendering this by actually using a garbage mix of tiles from the two connecting regions, with each "side" of the autoscroll room having greater quantities of tiles corresponding to its associated region. You're poking a hole in the world and speeding through a space that doesn't behave by the same rules to get where you're going - so working with my Game Boy aesthetic, a "glitchy" garbage screen (think the g1 Pokémon games'"glitch cities" for a quick idea of what this looks like) is an effective way to get that concept across.

You never have to enter an autoscroll room to get where you need to go, but it might be the most efficient path. World design rule here: there should be a back way into any space of any importance. If you need to get somewhere, there should never be a scenario where you don't have multiple options, either in the tools you use to get there or the path you take. So, from this angle: anywhere you go using the autoscroll rooms is still connected to the rest of the world, and you could get there without ever entering the autoscroll, if you wanted. But being comfortable using the autoscroll mechanics as a means of getting around can be useful. You might, for example, be able to dive just a little bit deeper into a space you've already made some decent progress in, find an autoscroll entrance, and come out deep into a region you haven't really touched yet, really close to the boss! Exploration is rewarded - and since autoscroll rooms are difficult challenges located at far reaches of the world, tied to a hard-to-obtain "key" item, the rewards you can get out of taking that leap can be huge. This falls back to boundary-crossing as a theme - entering the autoscroll room is choosing to "cross over" and take a step into the unknown. You either die or you get spit out somewhere interesting.

Narratively, then: keeping in mind the sort of thematic content and aesthetic language I've been working with, and the role these spaces play, I feel like it works really well to have the autoscroll rooms situated in a "world of mirrors." Literally - each autoscroll is the non-space that connects a pair of arcane mirrors located in the world. We'll call these looking glasses - devices dating back to times long since faded from memory, constructed to allow their masters to keep perpetual watch on... something. Built in pairs at spatial extremes - a great mirror and a sentinel's seat; each sentinel keeping vigilance over their own station, their counterpart's... and each other. But now the seats are empty, the mirrors dusty and forgotten, and whatever they felt it was so key to keep watch over can no longer be seen.

The key item that you hold to gain access to these spaces: the Sentinel's Mask. Again, we're just trying to go for broad strokes right now; tone, themes, important images - let a more coherent narrative emerge naturally from these concepts. So, the Sentinel's Mask - the cursed mask of one such sentinel who fled their duties. Whatever they saw during their watch broke them; they abandoned their post, and with it the ceremonial mask that these sentinels used to hide their individual identities from their counterparts. The mask of dereliction of duty is an affront to whatever power enables the looking glasses to function. When it's brought into their presence, they shatter instantly to deny the traitor their use. But there's a perverse kind of usefulness to this thing - because while it does mean that you can't see the looking glass's destination any more, you can also step through the broken mirror and emerge on the other side.

Hammer devlog 26

Most of what I've been doing this week hasn't been particularly visible.

But here's a gif of something that's subtle but definitely there:


So part of the big input rework that went on here involved fixing the shitty, janky way the analog aiming behaved before. This isn't perfect, but it's much nicer-feeling; the reticle moves reasonably fast if you need it to, but there's enough of a curve to its move speed that you can make minute adjustments by gentler motions of the stick.

Monday, June 6, 2016

Hammer devlog 25

Let's talk about what happens when you hit that New Game option anyway, though.

Here are my immediate goals with the opening sequence:

- establish player's understanding of mechanical fundamentals well enough that I don't need to lean on further tutorials, and can trust they have the baseline competence necessary to navigate the world and respond to challenges
- establish tone - surreal, otherworldly, dreamlike, but unmistakably hostile; an initial "crossing over" that establishes that whoever your character was before is unimportant, that what happens from here is what matters, and allows the player to inhabit that avatar without really feeling burdened by preconceptions about what that character is supposed to be
-provide initial goal of game progression: kill three bosses at extremes of the world, take their monolith fragments, bring those to the stone circle; establish that this is probably a bad idea and rely on player curiosity and the drive to make progress to see that happen anyway

I don't exactly have a fully-formed narrative here, but I have some scattered ideas, and this is what the opening needs to do for those.

Mechanically, I want to start the player off without a single weapon. Mobility is paramount and that needs to be the first skill you learn. Once you've got dodging down, you acquire the starting pistol, and you can start to fight back against things and learn those mechanics.

Navigation is also an important skill to teach here. The world is sprawling and interconnected, and not every path is visible right away. So this intro area needs to be complex enough that it requires you to put some genuine thought into getting around and moving toward your goal.

So here's the basic script: player starts in a safe room, given the narrative suggestion that they're fleeing... something. Not just "something"- something that you've earned? A miserable fate that you've got coming, but somehow you've wound up here instead. Details aren't really important right now, just tone. This is a room with a gate, and when you cross the gate you wind up... somewhere else. For now, let's call this area the Oubliette. Basic concept - it's a purpose-build tutorial level that mixes the three main regions' tilesets, switching it up from room to room and giving you a sampling of the kind of places that exist in the game world. A surreal, disconnected, nonsense space; something that makes it clear that, whatever happens, you can't go back - this place physically should not exist, and even if you can cross over one way there's no reason to think that something so capricious can be treated like a "normal" space, that it's the same thing whether you're coming or going.

You enter the Oubliette, you're immediately beset by enemies. You're unarmed and things are still pretty linear right now; you wind up just making a mad dash "forward," naturally learning to use the dodge roll because it's the only thing you have to keep yourself alive. This teaches you - the timing, the spacing, the i-frames, and since you will take hits, it also encourages you to learn to work with the dodge regen and use that to stay alive. You cross the length of the Oubliette and wind up reaching another safe room, which contains a checkpoint thingy (because you should die when you first start trying to handle combat, and this teaches you that death isn't that big a deal) and the starter pistol.

With the starter pistol, you can leave this room and start fighting the things that you were fleeing - very basic, easy foes. After making your way a few rooms back, there's a cave blocked by a destructible barrier, and the pistol enables you to enter that; this cave is a fairly short area, but it lets you make your way onto the upper level of the room you entered the cave from, and from there you can explore "backstage" areas of the other Oubliette chambers until you make your way to an unfamiliar room. The foes here should be a bit more complex, but still very manageable; the goal should be that you impress yourself by not dying in this fight. It does, however, instill in you an appreciation for the advantages offered by proper control of space and target prioritization, and it makes it clear that the best possible move if you're in a tight spot is "kill literally anything."

After this slightly steeper challenge, there's a very simple puzzle. This space feels a bit more "definite" from here on out; you enter a room with a valley that's spanned by a clockwork bridge which is currently unusable, and you have to turn interconnecting gearwheels to try and get each of the separate platforms that constitute the thing to be in the down position at the same time. From here, you go through a largeish room without any real enemies or puzzle elements or anything - just an atmospheric space that's supposed to get you relaxed, get your guard down; the intro's gone on long enough now that you're probably feeling like it's gotta be about over, and you did a harder fight and then opened a "door" back there, and this area feels different from the earlier ones, so there's probably, like, a cutscene or some shit?

End of this room, cross into the next: you're shut in a tight space with an endgame enemy. It wrecks your shit. You come to, washed ashore on the beach in the starting village; a set of cutscenes follows that gives you your first energy-consuming weapon and your first Taboo, then sets you loose on the world.

Mostly unrelated: Thinking it over, I'm gonna kill the minimap. I'm glad it's a horrible broken piece of shit, because that's prompted me to ask why I have a minimap. But in truth I really don't need it, and I think I can produce a stronger game without it. Navigating the world is a skill the player needs to develop, and for my part as the [LITERALLY EVERYTHING] I need to design a world that's navigable; that's, if complex, comprised of distinct, memorable spaces that intersect in ways that make intuitive sense - no identikit corridors; every room is distinct. The minimap would only serve as a crutch to let me get away with inferior world design, then; it's going.

Hammer devlog 24


Fixed up the shitty shading on those clouds a bit, cleaned up the scrolling code, added the animated FG elements to the title screen, and did a proper title menu.

I dunno what "Extras" is, but I figure I'll probably cram something there.

Exactly one of these options does anything right now, and I'm sure you can guess which one! The others just play a NO YOU CAN'T DO THAT sound effect.

The only way to actually go from title screen to gameplay, at the moment, is by leaving the title menu and hitting the primary fire button to trigger the separate debug start. But I can totally get the submenus in place now!

Although New Game would require actual content development and Continue would require both content and a save system... so, uh, Options is probably gonna be the only thing that works there for a while.

Sunday, June 5, 2016

Hammer devlog 23


Title screen with some ugly placeholder art.

I actually went ahead and did this because I was really dreading trying to get a smooth scrolling background working in Unity - expecting lots of pixel-warping and related jank.

In actuality: it was really easy and it worked fine the first time. Always nice when that happens, I guess?

I guess if this is in place, it might be wise to actually start on some front-end menus and shit, huh? I mean, at the very least, I really need to get the control config menu working now so I'm not changing a bunch of hardcoded values to test different control schemes, lol.

Hammer devlog 22

edit: If you look at the gif in this post, you might notice a bug with the reticle! That's already been fixed.
Took a bit of a break because I was wanting a bit of time to digest some design issues.

Result of this was a pretty massive rework of how dodging functions; feels a lot better now, and the code's all pretty to boot. But that's kinda hard to show off!

Tonight, though: much more interesting-looking things were done!


So what you see here is:

- the beginnings of the passive upgrade item system - there are actually two upgrades in play here. One of them is a passive thing that just gives you faster dodge rolls that can cover more ground. The other is the fireball dodge thing that you see here - instead of just dodging safely through things, you're engulfed in flame and fuck up anything that gets in your way.

That being said, that powerup really isn't balanced at all right now, lol. The basic rhythms of combat rely on the idea that you have to burn through your life to do real damage to things; the dodge fireball is an effective offensive option that doesn't consume any energy to use! And it can't be made to consume energy, because the attack is attached to your dodge. It does compromise your spacing, but when you're blasting around the screen in your copious i-frames and murdering shit by charging through like a meteor "compromises spacing" isn't really much of a trade-off. Probably, what I'm going to do is change the behavior of that upgrade so that you only burst into the full, damage-dealing fireball during a very small window within the dodge animation. Make it effective, but really squirrely, and high-risk/high-reward because if your spacing or your timing is off, you're probably gonna wind up in an enemy's hitbox right after your i-frames wear off - so it's less "why even bother with guns" and more a free source of damage during normal maneuvering that can also enable some really bold last-ditch plays if you're in a bad spot.

- gamepad support.

I do not have first-class Wiimote support, although thinking it over I don't think that was a joke, which means I am actually going to make that happen at some point.

This is just XInput gamepads!

I've got a neat new input manager set up, so now I can just refer to specific virtual buttons and let that decide whether I mean keyboard keys, gamepad buttons, or joystick axes.

The cursor is being controlled with the right stick here. It's kinda fucking terrible! Admittedly, the right stick will never really be adequate - this is a floating cursor game as opposed to a twin-stick game; being able to track foes completely independent of your movement is a pillar of the design; that won't and can't change - but even considering that, this could definitely feel a lot better, and it needs to.