Design Goals - How am I Doing So Far?

When I started Hardpointe as a 7-Day Roguelike nearly two years ago, I posted some design principles. Since I’m well past the point of having a fun and playable game, let’s see how I did:

Tactical combat built from fun mechanics

Check. The combat is still very fun to me, and has gotten more tactical with the multiple enemy types. The wall-smash has remained fun since day one. Dashing is always fun. The shield mechanic was mostly a no-brainer in the original version. Now since every use is limited by a timer, even using the shield feels a lot more tactical to me. The knock-back effects still never fail to bring a smile to my face, so I think I’m on the right path here.

The BATT knockback effect

Interesting enemies, with behaviors that match their abilities

Check. The original version had 2 or 3 enemies. Targetbots attacked from kept their distance, making them extremely deadly in a game with such limited hit points. Since then I’ve tweaked the behaviors for ranged enemies to require target locks. This essentially gives you an extra turn of warning before you’re about to get shot, which is a fun mechanic. It feels right at home with the other enemy abilities and behaviors. Killbots were your standard stand-and-smash melee enemies – not much has changed here, but they are still the rare pure 2-hp enemy. BATTs were there from the start as well, but now they knock everyone backwards when they die, which can be dangerous or advantageous.

I’m up to at least a dozen enemies now. They DO all have a unique combination of behaviors and abilities (e.g. you’re not mildly tougher flavors of Orc). Enemies that explode into other enemies when they die. Enemies that summon other enemies. Enemies that create shields around their allies. This is something I’ve purposefully stuck to and been inspired by Brogue quite a bit. In fact I’ve had to cut myself off from coding new monster behaviors since I think I probably have too many at this point and I’m still not sure how ‘large’ the game world should be. I want to be sure there is enough room for a mix of all of the different enemy types.

One area I’ve had some fun with is creating ‘boss’ enemies. Where I take a look at the abilities I’ve coded, and figure out if there’s a weird way I can combine them and make a tougher bad guy.

No numbers over 3

Check (mostly). Hit points and damage all still use numbers under 3. As of now, every enemy attack does 1 damage, and there are only a handful of ways for the player to do more than 1 damage. Since the powers and abilities became less binary and more dependent on timers, there are now plenty of cooldown numbers higher than 3. But I’ve kept them at multiples of three as a way to pay homage to the original concept.

Minimal buttons/input keys

Check-ish? I’ve gone back and forth on this one. After some great feedback from Widmo on r/roguelikedev after my v0.3 update, I ripped out a lot of the menu-driven inputs and related functionality and put in a ‘radial menu’. This has allowed me to keep the number of separate keys necessary to a minimum. So I have one key (SPACE/Action) that can trigger any of the following: rest/wait (usually), heave wreckage (2nd most common), install a power, use a warp beacon, read a note. So far the radial menu feels very non-intrusive to me. When I’m standing on some wreckage, waiting for an enemy to get closer, hitting a double-tap of the spacebar to wait once or twice is very efficient and doesn’t take away any of my focus.

It’s up in the air whether people actually use z (on-screen HUD) and x (examine tile), or if just one is enough.

One other area to consolidate is probably the inventory (e) and power management (q) keys. Maybe another radial menu? I do like the idea of inventory being completely on-screen, but it also can get messy quickly. Menus may be a necessary evil in this case.

The radial menu in action

4b: playable with a gamepad

Not yet. But I do have lots of placeholder code in place ready for when I dig back into how to get gamepads working over the browser. I did it once before for my 2015 7DRL ‘Heavy Axe’, so I know it’s possible and relatively simple. I also assume compatibility has gotten better since 2015.

Give me the 30 second version

“So, what’s it about?”

I’m probably mis-quoting Darren Grey here, but it’s close enough. I was in London for a visit last year and while I was there I decided to look Darren up. I’ve been a big fan of his for quite a while. We’ve run in the same circles online, from the old rec.games.roguelikes.development (RGRD) to rogue temple and all of the incarnations of the 7-Day Roguelike Challenge to the current rogue-reddit “scene” at (r/roguelikedev and r/roguelikes). He also writes some great games – he’s done a lot for the community.

So of course I was excited to meet him in person. And of course we start chatting about development, what are you currently working on, etc. Turns out being a new dad is not so condusive to programming, but I had been continuing to develop my failed 2017 7DRL Hardpointe. That’s when I get the question: “So, what’s it about?”

Oops. I didn’t have a smooth or particularly convincing answer. Something about tactical combat, maybe?

A few months later, here was my first definition:

Hardpointe is a “medium” sized roguelike with a focus on tactical combat and movement. Managing a limited set of powers, upgrades, and items will be critical to your success.

Here’s my 2nd try:

Hardpointe (name subject to change) is a browser-based roguelike with a focus on tactical movement and finite resource management. Players have 3 power slots that can be upgraded or swapped out as luck and necessity see fit. Combat is deterministic and the numbers are small – almost all attacks do 1 damage and almost nothing in the game goes over 3 hp. (With 1 or 2 exceptions). There are no real ‘vanilla’ enemies. Fighting 1-on-1 is usually easy, but difficulty can scale quickly with multiple foes.

Maybe somewhere in between?

Hardpointe is a browser-based “medium-sized” roguelike with a focus on tactical combat and finite resource management. A lone soldier must infiltrate and destroy an asteroid fortress filled with robotic hordes bent on Earth’s destruction. You will harness unique powers, abilities, and an assortment of weapons that you find along the way. Each enemy has unique abilities and behaviors that will require different strategies. Combat is deterministic and health is extremely limited; positioning and thoughtful movement will be your keys to victory.

How’s that? (They keep getting longer… oops.)

Hardpointe still alive

Despite my lack of posts and entire blog going offline for a bit, I continue to develop Hardpointe in my “free time”. Progress did stall for the last half of 2018, but seeing all of the posts around 7DRLs earlier in Feb really pushed me to get back into making progress.

A lot of work has been behind the scenes since the last version. I did a lot of work to add a ‘radial’ menu. In an effort to reduce on-screen distraction and the number of button presses, when there is an ambiguous action, the radial menu pops up, and the available options always show up in the same spot. (e.g. ‘Heave’ is always the up key) It makes for much smoother gameplay.

Enemy AI was also changed to make them less omniscient and more cautious about doors. There was an annoying habit for  enemies to “wait” behind doors and punch you right as you walked in. This wasn’t really by design. Now enemies take a turn to go from non-alert to alert statuses. So if you walk into a room and they DO happen to be behind the door, they will act surprised for a beat. That gives you an opportunity to attack, back away, or do something else.

I didn’t do any power switching in this video but that menu has been streamlined as well. You can now just hit space + <slot to replace> and not have to page through multiple screens or even read anything if you don’t need to.

Here’s me dying on the 1st level because I messed up a dash somewhere and got hit. In a 3-hp game you really need to pay attention to every single hit. Apparently I’m a bit rusty.

Hardpointe version 0.3 released

Latest version is now playable in the same spot.

New for version 0.3:

  • start menu, including daily & weekly seed generation
  • revamped the death & victory menus
  • fixed a few menu bugs (especially on death & victory)
  • added occasional monster spawning 
  • added end-game monster setup for the fight back to the surface
  • changed SHIELD power to also have a timed component
  • improved PHASEWALK power so that enemy attacks now go ‘through’ you – and hit other enemies
  • improved CLOAK power to trigger ‘surprise’ attacks (+1 damage) 
  • better handling of ending timed powers (shields, cloak, phasewalk), along with visual animation when they end
  • added a dedicated key (e) for wait only (useful in a few situations when using Space/Action can trigger the ambiguous input menu when you don’t want it to)
  • Shielded enemies now more intelligently turn on their shields
  • fleeing enemies will not run away forever – eventually they will recover and resume hunting
  • better names and descriptions for blasters
  • Added a new kinetic blaster (knockback effect)
  • Made the Archon a bit tougher (can no longer be stunned or hacked)
  • enemies knocked back into walls are briefly stunned (so you can set up wall attacks)
  • added a score stat, although it doesn’t track anything yet
  • fixed targeting bug that made it too easy to throw grenades and wreckage onto yourself

Next version progress & Phasewalk

Spent some development time beefing up the Cloak and Phasewalk powers. Cloak is fairly straightforward, but I wanted the enemies to react a little better. Instead of immediately giving up, they will move towards your last location. This means you can easily predict their movements and set up traps for them.

Attacking will remove your cloak, but also add +1 damage, which enables you to take out the tougher 2hp enemies relatively quickly — assuming you have a Cloak charge to spare.

Phasewalk has been in since day 1 – I initially added it as a debugging feature so I could walk through walls, and thought it was a pretty fun mechanic. Now it gets a bit more useful. When phased, your attacks won’t do any damage, but enemies can still attack you. Their attacks will pass ‘through’ you and hit anyone behind you.

This works for ranged attacks:

And melee:

I’ll roll out this version pretty soon. Meanwhile the game is still playable here.