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!

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!!!
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
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.
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.
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!
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.
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…
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.
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
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.
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”;
——————
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!
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”;
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”;
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.
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.
Thanks man
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”;
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.