What we say

Retro Defense Level Design

We’ve had a number of requests for a level editor for Retro Defense, and while we don’t quite have the time at the moment to do something like that, we’d love to see what kind of levels people out there would dream up. So, as a little experiment I’m going to post the level format for Retro Defense and see what happens. At some point we’ll release an update including the best user submitted levels with their names beside them and everything.

Fair warning, this is sort aimed at programmers since they’ll be more used to the syntax, but it’s not that complicated if you just ignore all the extra junk and focus on the level data. So, here’s the level format:

 // The board layout comes first
 // x = spot to place a tower, + = empty space
 // 1 = invader stream 1 start point, 2 = invader stream 2

 public static final String[] MAP_LEVEL3 =

    {

        ”xx1xx2xx”,
        ”xx+xx+xx”,
        ”x++xx++x”,
        ”x+xxxx+x”,
        ”x+xxxx+x”,
        ”x++++++x”,
        ”xxx++xxx”,
        ”xxx++xxx”,
        ”x++++++x”,
        ”x+xxxx+x”,
        ”x++xx++x”,
        ”xx+xx+xx”,

    };

 // And this is the path each stream of invaders will take:
 // Use D = Down, L = Left, R = Right, U = Up
 public static final String MAP_LEVEL3_PATH1 = “DDDLDDDRRDDDLLDDRDD”;
 public static final String MAP_LEVEL3_PATH2 = “DDDRDDDLLDDDRRDDLDD”;
 

The code above is for the level called Spider in the game. You can see the two invaders start at the top of the board and then both move down 3 squares, before heading in opposite directions for a square, and so on.

And to help you design your level we’ve made some level design sheets you can print out and draw on to get your ideas straightened out.

So post your level ideas and questions in the comments, we’re looking forward to seeing what you come up with!

  1. 1
    anakin78z on 08/07/09 at 23:56:15

    Not quite traditional, in that the end point isn’t at the edge of a screen. However, I’m ok with that.

    public static final String[] MAP_LEVEL3 =

    {

    ”xxxxxxx2”,
    ”xxxxxxx+”,
    ”+++++x+”,
    ”+xxxx+x+”,
    ”+x++++x+”,
    ”+x+x++x+”,
    ”+x++x+x+”,
    ”+x++++x+”,
    ”+x+xxxx+”,
    ”+x++++++”,
    ”+xxxxxxx”,
    ”1xxxxxxx”,

    };

    // And this is the path each stream of invaders will take:
    // Use D = Down, L = Left, R = Right, U = Up
    public static final String MAP_LEVEL3_PATH1 = “UUUUUUUUURRRRRDDDDDLLU”;
    public static final String MAP_LEVEL3_PATH2 = “DDDDDDDDDDLLLLLUUUURRD”;

    Love the game. Looking forward to some new levels. Long Distance is evil!!!

  2. Matt Hall on 08/08/09 at 02:35:13

    Oh that’s a cool idea, have the invaders end their paths in the middle of the board – am I reading those paths correctly? Unfortunately I don’t think the game supports that at the moment, we don’t have any way to make the invaders disappear except if they go off the edge of the screen. Can you change the paths to go off screen for the time being and we’ll see if we can support that center ending at some point?

    And yes, Long Distance is pure evil :)

  3. 2
    anakin78z on 08/08/09 at 15:16:53

    Oh snap. Yep, you read that correctly. It’s sort of a spiral inward.
    Alright, I’ll give it some more thought, and will post a proper map.

  4. 3
    anakin78z on 08/12/09 at 17:03:20

    Ok, here are two. The first one is pretty straight forward, and perhaps made a bit more difficult than it needs to be by removing two tower squares on each side in the middle. You might want to add those back in.

    public static final String[] MAP_LEVEL3 =

    {

    ”xx+12+xx”,
    ”xx++++xx”,
    ”+++xx+++”,
    ”++xxxx++”,
    ”+xx++xx+”,
    ”++++++++”,
    ”++++++++”,
    ”+xx++xx+”,
    ”++xxxx++”,
    ”+++xx+++”,
    ”xx++++xx”,
    ”xx++++xx”,

    };

    // And this is the path each stream of invaders will take:
    // Use D = Down, L = Left, R = Right, U = Up
    public static final String MAP_LEVEL3_PATH1 = “DSDLDLDDRRRDLLLDDRDRDRD”;
    public static final String MAP_LEVEL3_PATH2 = “DRDRDRDDLLLDRRRDDLDLDLD”;

    And the second (which I call: Are we lost?):

    public static final String[] MAP_LEVEL3 =

    {

    ”1x++xxxx”,
    ”++++xxxx”,
    ”xxx++++x”,
    ”x+++++++”,
    ”x++x+++x”,
    ”x++++x+x”,
    ”x+x++++x”,
    ”x+++x++x”,
    ”+++++++x”,
    ”x++++xxx”,
    ”xxxx++++”,
    ”xxxx++x2”,

    };

    // And this is the path each stream of invaders will take:
    // Use D = Down, L = Left, R = Right, U = Up
    public static final String MAP_LEVEL3_PATH1 = “DRRURDDDLLDDRRRURURDDDDLDLLDLLUL”;
    public static final String MAP_LEVEL3_PATH2 = “ULLDLUUURRUULLLDLDLUUUURURRURRDR”;

    Man, I hope I typed those paths in right.

  5. Matt Hall on 08/17/09 at 16:05:10

    These look cool, I’ll try them out in the game and see how they work. It’s definitely tough to get the paths right first time, so I’ll fix them up if they have any problems. Thanks!

  6. Matt Hall on 08/17/09 at 17:53:29

    I actually had some time right now so I put the levels in the game, your paths were nearly perfect so I’ve already uploaded the new build to Google. Should be out momentarily with both of your new levels! Thanks for designing them, they look like they’ll be really fun to play.

  7. 4
    anakin78z on 08/19/09 at 21:46:23

    Hey awesome! Thanks!

    I played them last night. They turned out way easier than I expected. Still fun though.

    I’m kinda hoping someone else will post a few more challenging levels :) . I’m surprised I’m the only one who saw this post…

  8. Matt Hall on 08/20/09 at 09:06:35

    What we’ve figured out is that the difficulty of a level is a factor of number of squares to build on, and the length of the invader path. If there aren’t many squares, but the invaders take a long time getting around the board then you get lots of chances to shoot them. So we try to find a balance between those things to make the level fun. It looks like your levels will be fun, but not as hard for people that have lots of experience.

    I’m surprised more people haven’t sent levels too, maybe they’ll find the post later and send stuff in.

  9. 5
    GTC on 08/25/09 at 12:30:37

    So I am really glad to have found a place to say how much I love this game. I cannot believe how many hours I have spent setting new records, drawing boxes on scraps of paper, writing damages with different configurations to most exploit the map. It’s such a simple looking game but more mathmatically complex than most people think.

    Anyway, I am not going to post everything here first, but I definitely have maps drawn and will defiinitely submit some shortly. (Now that you have given the code, thanks) I also have many other ideas – too many to say right now, but I will most definitely write a tips and tricks list soon. I also have many ideas for new enemies and towers – but that’s an entirely different story. RD2!

    One thing that people that love this game may be interested in (if you have Adobe Photoshop®) is that I have written a PS action (.ATN) that will automatically take 4 screenshots and turn them into one single image to show level accomplishments and level layout. I named it RetroSHOTS, on a whim. (see my records link below for pics).

    I thought this would be a good way to suggest here to the developer that there be some where for people to submit records. It would should also increase interest in the game (you know get us addicts together). It’s a way to show appreciation to Larva Labs for making the best arcade game app on the G1, too.

    Everytime I think I can set no higher records, you release new levels! I was going to post this right before the first level add ons – then put it off to set those records (thanks Don Archer, & Fj Mustak). I have already started playing one of the newest two (thanks anakin78z) but had to say something already!

    Anyway – here is a link to my own level records. (Screenshots from my G1) I would really love to know how I stack up to others.

    http://s55.photobucket.com/albums/g124/gtcgtc/Retro%20Defense/

    P.S. Also thanks so much for removing the 30 level limit – it’s cited in my divorce papers (JK hahaha). Really it’s the best thing done for the game so far.

    MAX LEVEL DEFENDED – GTC
    Spider – lvl 75
    The Crush – lvl 81
    Ladder – lvl 117
    Zig Zag – lvl 81
    Tunnels – lvl 89
    Cut Off – lvl 81
    Flanks – lvl 87
    Crawlers – lvl 77
    Three Bases – lvl 72
    Outposts – lvl 85
    Detours – lvl 73
    The Siege – lvl 95
    Hockey Stick – lvl 85
    Turrets – lvl 71
    Islands – lvl 65
    Long Distance – lvl 64
    Windy & Straight – lvl 40
    Twister – lvl 76
    Funnel – lvl 56
    Crescent (currently playing)
    Are We Lost? (haven’t played yet)
    The Dungeon (haven’t written it yet :)
    The Castle?
    Hit and Run?
    Drive By?
    ………..etc. I will be back

    GTC

  10. Matt Hall on 08/25/09 at 14:54:30

    Glad you like the game! Level 64 on Long Distance is insane, I tried to make that thing as hard as I could without making it impossible, my estimate was that people would be able to get to around level 20 max. Glad to be proven wrong.

    I was going to check out your screenshots, but it’s asking me to log in at photobucket, is that a private album by any chance?

    Looking forward to seeing what levels you come up with too.

  11. 6
    GTC on 08/26/09 at 11:55:50

    Does the first move command dictate map entry direction, or direction from first to second position? I assumed that the first one is from space 1 to space 2, not the direction they enter the map – if the first command is from the outside of the board then I’m missing all the entry commands. I do see though that the corners are the only situation where there would be an option, and I haven’t started in any corners.

    Oh and I didn’t really study the existing maps – if any of these are too similar to any of them, it was unintentional. I hope there are no typos though.

    About my own screenshots, the Photobucket album should be public now. I also sent you the action I wrote (RetroSHOTS – cheesy I know) and instructions for you to share with everyone if you choose.

    THANKS – GTC

    ——————-

    “RAMPARTS”

    public static final String[] MAP_LEVELX =

    {

    ”xxx++xxx”,
    ”x+x++x+x”,
    ”++++++++”,
    ”+x+xx+x+”,
    ”+xxxxxx+”,
    ”++++++++”,
    ”xxx++xxx”,
    ”x++++++x”,
    ”++++++++”,
    ”++++++++”,
    ”++xxxx++”,
    ”1++++++2”,

    };

    public static final String MAP_LEVELX_PATH1 = “RRRRRRRUUULULLLLLDDRRRUUUULLLLUUURRRRULURU”;
    public static final String MAP_LEVELX_PATH2 = “LLLLLLLUUURURRRRRDDLLLUUUURRRRUUULLLLURULU”;

    ——————-

    “FISH IN A BARREL”
    (not sure if you would make this one – it’s super easy and I think I could break 200 – let me try!!)

    public static final String[] MAP_LEVELX =

    {

    ”xxxxxxxx”,
    ”xxxxxxxx”,
    ”xxxxxxxx”,
    ”1++++xxx”,
    ”xxx++xxx”,
    ”xxx++xxx”,
    ”xxx++xxx”,
    ”xxx++xxx”,
    ”xxx++++2”,
    ”xxxxxxxx”,
    ”xxxxxxxx”,
    ”xxxxxxxx”,

    };

    public static final String MAP_LEVELX_PATH1 = “RRRRDDDDDLUUUUURDLDRDLDRDLUUUUURDDDDDLURULURULURLRLLLLL”;
    public static final String MAP_LEVELX_PATH2 = “LLLLUUUUURDDDDDLURULURULURDDDDDLUUUUURDLDRDLDRDLRLRRRRR”;

    —————-

    “THE CHUTE”
    (just to make up for a super easy one…)

    public static final String[] MAP_LEVELX =

    {

    ”xxx1xxxx”,
    ”xxx+xxxx”,
    ”xxx+xxxx”,
    ”xxx+xxxx”,
    ”xxx+xxxx”,
    ”xxx++xxx”,
    ”xxx++xxx”,
    ”xxxx+xxx”,
    ”xxxx+xxx”,
    ”xxxx+xxx”,
    ”xxxx+xxx”,
    ”xxxx2xxx”,

    };

    public static final String MAP_LEVELX_PATH1 = “DDDDDDRULDRULDRDDDDDD”;
    public static final String MAP_LEVELX_PATH2 = “UUUUUULDRULDRULUUUUUU”;

    —————-

    “CELL”

    public static final String[] MAP_LEVELX =

    {

    ”x++++x2x”,
    ”++++++++”,
    ”x+++++++”,
    ”++++++++”,
    ”+++xx+++”,
    ”++xxxx++”,
    ”++xxxx++”,
    ”+++xx+++”,
    ”++++++++”,
    ”+++++++x”,
    ”++++++++”,
    ”x1x++++x”,

    };

    public static final String MAP_LEVELX_PATH1 = “URUUULUUURURRRDRDDDLDLLLDRRRRUUUUUUUULLLLLLL”;
    public static final String MAP_LEVELX_PATH2 = “DLDDDRDDDLDLLLULUUURURRRULLLLDDDDDDDDRRRRRRR”;

    ——————

    “AMBUSH”

    public static final String[] MAP_LEVELX =

    {

    ”xxx++xxx”,
    ”xxx++xxx”,
    ”++++++++”,
    ”++++++++”,
    ”xxx++xxx”,
    ”++x++x++”,
    ”++x++x++”,
    ”++x++x++”,
    ”++++++++”,
    ”xxx++xxx”,
    ”++++++++”,
    ”2++++++1”,

    };

    public static final String MAP_LEVELX_PATH1 = “LLLLLLLURRRRUURRRUUULDDDLLLUUUUURUUUU”;
    public static final String MAP_LEVELX_PATH2 = “RRRRRRRULLLLUULLLUUURDDDRRRUUUUULUUUU”;

    —————–

    “DRIVE BY”
    (This one should be a bit difficult, not as bad as the chute)

    public static final String[] MAP_LEVELX =

    {

    ”xxx++xxx”,
    ”xx++++xx”,
    ”xxx+xxxx”,
    ”xx++++xx”,
    ”xxxx+xxx”,
    ”xx++++xx”,
    ”xxx+xxxx”,
    ”xx++++xx”,
    ”xxxx+xxx”,
    ”xx++++xx”,
    ”xxx+xxxx”,
    ”xx1+2xxx”,

    };

    public static final String MAP_LEVELX_PATH1 = “URUURUULLRRRLLUURUULUURUU”;
    public static final String MAP_LEVELX_PATH2 = “ULUURUULUURRLLLRRUULUURUU”;

    ——————

  12. Matt Hall on 08/26/09 at 14:27:54

    Wow, lots of stuff to check out here. As for your question about the paths, the first step in the path is to go from off screen to on screen. You need one step to go off screen at the end too. It’s not a big deal though since I can just add in steps as necessary, so I didn’t want to trouble people with it.

    I’ll try these levels out this week and see if I can get a release out. Thanks again for sending these in, I’m excited to try them out!

  13. 7
    GTC on 08/26/09 at 17:15:35

    OK then – here are the edited strings, condidering they start off the board. I already had a command for exiting the board.

    RAMPARTS
    public static final String MAP_LEVELX_PATH1 = “RRRRRRRRUUULULLLLLDDRRRUUUULLLLUUURRRRULURU”;
    public static final String MAP_LEVELX_PATH2 = “LLLLLLLLUUURURRRRRDDLLLUUUURRRRUUULLLLURULU”;

    FISH IN A BARREL
    public static final String MAP_LEVELX_PATH1 = “RRRRRDDDDDLUUUUURDLDRDLDRDLUUUUURDDDDDLURULURULURLRLLLLL”;
    public static final String MAP_LEVELX_PATH2 = “LLLLLUUUUURDDDDDLURULURULURDDDDDLUUUUURDLDRDLDRDLRLRRRRR”;

    THE CHUTE
    public static final String MAP_LEVELX_PATH1 = “DDDDDDDRULDRULDRDDDDDD”;
    public static final String MAP_LEVELX_PATH2 = “UUUUUUULDRULDRULUUUUUU”;

    CELL
    public static final String MAP_LEVELX_PATH1 = “UURUUULUUURURRRDRDDDLDLLLDRRRRUUUUUUUULLLLLLL”;
    public static final String MAP_LEVELX_PATH2 = “DDLDDDRDDDLDLLLULUUURURRRULLLLDDDDDDDDRRRRRRR”;

    DRIVE BY
    public static final String MAP_LEVELX_PATH1 = “URUURUULLRRRLLUURUULUURUU”;
    public static final String MAP_LEVELX_PATH2 = “ULUURUULUURRLLLRRUULUURUU”;

  14. 8
    GTC on 08/26/09 at 18:10:21

    OK I know I really piled them on but I couldn’t resist. Here’s one more.

    TEMPLE RUINS
    public static final String[] MAP_LEVELX =

    {

    ”1+xxxx+2”,
    ”x++xx++x”,
    ”xx++++xx”,
    ”xx++++xx”,
    ”x++xx++x”,
    ”++xxxx++”,
    ”++xxxx++”,
    ”x++xx++x”,
    ”xx++++xx”,
    ”xx++++xx”,
    ”x++xx++x”,
    ”++xxxx++”,

    };

    public static final String MAP_LEVELX_PATH1 = “RRDRDRRDRDRDRDLDLDLLDLDLDLL”;
    public static final String MAP_LEVELX_PATH2 = “LLDLDLLDLDLDLDRDRDRRDRDRDRR”;

  15. 9
    GTC on 08/28/09 at 11:33:43

    I have 2 more that I put a little more thought into… In “Checkers”’s I think the proximity and and scant real estate will make it difficult. Wish I could just plug them in.. :)

    “LOOP”

    public static final String[] MAP_LEVELX =

    {

    ”xxxxxxxx”,
    ”1++++++x”,
    ”x+xxxx+x”,
    ”x+++++++”,
    ”x++xx++x”,
    ”x++xx++x”,
    ”x++xx++x”,
    ”x++xx++x”,
    ”+++++++x”,
    ”x+xxxx+x”,
    ”x++++++2”,
    ”xxxxxxxx”,

    };

    public static final String MAP_LEVELX_PATH1 = “RRRRRRRDDDDDDDDDLLLLLUUUUUUURRRRRRR”;
    public static final String MAP_LEVELX_PATH2 = “LLLLLLLUUUUUUUUURRRRRDDDDDDDLLLLLLL”;

    ——————————————-

    “CHECKERS”

    public static final String[] MAP_LEVELX =

    {

    ”x+x+x+x+”,
    ”+x+x+x+x”,
    ”x+x+x+x+”,
    ”++++++++”,
    ”1+++++++”,
    ”++++++++”,
    ”++++++++”,
    ”+++++++2”,
    ”++++++++”,
    ”+x+x+x+x”,
    ”x+x+x+x+”,
    ”+x+x+x+x”,

    };

    public static final String MAP_LEVELX_PATH1 = “RDDDRUUURRRDDDDRRRUUUUULLLLLDDDDDLLL”;
    public static final String MAP_LEVELX_PATH2 = “LUUULDDDLLLUUUULLLDDDDDRRRRRUUUUURRR”;

    ——————————————-

    These are the last unless you really want more. It’s fun to make them.

  16. Matt Hall on 08/28/09 at 17:50:56

    I just released RetroDefense v1.1.4 which has the first 3 of the levels you submitted here. The new invader paths were perfect, no changes necessary.

    I think these first ones are going to end up being easier than you think because the paths are so long, but give them a shot and see what you think. Thanks again for all the levels, it’s great to see what other people come up with.

  17. 10
    GTC on 08/28/09 at 18:17:31

    Thanks man

  18. 11
    anakin78z on 09/02/09 at 19:00:49

    Saw the update on the market and and played through the new levels. They were a bit easy, but killed some time nicely :) . I think with shorter paths, they could be very good, GTC.

    I’ve been trying to create a challenging and fun level. Here’s what I’ve come up with. The paths are a bit longer than I had initially planned for, but for a lot of the level they are not adjacent to any tower squares, so it could still prove to be a good challenge.
    I call it ‘The Tease’ (but you can change that name):

    static final String[] MAP_LEVEL3 =

    {

    ”+++xx+++”,
    ”++++++++”,
    ”++++++++”,
    ”++++++++”,
    ”1+++++++”,
    ”++++++++”,
    ”2+++++++”,
    ”xxx++xxx”,
    ”xxxxxxxx”,
    ”xxxxxxxx”,
    ”xxxxxxxx”,
    ”xxxxxxxx”,

    };

    // And this is the path each stream of invaders will take:
    // Use D = Down, L = Left, R = Right, U = Up
    public static final String MAP_LEVEL3_PATH1 = “RRRRDDDRUUURRRR”;
    public static final String MAP_LEVEL3_PATH2 = “RRRUUUURRRDDDDRRR”;

  19. 12
    GTC on 10/28/09 at 08:22:46

    OK I’m back – yes a couple of my new levels were WAY to easy – should have made shorter paths, but there’s no going back, right?

    Anyway, I have set my highs since the latest release (Thanks Matt) and here they are….

    Crescent – Level 87
    Are We Lost? – Level 93
    Ramparts – Level 95
    Fish In A Barrel – Level 178
    The Chute – Level 109
    Cell – Level 91
    Ambush – Level 84

    Thanks! And Matt – I have a KILLER idea for a smart phone app – I guess you may be the one I could talk to about it? It is something I know people would buy – I would buy it.

    Anyway, email me if you are interested.

Leave a Comment

Trackback URL

http://larvalabs.com/blog/android/retro-defense-level-design/trackback/