DRODLike, working towards demo release


#1

Making a thread for this on the new forums too. Haven’t updated in awhile, but on a whim I decided to write a clone of DROD, a pretty cool puzzle game.

current status, click to play in a browser: (if it black screened before, it should work now!)

This is a learning project for me, so it’s more about the toolchain than the game. Refining a lot of little random things here and there, it’s working out pretty nicely. It’s written in OpenFL, which is a Haxe framework that exports nicely to every native and mobile platform, HTML5, and Flash. It’s pretty okay stuff, I’m working on a code chain that’ll let me nicely integrate with users of all platforms, but it’s going to take some time to get everything I need.

I hate all of the art in this, none of what exists is going to survive. Honestly it was all done on a whim anyway, needed a practice project and this was as good as any. Been off and on making attempts at new styles but nothing I feel like posting yet. Got some ideas on where to go from here.

More to come, some day. Who knows when.

edit: The thread over on Old Selectbutton


Let's DROD: The Grand Finale~
#2

Nice work. I’ve always liked DROD, though I’m not very good at it. (Which is probably why I got stuck on the second stage of your game.)


#3

Yeah almost everyone told me that the second stage was hard, because they weren’t familiar with diagonal movement or ways of breaking up groups of enemies. When I revisit the levels I will have an actual tutorial in place for that kind of stuff; I was just trying to copy stock DROD puzzles.

It actually differs from DROD here because enemies are sorted by distance from the player, so what you see is always what you get.

I told myself I wouldn’t update it until I made a new tileset for it, which I’ve made a few cracks at but I’m currently focusing on other aspects of learning to draw. Expect the next version to look, uh, completely different, when I get back to it. Which may be awhile because I have a really full plate!

The engine is basically pretty solid and I could add pretty much all of DROD’s own stuff pretty easily, but I want to diverge from it on a few points and do my own thing. A few goals I had in mind were:

  • No hidden information on screen, like making the player click to figure out what orbs do.
  • Smaller stages. Most DROD stages feel just way too large and take longer for the sake of taking longer, not really making good use of the puzzle mechanics.
  • Similarly, compress some of the mechanics that chew up excessive room, like the 1 tile thick toggle walls can be reduced into something that doesn’t take up as much room.
  • No connected overworld type, just individual stages. I think allowing for more arbitrary entrances/exits outside of level starts/ends is good.

Note I’ve cleared a few of the DROD games, so I’m not actually dissing on it at all, but I think I can do a take on it that’s more along what I want to see.


#4

No update, as I still have way too many other things I’m working on that take priority atm, but I want to brain dump for the next dev phase.

Style/aesthetic/etc:

  • I’m still learning to draw, but have been taking attempts at assets off and on for the past month. Nothing I like yet, but I’m getting a feel for where I want to go and how I want to do it.
  • Ugh no zombies please getting rid of those.
  • But, I would like to keep the undead monster mash kind of theme going on, so probably going to try to theme the tileset around spooky graveyards.
  • Ideally, these groups of tiled assets, in no particular order: Dirt, grass, water, pits, walls, general obstacles.
  • Need to have some way of handling popup text. Specifically for tutorial content, I found a lot of people didn’t know they could move diagonally!
  • DROD’s story bits were kind of busy taking itself too seriously. I want to run the opposite direction here.

Gameplay:

  • So one of the things that’s partially implemented in that build, that I’ll work on when I get back to it, is that there’s the concept of colored ‘barriers’. When a tile is marked as a barrier, the edges of that tile to a non-barrier tile are blocking for both player and attacks. So for, say, a blue barrier, you can walk around inside it, or from outside of it, but can’t cross, and switches would turn them on/off.
  • Switches are probably going to be one-time objects with a floor object that can ‘refresh’ them. Possibly to different switch types? Altars that can affect switches of neighboring tiles? I can see some annoying designs coming from this but I’m not sure that’s actually compelling for a player. Probably need to sit back and formalize some things before I get too gung-ho about this.
  • Recently while playing Shiren the Wanderer 5 (now getting localized!) I was thinking about how some of the enemy designs could be transferred to a puzzle game like this one.
  • Polygons were an enemy that, if next to you, would attack you, but if you were somewhere else in the same room, would teleport to an adjacent tile on your opposite side. I’d like to copy this, and I think it would work, but I kind of have to define what ‘same room’ is for this to be something that makes sense to a player. To communicate it I’d probably have the enemy with a ‘sleeping’ state for when not in sight and a ‘waking’ state for when it is able to move next turn.
  • Which leads to… Do I want to have ‘line of sight’ be a mechanic for things in the same room? What is a room? I feel like a simple rule would be that ‘same room’ includes all neighboring that are not 1 tile width corridors. Would be easy to build a table of ‘rooms’ like this and not too hard for players to visualize.

Some other thoughts, but probably going to shut up until an actual game update comes.


#5

if not zedz, then jiangshi?
hoppin is v. tile-friendly
then mayhaps variants of ‘can/only hop two tiles at once’, ‘every other turn’, ‘prioritize non-player goal’ (keep them from escaping???)

long-term over-complication: placing seals enemies can’t cross

re:text: some kinda “narrator” window/ticker on top/side/bottom (scroll aesthetic?)
changing based on invisible switches hit/conditions fulfilled


#6

Yeah maybe Jiangshi. I’m going to learn to draw better before I settle on anything really.

As far as priorities go, it’s a puzzle game more than an action game, so I want enemy behavior that is both predictable and makes for interesting puzzles. Have to work on that a bit.

Original DROD had force arrows to control enemy and player movement. I kind of liked them and kind of thought they were a bit hacky.

For text I was thinking popup dialogue boxes on the bottom. Possibly automatic, possibly not. I don’t really like DROD’s popup dialogue personally; but again I don’t really care about the story, it’s just for flavor and, more importantly, tutorials, here.

Tutorials are something I need to think on more when I get this together. I think I’ll probably spend awhile trying to reinforce concepts early before moving on.


#7

Still working on this off and on when my brain is functional. Today my brain is migrained up useless mush, so I’m talking about it instead.

Some stuff done:

  • Completely separated game logic from rendering. Now game logic spits out events, and the renderer handles these as it pleases.
  • Undo stack now uses events instead of storing the whole object state. Dramatic memory usage reduction, now we’re around 400 bytes/turn when everything’s moving, with the impossible worst case being around 8kB. Much less than before.
  • Visibility of events are handled in a blocking order that waits until the object that activated it finishes acting. So a player that moves, then lands on a switch, it will display the two events in order. It can run all objects simultaneously like this, blocking only when it needs to! Lets me do dynamic effects that I couldn’t in the old system.
  • Completely rewrote the game renderer. As dynamic map changes are a thing, it now takes a list of input rules which it will use to determine what gets drawn. More on this in a bit!
  • Made some core decisions on what content is going to be happening for the initial fixup.

Some stuff still left to do:

  • Currently thinking there’ll be two processing modes for game events: Simultaneous mode, how it looks now with all object actions happening at the same time regardless of what order things happen in, and a blocking mode that will wait until certain actions have finished, like stepping on a switch, to show the rest of the turn, so that players know what order things happened in.
  • Have to clean up the asset loading a lot; OpenFL is really driving me crazy lately. I dislike the Flash focus, and am sort of tempted to start rolling my own library on top of Lime.
  • Some major issues with object sorting order, probably easy to fix once I’m feeling up to bashing ont hat code.
  • Still very bad at drawing, but trying to make assets still. Getting better!
  • With the event split, there is no reason I couldn’t use the same exact code to make a roguelike instead. I may end up doing this in the long term.

Long term code things:

  • The only reason I have for using OpenFL at this point is HTML5 as a target. Need to think about other approaches for this. Canvas being a big ball of pain is something I’ve danced around for awhile but probably need to deal with directly.
  • OpenFL’s audio support is garbage. Using a timer to handle looping? Really? Get outta here.
  • Long term thing but I kind of want to script object behavior instead of writing it in code. That’s a lot of work for not much gain; maybe if there’s modding interest I’ll consider it in the long term.

Aside from menus, this is basically code complete for the core game! Hooray! (and yes I know I’m ignoring some stuff that’s higher priority, but brains)

So the rules for drawing the map tileset! I decided that I wanted to have something that could determine what to draw based on the neighboring tiles, so that tile layers can have edgings created dynamically. I ended up with something like this:

<tile id="PIT,WATER"> <!-- Draws pit for either pit, or water draws -->
  <one> <!-- only draw the first one of following that matches -->
    <rule u="!PIT,!WATER"> <!-- draw the pit extending into darkness
      <draw layer="ground" freq="1" x="96" y="0" />
    </rule>
    <rule> <!-- draw the pit itself by default -->
      <draw layer="ground" freq="1" x="0" y="0" />
      <draw layer="ground" freq="1" x="32" y="0" />
      <draw layer="ground" freq="0.5" x="64" y="0" />
    </rule>
  </one>
  
  <!-- draw side walls -->
  <rule l="!PIT,!WATER"> <!-- left pit wall -->
    <draw layer="pitedges" x="0" y="32" xOffset="-16" />
  </rule>
  <rule r="!PIT,!WATER"> <!-- right pit wall -->
    <draw layer="pitedges" x="32" y="32" xOffset="16" />
  </rule>
  <rule u="!PIT,!WATER"> <!-- up pit wall -->
    <draw layer="pitedges" x="64" y="32" yOffset="-16" />
  </rule>
  <rule d="!PIT,!WATER"> <!-- down pit wall -->
    <draw layer="pitedges" x="96" y="32" yOffset="16" />
  </rule>
  
  <!-- draw corners -->
  <rule l="!PIT,!WATER" u="!PIT,!WATER" ul="!PIT,!WATER"> <!-- up-left pit corner -->
    <draw layer="pitedges" x="0" y="64" xOffset="-16" yOffset="-16" />
  </rule>
  <rule r="!PIT,!WATER" u="!PIT,!WATER" ur="!PIT,!WATER"> <!-- up-right pit corner -->
    <draw layer="pitedges" x="32" y="64" xOffset="16" yOffset="-16" />
  </rule>
  <rule l="!PIT,!WATER" d="!PIT,!WATER" dl="!PIT,!WATER"> <!-- down-left pit corner -->
    <draw layer="pitedges" x="64" y="64" xOffset="-16" yOffset="16" />
  </rule>
  <rule r="!PIT,!WATER" d="!PIT,!WATER" dr="!PIT,!WATER"> <!-- down-right pit corner -->
    <draw layer="pitedges" x="96" y="64" xOffset="16" yOffset="16" />
  </rule>
</tile>

<tile id="WATER">
  <one>
    <rule u="!WATER">
      <draw layer="water" x="0" y="32" />
    </rule>
    <rule>
      <draw layer="water" x="0" y="0" />
    </rule>
  </one>
</tile>

In theory I could have this extend beyond single tiles, but for now this will do. This allows me to dynamically draw the entire tileset on the screen, no problem.

Some day I’ll get this done, I’m definitely overbuilding but I’m feeling happy about being able to re-use most of what I’ve done for other projects if needed. Particularly the roguelike part!


#8

I got another blood potion for this today, thanks for the interest~ But! It’s also “Major milestone hit day”.

So I’ve been focusing on backend work on this off and on, currently:

  • Renderer has been just completely redone on the library side. I ditched OpenFL’s junky batcher and now it has my own and it is so much nicer/faster/cleaner. (Much faster on WebGL! Much less CPU burn.)
  • Animations on every object! Hooray! (No art for animations yet)
  • Implemented the rule-based tilemap renderer as above, with a few modifications to allow for aliasing of multiple tile names into one and such. Animations can occur too! The logic for this was migraine inducing.
  • Full event-based flow with blocking has been completely implemented. There’s currently a single bug that causes visual errors on Undo, and I have to fix it but for right now I don’t really care.(fixed!) Totally usable for a roguelike if I so choose so this code is recyclable.

Next is literally, uh, fixing that one bug and then making assets for everything(and better menus). Yay! Expect more months of nothingness.

Some gameplay thoughts, feel free to give feedback:

  • Variable map size. For smaller maps I want to draw to a smaller screen and ‘blow them up’ to window size. Still adamantly against making the player scroll the map for any reason.
  • I’ve given thought to having a no-ubersword mode of play. The setting I have in mind is that the weapon she’s using is some sort of ethereal weapon that can kill undead and phases, but is ridiculously heavy so she can’t turn it around very quickly. So I’d have some zones that sword can’t cross and a sword pickup that you can drop with an action key; the sword can attack in all directions with no turning required, but doesn’t take up space on the map (can’t block!), and will not permanently kill undead. Juggling it can be a puzzle mechanic too.
  • Really want to add some special skills, kind of undecided if they should be things you can stock to use later or have to use immediately or not. Such as;
    • I want to add DROD-style clones but get rid of the free placement. Not sure exactly how; maybe shoot a bullet to ‘possess’ an enemy at range?
      • Cool thing: My update logic is smarter than DROD’s so if you try to move into a clone, it will actually let you if the clone can move out of the way! No more getting blocked by your own allies.
    • Issen! One-time front dashing attack to cleave a lot of dudes at once.
  • Enemies!
    • Want to replace Zombies with something else aesthetically, but not sure what.
    • Vampire bats. Flying zombies, basically. Can’t cross water because it’s thematic.
    • Vampires. Flying, won’t move into your sword, like DROD’s Goblins. Also can’t cross water. Undecided if they have always-brainmove or not. (brainmove = can path around obstacles intelligently)
    • Gargoyles. Wake when player moves in line of sight. The eyeballs from DROD; undecided on if flying or not.
    • Ectoplasm. Similar to DROD’s tar; a static placement on the map that you have to hack away at, generates ghosts as it becomes broken up. Would like to differentiate somehow but trying to think about how… (And similarly, I’d like something to grow the Ectoplasm walls.)
    • Wall-spectres. Ghost that can only move within solid walls, can attack stuff outside.
    • Unkillable slime blobs type things that follow the player around but don’t hurt/do any damage. (No slime digestion here!) DROD had a thing like this and the name I can’t remember.
    • I still need enemy spawners. They are going to be on a faster timer than drod’s, either 15 or 20 turns, to avoid making huge maps. Not at all sure what to do about that…
  • Would like more original mechanics and I’m thinking about them but not committed to anything. (feel free to suggest, I’m all ears at this phase)

Setting/assets stuff that I’m pretty much set on:

  • First tileset I want to make is just some sort of spook abandoned overgrown graveyard thing. Done research on this, but art skills not up to par yet.
  • General theme, as above, is that the protagonist is a trained fighter but needs the uberweapon to kill undead, and it’s ridiculously heavy for her so she can’t turn easily.
  • She’s going to get a redesign though.
  • Want the weapon to be sentient and something the character can banter with; not sure if I’ll interrupt gameplay for Cutscene Time or let you move around while they talk.
  • Weapon is ethereal and actually useless for hitting most physical objects. (maps where you need to break objects via other means?)
  • I do want some enemy characters to banter with or turn into boss-type enemies; a few random demons and vampires and necromancers. Kind of want the Big Bad to recognize the weapon and just start running for the hills as soon as he sees it.

Some misc thoughts:

  • I’m definitely taking too much ‘inspiration’ from DROD and need to branch away from them to do my own thing. It did hit a lot of the right bases, though.
  • Still rabidly against block pushing. Blocks push you in this game.

Rule based renderer looks like this now:

<!-- default.xml -->
<assets>
  <layer name="bg" blend="opaque" file="drodlike-tex512.png" size="48" />
  <layer name="objects" objects="true" file="drodlike-tex512.png" size="48" />
  <layer name="effectsAdditive" objects="true" />
  <layer name="effectsAlpha" objects="true" />

  <include file="tilesets/gameobjects.xml" />

  <tileAlias name="floor" tile="FLOOR1,FLOOR2" />
  <tileAlias name="pit" tile="PIT,WATER" />

  <rule tile="floor">
    <draw layer="bg" x="2" y="866" />
  </rule>

  <one tile="pit">
    <!-- draw pit edge where there is a non-pit above -->
    <rule u="!pit">
      <draw layer="bg" x="2" y="770" />
    </rule>
    
    <!-- otherwise fall through. <one> rule means only the first one is chosen! -->
    <draw layer="bg" x="54" y="2" />
  </one>

  <rule tile="WALL">
    <object layer="objects">
      <draw x="2" y="930" w="48" h="80" originY="32" />
    </object>
  </rule>
</assets>

Drawn objects in rules are animated and are sorted according to position within that layer. “objects” is shared with actual game objects. Making a new theme with modding is easy!


#9

I still can’t get past the very first part of “Basics 2.” Moving diagonally is probably the key somehow, I’m guessing.


#10

solution for the start:
R, R, R, R, L, DL, UL, …


#11

Oh, interesting. It almost seems as if that shouldn’t work in the execution, even though it makes sense.


#12

In recent builds, I’ve modified diagonal movement a bit. If you press down and then move to down-left or down-right within a few frames, it’ll switch your input to a diagonal instead of keeping you stuck with the single move. This works like an input rollback so if you switch to a diagonal it makes everything on the map hop for like two frames before resetting. (this is not on the playable build atm because I broke some gameplay)

Relatedly, gamepad also support added! And a button that you can hold to make it so you will only move diagonally no matter what you press, Shiren style. Did you know html5 supports gamepads? I didn’t!

I also learned the hard way that the game really needs to hammer in that diagonal movement is an Essential Technique from the getgo, so I’ll probably restructure maps around that.

I’m actually very close to the point of being able to do Real Game but I have not been able to work on it as much as I would have liked recently.


#13

decided it’s probably better to get some rough new art in than to hem and haw over something perfect so i think this week’s project is just making something i can put in for the time being that conveys the ideas even if it’s kind of ugly

non-UI code’s basically done aside from updating some of the older rendering code to the new openfl-develop tree which is going to be a fun time because the API it used no longer exists


#14

appeal that i’m not doing nothing, really


#15

for more details, i’m poring into pixel art tutorials and learning to texture scenery things. the general plan on what i want is:

  • Two or more different kinds of floor tile, with transitions between them. thinking stone/dirt paths and a grass overlay that can blend over onto the next tile.
  • Would like tiles to alternate subtly on a checkerboardish pattern, if at all possible.
  • The bottomless pits; can just be stone falling off into the blackness.
  • Water overlay: Will draw over the pits, semi-animated water, kind of want to have a reflection of the moon on there. (aiming for the outdoors stuff to have a spooky moonlit feel)
  • Walls… I think I can actually kind of not have these for awhile but I’m thinking of ways I want to handle them. Perspective is going to change to be more top-down, less RPG-ish, because I don’t want to deal with occlusion. thinking I might have the walls start in the middle of the tile, so that their height is visible but not severely occluding neighbors.

this is probably ambitious for someone who is not terribly good at pixel art, but i can give it a go. first pass is something tolerable, second pass will be for improvements/clean up.

i’m going to go back and redesign the enemies/character eventually. don’t want to do boring zombies anymore, thinking about replacements.


#16

24x24 stone tiles, alternating to get a good feel for how a checkerboard set would look this way

yes i’m going to keep posting about this. i’ll probably change the topic when something actually important happens, this is kind of a ‘logging my own stuff doing’

colors are not final, color adjustment comes once i have the other tile types to fit them all together


#17

Don’t apologize for updates! That’s what we come here for!

As far as your tiles go, they look nice. The palette is real nice. It took a minute to see you have two tiles, alternating.

It reminded me of this thing which you might find interesting, but mostly it made me want to look it up again… https://en.wikipedia.org/wiki/Wang_tile


#18

Same 24x24 again.

Not sure if I like this or the ones I made the other day more; this has more blades of grsas going on but I feel like that definition is more distracting than interesting. Maybe I should flatten it, or just go back to the other one…

next up: dirt, then color correcting the whole thing so they can all coexist and look nice doing so.


#19

dirt tiles, I kind of like how these turned out but at the same time they definitely need some color adjustment.

And here’s what they all look like next to each other. Color adjustment is definitely on the way here. I think the stone tiles will get some tweaking to have less of that black filler space, because the ‘dark’ colors of the scene don’t look nice when filled in there and I’d have to add another one for it.

Transitions between the types are definitely on the menu, too.

edit: also i’m posting all of these at 3x scale because that’s roughly what they will look like ‘at resolution’ on a 1080p display.

edit: pits~


#20

that grass doesn’t look super readable because there’s too much focus on the individual blades over the larger plants so you sacrifice a lot of readability! the limited palette doesn’t help too much, you might consider finding a way to make the rest of the grass stick out more, or making the plants another tile altogether!