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.