Author Topic: Hero Trap [7DRL 2017 - Finished!]  (Read 36805 times)

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Hero Trap [7DRL 2017 - Finished!]
« on: March 04, 2017, 06:55:14 PM »
You can now play it at http://noisyowl.com/herotrap/.  Or the competition version http://noisyowl.com/herotrap/7drl/

Original post follows. You can find the post where I announced it, and thus any post-release discussion, on page three.



I'm using this 7DRL to get back into the roguelike dev scene after a long absence (and a screen name change).

My goals for the week are:
  • Make a traditional roguelike, but the very first monster kills you if you try to melee it to death.
  • Show off some fancy generator tech I never got around to releasing.
  • Prove to myself that I can still make something unreasonably big in a short time (I used to have a bit of a reputation for it).

« Last Edit: March 12, 2017, 08:36:43 PM by jtolmar »

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #1 on: March 04, 2017, 07:19:01 PM »
As a base, I'm using rot.js and an abandoned roguelike that I was working on last year.

It looks a lot like the result of the Coding Cookies rot.js tutorial (http://www.codingcookies.com/2013/04/01/building-a-roguelike-in-javascript-part-1/), plus some minor code cleanliness changes and an advanced level generator system based on competing floodfills (I may explain this later). Chunks of the generator are tied to the previous game's design and need to be torn out, so here's what it looks like when it's doing blank rooms: http://i.imgur.com/mTFBx3R.png.

I also have a fair chunk of design notes, which has a great selection of monster notes and a sparse, handwavey section on item notes.

I plan to start actual development after lunch.

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #2 on: March 05, 2017, 01:48:39 AM »
About three hours in. I copied all the monsters from my design doc into the game (just character/color/name/description, not implementation), did some code cleanup (notably I simplified that tutorial's TaskActor), and got to work on implementing monsters.

Monsters represented with capital letters are things you should avoid or cheese to death, and never fight in a straight battle. Monsters with lower case letters may be threatening and nuanced, but you should usually be able to beat them for free with proper application of melee bump attacks. Within both of these classes, monsters are divided into easy/medium/hard groups for how deep I want them to show up in the dungeon.

The first monster in the game is guaranteed to be an easy capital-letter monster. I've done four of those so far:
  • Golems are near-indestructible and hit quite hard, but move at half speed and are easily avoided
  • Krakens are tough and hit very hard, but they're confined to lakes
  • Saws are tough, hit extremely hard, and spawn in high numbers, but they just bounce back and forth in a fixed path so you can avoid them easily
  • Hieroglyphs are tough and hit very hard, but they're confined to the insides of walls

Here's a gif of some saws and hieroglyphs: http://i.imgur.com/JN0q4RS.gif. So that's looking great, but the gif is a bit of a lie because I haven't updated the level generator yet and usually you find krakens and hieroglyphs stranded in places they shouldn't be: http://i.imgur.com/k7Idf7Y.png. This will be my next priority.

Easy lowercase monsters I've completed are zombies (slow, hoardy), quails (fast, possibly overpowered), fungus (harmless, replicates, behaves closer to the coding cookies tutorial than to my plan but I think I'm leaving that alone for time), and ghosts (basically the Pacorepkin monster from Shiren). I've finished two hard monsters (wraiths and Jabberwocks) that were just statistically different from one of these.

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #3 on: March 05, 2017, 06:15:46 AM »
Added the ability for monsters to bring the appropriate type of level generation with them, and added a bunch of room types to go along with that.

Now you can see Krakens in lakes and ghosts in graveyards:



And here are quail nests and the columny areas that golems spawn in: (I couldn't get a better shot because I kept getting ganked by quails in this build.)



I've also added two more easy capital monsters: Unicorns don't bother you unless you attack them, then they maul you to bits. Imps stalk you but refuse to take the last step to get adjacent to you. I'm not completely satisfied with either - I feel like the unicorn needs more personality and the imp is actually much too hard - but more tweaking will probably help.

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #4 on: March 05, 2017, 09:18:24 PM »
Did some detail work on the level generator where it was bugging me. Now the first floor has lots of grassy stuff going on:



The stairs have their own rooms (though a wall may have been destroyed by an adjacent room): http://i.imgur.com/5TRa0lR.png

And I switched the items over to this game's basic pool, instead of some other game's item pool with much higher stats. This came with a hunt for fun unicode: http://i.imgur.com/buaozpO.png

Finally, I added the ability for monsters to shoot projectiles, and with that a simple animation system that I'm not going to attempt to catch in a screenshot, and with that I broke the messaging system so half the messages fail to render. Whoops. I'll get to that eventually.

New medium-difficulty monsters (capitalization matters):
  • Trolls are entirely vanilla for now. The plan is to make them ignore weapons and fall over to most other things, but I need other things first.
  • Oklob Plants are imported from DCSS. These ones don't have acid attacks, they just hit really hard and don't move. Currently since the FOV algorithm isn't symmetric they can get some unfair snipes off. I'll have to fix that.
  • elves have a ranged bow attack. I plan to add a bit to their AI so they run away while waiting for the cooldown.
  • Eggs just sit there unless you spend too long standing around next to them, or damage one. You can run past one without it hatching, but just barely. Even knowing the exact mechanics, I find egg rooms horrifying.
  • Yellowjackets spawn from Eggs and don't generate on their own. They're almost as tough as Jabberwocks (which are hard-tier) and can spawn in higher numbers, so don't mess with Eggs.
And one more hard-difficulty monster, centaurs are really just fast elves.

The medium-tier monsters are getting too difficult to handle without magic items, so I can't really tune the floor difficulty (the easy floors are rough but achievable with just a sword, which seems right). I'm going to start working on item mechanics soon, though I'll also mix in more work on medium-strength monsters, because the level generator will work better if I have at least 5 medium-capital and 5 medium-lowercase monsters.
« Last Edit: March 05, 2017, 09:23:13 PM by jtolmar »

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #5 on: March 05, 2017, 11:16:21 PM »
Added a few monsters. Here you can see the mess you get if you spawn Liches on floor 1 and run around a while:



New medium monsters:
  • harpies will jump over you if there are monsters piled up behind them. This is borrowed from Shiren's Floor Dragons, but making them appear in swarms makes the effect much more common and nasty.
  • infernals teleport towards you, similar to Dar Blademasters in Brogue.
  • Necromancers are pretty easy to kill, unlike most capital monsters, but they summon gobs of lesser monsters (easy lowercase) and are hard to get to
And Liches are a hard version of Necromancers with an expanded summon list (includes medium lowercase and Golems). Later they'll have Brogue-like phylactery behavior.

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #6 on: March 05, 2017, 11:54:01 PM »
I consider the details in this post to be more spoilery than usual, so if you're already interested in playing this (I'm flattered), and don't want to be spoiled, I'd skip over the quoted chunk. (Also, if this forum has a spoiler function I missed, I'd appreciate knowing how to use it.)

Quote
One of the big tricks I'm doing here, which doesn't show up in screenshots, is how I randomize the dungeon's contents. It's 26 floors long, and each floor introduces a new monster, but I have plans for up to 52 monster types (my goal for 7DRL is to implement between 34 and 44). This means some monsters don't appear each game. Instead I shuffle the monster list at the game start, and pick four Easy, four easy, five Medium, five medium, four Hard, and four hard monsters.

I want to do something similar for items, but making more than an entire roguelike's worth of interesting items is even harder than doing it with monsters. So my solution is to make boring redundant groups of items and only include one per group, thus making them no longer boring and redundant, and making the item identification game funky.

That means that I can code a fire effect, put it on a potion (Brogue's potion of incineration), a sword (flaming sword!), an armor (Brogue's armor of immolation, a bad item), a staff/wand, or scroll. But then I'd only include one (maybe two) of those in a given game. I really like what this does to the item identification game - it effectively puts all the items in the same pool so the mysteries last longer.

If anybody can think of a reasonable effect for a Sword of Telepathy, Sword of Fire Immunity, or Sword of Respiration, I'd appreciate it. They're all weird to apply to yourself when you hit something, and all too minor to make a good cursed item (unlike the Sword of Invisibility, which is awful).
« Last Edit: March 05, 2017, 11:59:34 PM by jtolmar »

Magma Fortress

  • Newcomer
  • Posts: 9
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #7 on: March 06, 2017, 01:36:31 AM »
Looks great so far.  I'll be keen to give this one a go when it's ready

Certainly a lot more ambitious that what I'm hoping to achieve this week.

Sword of Telepathy idea: killing a monster with it grants you vision/location knowledge of that monster type for X turns?

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #8 on: March 06, 2017, 02:43:09 AM »
Did enough medium-difficulty monsters to satisfy the level generator. A few more would help, since right now it's picking five random choices from a list of five, but it's enough for me to be working on playability now.
  • Faceless - can only see you if you're moving. Waiting for it to go away was tedious with the old wandering behavior (random adjacent) so I replaced that with purposeful wandering (A* to random tile). Then it wasn't hanging out in its creepy columny area well enough, so I made them patrol an area. Then I replaced the wandering AI of most monsters with variants on that, because it's awesome.
  • lizard - a big poisonous lizard. Currently separate applications of poison stack, which is brutal, and I probably need to change it, but I'll wait until I have items so I can be actually playtesting. I also made Yellowjackets poisonous.
  • ur - a shaggy humanoid. They have a knockback attack that sends you flying quite a distance, possibly into more trouble.

The Faceless ended up being quite a bit easier to avoid than I expected so I swapped its slot with the Imp (a former easy-tier monster that was too cruel).

Looks great so far.  I'll be keen to give this one a go when it's ready

Certainly a lot more ambitious that what I'm hoping to achieve this week.
Thanks!

I feel like every 7DRL should have exactly one ambitious thing, and coding a new engine from scratch (which it sounds like you're doing) counts. One of the more popular ambitions is making a big genre twist, and I don't think my "capital letter monsters" concept counts because I finished it in the first three hours. So my ambitious thing has to be content.

Sword of Telepathy idea: killing a monster with it grants you vision/location knowledge of that monster type for X turns?
That's great, I like the idea of picking monster types based on kills. It also gives me an idea for a Sword of Clairvoyance - it gives you vision of the dead monster's nest.

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #9 on: March 06, 2017, 06:13:13 AM »
Fixed some bugs with hieroglyphs and saws that cropped up at some point (saws stopped attacking the player and I'm not clear why they worked previously). Hieroglyphs and Krakens will now attempt to teleport to a nearby valid square if they've spawned wrong. That'll be fine until I make some effect that's supposed to strand them.

I created an "effect" system to hold things items can do, made items call into the proper part of their effect, created the Blink effect, and generated some potions and scrolls with Blink. The potion actually worked on the first try, I was quite surprised.  The scroll initially tried to repeatedly blink things that landed in the effect radius on the first try, which was confusing to look at, but fairly easy to sort out.

Scrolls of Blink are pure chaos. Here I tried to get a before and after of using them to shuffle Krakens around between different lakes, but forgot it'd send me to the other side of the map too. I'm pretty sure the Kraken in the second shot that doesn't look like it moved is actually the Kraken that was stuck in the 1x1 lake in the first shot.




I still need to wire armor, weapons, staves, and scrolls to their effects. Armor and weapons will be fairly easy. Staves and scrolls need me to make a targeting UI which is more of a pain.

I haven't done the generator or item-id portions, since I only have one effect. The generator portion looks pretty straightforward, item-id looks fiddly. Once I got all the infrastructure in place it only took about an hour to make Blink, though, which is fairly encouraging. An hour a piece would be too much, but this sort of thing tends to accelerate a bit as you have more code to play with.
« Last Edit: March 06, 2017, 06:15:07 AM by jtolmar »

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #10 on: March 06, 2017, 06:51:02 AM »
Nerfed quails.

Just couldn't take being ganked by birds anymore.

KhaoTom

  • 7DRL Reviewer
  • Rogueliker
  • *
  • Posts: 64
  • Karma: +0/-0
    • View Profile
    • My Projects
Re: Hero Trap [7DRL 2017]
« Reply #11 on: March 06, 2017, 09:03:48 AM »
Nerfed quails.

Just couldn't take being ganked by birds anymore.

Awww. I was finding that amusing :)

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #12 on: March 06, 2017, 05:45:30 PM »
I was a little worried about completing the 7DRL and decided to take a detour from items and finish off a minimum number of enemies. The plan is to get barely enough enemies for every region and make going down the stairs on floor 26 abruptly win the game. Once that's done it's technically a complete game and I can focus on making it actually winnable.

New hard enemies:
  • ogre - they like to hit you on the head with their clubs. Dizzying attack
  • vile - a time gremlin. Killing one slows everything within a 5-tile radius
This puts the hard-lowercase count to 4 (with wraiths and centaurs), which is my quota. That means just two more hard-capital monsters and a win screen to call this a "game."

I need to do something to make status effects easier to understand; right now it's very opaque. I'll probably note them next to the HP display. Dizziness sometimes steals your turn, and I don't have anything in place to show what's happening in the interim, so that's pretty confusing too. I'm likely to leave that alone for 7DRL though.



Awww. I was finding that amusing :)
I was having fun complaining about them. But I decreased their attack from 3 to 2 and they're still the most dangerous easy-lowercase monster by a fair margin, so I think I made the right call.

jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #13 on: March 07, 2017, 01:48:27 AM »
Added a wizard mode. It makes everything explored/visible, makes you invincible, allows you to go downstairs without stairs, and turns the @ sign purple. It's not a final feature, but it's going to make testing lower floors a little easier. So if you see any screenshots with a purple @, know that I'm a cheating cheater who cheats.

I figured out a simple generator change that will help give lower floors a different character from the rest. You may have noticed that the game is loosely on a 5x5 grid. I now randomly skip an increasing number of the grid's filler rooms as you go down in the level. Nearby rooms will claim the missing territory and get bigger on their own, because this generator never actually relied on there being a grid at all.

Here's the fourth or fifth floor (who knows), first before the change, and second with the effect cranked up all the way.



jtolmar

  • Newcomer
  • Posts: 43
  • Karma: +0/-0
    • View Profile
Re: Hero Trap [7DRL 2017]
« Reply #14 on: March 07, 2017, 02:33:18 AM »
Rough sketch of what a dungeon quail looks like. So we're all on the same page. (Also because I enjoy trolling my ornithologist friend.)

« Last Edit: March 07, 2017, 02:35:12 AM by jtolmar »