New Site - Old Games Back Up

I finally uploaded my redesign of heroicfisticuffs.com and have started restoring some of my older games. First up are roguelikes from the 2012 and 2015 7-Day roguelike challenges, all browser-based and utilizing the amazing rot.js library.

RoboCaptain

RoboCaptain specializes in ranged combat and power-management similar the old X-Wing games. Looking back at it now it is pretty rough, but also very complete and still fun, which is saying something.

Heavy Axe

Heavy Axe is a small-scale classic roguelike featuring extremely tactical combat. Journey through the temple to slay the gods themselves, using a massively heavy axe. Moving with the Axe drains stamina, and stamina determines damage, so moves must be planned carefully to avoid running into an unkillable foe.

 Next up will be Dungeon Dual. This one is a bit trickier since I need to get the co-op engine running again as well as a django server that powered the leaderboard and login process.

Let me know if you run into any trouble playing either game.

I can't just kill you, can I?

One of my overriding design principles of Hardpointe is to keep the number small. Originally the rule was “nothing over 3.”

  • The player has a maximum of 3 hit points. The player can cheat a bit here and add 3 shield points temporarily using the shield power.
  • All regular enemies have a maximum of 3 hit points. For some enemies, this is a combination of health and shields, the later of which are usually temporary and also vulnerable to EMP grenades.
  • All attacks do 1 damage. There are no enemies that do over 1 damage. The player can add +1 to their damage by using a wall-smash, surprise attack, or the `hulk` effect.
I really enjoy the tactical decisions that these design choices enforce on the player. But they also force some tough decisions on me, the developer. 
When the player only is only ever 3 hits away from death, there is no room for taking easy (or “cheap”) hits at the player. Part of this is making information about battlefield as clear as possible. Another part is toning down the usual brutal mechanics that power my favorite roguelikes.
For example, in Hardpointe there are tiny nanites that effect the player when you step on them. You will see them, and you can use the HUD to find out what they do. But, there is always the chance of a player stepping on them accidentally. So, for that reason, there are no cases of ‘instant’ damage in the game. 
Corrosive nanites (orange dots)
Right now, the closest we get are ‘Corrosive’ nanites, which make the player (or any enemy) weak enough to kill in one hit – temporarily. This is a great advantage to the player if they can make use of them, but also not instant death if they are forced to step on a square, or they trigger the effect inadvertently while not paying attention. 
There are other nanites that will make the player temporarily invulnerable, or temporarily do +1 damage. Again, great advantages for the player, but getting terribly close to an instant-death situation if an enemy steps on them and the player does not notice. 
Enemy changes color as a warning*
In this case we turn the monster a different color when they are either invulnerable (as the player is in this gif above after stepping on the neon green nanites on the left) or `Hulked Up`, after stepping on strengthening nanites (dark green on the right). There’s also a HULK power that the player can use but I think it is a bit overpowered.

(* don’t worry, I made the color change more dramatic once I saw this in GIF form)

A long-dormant chunk of code in Hardpointe deals with radiation and fire as features. Since in most games fire does damage, I’ve not yet come up with a good way to add it that does not seem unfair. Radiation is a bit different – it will not kill you instantly, but will start a timer on the player. If you don’t get out of the irradiated zone before the timer ends, you will take 1 damage. This seems like a good trade-off. There’s also a HAZMAT suit power coded up that I can make use of some day and add specialized rooms or levels where the player will need to sacrifice a power to make it through unscathed.
In summary – I can’t promise not to kill you. But I can promise that you will see it coming.

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.