Heroic Fisticuffs!

Here's a place where I talk about games, applications, websites, and other things that I make for fun. Mostly roguelikes. And robots. Since my domain is hard to spell you probably came here on purpose.

Site back up (again)

If you're reading this, great! My old site & games all went down because I did not migrate them over when webfaction shut down. (oops) 

HeroicFisticuffs.com is back up now.

I've switched the blog to Ghost, hosted at the same place: blog.heroicfisticuffs.com. So, watch there for any new content. I will leave this blogger content up because I hate dead links.

The main page and Warning Call and a few older games (Heavy Axe, RoboCaptain) are back up. Dungeon Dual is going to take a while, because django has moved on quite a bit since I last touched it.


Dungeon Dual is back!

Dungeon Dual is back online! This was my 2014 7-Day Roguelike and probably my most popular successful 7DRL to date.



Unfortunately I lost the domain and a lot of the web pages for some of my old games earlier this year due to myself being a dummy. I was able to bring RoboCaptain and Heavy Axe back online relatively easily.

Since it has co-op multiplayer, Dungeon Dual was a little trickier. It's also entirely written in CoffeeScript, which I have not touched since switching to TypeScript a few years ago. There's also a WebSockets server that handles the back-and-forth between the two players.

In any event, after a long afternoon of hacking, the original 7DRL version is back online in all of it's... glory?

It definitely plays a bit rough, but I must say I was rather surprised at how fun it was. It was cool to see a lot of that old gameplay working again. (like banish! which is still insanely overpowered)


Version 0.55 - Tutorials and More

I've put the latest version (0.55) of Warning Call here.

The bulk of my time has been spent building a tutorial level. It's not done yet, but it's accessible from the start menu. More to come here - I've never written a tutorial before so it's an interesting challenge. All of the feedback I've gotten from the kind devs on r/roguelikedev has been helpful in seeing the game in a different light.

Major changes from the last version include:

  • Removed Targetbots (t) from the first level
  • Fixed bug where Empowering and Ammo-generating nanites would not allow power usages if you had zero charges.
  • Enforcing same hotkey press for powers & confirming target. This makes it easy to double-tap a hotkey when targeting quickly. This also allows you to return the Axe using the same key that you threw it with. (pro-tip: you can have more than 1 Axe power installed at once!)
  • Made sure Warp Beacons cannot be trapped behind impassable terrain
  • Gridbots (x) no longer get stuck in the wall when they explode out of a Xenobot (X)
  • Put the Power menu as the first line of the footer
  • Added the SEED # to the header (mostly for help in bug reporting, but eventually for game-sharing)
  • Spread out the guaranteed powers on the first level - the starting room was way too cluttered
  • Fixed mysterious game-crashing bug with 'empty' nanites spawning on the ground in deeper levels
Feel free to post comments, bugs, and feedback below, or on the reddit link above. Or e-mail me: todd AT (this domain).

Latest Version of Warning Call (aka Hardpointe) online


The latest version (0.5) of Warning Call is here. (I changed the name from Hardpointe, but the game is the same). If you have commentary leave it on reddit here.



A full list of changes since the last playable version is below. Thanks, and enjoy!

From 0.5:

  • On-screen radial menu replaces 'ambiguous input' menu:
    • Makes it simple to double-tap space to wait when standing on wreckage
    • Can no longer escape out of radial menu
  • Interface updates:
    • Warp Beacons and Airlocks are highlighted when not in view
    • Significantly expanded HELP content
    • Better item and power descriptions all around
    • Cycle between enemies while targeting with 'e'
    • Inventory is sorted more usefully
    • Power install menu has better shortcuts (allows player to quickly tap SPACE + # to install a power into a given slot)
    • Grenande targeting shows area of effect
  • 3 new nanotech types (found as items and on the grid): 
    • Recharging nanotech (temporarily makes all power uses 'free')
    • Reloading nanotech (temporarily makes all weapon uses 'free')
    • Strengthening nanotech (temporarily adds the HULK effect and +1 melee damage)
  • New enemies:
    • Gridbot (1-hp enemies that always appear in pairs)
    • Xenobot (explodes into gridbots when destroyed)
    • Megadrone (constructs mini-drones out of nearby scrap)
    • Protectobot (casts shields onto nearby allies)
    • Interdictor (able to see cloaked targets and use a displacement field to cancel PHASEWALK and CLOAK effects)
  • Ability to 'sacrifice' Warp Crystals to double SCORE
  • Enemies take damage when falling through chasms
  • Different icon for weapon powers vs. ability-based powers
  • Better distribution of grenades, powers, and nanotech items 
  • More wreckage distributed across levels
  • HACK effect is now temporary, and scales with power level
  • PHASEWALK is now more liberal when calculating if a ranged attack goes through you and hits a nearby enemy
From 0.35 and 0.4:
  • Power level is now tied to how long (or far) powers last 
  • Lowered the base duration of most power effects (but they now scale with level)
  • Warp beacon menu improved and text made more helpful
  • new HULK power that temporarily adds +1 to melee attacks

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.