7DRL Challenge 2015

So I’m going to give the 7DRL Challenge a try this year. I have a few ideas about where I want to go with the gameplay. Theme is still undecided. No title yet. I’ll be making it in Javascript with help from rot.js. This post marks the start time of my 7 days.

Oh by the way...

If you have ASCII art that needs to be programmatically manipulated, but you want to store it in a data file without mangling it too much with weird character escapes, quoting, or unwanted line-breaks, YAML is great.

Here’s an excerpt of the raw YAML data from asciibots.js. (This is later transformed into JSON during the build process.)

templates:
 0: |1-
       ___T_     
      | o o |    
      |__-__|    
      /| []|\    
    ()/|___|\()  
       |_|_|     
       /_|_\     
 1: |1-
      \.===./    
      | b d |    
       \_=_/     
    o==|ooo|==o  
       |___|     
      .'._.'.    
      |_| |_| 

This uses YAML’s literal block format, indicated with the “|” character.

Inside literal scalars, all (indented) characters are considered to be content, including white space characters. Note that all line break characters are normalized. In addition, empty lines are not folded, though final line breaks and trailing empty lines are chomped.

There is no way to escape characters inside literal scalars. This restricts them to printable characters. In addition, there is no way to break a long literal line.

No escape characters! Perfect! It pretty much just works but there are few small considerations.

  1. Unless your ASCII art is perfectly left-aligned, you have to manually specify an indentation indicator. If you don’t, automatic indentation detection will fail and you’ll get errors when trying to parse your YAML. Here I use a “1” (1 space) but you can use any value you prefer. You also need to indent your ASCII art to the appropriate level relative to the rest of the document.
  2. You also have to consider whether or not you want to include the trailing line break in your data. In this case I use the “-chomping indicator to request ‘stripping’ of the final line break.

So that’s what that “|1-” means.

The YAML documentation actually has it’s own ASCII art example but it uses a sample that doesn’t require the indentation indicator, so it can be a bit confusing when you just try to drop something else into the example and get parsing errors. Yes my first attempt went like that. Now you don’t have to make the same mistake I did.

asciibots.js

Before we had Game Boys, my cousin and I had a collection of Tomy Pocket Games. There was Copter Fight, Caterpillar, Pass The Puck, the race car one, and more. They were simple but fun, and they kept us busy and out of my parents’ and grandparents’ hair on long car trips.

One that I really enjoyed was called Robot Factory. It wasn’t even really a game, just a little slot machine that had different robot heads and parts. You were supposed to get the parts that “matched” for the most points, but lots of times I would just spin to see what came up.

Robot Factory Tomy Pocket Game

Many years later, now grown up, I noticed a blog I followed was running a 1k code contest. The theme was open-ended, but I think maybe I thought the theme was the number 1000. I remembered Robot Factory. If I made 10 robots with 3 parts, there could be 10 x 10 x 10… 1000 possible robots. I could probably squeeze some ASCII art into 1k of code. It was perfect. So, after drawing and redrawing and applying some manual compression and some code to put it all together, I ended up with 1000 bytes of unreadable Javascript that displayed random robots. I had a lot of fun refreshing the page and looking at what came up. It ended up winning the contest for some reason and I got a fancy external hard drive out of it.




I was thinking about this project recently. I found the code still on my hard drive and decided to put it into a readable and maintainable format. I couldn’t stop messing with it. I added 6 more robots for a total of 16 so they could be addressed with hexadecimal digits because I though maybe they would be fun as little identicon-like avatars or something. And then I decided the faces were too samey so I added two optional digits for changing the eyes and mouth. It’s only a few characters but the faces give the robots a lot of their personality so I think it really improved the variety. It’s dumb nostalgia, but I made these face decorations optional mostly because I wanted the classic three digit IDs to still work. Anyway, I’ll probably keep tinkering with it from time to time but asciibots.js is up on GitHub now and a demo site is here.

Hello World

Hello. I`m doing a blog again.  I’ll be posting about projects I’m working on, things I find interesting, and the usual blog type stuff.  Stay tuned.

local fauna