tag:blogger.com,1999:blog-19333196081322027882024-03-05T03:29:29.919-05:00Heroic Fisticuffs!Here's a place where I talk about games, applications, websites, and other things that I make for fun. Mostly roguelikes. And pirates. And robots. Since my domain is hard to spell you probably came here on purpose.Heroic Fisticuffs!http://www.blogger.com/profile/03029243155199220725noreply@blogger.comBlogger95125tag:blogger.com,1999:blog-1933319608132202788.post-66857131631941154232021-01-30T14:59:00.003-05:002021-01-30T14:59:30.248-05:00Site back up (again)<p>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) </p><p><a href="http://HeroicFisticuffs.com">HeroicFisticuffs.com</a> is back up now.</p><p>I've switched the blog to Ghost, hosted at the same place: <a href="http://blog.heroicfisticuffs.com">blog.heroicfisticuffs.com</a>. So, watch there for any new content. I will leave this blogger content up because I hate dead links.</p><p>The main page and <a href="http://warningcall.space/">Warning Call</a> and a few older games (<a href="http://heroicfisticuffs.com/pages/heavyaxe/">Heavy Axe</a>, <a href="http://heroicfisticuffs.com/pages/robocaptain/">RoboCaptain</a>) are back up. Dungeon Dual is going to take a while, because django has moved on quite a bit since I last touched it.</p><p><br /></p>Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-29999964868840369282019-08-17T13:33:00.000-04:002019-08-17T13:33:14.959-04:00Dungeon Dual is back!<a href="http://www.dungeondual.com/">Dungeon Dual</a> is back online! This was my <a href="http://www.roguebasin.com/index.php?title=7DRL_Challenge_2014">2014 7-Day Roguelike</a> and probably my most popular successful 7DRL to date.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLTH3gFmw8dvH438CBEUg3VU8aDo4Nwtrj7B63OQrSORIhmt9sVQnD0TJIz9Bv-7kkZwzRZh0MmcsB4Y4RBFoHOhQkLxi0KCkjfm0YMnb88foHx4sEEpcDa3dE7f_OKkG9cYLnXk38F3M/s1600/ddual2019-01-banish.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="461" data-original-width="760" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLTH3gFmw8dvH438CBEUg3VU8aDo4Nwtrj7B63OQrSORIhmt9sVQnD0TJIz9Bv-7kkZwzRZh0MmcsB4Y4RBFoHOhQkLxi0KCkjfm0YMnb88foHx4sEEpcDa3dE7f_OKkG9cYLnXk38F3M/s320/ddual2019-01-banish.png" width="320" /></a></div>
<br />
<br />
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 <a href="https://heroicfisticuffs.com/pages/robocaptain/">RoboCaptain</a> and <a href="https://heroicfisticuffs.com/pages/heavyaxe/">Heavy Axe</a> back online relatively easily.<br />
<br />
Since it has co-op multiplayer, Dungeon Dual was a little trickier. It's also entirely written in <a href="https://coffeescript.org/">CoffeeScript</a>, which I have not touched since switching to TypeScript a few years ago. There's also a <a href="https://www.tornadoweb.org/en/stable/">WebSockets</a> server that handles the back-and-forth between the two players.<br />
<br />
In any event, after a long afternoon of hacking, the original 7DRL version is <a href="http://www.dungeondual.com/">back online</a> in all of it's... glory?<br />
<br />
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)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpK-nFQfgjcTedsFooiAoFujrHWK2I35frBm0wCBSjzaMMydpWHSkVuDhqp8r3co2SyUq8xa2bf5NhekPEvoHbsyBY8icluPddPXC-nZ3R8zLTtbatnHJv0wyDgJMVMrbIB0RcV3YAig4/s1600/ddual2019-02-banish.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="477" data-original-width="780" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpK-nFQfgjcTedsFooiAoFujrHWK2I35frBm0wCBSjzaMMydpWHSkVuDhqp8r3co2SyUq8xa2bf5NhekPEvoHbsyBY8icluPddPXC-nZ3R8zLTtbatnHJv0wyDgJMVMrbIB0RcV3YAig4/s320/ddual2019-02-banish.png" width="320" /></a></div>
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-16604126380427965082019-08-10T09:28:00.000-04:002019-08-10T09:38:48.927-04:00Version 0.55 - Tutorials and MoreI've put the latest version (0.55) of <a href="https://warningcall.space/">Warning Call here</a>.<br />
<br />
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 <a href="https://www.reddit.com/r/roguelikedev/comments/ci1a8z/feedback_requested_a_major_update_of_warning_call/">r/roguelikedev</a> has been helpful in seeing the game in a different light.<br />
<br />
Major changes from the last version include:<br />
<br />
<ul>
<li>Removed Targetbots (t) from the first level</li>
<li>Fixed bug where Empowering and Ammo-generating nanites would not allow power usages if you had zero charges.</li>
<li>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!)</li>
<li>Made sure Warp Beacons cannot be trapped behind impassable terrain</li>
<li>Gridbots (x) no longer get stuck in the wall when they explode out of a Xenobot (X)</li>
<li>Put the Power menu as the first line of the footer</li>
<li>Added the SEED # to the header (mostly for help in bug reporting, but eventually for game-sharing)</li>
<li>Spread out the guaranteed powers on the first level - the starting room was way too cluttered</li>
<li>Fixed mysterious game-crashing bug with 'empty' nanites spawning on the ground in deeper levels</li>
</ul>
<div>
Feel free to post comments, bugs, and feedback below, or on the reddit link above. Or e-mail me: todd AT (this domain).</div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-79337255637147854982019-07-26T18:38:00.001-04:002019-07-26T18:40:19.610-04:00Latest Version of Warning Call (aka Hardpointe) online<br />
The latest version (0.5) of <a href="https://warningcall.space/">Warning Call is here</a>. (I changed the name from Hardpointe, but the game is the same). If you have commentary leave it on <a href="https://www.reddit.com/r/roguelikedev/comments/ci1a8z/feedback_requested_a_major_update_of_warning_call/">reddit here</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZc_g7m0qi9J555Mpc7UgEgKO1CwJDz0WUP9Z-BDBqxzV8Fqqb3LYVw7XUoH0K3SqSrHy6X34ww5qT3b6m01zAaJzJM-DmlNiyvtGpU66T8HgvIYEUdLJKwwTmu6E34vYIyYsFQEQ_ec/s1600/warningcall-title.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="443" data-original-width="803" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZc_g7m0qi9J555Mpc7UgEgKO1CwJDz0WUP9Z-BDBqxzV8Fqqb3LYVw7XUoH0K3SqSrHy6X34ww5qT3b6m01zAaJzJM-DmlNiyvtGpU66T8HgvIYEUdLJKwwTmu6E34vYIyYsFQEQ_ec/s400/warningcall-title.PNG" width="400" /></a></div>
<br />
<br />
A full list of changes since the last playable version is below. Thanks, and enjoy!<br />
<br />
<b><u>From 0.5:</u></b><br />
<br />
<ul>
<li>On-screen radial menu replaces 'ambiguous input' menu:</li>
<ul>
<li>Makes it simple to double-tap space to wait when standing on wreckage</li>
<li>Can no longer escape out of radial menu</li>
</ul>
<li>Interface updates:</li>
<ul>
<li>Warp Beacons and Airlocks are highlighted when not in view</li>
<li>Significantly expanded HELP content</li>
<li>Better item and power descriptions all around</li>
<li>Cycle between enemies while targeting with 'e'</li>
<li>Inventory is sorted more usefully</li>
<li>Power install menu has better shortcuts (allows player to quickly tap SPACE + # to install a power into a given slot)</li>
<li>Grenande targeting shows area of effect</li>
</ul>
<li>3 new nanotech types (found as items and on the grid): </li>
<ul>
<li>Recharging nanotech (temporarily makes all power uses 'free')</li>
<li>Reloading nanotech (temporarily makes all weapon uses 'free')</li>
<li>Strengthening nanotech (temporarily adds the HULK effect and +1 melee damage)</li>
</ul>
<li>New enemies:</li>
<ul>
<li>Gridbot (1-hp enemies that always appear in pairs)</li>
<li>Xenobot (explodes into gridbots when destroyed)</li>
<li>Megadrone (constructs mini-drones out of nearby scrap)</li>
<li>Protectobot (casts shields onto nearby allies)</li>
<li>Interdictor (able to see cloaked targets and use a displacement field to cancel PHASEWALK and CLOAK effects)</li>
</ul>
<li>Ability to 'sacrifice' Warp Crystals to double SCORE</li>
<li>Enemies take damage when falling through chasms</li>
<li>Different icon for weapon powers vs. ability-based powers</li>
<li>Better distribution of grenades, powers, and nanotech items </li>
<li>More wreckage distributed across levels</li>
<li>HACK effect is now temporary, and scales with power level</li>
<li>PHASEWALK is now more liberal when calculating if a ranged attack goes through you and hits a nearby enemy</li>
</ul>
<u><b>From 0.35 and 0.4:</b></u><br />
<ul>
<li>Power level is now tied to how long (or far) powers last </li>
<li>Lowered the base duration of most power effects (but they now scale with level)</li>
<li>Warp beacon menu improved and text made more helpful</li>
<li>new HULK power that temporarily adds +1 to melee attacks</li>
</ul>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-79597223744304307992019-06-23T15:53:00.000-04:002019-06-23T15:53:00.918-04:00New Site - Old Games Back UpI finally uploaded my redesign of <a href="http://heroicfisticuffs.com/">heroicfisticuffs.com</a> 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 <a href="http://rot.jshttps//ondras.github.io/rot.js/hp/">rot.js</a> library.<br />
<br />
<a href="https://heroicfisticuffs.com/pages/robocaptain/index.html">RoboCaptain</a><br />
<blockquote class="tr_bq">
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.</blockquote>
<a href="https://heroicfisticuffs.com/pages/heavyaxe/index.html" target="_blank">Heavy Axe</a><br />
<blockquote class="tr_bq">
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.</blockquote>
<br />
Next up will be <a href="http://www.roguebasin.com/index.php?title=DungeonDual">Dungeon Dual</a>. 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.<br />
<br />
Let me know if you run into any trouble playing either game.Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-51440332941339210542019-06-09T15:30:00.000-04:002019-06-23T15:33:47.349-04:00I can't just kill you, can I?One of my overriding <a href="http://blog.heroicfisticuffs.com/2017/04/hardpointe-failed-7drl.html" target="_blank">design principles</a> of Hardpointe is to keep the number small. Originally the rule was "nothing over 3."<br />
<br />
<br />
<ul>
<li>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.</li>
<li>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.</li>
<li>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.</li>
</ul>
<div>
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. </div>
<div>
<br /></div>
<div>
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 <a href="https://www.nethack.org/" target="_blank">favorite</a> <a href="https://sites.google.com/site/broguegame/" target="_blank">roguelikes</a>.</div>
<div>
<br /></div>
<div>
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. </div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEod0GOZqX8MFqNznpm9IJugKQf7s5vkoAKD5d15hzB5YCGPpZ6a54lFAymO0cQ5QVO8fFBqEm9LWkj5YMzQVu1wa92Ht-WBKATyN-ehlzK-4w32ZxINxA04FO-DA-kDExeqGfiETDy3w/s1600/feature-corrosion.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="260" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEod0GOZqX8MFqNznpm9IJugKQf7s5vkoAKD5d15hzB5YCGPpZ6a54lFAymO0cQ5QVO8fFBqEm9LWkj5YMzQVu1wa92Ht-WBKATyN-ehlzK-4w32ZxINxA04FO-DA-kDExeqGfiETDy3w/s1600/feature-corrosion.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Corrosive nanites (orange dots)</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
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. </div>
<div>
<br /></div>
<div>
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. </div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPsZmWXxSLZqJRn0MzMrjroknLp-SdvTf9e7TEvT2prrRVsJJY2YiTUywn3BnipNF6LWd6NVhCGYIlEjxZftGYZQGADcSe0QZ2Gg17XTjjpbF22T-DsmBwzE_-k-K1AwvLn2nAMvn1y1Y/s1600/features-enemy-hulks.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="183" data-original-width="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPsZmWXxSLZqJRn0MzMrjroknLp-SdvTf9e7TEvT2prrRVsJJY2YiTUywn3BnipNF6LWd6NVhCGYIlEjxZftGYZQGADcSe0QZ2Gg17XTjjpbF22T-DsmBwzE_-k-K1AwvLn2nAMvn1y1Y/s1600/features-enemy-hulks.gif" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Enemy changes color as a warning*</td></tr>
</tbody></table>
<div>
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.<br />
<br />
(* don't worry, I made the color change more dramatic once I saw this in GIF form)</div>
<div>
<br /></div>
<div>
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.</div>
<div>
<br /></div>
<div>
In summary - <u><b>I can't promise not to kill you. But I can promise that you will see it coming.</b></u></div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-70521611624823898062019-05-09T14:15:00.000-04:002019-06-23T14:23:03.320-04:00Design Goals - How am I Doing So Far?When I started Hardpointe as a <a href="http://blog.heroicfisticuffs.com/2017/04/hardpointe-failed-7drl.html" target="_blank">7-Day Roguelike nearly two years ago</a>, 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:<br />
<blockquote class="tr_bq">
Tactical combat built from fun mechanics</blockquote>
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvUhf4nCTBY-w5wHzK-qLI-rG0KR9eUY1nHlab4xc6fKXUxdaysVv4ON1h6H4tjo3l9WAFgBAyZf3Ler-O8fK_yaV3YQy560vJx62RB-HbNSvKQ3Bxiy2r_wO9q11F5TGZRG6RLMx_qeQ/s1600/features-knockback-batt.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="355" data-original-width="437" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvUhf4nCTBY-w5wHzK-qLI-rG0KR9eUY1nHlab4xc6fKXUxdaysVv4ON1h6H4tjo3l9WAFgBAyZf3Ler-O8fK_yaV3YQy560vJx62RB-HbNSvKQ3Bxiy2r_wO9q11F5TGZRG6RLMx_qeQ/s320/features-knockback-batt.gif" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The BATT knockback effect</td></tr>
</tbody></table>
<blockquote class="tr_bq">
Interesting enemies, with behaviors that match their abilities</blockquote>
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.<br />
<br />
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.<br />
<br />
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.<br />
<blockquote class="tr_bq">
No numbers over 3</blockquote>
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.<br />
<blockquote class="tr_bq">
Minimal buttons/input keys</blockquote>
Check-ish? I've gone back and forth on this one. After some <a href="https://www.reddit.com/r/roguelikedev/comments/8dzx86/feedback_requested_hardpointe_version_03_of_my/dyhgmjz?utm_source=share&utm_medium=web2x" target="_blank">great feedback from Widmo on r/roguelikedev</a> 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.<br />
<br />
It's up in the air whether people actually use z (on-screen HUD) and x (examine tile), or if just one is enough.<br />
<br />
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVJs8KgTJx9ypsagUADABbce2sHGVEvtwQ9QVitYPpcRmxxeb-3msHZ3MUoCp0-c2KCOWMArbMoR8OeZd8uEdGnSX7PbjeVMkkeaReq38vFqfe6mrGAYs1tkc7r5UUgqItuoUEWkMIJ_c/s1600/features-wreckage.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="355" data-original-width="437" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVJs8KgTJx9ypsagUADABbce2sHGVEvtwQ9QVitYPpcRmxxeb-3msHZ3MUoCp0-c2KCOWMArbMoR8OeZd8uEdGnSX7PbjeVMkkeaReq38vFqfe6mrGAYs1tkc7r5UUgqItuoUEWkMIJ_c/s320/features-wreckage.gif" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The radial menu in action</td></tr>
</tbody></table>
<blockquote class="tr_bq">
4b: playable with a gamepad</blockquote>
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 <a href="http://twpage.webfactional.com/pages/heavyaxe/index.html" target="_blank">2015 7DRL 'Heavy Axe'</a>, so I know it's possible and relatively simple. I also assume compatibility has gotten better since 2015.<br />
<div>
<br /></div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-3636420095672374942019-04-09T16:03:00.000-04:002019-06-15T16:05:00.032-04:00Give me the 30 second version"So, what's it about?"<br />
<br />
I'm probably mis-quoting <a href="http://www.gamesofgrey.com/" target="_blank">Darren Grey</a> 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 <a href="http://www.roguebasin.com/index.php?title=Seven_Day_Roguelike_Challenge" target="_blank">all of the incarnations of the 7-Day Roguelike Challenge</a> to the current rogue-reddit "scene" at (<a href="https://www.reddit.com/r/roguelikedev/" target="_blank">r/roguelikedev</a> and <a href="https://www.reddit.com/r/roguelikes/" target="_blank">r/roguelikes</a>). He also writes some great games - he's done a lot for the community.<br />
<br />
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 <a href="http://blog.heroicfisticuffs.com/2017/04/hardpointe-failed-7drl.html" target="_blank">failed 2017 7DRL Hardpointe</a>. That's when I get the question: "So, what's it about?"<br />
<br />
Oops. I didn't have a smooth or particularly convincing answer. Something about tactical combat, maybe?<br />
<br />
A few months later, here was <a href="https://www.reddit.com/r/roguelikedev/comments/808yln/feedback_requested_first_release_of_my_game_in/" target="_blank">my first definition</a>:<br />
<br />
<blockquote class="tr_bq">
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.</blockquote>
<br />
Here's my <a href="https://www.reddit.com/r/roguelikedev/comments/8dzx86/feedback_requested_hardpointe_version_03_of_my/" target="_blank">2nd try</a>:<br />
<br />
<blockquote class="tr_bq">
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.</blockquote>
<br />
Maybe somewhere in between?<br />
<br />
<blockquote class="tr_bq">
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.</blockquote>
<br />
How's that? (They keep getting longer... oops.)<br />
<br />
<div>
<br /></div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-38952926543190456172019-03-09T11:23:00.002-05:002019-03-09T11:23:59.512-05:00Hardpointe still aliveDespite 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.<br />
<br />
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.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXd-RvJ0pgynLnPxoLPiTVAgK4N7G7EViTzhPpCtUuhICeK5__liSyS6uzR_IRxiwMQtzetJsutMGyFYK19qG9r4XzHq86HoUHRMJAM_inX9730J7dokEFS2O1kPncGmi3zD9xDA9Q0xU/s1600/radial-menu-1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="269" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXd-RvJ0pgynLnPxoLPiTVAgK4N7G7EViTzhPpCtUuhICeK5__liSyS6uzR_IRxiwMQtzetJsutMGyFYK19qG9r4XzHq86HoUHRMJAM_inX9730J7dokEFS2O1kPncGmi3zD9xDA9Q0xU/s320/radial-menu-1.PNG" width="200" /></a></div>
<br />
<br />
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.<br />
<br />
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.<br />
<br />
<a href="https://youtu.be/MoFzGnwyttY" target="_blank">Here's me dying on the 1st level </a>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.Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com2tag:blogger.com,1999:blog-1933319608132202788.post-40679044134849113922018-04-21T17:26:00.001-04:002018-04-21T17:26:48.787-04:00Hardpointe version 0.3 releasedLatest version is now playable <a href="http://heroicfisticuffs.com/hp/" target="_blank">in the same spot</a>.<br />
<br />
New for version 0.3:<br />
<br />
<ul>
<li>start menu, including daily & weekly seed generation</li>
<li>revamped the death & victory menus</li>
<li>fixed a few menu bugs (especially on death & victory)</li>
<li>added occasional monster spawning </li>
<li>added end-game monster setup for the fight back to the surface</li>
<li>changed SHIELD power to also have a timed component</li>
<li>improved PHASEWALK power so that enemy attacks now go 'through' you - and hit other enemies</li>
<li>improved CLOAK power to trigger 'surprise' attacks (+1 damage) </li>
<li>better handling of ending timed powers (shields, cloak, phasewalk), along with visual animation when they end</li>
<li>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)</li>
<li>Shielded enemies now more intelligently turn on their shields</li>
<li>fleeing enemies will not run away forever - eventually they will recover and resume hunting</li>
<li>better names and descriptions for blasters</li>
<li>Added a new kinetic blaster (knockback effect)</li>
<li>Made the Archon a bit tougher (can no longer be stunned or hacked)</li>
<li>enemies knocked back into walls are briefly stunned (so you can set up wall attacks)</li>
<li>added a score stat, although it doesn't track anything yet</li>
<li>fixed targeting bug that made it too easy to throw grenades and wreckage onto yourself</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE6l13PikObmvx9dHgVRlwu7lyUyzxqR8b_i4c7LfezEahK5J6IY7kVGJvtwI00c8XkbCqyAmvBc74p3RNUwnTb27EFcb7KdjwZdKG-Rz5wLL-0XNqklpZXoXLW6KM2W3mnnYMHK2wAik/s1600/hardpointe-ver03-01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1000" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE6l13PikObmvx9dHgVRlwu7lyUyzxqR8b_i4c7LfezEahK5J6IY7kVGJvtwI00c8XkbCqyAmvBc74p3RNUwnTb27EFcb7KdjwZdKG-Rz5wLL-0XNqklpZXoXLW6KM2W3mnnYMHK2wAik/s320/hardpointe-ver03-01.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDA-8JXQvwY2YrAObFjxw8ybdLu1FjsTKzf6hb6GsGXdIhAongXMWWztsxKsNigEMj_fD-jocOU4QdHDV9X58OpN2j5VWY9o3UQj8lBG8XC2M4XlJYIjwDs_kr9GYEPirp5vlNdI_SMA/s1600/hardpointe-ver03-02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="765" data-original-width="999" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDA-8JXQvwY2YrAObFjxw8ybdLu1FjsTKzf6hb6GsGXdIhAongXMWWztsxKsNigEMj_fD-jocOU4QdHDV9X58OpN2j5VWY9o3UQj8lBG8XC2M4XlJYIjwDs_kr9GYEPirp5vlNdI_SMA/s320/hardpointe-ver03-02.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLEd2DOR9mefhrz-DXHoS-RXd5BNvHK_parVw07FjCjkE_ClFFmT4l7Q1Ol5xoVlzMwIIXnJTypQK6JnQfSIyydDkIjqxAMcJ17tPjB3TfrH4HVRojKphInCJZUoNYWFxvrfir2Nx6EI/s1600/hardpointe-ver03-03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="999" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLEd2DOR9mefhrz-DXHoS-RXd5BNvHK_parVw07FjCjkE_ClFFmT4l7Q1Ol5xoVlzMwIIXnJTypQK6JnQfSIyydDkIjqxAMcJ17tPjB3TfrH4HVRojKphInCJZUoNYWFxvrfir2Nx6EI/s320/hardpointe-ver03-03.PNG" width="320" /></a></div>
<div>
<br /></div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-6378978997542012762018-04-03T20:37:00.003-04:002018-04-03T20:37:59.017-04:00Next version progress & PhasewalkSpent 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.<br />
<br />
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.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzvO4lbVWA-Yvz81HjYV41f0atgOYfUtVQ4f5UTrKQv4fN6KGMUl40s08s33eEEEmP7wgSiJSGNY1NQG55GxbenYig5THVdAOtQE-f93ifVAD5n1Bf2xjZ9hyphenhyphenoTXHgNJtlgRqU96C5NA/s1600/cloak-demo-01.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="294" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzvO4lbVWA-Yvz81HjYV41f0atgOYfUtVQ4f5UTrKQv4fN6KGMUl40s08s33eEEEmP7wgSiJSGNY1NQG55GxbenYig5THVdAOtQE-f93ifVAD5n1Bf2xjZ9hyphenhyphenoTXHgNJtlgRqU96C5NA/s320/cloak-demo-01.gif" width="251" /></a></div>
<br />
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.<br />
<br />
This works for ranged attacks:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN10vBNdwGZENyv3YhPZk9qSQ68y2pLT-hixRTfqmBv8VD-ebcdpuVPwVWA8CtjsiUhum8dpN9q4uBdCgbrAkGlfpIRW1GSUcsvFX92vwlip6pbYy8CwmNiXz_SlOx7NOu-Q2q7w5Skao/s1600/phasewalk-demo.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="294" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN10vBNdwGZENyv3YhPZk9qSQ68y2pLT-hixRTfqmBv8VD-ebcdpuVPwVWA8CtjsiUhum8dpN9q4uBdCgbrAkGlfpIRW1GSUcsvFX92vwlip6pbYy8CwmNiXz_SlOx7NOu-Q2q7w5Skao/s320/phasewalk-demo.gif" width="251" /></a></div>
<br />
<br />
<br />
And melee:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnYfX0sZEiYNJ_ywppen8hAg_vTAG9QCngwLQTxBI7_uwTxI3OL3LSvhLnHstGt11MR4AxVxm_MA_lSUhh8LQ-0OuY2yaA9yAslyLVl0scz-FdIYo9A99uL3J4bLloQE15FpOCHN-z_2Q/s1600/phasewalk-demo-02.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="294" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnYfX0sZEiYNJ_ywppen8hAg_vTAG9QCngwLQTxBI7_uwTxI3OL3LSvhLnHstGt11MR4AxVxm_MA_lSUhh8LQ-0OuY2yaA9yAslyLVl0scz-FdIYo9A99uL3J4bLloQE15FpOCHN-z_2Q/s320/phasewalk-demo-02.gif" width="251" /></a></div>
<br />
I'll roll out this version pretty soon. Meanwhile the game is <a href="http://www.heroicfisticuffs.com/hp" target="_blank">still playable here</a>.<br />
<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-35270329889761122632018-04-01T11:40:00.001-04:002018-04-01T11:40:42.518-04:00Hardpointe v0.2 Long PlayI did a full play-through of the game so far. Took me a lot longer than expected! I guess that's a good sign. I also managed to not die. Definitely on the easier side at the moment - there are grenades and powers a-plenty. <a href="https://www.youtube.com/watch?v=Rsx4TqMV9AA" target="_blank">Here it is on youtube</a>. I'll try to add commentary next time.<br />
<br />
Later versions will get a lot more brutal. More terrain, more enemies, fewer power-ups, and at least two more enemy types. I want to have some support-style enemies, with two in the works: one will keep it's distance and put shields on near-by enemies, the second will be super-fast with no attacks, but be able to alert other enemies to your location.<br />
<br />
I am also toying with some kind of factory-type system or enemy that will spew out countless 1-hp/1-damage enemies. Simple to handle in the right scenarios, but if left unaccounted for, it could make things very difficult.<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-2202801829382429452018-03-31T22:28:00.001-04:002018-03-31T22:28:13.621-04:00Hardpointe ver0.2 is playableThe latest version of hardpointe (I'm called it v0.2) is available to <a href="http://heroicfisticuffs.com/hp/" target="_blank">play here</a>.<br />
<br />
It's a bit more polished than the first version, with a number of ease-of-play fixes and more varied enemies.<br />
<br />
Change log:<br />
<ul>
<li>Screen/font can now be enlarged/shrunk</li>
<li>Auto-pickup of items</li>
<li>'Brogue-style' exits that you just walk into (this item and last item are meant to reduce over-reliance on the action key)</li>
<li>Removed redundant power install menu</li>
<li>No monsters in the starting room (whew)</li>
<li>Added fleeing enemies (Skirmisher)</li>
<li>Added shielded enemies (they will recharge if they escape): Skirmisher, Centurion</li>
<li>Added an EMP grenade that conveniently takes out shields</li>
<li>Fixed a bug with level changes caused by dropping through chasms (sometimes)</li>
<li>Added a final boss (sort of): The Archon. The only enemy in the game with more than 3 'health' (shields + hit points)</li>
<li>Made the asteroid 6 levels</li>
<li>Monster count & difficulty level scale better with increasing levels</li>
<li>Player starts with the Hack power (fairly OP but I have not done much balancing)</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcH3uVaUTbzuIso6T3Tgqc1VNtr3U8TPCQu18ZuZZC8MWJ9DUNH82AjT7i-FgLqWk3Ydf1R1ZqqLaexW7FjjXWmcp4soIHaNZNTgZw20ZDyoGhuHelktqhsMLxM0nNeNW2EzlJgndJPXg/s1600/hardpointe-sat-200-EMP.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="348" data-original-width="278" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcH3uVaUTbzuIso6T3Tgqc1VNtr3U8TPCQu18ZuZZC8MWJ9DUNH82AjT7i-FgLqWk3Ydf1R1ZqqLaexW7FjjXWmcp4soIHaNZNTgZw20ZDyoGhuHelktqhsMLxM0nNeNW2EzlJgndJPXg/s320/hardpointe-sat-200-EMP.gif" width="255" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Shielded enemies and the EMP Grenande in action</td></tr>
</tbody></table>
<br />
<br />
If you've played it, leave me a comment here, or on <a href="https://www.reddit.com/r/roguelikedev/comments/88evsv/sharing_saturday_200/dwkbamq/" target="_blank">/r/roguelikedev</a>. Enjoy.Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-81762275770584417552018-03-31T18:22:00.002-04:002018-03-31T18:22:35.447-04:00Tank Control - A 2018 7DRL SuccessMy 2018 7DRL - Tank Control - was a success. You can <a href="https://heroicfisticuffs.itch.io/tankcontrol">play it on itch.io</a>.<br />
<br />
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
In TANK CONTROL you command a stolen Leopard 2A tank. Your enemies want it back.</div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
Your mission is to navigate dangerous terrain and rescue as many civilians from the area as possible and deliver them to various checkpoints. </div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1bL5FazXF9LhUUltuOWVD10kI3_8bEh70RhXvYrpd6KrDos3JKMZ48bGvW44A6qxyuyNV6-6SdYsYWpUI0KaxEt26ohlzgqgsh2LgPBe3gYWWaYQRxHjF_gC3l8K3ZIz2J0-VkOBVd7k/s1600/obl-7drl-final.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="419" data-original-width="422" height="317" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1bL5FazXF9LhUUltuOWVD10kI3_8bEh70RhXvYrpd6KrDos3JKMZ48bGvW44A6qxyuyNV6-6SdYsYWpUI0KaxEt26ohlzgqgsh2LgPBe3gYWWaYQRxHjF_gC3l8K3ZIz2J0-VkOBVd7k/s320/obl-7drl-final.png" width="320" /></a></div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
You will utilize your overwhelming firepower against your adversaries, which are numerous. Combat uses classic turn-based roguelike mechanics, so positioning the direction of both your tank and your weapon will be critical.</div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: Lato; font-size: 16px; line-height: 1.4;">
7DRL Note: I did not build this entire game + engine in seven days! I am using first and foremost the amazing <a href="http://ondras.github.io/rot.js/hp/" rel="nofollow noopener" style="color: #fa5c5c;" target="_blank">rot.js library</a> (as per usual), and have forked the engine and other elements from <a href="http://heroicfisticuffs.com/hp/" rel="nofollow noopener" style="color: #fa5c5c;" target="_blank">hardpointe</a>.</div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-55738120430945886912018-02-24T17:11:00.001-05:002018-04-21T11:57:51.982-04:00Hardpointe - How to play (updated for version 0.3)<h2>
You can play it <a href="http://heroicfisticuffs.com/hp/">here</a>.</h2>
<h2>
Gameplay</h2>
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.<br />
<div>
<br /></div>
<h2>
Our Story So Far</h2>
Humanity is on the brink of annihilation. Ever since the robotic uprising of the late 1990s, humans have waged a bitter war against their would-be AI overlords. Many decades later, Earth is finally free of war, but elements of the robotic hordes have taken to space and have taken refuge in the asteroid belt.<br />
<br />
For a time, many thought the robots dormant, or dead. But they were building. Utilizing self-replicating machinery, they turned countless asteroids into factories, crisscrossed with countless mazes and dungeon-like interiors. Some they turned into weapons, and began hurling them at Earth.<br />
<br />
Only a few asteroids have penetrated Earth's defenses, but even these few have wiped out entire cities.<br />
<br />
All efforts to attack and neutralize these strongholds have failed. Your mission is to succeed where others have failed. Infiltrate the asteroid, grab the <b>Control Core</b>, and bring it back safely. Your suit should be able to interface with any weapon systems that you find - human or robot. We cannot get close enough to reliably use our telewarp technology - so you will have to travel on foot. We may be able to link up to your suit at various beacon points. Look for <b>warp crystals</b> - the robots use them as much as we do.<br />
<div>
<br /></div>
<h2>
Controls</h2>
<div>
<span id="docs-internal-guid-8f42e915-e567-a664-3c09-bc1df94d331b"><br /></span>
<div dir="ltr" style="margin-left: 0pt;">
<table style="border-collapse: collapse; border: none;"><colgroup><col width="150"></col><col width="290"></col></colgroup><tbody>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Keys</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Description</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">WASD, Arrow Keys</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Movement (4-directional)</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">SPACE</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Action (Wait, Pickup, Use Stairs, Activate)</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">e</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Wait Only (by popular request)</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">1, 2, 3</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Activate Power</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">i</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Inventory</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">x</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">eXamine (look around)</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">z</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Heads Up Display</span></div>
<div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">(cycle with movement keys)</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">m</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">Power Listing</span></div>
</td></tr>
</tbody></table>
</div>
<span id="docs-internal-guid-8f42e915-e567-a664-3c09-bc1df94d331b">
</span></div>
<div dir="ltr" style="margin-left: 0pt;">
<h2>
How to Play</h2>
</div>
<h3 style="margin-left: 0pt;">
Winning</h3>
<div>
For now, you can win by finding the <b>Control Core</b> and returning it to the exit that you started the game on. There are only 6 floors since the game is still rough and fairly unbalanced with all of the items and powers lying around.</div>
<h3 style="margin-left: 0pt;">
Health</h3>
<div>
You have limited health. (almost nothing in this game goes over 3) All attacks in the game do 1 damage, with a few exceptions.</div>
<h3>
Powers</h3>
<div>
You have 3 power slots. You will come across powers during your mission - you can replace these with your current powers. You can also use them, dump them, and then go back and re-install your old powers. Some powers can be upgraded to make them more powerful. All powers come with a limited number of charges - but most are rechargeable.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ebUG0pQjB3jXlJD0slfvaIU4YsKaWo7-hvfIW9RUDpObK4Cuz5kBXE0OYVRf_sJgVj7whyHPkLC_1lJZldvHH_wQqfIMxBVYGIBmfY2HtjDBnPPeH4Cv2jbwKUNSogo91JIlBIfmtAI/s1600/hp-tutorial-03-warpcrystal-power.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="738" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ebUG0pQjB3jXlJD0slfvaIU4YsKaWo7-hvfIW9RUDpObK4Cuz5kBXE0OYVRf_sJgVj7whyHPkLC_1lJZldvHH_wQqfIMxBVYGIBmfY2HtjDBnPPeH4Cv2jbwKUNSogo91JIlBIfmtAI/s320/hp-tutorial-03-warpcrystal-power.png" width="320" /></a></div>
<div>
<br /></div>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<div>
<br /></div>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
<br /></h3>
<h3>
<br /></h3>
<h3>
<br /></h3>
<h3>
<br /></h3>
<h3>
<br /></h3>
<h3>
<br /></h3>
<h3>
Shields</h3>
<div>
You start with a shield power, but you don't need to keep it. When activated, you'll get 3 shield points added to your health, for a limited amount of time. The more you UPGRADE your shield, the longer it will last before timing out. Taking 3 hits will destroy the shield regardless. Some enemies also have shields. An EMP grenade can wipe out shields - including your own.</div>
<h3>
Dash</h3>
<div>
You start with the dash power, which lets you move quickly across terrain to attack distant enemies. Just be careful putting yourself into harms way. Don't dash into a 2-hp enemy unless you've already hurt them - otherwise they are sure to attack you next turn.<br />
<br />
<h3>
Hack</h3>
Allows you to overwrite an enemies programming, turning them into a permanent ally. Allies will try to keep a respectful distance from you - but they still sometimes get stuck in doors, so be patient with them. Enemies will go after allies first if they can get to them. There is at least one "unhackable" enemy in the game - you will know it when you see it.<br />
<h3>
Cloak</h3>
Activates temporary invisibility. Enemies will not be able to see you while cloaked, allowing you to escape or sneak past them unsuspected. Enemies will move towards the last place they saw you, making for an easy way to set up traps. Any attack will remove your cloak, but any melee attack will also gain +1 damage.<br />
<h3>
Phasewalk</h3>
Gives you the ability to walk through walls and enemies. While phased, enemy attacks will go 'through' you, so if you can set them up properly, enemies will take each other out while trying unsuccessfully to kill you.<br />
<h3>
Heavy Axe</h3>
A powerful (and rare) ranged weapon. When thrown, the axe can cut through multiple enemies. Because it is quantum-bound to your suit, the axe can also travel back to you - even across twists and turns - further damaging enemies on the return path.</div>
<h3>
Blasters (Guns)</h3>
<div>
<div style="text-align: left;">
You will find these one-off weapons during your mission. They are installed just like other powers, except they cannot be upgraded or recharged. Nothing stops you from swapping in a weapon (or two), using up all the ammo, and then swapping back. Great for taking out strategically difficult enemies.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRJCG7zZ0ZTh5nnvarSSMfjg6SLOLWuRHybeWdcZE24BdjI965JxwyPQpezTPV0-1h016PmuZ2pHeNit3Vd6pgsEpefjZVfE3Fl7P3TamnImpZ9O8CSnIQnpzVEhmaRFt9byQF4KgdnE4/s1600/hp-tutorial-05-loadedguns.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="738" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRJCG7zZ0ZTh5nnvarSSMfjg6SLOLWuRHybeWdcZE24BdjI965JxwyPQpezTPV0-1h016PmuZ2pHeNit3Vd6pgsEpefjZVfE3Fl7P3TamnImpZ9O8CSnIQnpzVEhmaRFt9byQF4KgdnE4/s320/hp-tutorial-05-loadedguns.png" width="320" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<br />
<div style="text-align: left;">
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<br /></div>
</div>
<br />
<br />
<br />
At the moment, they come in four varieties:<br />
<br />
<ul>
<li>Kinetic Blaster - No damage but triggers a powerful knockback effect (like a blast grenade)</li>
<li>Stun Gun - No damage but temporarily stuns enemies</li>
<li>Railgun - Simple 1 damage weapon</li>
<li>Cannon - Powerful 2 damage ranged weapon - use wisely</li>
</ul>
<br />
<br /></div>
<div>
<h3>
Grenades</h3>
You'll find lots of grenades lying around for some reason. You can carry them in your inventory and throw them. At the moment, they come in four varieties:<br />
<br />
<ul>
<li>Blast Grenade - has a powerful knockback blast that will send enemies flying back from the center of the blast. Anyone at the <i>actual</i> center will not be affected, making it a sometimes useful escape tool. Any enemies sent into walls will be temporarily stunned.</li>
<li>Stun Grenade - has a mass-stunning effect on any targets (including you) caught in the blast. Be careful, there is at least 1 "unstunnable" enemy.</li>
<li>Grenade - Does 1 damage to all targets caught in the blast</li>
<li>EMP Grenade - Knocks out all shields on targets caught in the area of effect</li>
</ul>
<br />
<br />
<h3>
Nanotech</h3>
These are phials of tiny nanites. When thrown, they will begin to replicate and modify the surrounding terrain in mysterious ways. Some affects are beneficial to you, so be careful not to let your enemies take advantage of this. (Note these may temporarily out of the game while I balance them and make them a bit more interesting in terms of useable terrain)</div>
<h2>
Enemies</h2>
<div>
Forthcoming - you can use the HUD (z) or EXAMINE (x) to get an idea of what different enemies do. There are no 'vanilla' (e.g. 1hp/1dmg) enemies.</div>
<h2>
Tactics</h2>
<h3>
Wall Smash</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0qWAt46tbrJAql7-s23bxIPFAQancm_bO_m5E2VErQu01GkIdM8P8qJILOaH9V9YdKUiFA4W4r5bGo1ZMquOmrRFwNQrIn3W-Ff6a5p7sNa3RGnmf0vi-e1E_lRXttw6ZFn5RLQlTug/s1600/hp-tutorial-02-wreckage-wallsmash.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="738" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0qWAt46tbrJAql7-s23bxIPFAQancm_bO_m5E2VErQu01GkIdM8P8qJILOaH9V9YdKUiFA4W4r5bGo1ZMquOmrRFwNQrIn3W-Ff6a5p7sNa3RGnmf0vi-e1E_lRXttw6ZFn5RLQlTug/s320/hp-tutorial-02-wreckage-wallsmash.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
When you melee attack an enemy with a wall (or other solid terrain) behind them, your attacks will do +1 damage. This also works for dash attacks.</div>
<div style="text-align: left;">
<br /></div>
<h3 style="text-align: left;">
Wreckage</h3>
<div style="text-align: left;">
Any enemies with more than 2 health will leave wreckage behind. You can heave these into other enemies to do damage. Eventually, other parts of the terrain will leave behind wreckage as well, such as consoles, factory equipment, plumbing, etc.</div>
<div style="text-align: left;">
<br />
<h3>
Doors</h3>
Closed doors count as solid walls for purposes of smashing enemies into them. However, a successful smash attack will destroy the door.</div>
<h3 style="text-align: left;">
Target Locks</h3>
<div style="text-align: left;">
Most ranged enemies require a target lock before they can fire. They will flash and turn a different color when they have targeted you. The HUD will also give them a special flag (shown below).</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Unless stopped, they will fire and hit you on the next turn. You can interrupt this by making the enemy move, moving out of range, or destroying them.</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHcfHFMtfkKXdyjyr70_R3NU2ZbBpLje8BNHklRNLDEtW-aohs7i3YuUcE9QQ3wmt1bGQ45CqukwAqGT8Wv5Jo86_8zHebW5c0PGC-BTeaMhJnLIvi6t22aL3TZyq2-EPIPQc7bLR0tjg/s1600/hp-tutorial-06-targetlock.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="738" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHcfHFMtfkKXdyjyr70_R3NU2ZbBpLje8BNHklRNLDEtW-aohs7i3YuUcE9QQ3wmt1bGQ45CqukwAqGT8Wv5Jo86_8zHebW5c0PGC-BTeaMhJnLIvi6t22aL3TZyq2-EPIPQc7bLR0tjg/s320/hp-tutorial-06-targetlock.png" width="320" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<h3 style="text-align: left;">
Warp Crystals and Warp Beacons</h3>
<div style="text-align: left;">
You will find warp crystals scattered around the asteroid. These function both as fuel and encrypted locators for Warp Beacons. Using a Warp Beacon will always consume 1 crystal, and will not work unless you have one in your inventory.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc0CaLycoInRIMkEWfIzW1U_ZOa9KZAeESf7xxlKvdWyIeUsLODYcSWRkffaRoouGP8dKqUtVzpJJn0g8kxSWTJB5drb17z1zV4p4sI4ET1UK2RV-zXQ-RVK8I9NB9Q5OrIVXjFrn-wo8/s1600/hp-tutorial-07-warppod.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="738" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc0CaLycoInRIMkEWfIzW1U_ZOa9KZAeESf7xxlKvdWyIeUsLODYcSWRkffaRoouGP8dKqUtVzpJJn0g8kxSWTJB5drb17z1zV4p4sI4ET1UK2RV-zXQ-RVK8I9NB9Q5OrIVXjFrn-wo8/s320/hp-tutorial-07-warppod.png" width="320" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Warp Beacons allow you to link back to home base, and acquire upgrades to your current powers, or recharge them. You can also use them to restore health and also call in backup - home base will warp allies to your location. (currently they won't travel to different levels with you)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-mlNRz7dAti_SH6M_n4_EjLtnz_UiA9IpW2vTiIdkro0pSUQr2IdFQcFg0RTlDkoEy48NHE4xN1JajP1gDxnBgIbN71hJyB7JgYmBdaA0egC0ka5OQWmr4rWp60cMd2G3EGWdiPo_iMo/s1600/hp-tutorial-08-warppodmenu.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="738" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-mlNRz7dAti_SH6M_n4_EjLtnz_UiA9IpW2vTiIdkro0pSUQr2IdFQcFg0RTlDkoEy48NHE4xN1JajP1gDxnBgIbN71hJyB7JgYmBdaA0egC0ka5OQWmr4rWp60cMd2G3EGWdiPo_iMo/s320/hp-tutorial-08-warppodmenu.png" width="320" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Powers can be modified in 3 ways:<br />
<br />
<ul>
<li>INCREASE - Increases the number of charges this power has - but will not recharge. You will get 1 charge along with the increase, though.</li>
<li>RECHARGE - Restores the power to the full number of charges.</li>
<li>UPGRADE - Some powers can be made more powerful (longer duration, further distance), doing this will not affect the number of charges.</li>
</ul>
<h3>
Damage Stacking</h3>
<div>
Unless specifically stated otherwise (Cannons) all attacks in the game do 1 damage. For the player, there are a few ways of bumping this up: a wall smash (melee strike an enemy against a wall or solid object), a surprise attack (melee attack while cloaked), and one or two others. Do what you can to put the odds in your favor, especially against stronger enemies.</div>
</div>
<div style="text-align: left;">
<h3>
Winning the Game</h3>
Grab the Control Core at the deepest level and return it to the entrance you started at. Once you grab the core, the enemy will throw even more at you, so be prepared to fight your way up.<br />
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0qWAt46tbrJAql7-s23bxIPFAQancm_bO_m5E2VErQu01GkIdM8P8qJILOaH9V9YdKUiFA4W4r5bGo1ZMquOmrRFwNQrIn3W-Ff6a5p7sNa3RGnmf0vi-e1E_lRXttw6ZFn5RLQlTug/s1600/hp-tutorial-02-wreckage-wallsmash.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0qWAt46tbrJAql7-s23bxIPFAQancm_bO_m5E2VErQu01GkIdM8P8qJILOaH9V9YdKUiFA4W4r5bGo1ZMquOmrRFwNQrIn3W-Ff6a5p7sNa3RGnmf0vi-e1E_lRXttw6ZFn5RLQlTug/s1600/hp-tutorial-02-wreckage-wallsmash.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"><br /></a>Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-39624707576047130162017-08-16T20:45:00.002-04:002017-08-16T20:45:25.733-04:00Welcome to my underground lairHardpointe is set on the asteroid lair of an evil robotic overlord - conveniently enough these lairs are surprisingly similar to dungeons. A bit.<br />
<br />
Level design is the great time sink of every roguelike developer. I have a system that I've developed over the years (mostly for my 2014 7DRL <a href="http://www.dungeondual.com/">dungeon dual</a>) that I call the <a href="https://www.reddit.com/r/roguelikedev/comments/310ae2/looking_for_a_bit_of_help_on_a_dungeon_generator/cpxrfbh/">floorplan approach</a>, which basically smashes a bunch of rectangles together. Once you have rectangles, you can easily convert them into rectangular rooms, or other shapes (cross-rooms, ovals, etc.) that will still fit within that bounding rectangle.<br />
<br />
For Hardpointe, I have brushed off this algorithm and cleaned it up a bit to make it less wasteful. I am rather liking the results so far.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJe9nrR0UACl3gVV86NZUuTWfFmc8AVNw_ZrLh314jAZEx8ik3l3raSzD062KVPILR5RrPzq5pu8xfpHJ0QLf9lC_NGDOYKw8nf8et4ISFIfCz-IwQs9NEmZXOPis2MXp3FdkMNA-Cwpk/s1600/floorplan-level.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="522" data-original-width="644" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJe9nrR0UACl3gVV86NZUuTWfFmc8AVNw_ZrLh314jAZEx8ik3l3raSzD062KVPILR5RrPzq5pu8xfpHJ0QLf9lC_NGDOYKw8nf8et4ISFIfCz-IwQs9NEmZXOPis2MXp3FdkMNA-Cwpk/s320/floorplan-level.PNG" width="320" /></a></div>
<br />
While level design is great, what I really want to get to is 'lock and key' style puzzle rooms. Think of the key rooms in brogue, or the linked challenges in Unexplored. Or zelda. In any event, Tom Ford did a lot of work around this in his 2014 7DRL <a href="http://flend.net/traumarl/index.html">TraumaRL</a> and then <a href="https://www.blogger.com/this%20https://www.youtube.com/watch?v=uP3horC38IE">did a great talk on his approach</a>.<br />
<br />
In order to accomplish this, I first needed a more intelligent level designer - one that kept track of separate rooms as if they were nodes on a graph. I had to brush off a part of my brain that hadn't been used since CS classes many years ago, but got a working tree structure that should suit my needs.<br />
<br />
I used <a href="http://treant.js/">treant.js</a> to display the resulting graphs.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs9mdTSJr-dhycslfTu71upfY6u4h2hqF9FePVSmDEWBTmOCEWKz8XTPOrPX9X_SLLQzyBL3_fIKTHNE_kqYPoClp8XqSPGcajLBFI9_NT3trTk3uv3MU6MbSOd5R0s1OxwlCYEOcFjMI/s1600/room-node-graph-main-deadends.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="723" data-original-width="339" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs9mdTSJr-dhycslfTu71upfY6u4h2hqF9FePVSmDEWBTmOCEWKz8XTPOrPX9X_SLLQzyBL3_fIKTHNE_kqYPoClp8XqSPGcajLBFI9_NT3trTk3uv3MU6MbSOd5R0s1OxwlCYEOcFjMI/s320/room-node-graph-main-deadends.PNG" width="150" /></a></div>
<br />
<br />
This first one corresponds with the above dungeon output.<br />
<br />
Red nodes/rooms represent the longest (or one of the longest) paths in the level. In most cases, the entrance point will be at the top of the tree and the ending point will be at the deepest node of the tree.<br />
<br />
Gray nodes are flagged as "dead ends" in that they have only one connecting room. This makes them great candidates for locked rooms, special challenges (and rewards) that will give the player a reason to explore the entirety of the level, should they choose to.<br />
<br />
Here are a few more because I like them:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9zdBbFjPbzeqi_xcHbRIm5qof8tLFSP8b83aPaM0ZhQEPmcaEilRix_DziSiHkj1_m7b-RzOpF-kLmJJNaJhgBqZ7zMoK9AvQdEHuYf_ywP8LbmzZYaFaSdaIRnjqYLqXAl77De_qRVM/s1600/graph-02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="356" data-original-width="211" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9zdBbFjPbzeqi_xcHbRIm5qof8tLFSP8b83aPaM0ZhQEPmcaEilRix_DziSiHkj1_m7b-RzOpF-kLmJJNaJhgBqZ7zMoK9AvQdEHuYf_ywP8LbmzZYaFaSdaIRnjqYLqXAl77De_qRVM/s320/graph-02.PNG" width="189" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvEr49GT9VUB4Hg6QUX11D9A4gyuhrbfTVi1OMevTZtZG4BVOAbe1CcE-ljfXkh2IQNSL7jrEAUZO3nVvVduMQHvWiruRsRNHW2yxNz1JoPhY3IL03dHV0eVKbAxbyfSJWbSNXLXd1Ghg/s1600/graph-03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="477" data-original-width="246" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvEr49GT9VUB4Hg6QUX11D9A4gyuhrbfTVi1OMevTZtZG4BVOAbe1CcE-ljfXkh2IQNSL7jrEAUZO3nVvVduMQHvWiruRsRNHW2yxNz1JoPhY3IL03dHV0eVKbAxbyfSJWbSNXLXd1Ghg/s320/graph-03.PNG" width="165" /></a></div>
<br />
<br />
<br />
<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-48723365518720580802017-08-05T18:02:00.002-04:002017-08-05T18:02:26.254-04:00Heads upFinally have a working heads up display (HUD) - one of my requirements for releasing an actual playable version of the game. I really want to keep the screen as uncluttered as possible, but at the same time allow players to get the tactical information they need. In general, all monsters have 1 hp and the behaviors are unique, so there is a lot of information that should be conveyed just from playing a few times.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVSo9QaSrDmUawbS4c-3Ax3RZMX5_IDYyzNXy-VoeTFY9-hwrkpoVbL3qfzq2wWAAKllkTPVj6f7q9Aln0pLsn591dLdJV3uuDLIkPNFL1ug45rVDuR8YGxyZRoUVyDVplsM30oiM-My0/s1600/no-hud.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="449" data-original-width="439" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVSo9QaSrDmUawbS4c-3Ax3RZMX5_IDYyzNXy-VoeTFY9-hwrkpoVbL3qfzq2wWAAKllkTPVj6f7q9Aln0pLsn591dLdJV3uuDLIkPNFL1ug45rVDuR8YGxyZRoUVyDVplsM30oiM-My0/s320/no-hud.PNG" width="312" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBq-fa_AwxdddKgr-3wDWwcwfd7lSU3uFhJLBNvPcWi4zrN-jSurURmKItKjTKdlnpcJt_eAIRfoloY-35CIV87T5NA_XRSO10qG6SfoUpE26Wn7kohLNRUzF1XW-HZCF0BTpbmK8IP58/s1600/with-hud.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="438" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBq-fa_AwxdddKgr-3wDWwcwfd7lSU3uFhJLBNvPcWi4zrN-jSurURmKItKjTKdlnpcJt_eAIRfoloY-35CIV87T5NA_XRSO10qG6SfoUpE26Wn7kohLNRUzF1XW-HZCF0BTpbmK8IP58/s320/with-hud.PNG" width="314" /></a></div>
<br />
<br />
Other important things to know are status effects, and whatever items or unique terrain is near you. (e.g. is that radiation?)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaOli8iGat9xGkDNxQCngO8KwExEu_5eiPmAgQ1PuA_H4lxEGldhLkCCOiSDF2QJcBXhva1xbkr2DJPFwTV1ManmqyvbTcf-0QvZ60D3TT1E5Ee5i6N-o9uGYtY91lVj9tyo8r1ouIs7g/s1600/items-in-view-hud.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="449" data-original-width="437" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaOli8iGat9xGkDNxQCngO8KwExEu_5eiPmAgQ1PuA_H4lxEGldhLkCCOiSDF2QJcBXhva1xbkr2DJPFwTV1ManmqyvbTcf-0QvZ60D3TT1E5Ee5i6N-o9uGYtY91lVj9tyo8r1ouIs7g/s320/items-in-view-hud.PNG" width="311" /></a></div>
<br />
The code to get this working was actually really fun to write.<br />
<br />
Other things tackled this week were 'conveyed' flags. Certain powers can now convey flags such as flight, or radiation resistance. In earlier versions I was doing this quite messily - lots of room for error when power systems were being installed or uninstalled. Now it flows quite naturally.<br />
<br />
This is important because at some point I plan on adding 'challenge rooms' that require you to sacrifice one of your power slots for an otherwise useless power. For example, there is a really amazing item inside the next system of rooms, but the rooms are irradiated. Fortunately, there is a system near-by that conveys radiation resistance - but you'll have to temporarily sacrifice something else in order to install it. What you choose to do away will may make the next couple rooms harder, depending on what's inside of them.<br />
<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-29555631480223912392017-07-25T21:48:00.001-04:002017-07-25T21:48:58.809-04:00Development Update: Handling the environment as a proper actorI may try doing some smaller updates as I typically code in short bursts these days.<br />
<br />
Recent Progress:<br />
<br />
<b>Doors</b><br />
Added doors! (Seems silly & was easy enough to do, I just didn't have them in there)<br />
<br />
<b>Targeting Locks</b><br />
Target lock - ranged enemies with this setting now need an extra turn before they fire. This gives you a chance to somehow block or otherwise avoid the shot (force them to move is an easy way). Even with the symmetrical FOV changes I did last week, it still felt like ranged attacks were a bit overpowered. This new mechanic has a fun feel to it - and also differentiates monster difficulty. Now I can have 'easier' ranged enemies that require a target lock - in later levels you may run into enemies that don't. Another idea is to give ranged enemies other disadvantages such as being immobile (turrets).<br />
<br />
<b>Environmental Effects</b><br />
This is mostly behind the scenes, but I added a special 'architect' actor, who acts on behalf of environmental effects (fire, gas, features that interact with player/monsters standing on them). Because my engine is event-based, it was getting a little kludgey to have terrain/feature effects work properly.<br />
<br />
This makes more complicated scenarios much easier to deal with. For example, if you want to have differing speeds for the player at some point (e.g. a haste or slow effect) then you want to be sure the 'environment' is behaving. If a player is trying to escape some gas or fire, and somehow speeds themselves up to escape, the fire or gas should not speed up too! Conversely, if a player somehow slowed, the gas should overwhelm them more quickly than normal.<br />
<br />
Eventually the architect will also control things like spreading nano-materials and timed explosives.<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-86902403612552094712017-07-21T22:41:00.000-04:002017-07-21T22:41:44.999-04:00Actual game mechanicsLots of tiny steps this week.<br />
<br />
I decided to spend some time rebuilding my FOV algorithm, which made it so ranged enemies weren't quite so deadly. This had some knock-on effects that caused me to clean up some more of the AI and generic 'awareness' code behind the scenes. All in all, time well spent.<br />
<br />
A main focus of hardpointe is tactical movement, and using the terrain to your advantage. To that end, there are ways for the player to actually create terrain, through various 'nano cores'. These are basically tubes of little nano-bots, and eventually their contents will be unknown to the player until they actually try them out (much like your traditional potions & scrolls). As a placeholder, affected tiles were simply a 5-square 'cross' centered on the point of impact. For the actual gameplay mechanic, I wanted something more interesting, but also predictable. I didn't want a quasi-random plume or cloud of gas. The mechanic I settled on follows a few simple rules:<br />
1. always covers 5 tiles<br />
2. always covers the target tile<br />
3. only grows in cardinal directions, in order: up, down, left, right.<br />
4. if any of these directions are blocked (by terrain, or existing nano-materials) it will stretch in the following direction<br />
<br />
<br />
This allows the player to (somewhat) reliably create structures that will advantage them, and disadvantage enemies. For example, one of the nano-materials makes you invulnerable for 3 turns, but this affects anyone who steps on the tile - it does not discriminate between player or monster. Combine this with both negative and positive effects and you (hopefully) get some interesting gameplay.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibM6dHLvKHe90hvbSo04hQ9Ouzvw9ZdlHKyCkl4-7mIu3JtO00KZvoV52Oco0FAIr5VUJ9n3yxFMDuJUBFkXJSLy72yTWf-K4k3TslXg4LbNKWnk793mEHOUK0HQDa-s5zkJnuChpv3uI/s1600/nano-01-cross.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="177" data-original-width="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibM6dHLvKHe90hvbSo04hQ9Ouzvw9ZdlHKyCkl4-7mIu3JtO00KZvoV52Oco0FAIr5VUJ9n3yxFMDuJUBFkXJSLy72yTWf-K4k3TslXg4LbNKWnk793mEHOUK0HQDa-s5zkJnuChpv3uI/s1600/nano-01-cross.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Default spread</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghXavf76B2VARBi51bb_HkP9G2r26OranaEv_wXiumGBTO99v5euwksycVE1VP72G1An-RoqIolu47oWtHjmGpigK2yBqD1bcRJHwTVLyyJqL1kQqD1lRlMLWcLtXjy5JNf17P7SurZ-Y/s1600/nano-02-corner.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="187" data-original-width="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghXavf76B2VARBi51bb_HkP9G2r26OranaEv_wXiumGBTO99v5euwksycVE1VP72G1An-RoqIolu47oWtHjmGpigK2yBqD1bcRJHwTVLyyJqL1kQqD1lRlMLWcLtXjy5JNf17P7SurZ-Y/s1600/nano-02-corner.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Corner limits spread in 2 of 4 directions</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyIEYp32cDkN_kT5QZs1XgQhhUqwr4heWQkozwnwhptTbJ47-PqwHHuKfqdBlPmcwdh-4Nd9nwFiFM6I5eZK3HfoT4HmeHzgWvQoJqfanWE3StE8rwOrbD7WnhKPFtZIEY2d2_1aVAHuI/s1600/nano-03-line.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="123" data-original-width="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyIEYp32cDkN_kT5QZs1XgQhhUqwr4heWQkozwnwhptTbJ47-PqwHHuKfqdBlPmcwdh-4Nd9nwFiFM6I5eZK3HfoT4HmeHzgWvQoJqfanWE3StE8rwOrbD7WnhKPFtZIEY2d2_1aVAHuI/s1600/nano-03-line.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Hallways can give you a straight line</td></tr>
</tbody></table>
<br />Surprisingly (or not surprisingly?) fun so far!<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-44752518965387278232017-07-21T21:10:00.000-04:002017-07-21T21:10:09.548-04:00Importance of SymmetryOne of the many joys of roguelike development is getting your ass kicked by your own game! However, in my case some of the deaths to ranged enemies felt like cheating. All I would do is come around the corner and blammo -- dead. Was this an example of my own reckless play style? Or an actual bug in the game?<br />
<br />
Turns out the problem was with my Field Of View (FOV) algorithm. Since I am using the amazing <a href="https://ondras.github.io/rot.js/hp/">rot.js</a> library, I had been using the default recursive shadowcasting field of view implementation. After poking around on roguebasin and re-reading Jice's awesome <a href="http://www.roguebasin.com/index.php?title=Comparative_study_of_field_of_view_algorithms_for_2D_grid_based_worlds">overview of FOV algorithms</a>, I realized my problem is that my FOV was not symmetrical.<br />
<br />
Now, depending on <a href="https://www.reddit.com/r/roguelikedev/comments/4g7lra/symmetrical_vs_none_symmetrical_fov/">who you ask</a>, symmetrical FOV may or may not matter. In a game with only 3 hit points, every shot counts. While I am loath to ever over-optimize, I felt it would be time well spent. I came across <a href="https://gist.github.com/as-f/59bb06ced7e740e11ec7dda9d82717f6">Albert Ford's implementation</a> of a symmetrical recursive shadowcasting and ended up coding something similar in typescript. The end result is exactly what I wanted.<br />
<br />
Before (Non-Symmetrical): This bot can see me, but I can't see him. Which means as soon as I step over, I'll be in range and get shot.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8uhxxMy2f6UhLqSWiXR_0RPDhTBswZZ3KqO8sU5p7DkfS0H7LM9NlND99XrDmog-hwWU4A_R0mZpJvepBZ83NzRDBqpXcvkJvMdzxpWH3USKHASK2PhS8v_FdFU_H-KnYB9Uoeyt7KAU/s1600/lopsided-me.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="272" data-original-width="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8uhxxMy2f6UhLqSWiXR_0RPDhTBswZZ3KqO8sU5p7DkfS0H7LM9NlND99XrDmog-hwWU4A_R0mZpJvepBZ83NzRDBqpXcvkJvMdzxpWH3USKHASK2PhS8v_FdFU_H-KnYB9Uoeyt7KAU/s1600/lopsided-me.PNG" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEive0bTxpXoG1_QrnId5QIFbmPaZ3zmLGTDeRdKYiGPKuIe7fpnC6AxZVlsdO6qfxsQCNFfopz2Rl9MZ977k5v_KOIr2uA6osEfTkbB55qmgCVgVQkZ6rxmn8noDa6uDKGxNanNx0Rk29g/s1600/lopsided-monster.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="293" data-original-width="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEive0bTxpXoG1_QrnId5QIFbmPaZ3zmLGTDeRdKYiGPKuIe7fpnC6AxZVlsdO6qfxsQCNFfopz2Rl9MZ977k5v_KOIr2uA6osEfTkbB55qmgCVgVQkZ6rxmn8noDa6uDKGxNanNx0Rk29g/s1600/lopsided-monster.png" /></a></div>
<br />
<br />
After (Symmetrical): Neither of us can see each other. In this case, the bot will move closer to the spot where he last saw me - sacrificing some range and giving me a chance to see him one turn before he can attack.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT5TzM5Z9miMPcbrPdEA4oQwB_Y-4FcLy6JeKmCQkkPKblnc2_n-5rWLk-kVR8IgPUrrUs3vSxpbv4yWoSCRbyVC53xz3KgXVAQ6lqDFndmATleOMeyXFiEgjReDYuA7ZsIOaOgiXEQlE/s1600/symmetric-player.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT5TzM5Z9miMPcbrPdEA4oQwB_Y-4FcLy6JeKmCQkkPKblnc2_n-5rWLk-kVR8IgPUrrUs3vSxpbv4yWoSCRbyVC53xz3KgXVAQ6lqDFndmATleOMeyXFiEgjReDYuA7ZsIOaOgiXEQlE/s1600/symmetric-player.PNG" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2n9yCnAlFDNLuEsZgKjR3wiGMDweucRwB4wxWrCkSpvHn3F7wiruPf1o2VRY_Gg_Jjb8Yh04XZ8H6AThnrdNdbMH1a94DZSOIaVZGhUOpjkDR6lFwO8hhMJoSMTByiZdWNE6tGnfyABQ/s1600/symmetric-monster.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="281" data-original-width="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2n9yCnAlFDNLuEsZgKjR3wiGMDweucRwB4wxWrCkSpvHn3F7wiruPf1o2VRY_Gg_Jjb8Yh04XZ8H6AThnrdNdbMH1a94DZSOIaVZGhUOpjkDR6lFwO8hhMJoSMTByiZdWNE6tGnfyABQ/s1600/symmetric-monster.PNG" /></a></div>
<br />
<br />
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-53082633001276275672017-07-16T20:37:00.001-04:002017-07-16T20:38:52.444-04:00Initial gameplay coming togetherHave been making steady progress on the core gameplay elements of hardpointe. I do feel like the end result is even a little bit.. fun? (Shocking to me most of all)<br />
<br />
Here's a longer-play gif of the game in action, with <i>slightly </i>less-embarrassing colors.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCDChV2WRvgTbDZsqGiryRB1zgSbfIz1V5rMV2VXmCjmiUAFNHKkOVfuX94q7IZCcYY1PwUVUUM5aMZOk-Bhrk4txiLinVB9noBXbD_-SPD_9vF0yl1hia6vhusA5PWZJ4HnUgcoNST7A/s1600/sharing-sunday-163-update.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="353" data-original-width="216" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCDChV2WRvgTbDZsqGiryRB1zgSbfIz1V5rMV2VXmCjmiUAFNHKkOVfuX94q7IZCcYY1PwUVUUM5aMZOk-Bhrk4txiLinVB9noBXbD_-SPD_9vF0yl1hia6vhusA5PWZJ4HnUgcoNST7A/s320/sharing-sunday-163-update.gif" width="195" /></a></div>
Current feature list:<br />
<br />
<ul>
<li>All six initial powers:</li>
<ul>
<li>Shield</li>
<li>Heavy Axe</li>
<li>Booster/Charge Attack (was originally jet pack?)</li>
<li>Cloak</li>
<li>Phasewalk (not sure if this one will make the cut)</li>
<li>Hack (turn enemies into allies)</li>
</ul>
<li>One-off weapons (take up power slots but limited/non-rechargeable ammo)</li>
<li>Various combat effects:</li>
<ul>
<li>Stun</li>
<li>Knockback (concussive)</li>
<li>EMP blast (in progress)</li>
</ul>
<li>Enemy behaviors:</li>
<ul>
<li>Basic melee</li>
<li>Keeps distance (ranged attack)</li>
<li>Explodes on death</li>
<li>Attacks in packs</li>
<li>Uses / recharges shield (in progress)</li>
</ul>
<li>Terrain:</li>
<ul>
<li>Chasms (if knocked into one you or enemies drop to the next level)</li>
</ul>
<li>Combat mechanics:</li>
<ul>
<li>Wall-smash</li>
<li>Corpse-tossing (heave enemy remains into other enemies)</li>
</ul>
<li>Items:</li>
<ul>
<li>Grenades (simple damage & effects)</li>
<li>Nanotech Cores (effects like acid and health - so far)</li>
</ul>
</ul>
<div>
<br /></div>
<div>
Whew. Seems a lot longer when I type it out. Stay tuned. </div>
<div>
<br /></div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com3tag:blogger.com,1999:blog-1933319608132202788.post-30058700038989920352017-06-17T18:11:00.001-04:002017-06-17T22:05:35.770-04:00Return of Heavy AxeA lot of the powers/abilities in hardpointe are my favorite recycled bits from previous 7-Day Roguelikes. My favorite by far was my 2015 entry: <a href="https://www.reddit.com/r/roguelikes/comments/2z30b5/7drl_heavy_axe_success/">Heavy Axe</a>.<br />
<br />
In any event, after some only minor tweaking to the pathfinding code, I now have a 'Heavy Axe' ability in hardpointe that functions much the same: a unique item gets thrown across the map. Use the power again to "recall" the axe, which will travel back to you and smash into any enemies along the way.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUIE2fIrnP6ITwO6iu_l3whitgDvUj5ANoX_soGXGKy1L2CTaDVJHurac6lw7S4m9_SJrGy9Cjh0tnnHLw-n7Z1CnqNAVUgnB_MiDMtGp9cuKaGjKCwpZpY3QPTaw1xBAypppgLda0wJw/s1600/hardpointe-demo-04-axe.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="367" data-original-width="229" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUIE2fIrnP6ITwO6iu_l3whitgDvUj5ANoX_soGXGKy1L2CTaDVJHurac6lw7S4m9_SJrGy9Cjh0tnnHLw-n7Z1CnqNAVUgnB_MiDMtGp9cuKaGjKCwpZpY3QPTaw1xBAypppgLda0wJw/s320/hardpointe-demo-04-axe.gif" width="199" /></a></div>
I also put a few <a href="https://www.reddit.com/r/roguelikedev/comments/6hqc5j/sharing_saturday_159/dj14f8f/">more gifs on this Sharing Saturday thread</a> on <a href="https://www.reddit.com/r/roguelikedev">/r/roguelikedev</a> if you want to see more!Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-46025707515055813912017-06-10T18:32:00.000-04:002017-06-10T18:49:39.869-04:00Hardpointe Development PrinciplesI recently ready a blog post called <a href="http://agingminotaur.blogspot.com/2017/05/rant-slow-application-development-sad_12.html">The Slow Application Development Methodology</a> that got me thinking about what I enjoy about hobby roguelike development, but also some frustrating parts of dealing with my own limited productivity.<br />
<br />
Here are some brief <strike>design</strike> <u>development</u> principles for my current project, in the hopes stating them publicly will help me stick to them. These principles come from experience over the course of many <a href="http://www.roguebasin.com/index.php?title=Heroic_Fisticuffs">7-Day Roguelike Challenges</a> (both successes and failures) and most importantly, learning my own weaknesses.<br />
<br />
<ol>
<li>Make a game YOU want to play</li>
<li>You are not building a roguelike engine<br />(no, seriously..)</li>
<li>Don't reinvent the wheel (<a href="http://ondras.github.io/rot.js/hp/">ROT.js</a><span id="goog_1648797273"></span><a href="https://www.blogger.com/"></a><span id="goog_1648797274"></span> is your friend)</li>
<li>Work on small chunks at a time - no grandiose leaps into <a href="http://roguelikedeveloper.blogspot.com/2008/12/refactoring-hell.html">refactoring hell</a></li>
<li>You really, really, really aren't building a roguelike engine</li>
<li>Aim for a solid 'coffee break' game worth of content.</li>
<li>When you have something that's not embarrassing to play, get some feedback from real users</li>
<li>Expand core gameplay only after #6 is done</li>
</ol>
<div>
Looking to have #7 done by the end of this month.. we'll see! In the meantime, here is some more gameplay. I have 4 working powers, and have completely rebuilt the menu system so that it is super-easy to drop in new interfaces. This is the kind of thing that is boring to code but will make future features so much easier to add.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAyBhyVjBFn-YExtrQYScWsNXQp5CjaOqA3uKXheltJhmzPa0aaNwKja6GB6ZBmEWcMXWgmju2bqLMs6TCWUVi_oW2HpOgzvP0QaJNEKI-TdVpbA5o2VukIKWLv5irNjiQ1E9x1kly7S8/s1600/hardpointe03.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="367" data-original-width="229" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAyBhyVjBFn-YExtrQYScWsNXQp5CjaOqA3uKXheltJhmzPa0aaNwKja6GB6ZBmEWcMXWgmju2bqLMs6TCWUVi_oW2HpOgzvP0QaJNEKI-TdVpbA5o2VukIKWLv5irNjiQ1E9x1kly7S8/s320/hardpointe03.gif" width="199" /></a></div>
<div>
<br /></div>
Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-73817389897753407632017-05-14T17:56:00.002-04:002017-05-14T17:56:56.912-04:00Hardpointe UpdatesSlow but steady progress on hardpointe. While trying really hard not to fall into premature optimization, I did find myself running into a common problem that I have with <a href="https://www.reddit.com/r/roguelikedev/comments/4g3s70/animation_and_rotjs/">animation and rot.js</a> (javascript in general). One of the comments in that thread was to use postal.js, which seemed like overkill at first but is actually working extremely well.<br />
<br />
At this point, the entire game is event driven, which makes inserting animation or other events in between gameplay super easy.<br />
<br />
Here's the latest gameplay, showing one of my favorite attacks, the charge (aka rocket punch). I'm leaving aside decisions on damage aside for now, but probably they will be more lethal.<br />
<br />
The overall idea is that the player will not have access to a lot of (direct) ranged attacks. So your best strategy will be to get up close and personal quickly, and then either (a) kill everyone in a few turns (you only have 3 hp or so), or (b) escape.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGZgqca6kxCAfU9I-oLAkDoDD5czNOPlSPTy-LSvCRFjOhIZdXPotk2zps8k7hegFonxiZ4P_7MPRRe6BfFp991PG2qxUFEWa4h21N9cjBoqWOAIJpl2DgmxfI2rjNQ5E2-P5yboFmjxY/s1600/hardpointe02.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGZgqca6kxCAfU9I-oLAkDoDD5czNOPlSPTy-LSvCRFjOhIZdXPotk2zps8k7hegFonxiZ4P_7MPRRe6BfFp991PG2qxUFEWa4h21N9cjBoqWOAIJpl2DgmxfI2rjNQ5E2-P5yboFmjxY/s400/hardpointe02.gif" width="250" /></a></div>
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0tag:blogger.com,1999:blog-1933319608132202788.post-18613922263688170782017-04-05T20:54:00.000-04:002017-04-05T21:26:03.560-04:00Hardpointe, a failed 7DRLHi everyone. Been a while.<br />
<br />
As with every year since... 2010? I entered the <a href="http://7drl.roguetemple.com/">Seven Day Roguelike Challenge</a>. I thought I had enough old code lying around and enough free time to punch out something playable, but decided to pull the plug on day 5.5.<br />
<br />
Since then, the idea has really stuck in my head and it's a great excuse to kick some of the rust off of my lackluster coding abilities. I've written this one in <a href="http://www.typescriptlang.org/">TypeScript</a>, which is a joy to use along with the VS Code IDE. It makes coding for short periods of time actually possible since it takes almost no time to get back into the "flow". And of course as per usual I am using the amazing <a href="https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiy1O2b1o7TAhXGQSYKHXxhDhoQFggcMAA&url=http%3A%2F%2Fondras.github.io%2Frot.js%2F&usg=AFQjCNE8vU1RzvReFUIPbwrqZIIBoPQPVw&sig2=I4dvlo1e9j9Ni1Qi4iO61g">ROT.js library</a>.<br />
<br />
In any event, here's what the game looks like so far:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV9mKtMuVsyV4kD7I5kd4GlXeVECWTbiakJ-8ZJ_u-3A2RJNpp4HhehVzgGiI6edlrdv7rgHLZKoj0BldimyAlyzjEP5gltmlDERm6xCxAcgtg859xNbcxOjMwjijuNBFVC8qJepdd0s8/s1600/testrun.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV9mKtMuVsyV4kD7I5kd4GlXeVECWTbiakJ-8ZJ_u-3A2RJNpp4HhehVzgGiI6edlrdv7rgHLZKoj0BldimyAlyzjEP5gltmlDERm6xCxAcgtg859xNbcxOjMwjijuNBFVC8qJepdd0s8/s320/testrun.gif" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
I have a few design principals for this game, called "hardpointe":</div>
<div class="separator" style="clear: both; text-align: left;">
1. Tactical combat built from fun mechanics</div>
<div class="separator" style="clear: both; text-align: left;">
2. Interesting enemies, with behaviors that match their abilities</div>
<div class="separator" style="clear: both; text-align: left;">
3. No numbers over 3</div>
<div class="separator" style="clear: both; text-align: left;">
4. Minimal buttons/input keys (4b: playable with a gamepad)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The main idea is to have the player build up a small set of powers across a restricted (3-4) number of "systems", which can be activated with limited resources. Think Mega Man but with less recharging. As close to a "one hit point" system as I can manage. Right now 3 health feels right. Enemies have 1 or 2 health. The goal will be to destroy as many as possible without getting hit by chaining together attacks, abilities, and escape mechanics.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Right now all I have is a wall-smash, which I find very satisfying. Enemies have 2 health, and the player typically does 1 damage. But, if you attack "into" a wall you will deal 2 damage and can use this tactic to take enemies out before they have a chance to scratch you.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
More to come. Meanwhile go and play my favorite 2017 7DRL so far: <a href="https://github.com/marukrap/Woozoolike">Woozoolike</a>.</div>
<br />Toddhttp://www.blogger.com/profile/10037630225847201081noreply@blogger.com0