Help me design and make a roguelike!

Now that my last project is more or less complete, I need a hobby project.

I am making a graphical roguelike.

In fact, with sharaleo’s help, I’ve already started making it.

What’s the name?
Doctor Chick

uh… what?
I put that name in as a joke and it stuck – and actually works pretty well.

Does the world need another roguelike?
The world always needs another roguelike!

What language will you use?
Objective-C, by way of cocos2d, for now. The iPad is the sole target platform, at the moment.

Why aren’t you using some other language or toolkit or game engine or …?
I hope to port it to other platforms later. Right now, I don’t have time to have a hobby programming project and a hobby learn-another-language-or-platform project. My intention is to port it to cocos2d-x once it is in a playable alpha state; that will open it to other platforms.

How will you license it?
CC-SA-BY 3.0. The code is already available on Github here.

Why don’t you just use an existing tile set and or asset package?
Because sometimes I need a break from coding and like to work on art.

Who will be the artist?
I will make the art. You can help, if you’d like. I use Sketchbook Pro and then touch stuff up in Photoshop.

What types of monsters will you have?
This is mostly TBD. I was thinking of a system whereby monsters are randomized – created from component parts that each have certain properties. For example, there may be 10 types of heads, 10 types of bodies, 10 types of arms, and 10 types of legs. At game start, monsters would be randomly created from the parts. That’s just an early idea that might give the game a little more variety.

What types of dungeons will you have?
You can help decide. I’ve started on tilesets and can build them out based on ideas. Maps will be randomly generated. One thing that I know that I want to do is to have some outside daytime maps, so that it’s not all visual doom and gloom.

Will there be a story?
The player is an Indiana Jones type professor who, with each game, learns of a new “lost civilization” to track down. Said lost civilization will have some mystical artifact that the player is trying to acquire. Doctor Chick is the main character. He has to retrieve various lesser artifacts while on his journey and dispatch them back to his benefactors at the university in order to maintain funding for his adventure. However, upon finding an artifact, Dr. Chick has to decide whether to use it for its capabilities (as a weapon, for instance) or to send it back for evaluation (and points/adventure longevity).

Can I help with the code?
Sure, if you’d like. Here is the Github repo.

Are you a good programmer?
I usually can make things work.

Will there be an ASCII version?
No. Graphically, think more Dungeons of Dredmor than Brogue.

Why should I help?
For fun. You can name monsters, artifacts, weapons, terrain, etc. You can put your name in the credits. You can tell people you helped with an open source project. You can help design combat systems, story lines, etc.

How long will it take?
A long time. It’s a hobby project. Some days I might spend 4 hours on it, some times I might have to ignore it for a month, due to other commitments.

I don’t want to help but I would like to check out the game.
That’s cool, too. I’m using TestFlight to push it to non-coding contributors. To start the process, you have to register with TestFlight to be a “recruited tester” for this app.

That seems sketchy… / I don’t want to register…
TestFlight is used widely by iOS developers and is a very slick platform. If you decide you don’t want to be registered and/or don’t want to receive builds of the game, there’s no commitment involved at all. You can simply delete your TestFlight account. Your other options are to either build the game for yourself (if you have a Mac) or wait until it is complete and in the App Store.

Are you going to sell this game?
Nope. It will be free. However, it did cross my mind that we can sell it and donate the proceeds either to Tom and qt3 or to a charity. That’s a decision that doesn’t need to be made for a long time.

So, those are the basics. As I mentioned, it’s already underway! There’s more info further down in the thread!

Tom/Mods: If you don’t want this thread here, please let me know and/or move it to Hardware/Technical.

One thing that I’d like to do is have a “lost civilization” with each seed. Of course, these lost civilizations need to have a name: “The Lost Civilization of …” I don’t really want these to be real place names, so I decided to break generated place names into three parts: a prefix, a midfix, and a suffix. I then created a resource file with some entries for each of those parts, drawn from real place names.

Here’s a screenshot of the .plist file with the suffixes expanded:

Then I wrote a simple method to generate place names:

- (NSString *)generatePlaceName
    NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"PlaceNameParts" ofType:@"plist"];
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    NSArray *prefixes = [dict objectForKey:@"prefixes"];
    NSArray *midfixes = [dict objectForKey:@"midfixes"];
    NSArray *suffixes = [dict objectForKey:@"suffixes"];
    int prefixIndex = rand() % [prefixes count];
    int midfixIndex = rand() % [midfixes count];
    int suffixIndex = rand() % [suffixes count];
    NSString *placeName = [NSString stringWithFormat:@"%@%@%@",
                           [prefixes objectAtIndex:prefixIndex],
                           [midfixes objectAtIndex:midfixIndex],
                           [suffixes objectAtIndex:suffixIndex]];
    return placeName;

When I do random stuff, I usually use arc4random(), but by using rand() here, it’s easy to set a seed when the game is initialized – that seed always will generate the same random number sequence and results.

To test, I ran a loop through this method and came up with 30 random place names.

It could use some work, but here’s the initial output:

The Lost Civilization of Staplaica
The Lost Civilization of Costuada
The Lost Civilization of Ologerona
The Lost Civilization of Nozakhma
The Lost Civilization of Pakganu
The Lost Civilization of Uzsoma
The Lost Civilization of Xozakhnce
The Lost Civilization of Aageroia
The Lost Civilization of Nigeroco
The Lost Civilization of Estony
The Lost Civilization of Ubekada
The Lost Civilization of Romonteada
The Lost Civilization of Nogerou
The Lost Civilization of Keganana
The Lost Civilization of Uzakhque
The Lost Civilization of Nisoma
The Lost Civilization of Spazeia
The Lost Civilization of Olozakhque
The Lost Civilization of Lilakoica
The Lost Civilization of Staganu
The Lost Civilization of Molakoka
The Lost Civilization of Denmolnoa
The Lost Civilization of Dengeromark
The Lost Civilization of Legesou
The Lost Civilization of Staganna
The Lost Civilization of Nilakonoa
The Lost Civilization of Blalakoka
The Lost Civilization of Fiplance
The Lost Civilization of Blazena
The Lost Civilization of Colakomark

Will it be turn based or real time? My experiences are with dredmor and isaac but maybe isaac doesn’t qualify and all roguelikes are turn based?

I’d like to pitch in an art asset or two. I’m not much of an artist, but I think I can turn out something reasonable.

I’d be interested in helping with names/writing, as well as trying to learn from the coding, since that’s something I’m working on building skill in.

OK, how about a throw a massive curveball at you. Why do Indiana Jones type thing and instead… do something a bit grander and more open… You’re exploring space and each map is a planet. This gives people the ultimate flexibility in designing monsters and tilesets. Each person could modify colors and do monsters that unique. You could have a seed that makes biomes that would be more likely to spawn certain types of creatures. Water world, desert world, acid planet etc. Going back to original monster parts, you could have monsters parts tied only to specific biomes. So as people explore different biomes their chances of running into different creatures changes. It would require “more” but would certainly provide an amazing array of discoveries the longer you play and stay alive.

Awesome to those of you that want to help. I’ll keep you posted.

ibdoomed, it will be turn-based, initially, but that could be modified later to allow real-time.

jpinard - that’s a cool idea, too. Frankly, I spent a few days compiling some lists for use with an Indiana Jones type game, and I have a lot of thoughts in my head about it, but once it is working, it should be pretty easy to modify it to a space setting. I’ll keep that in mind and try to make the assets as plug-in-able as possible. For now, though, I’ll probably stick with the original idea, since it gives me a little focus. I love space, though, and would like to take a shot at a space game at some point.

I put some thought into learning Cocos2DX for a project a while ago, but never really got off the ground with it. I’ll be interested to see what you go with it. I can’t make a time commitment right now, but I might be able to help with some of the coding at some point.

jpinard - that’s a cool idea, too. Frankly, I spent a few days compiling some lists for use with an Indiana Jones type game, and I have a lot of thoughts in my head about it, but once it is working, it should be pretty easy to modify it to a space setting. I’ll keep that in mind and try to make the assets as plug-in-able as possible. For now, though, I’ll probably stick with the original idea, since it gives me a little focus. I love space, though, and would like to take a shot at a space game at some point.

I was once going to make a Fireman roguelike. THE FIRE IS THE ENEMY. I never got very far before becoming distracted. I think you should do that instead. ;)

This sounds like fun - I would love to help you out with this.

I’m a coder not an artist: I know Objective C but not terribly well, have always wanted to work with Cocos2d, would be willing to work in JavaScript (in fact, that’s what I have to use in the new job I’m starting tomorrow) or could work in C++, as I’m pretty much a pro in that. and have a Macbook Pro to work on. So whatever you decide to do, I am willing to dive in!

Awesome! Let me get the basic project set up, running, and pushed to github. Do you have a developer provisioning profile? If not, I can add your device to mine and do whatever other voodoo magic is required to provision you to run the app.

I’m going to stick with Obj-C for the time being, with the iPad as a single target. I’m not sure the JavaScript bindings are mature enough to rely upon yet.

What we’ll do is use some blank Tiled maps, set to the sizes that we need, with the terrain preloaded in them and layers set up. Then we’ll use the CCTMXTiledMap class to load them in, at which point we can randomize. I’ve used this approach on a previous project, and it works well with cocos2d. Once we have a generic map loading and a transition class, we can tackle the player/npc classes.

Are you interested in taking charge of map randomization?

By the way, with cocos2d, it can be tempting to use the CCSprite class for various game world objects. I generally find that’s a mistake, however, and try to use CCNode instead. The reason is that you can easily swap various CCSprites around in a CCNode class. For example, if we have a normal player sprite and an injured player sprite, then swapping the two is very simple with CCNode. With CCSprite, since there’s always a “main” sprite, it can be a pain. Also, use CCLOG() instead of NSLog() where possible.

FYI, this is a great book for getting up to speed quickly with cocos2d, since you know Obj-C and other languages.

For other people who have offered to help: I’m going to transition from using .plist files to using .csv files for data that we want to load into the game. I’ll keep parents, from which we export, on Google Spreadsheets. For those of you interested, you can help us build up resource dictionaries, etc. I’m also going to work on a simple specification for sprites; sizes, etc.

I don’t have a provisioning profile. And the iPad I have is 1st gen, so I just might be running in the emulator most of the time anyway.

Sure, I’ll handle map randomization, though I would be interested in reading your design documents. :D

I don’t have that Cocos2D book, but I do actually have this one which I bought last year but never dove into. I’ll start looking into it now though. If you think the one you mention is particularly valuable, I don’t have a problem getting the Kindle version of it since it’s not terribly expensive.

This is excellent, Clay. I look forward to seeing how it develops. I know everybody has their own idea of a cool setting, but I will encourage yo uto follow the Indiana Jones one. Mainly because it’s what’s inspiring you, but also because I know a little bit about pulp-themed games. I worked on a pulp-themed MMO called Lost Continents back around 2003-4. It never saw the light of day, but we designed a TON of content on paper. And what’s really neat about a pulp setting is that you have a so much more to draw on than a typical sci-fi or fantasy setting: you can have magic, you can have aliens, you can have mythical gods, you can have mad scientists, crime syndicates… it’s so flexible, especially if you keep it a little goofy.

Good luck!

If you go with your idea of random parts for monsters it might be cool to link stats with each body part. For example, maybe one type of head gives +1 to site radius, another head might give +2 to accuracy. Maybe one of the arms gives + 3 to strength, where another might give +1 to armor. Then your monsters overall stats would be a combination of the bonuses of the randomly generated body parts + whatever the base stats of whatever equipment he randomly receives.

Charlatan - we’ll get it all sorted out. I have some ideas about map randomization, but I’m open to anything, too. For now, I want to get a basic structure in place and running – then I’ll push it to github and explain what I’ve done. We can take it from there.

Thanks for the encouragement, Nightgaunt. I’m also attracted to the pulpy nature of the Indiana Jones vibe. You will be, too, when you check this out…

I’m building the sought-after artifact using a method similar to the place name generation that I described above. To make it a little more fun for everybody, at first, I decided to throw the main title in SF Fedora font (Indiana Jones) and put “Dr. Chick” as the hero. The rest is the product of the random generator. I swear this is the first one that popped out when I went to test it in the simulator (misspelling and all):


Good times. My thought is that each time you launch the app (unless there is a game in progress/background), you will get a new title screen and the ability to hit “Go” to embark on that adventure. You also will be able to enter a seed or regenerate the suggested game. Who wouldn’t want to see Dr. Chick seek the Golden Lederhosen of Ecstasy?!!?

Slightly less fun, but this was the second that appeared:

Very cool. Now you need to put that text on some sort of background that looks like a 1950’s film clip and give it that sort of very minor shake that old-time film projectors often had. And throw in some sepia too!

Also, are we going to conduct all the development discussion here in this thread? I’m not against that but I’m just curious (and I wonder how much everyone who’s not involved will eventually care if we’re discussing stuff like file formats, tools to use, or other semi-mundane topics.

Edit to add: You ever heard of Kobold2d? It’s an enhanced version of Cocos2d. Since we really haven’t started developing the project, I thought it might be worthwhile to consider what tools we’re going to use (and tell the truth, I like the KoboldTouch product the same guy has done, but that’s not free, which makes it much less appealing - however, it appears to have some enhancements related to tileset rendering).

My first bugfix: there are two l’s in palladium. I’m helping!

What’s the target platform? Are you looking to develop this as an mobile or desktop app? Does Cocos2d or Kobold2d complile for multiple platforms?

Focus groups indicate you need a sewer level.

I love the setting and setup ideas you’ve had so far. And you can always combine the different worlds and lost civilizations ideas into one with STARGATES!

cocos2d is iOS and OS X. cocos2d-x is cross platform for mobile and desktop. Kobold2d is a wrapper around cocos2d-iphone and is iOS only.

Here’s the rub: I don’t really want to take the time right now to learn a new language. cocos2d-x is the best choice, but my C++ is not good. I can prototype and get things working quickly in regular cocos2d (or Kobold2d), probably targeting just the iPad. However, I do want to put some time into C++ soon, so my thought is to get something simple working/prototyped and then to convert to cocos2d-x. That’s a learning process that works well for me. I fully recognize that it’s not ideal. Maybe I’ll pick up this book and evaluate what the jump is going to look like.

Kobold2d, BTW, is fine; it just packs in a lot of stuff that I find that I don’t need. Also, the primary maps advantages available in KoboldTouch are also available in the free HKTMXTiledMap class.