[size=8]The Roguelike Development Megathread[/size]
Please note that this thread is not complete, and anything that any of you want to add to it, please feel free to say so - just IM me with what you want to add, or post it in this thread, and I'll update this post accordingly - with credit, of course.So, as lovers of Dwarf Fortress, I suspect the roguelike genre is close to many of our hearts. We see those scampering little ASCII characters and we see... something more. We don't play these games because they justify the hundreds if not thousands of dollars we've spent on graphics cards. We play these games because they favour gameplay over graphics, unpredictability over the same-old same-old - but at the end of the day, there's just something about roguelikes, beyond words, that we just find irresistible.
Of course, as much as we love roguelikes, I'm sure we all have a list of things that we feel they just get 'wrong'. And what's the best way to fix something you don't like - complain and whine about it, spam the developers, abandon the project until your demands are met? No! The saying goes, if you want something done right, do it yourself, so why not? We've all got some great ideas inside us, so why not pony up and do something about it? So that's what this thread is about - a reference thread, a resource thread, a discussion thread - a thread that marks your rise as the developer of the next bit thing in roguelikes.
LanguagesNow, what is a programming language? Well, it's what you will write your roguelike in. It's a defined set of words, structures, and methods for describing what you want to do, and how you want to do it. Every language does things differently for different reasons, and the sheer number of languages out there means that eventually you'll come across something that just feels right to you - and that's the language you want to use. Every language as their pros and cons, but at the end the day, the language that you feel comfortable using and does what you want it to is the best language. Don't listen to fanboys (or fangirls) trying to belittle you for your choice. Find something that works for you, and use it.
PythonNow I have to admit a fair amount of bias for Python. I love the language and it's what I've coded most in over the course of my life. So, naturally I can't be expected to give a fair overview of it. Here's a quote from the official website:
Python is an interpreted, interactive, object-oriented programming language. It incorporates modules, exceptions, dynamic typing, very high level dynamic data types, and classes. Python combines remarkable power with very clear syntax. It has interfaces to many system calls and libraries, as well as to various window systems, and is extensible in C or C++. It is also usable as an extension language for applications that need a programmable interface. Finally, Python is portable: it runs on many Unix variants, on the Mac, and on PCs under MS-DOS, Windows, Windows NT, and OS/2.
Basically, Python is the language you want to learn. It's clean, it's simple, and it cares more about programming well that learning convoluted syntax. And it's powerful enough to do almost anything.
General Python Resources:- Pygame
- Implementations such as IronPython (.NET) and Jython (Java)
- Curses for Windows and Python - note that I was never able to get this working, but that may just be a case of 'hurp de durp' on my part.
- Boo is not technically Python, but it fits in here because it's designed to be as much like Python as makes sense. It's .NET compatible and offers the rather sexy option of compiling to an .exe, which in itself is a very attractive feature.
RubyRuby is a scripting language, much like Python. It's been making the rounds for a few years now, and has really made waves in the web development circuit with developments such as Ruby on Rails. Don't let that fool you though, as it's a perfectly capable language for desktop development. The main drawback with Ruby for game development is the noticeable speed decrease - although with traditional turn-based roguelike gameplay, this point fades away, and even further when you dig a little deeper and see the marked speed increase in coming versions.
General Ruby Resources:LuaIt's lightweight, dependancy-free, easily embedded into existing code bases, fast, efficient, easy to learn for programmers and non-programmers alike.
Lua is becoming a very popular language to utilise in the roguelike community. It is either use as a seperate scripting language for events and content alongside another language, as in
Angband and
H-World, or it is used to create the game in it's entirety, like future versions of
ToME. It is much like Python and Ruby, only entirely different.
General Lua Resources- LÖVE is a Lua 2D game engine. You should check it out for the sheer fact that the site's image banner includes the phrase 'weeeee rainbows' which is awesome.
- lua-curses is the only information I can find about a port of ncurses to Lua, so be wary about how reliable it is. The homepage of the author is dead, too, but the files are sitting there in SVN.
- ToMEs forum on Lua.
DarkbasicDarkbasic has one very important point going for it - whilst most languages in this list are general purpose, designed to be able to do anything and everything, Darkbasic is designed first and foremost to do games. This focus alone means that it natively supports things that other languages don't include by default, which can make development and learning much easier.
General Darkbasic Resources:PerlPerl is apparently known as the 'Swiss Army Chainsaw' of programming languages, and the wide-spread and comprehensive use of it in many different environments certainly lends credence to this claim. Of course, this also comes with the claim that Perl is more 'practical' than 'beautiful', which means that it errs on the side of complexity more than anything. While it may not be the best starting language for a beginner, those willing to persevere and practice will find many powerful options at their fingertips.
General Perl Resources:JavaJava is a very popular language that is common amongst both professionals and beginners. One of it's greatest strengths is it's cross-platform nature, meaning that you generally only have to write the program once and it'll run the same on any platform that has the run-time environment installed.
General Java Resources:- JCurses - this version of JCurses has been abandoned, but I'm leaving the link up here for the sake of history. A much upgraded and much improved version is part of the libjcsi project, listed below, so I suggest checking that out.
- libjcsi is a console library for Java that has a number of different bases to work off, not just JCurses.
- serf-engine is a framework for Java roguelikes.
C#Csharp is the 'next big thing' from Microsoft. To be cruel, one could easily call it Microsoft Java and be on your merry trolling way. However, to write it off as such would really undermine just how useful and sexy the language is. Of course, many people will still see it, and note the close ties it has to other Microsoft products such as DirectX, and leave it alone, but it truly is worth a look, especially considering that Microsoft themselves have a wealth of documentation available, in addition to professional IDEs for developing in.
General C# Resources:C++C++ is arguably one of the most powerful, popular, and influential programming languages you're likely to encounter. It is used in some capacity in nearly every commercial application you use, and the wealth of documentation for it means that should you choose to learn it, you'll have plenty of material to study from. However, it's also one of the more complicated languages, to the point where many a bright-eyed and hopeful beginner has been dashed to pieces against it.
General C++ ResourcesCGeneral C ResourcesCommon LispYep, don't know much here. Anyone care to fill in the blanks?General Common Lisp ResourcesFreePascalFreePascal is becoming a very popular language to write roguelikes in.
And... uh, yeah. GearHead is written in Pascal. I might go poke around there for some more info.Flash / ActionscriptFlash is the most popular environment for developing interactive web-based applications. I guarantee you that you've played dozens of Flash games in the past year and been on thousands of websites that use the technology for everything from forums to banner ads. This almost total penetration of Flash means that it is a very seductive language to begin development in. In addition, the sheer popularity of it means that you have hundreds of thousands of tutorials and examples to work from, and many helpful communities. Actionscript, the Javascript(ish) language that Flash uses for the more detailed and involved applications, is also extremely powerful and offers almost all the features of other, more developed languages.
This, however, comes at a cost - a cost to Adobe. Flash is proprietary product, which means if you want to use it, there's not a lot of options to do so without crossing wallets with Adobe at some point. Additionally, Flash uses a timeline based approach to programming, which is radically different approach to most other languages.
General Flash / Actionscript ResourcesJavascriptNow, if you would of told me 5 years ago that you wanted to code a game - any game - in Javascript, I would of glared at you with equal amounts of contempt, scorn, and sorrow. Simply put, the langauge just wasn't consistant or fast enough to do anything, and was far too often associated with script-kiddies and amatuers to be taken seriously by the web design community at large.
These days, however, it's an entirely different thing. Perhaps spurned along by the development of its most famous derivative, Actionscript, Javascript (or ECMAscript if you want to get all fancy) has really come along in huge leaps and bounds in the past few years. Browsers have for the past generation been really focusing on their Javascript engines, and the performance difference from even 6 months ago can be many orders of magnitude faster - and certainly many hundreds of times faster than 5 years ago.
So why use Javascript for a roguelike? Well, it's certainly a very widespread language - it's one of the few programming languages that every OS supports by virtue of the fact that every OS comes with a web browser. It's also a relatively stable and mature language, meaning that plenty of documentation is available.
So why shouldn't you use Javascript for a roguelike? Even in this day and age, browser incompatibility is still the big hairy goblin that breathes down the neck of every web developer. The differences between writing Javascript applications for Firefox or Internet Explorer is minor, and if you know what you're doing are easily avoided, but are often the source of much frustration between both amateur and over-worked developers. Additionally, it may take another year or more for all browsers to include the new generation of fast Javascript engines, so be aware that performance between browsers may be spotty. And because of the horrors of years past, quite a few of the more paranoid users out there have Javascript (or at least select elements of it) turned off for fear of malicious intent, spyware, and other nasty exploits.
General Javascript ResourcesProcessingProcessing is a visual prototyping and rapid development language, which means the entire aim of it is to get something on screen fast. It's Java-based but differs enough to warrant calling it a different language. It's primarily designed around catering to visual artists and the general artistic community who need to learn to program - this also makes it a wonderful language for beginners to use, as the ability to quickly see what you're coding come alive in front of you is great motivation, unlike other languages that can take forever to go from code to play.
General Processing ResourcesOther LanguagesPlease feel free to discuss other languages! I'll include links to their discussions here, or if popularity or insight warrants, include them in full.
- haXe is an interesting little thing. It's an open-source language, the the main gimmick being that it can compile into a number of different languages - currently Javascript, Flash, PHP, NekoVM and an experimental beta C++, too.
- Inform - whilst not an appropriate language for writing conventional roguelikes in, this is still worth a mention. It's a natural English programming language used for Interactive Fiction. It's very well documented and quite easy to use. How could this be used in a roguelike? Well, maybe you could output a traditional ASCII map for each 'room' or something. Use your imaginations.
LibrariesLibraries are additions to programming languages that add functionality and features that may be missing from the core language. They can greatly simplify your projects because effectively someone else has done the hard work for you - although the amount of hard work saved can vary from library to library. Some are simple (!!) ports allowing your language to access the often neglected console functions of your OS, whilst others are purpose-built with particular roguelike programs in mind, and include things such as pathfinding and LOS.
For those in the know, I'm using the term 'library' as interchangeable with framework, API, whatever. If it can be added to a language, it goes in here.SDLLanguage(s): Damn near everything, and nearly every platform to boot.
SDL (Simple DirectMedia Layer) is pretty ubiquitous. Nearly every 2D game you can imagine out there runs on a base of SDL - it provides the basics of being able to create a window, draw a sprite, move it around the screen, and also more general functions, like playing sounds, using CDs, using keyboards and joysticks, etcetera. Quite a few of the preceding libraries use SDL in one form or another, so odds are you won't directly use this. But it's nice to know where these things come from, and in case you've got an unorthodox platform / language, you may just have to fall back on it.
Roguelikes Using SDL: You really want me to list them all?
CursesLanguage(s): Too many to list.
Now, if you're a more traditionally minded roguelike developer, you'll be looking for the Curses implementation for your chosen language. No emulation of consoles, no fudging things around to make them look 'authentic' - this is the real deal. Curses is the library used to code Rogue, the granddaddy of them all, so the heritage behind it is immense. It's a console control library, which will make many Windows users scratch their heads and grunt a bit - remember MS-DOS? Like that. Since being used to create the genre we all know and love, it's gone through a number of revisions and remakes (such as pcurses, PDcurses, ncurses) as technology has advanced, but it's still around to this day, and still going strong. Many languages have implementations and ports of Curses in some form or another, but beware - many Unix installs of languages come with the relevant curses libraries, but the Windows flavour of a few languages require you to go looking for a third-party implementation of it.
Roguelikes Using Curses - Rogue, ADOM
OpenGLLanguage(s): Practically all where... erm, practical.
OpenGL is as widespread as SDL and perhaps even more popular. If you aren't being told to use SDL for your graphics in your program, you're being yelled at to use OpenGL. Whilst most people think of 3D when using OpenGL, it's more than capable of fulfilling any and all of your 2D needs as well, and given the widespread adoption of it, there is a massive amount of documentation and implementations of it out there.
Roguelikes Using OpenGL: Some nonsense Dwarf game, for starters.
AllegroLangauge(s): Quite a few.Allegro is one of the many libraries that use SDL as their base, and it's certainly one of the most popular and well-supported. In addition to most of the core SDL features, it also includes many other useful things, such as vector drawing, text support, and basic 3D.
Roguelikes Using Allegro: 3059 (and it's sequel, 3069?),
Sword of Fargoal remakelibtcodLanguage(s): C++, .NET, Python, Common Lisp
libtcod (which is named after the game it was written for, The Chronicles of Doryen) is a true-colour console emulator that also includes many roguelike-specific features such as path-finding, various LOS implementations, file parsing, etcetera. All-in-all, if you're looking to make a roguelike, libraries like this are the way of the future.
Roguelike(s) Using libtcod: The Chronicles of Doryen,
Umbrarum RegnumRLXLanguage(s): Common Lisp
RLX - which stands for nothing in particular, although presumably something like 'Roguelike eXtended' or something - is a library that leans towards the more graphical roguelikes. It's certainly a very polished project, although it has very few projects using it, which may mean you're out on your own if things go wrong or you're looking for examples to be inspired by.
Roguelikes Using RLX: Void Mission Zero (design document only, from RLX website)
ValkyrieLanguage(s): FreePascal
Vallyrie is the library written by the developer of DoomRL and it's associated brethren (DiabloRL, Berserk!, AliensRL). Given the widespread popularity that DoomRL has, this naturally ensures that this is a library that many developers would love to get their hands on. Of course, there's one problem - it's not complete yet. There are various downloads that form part of the eventual library, but by the author's own admission, this totals no more than 20% of the entire library. Still, what's there may be of some use to those of you developing a roguelike in FreePascal, and is certainly worth keeping your eye on in case the library opens up a bit more in the future.
Roguelike(s) Using Valkyrie: DoomRL, DiabloRL, Berserk!, AliensRLjQueryLanguage(s): Javascript
jQuery is an unusual thing to include here, sure, but I believe that it offers great potential to the Javascript roguelike developer. It's all about presentation, speed, and function. It's also the foundation for a lot of AJAX applications, and if you use a database in combination with your Javascript, jQuery provides the perfect and seamless medium for the two to work together in.
ApplicationsNow here's a secret. You'll notice that in the game development scene, quite a few people look down on those that use one of the various game-maker applications. They scoff and scorn and look down their nose at you, making you believe that because you don't slave over hot code line by line, they're somehow better than you. But truthfully? You're not. The people who play your game aren't going to judge it by the methods they use to create it. They're going to judge the game by how fun it is, and that's the only thing that you need care about. So if you want to make a game, but just can't get to grips with a language, then by all means search for a game maker that helps. There's nothing wrong with it at all, and remember - 99% of people who say they're going to make a game never release anything. So be different - make a game. I guarantee you that most of those same forum-goers that poo-pooed you for chosing a game maker haven't released anything.
Game MakerGame Maker is - outside of pirated copies of RPGMaker - often the first experience users get with using a drag-drop method for instant game development. As such, it has a large and active community behind it, and many notable games have been created with it. A downside to Game Maker, however, is that it is a commercial product and to access its more advanced and popular options means forking out some money.
ConstructConstruct is very similar to Game Maker in many ways, and different in many others too. Construct is built on a DirectX base and also uses Python as a scripting language, and natively includes things such as a physics engine and shaders - meaning that you can end up with one very swish roguelike should you find reason (and time) to include such features. Additionally, Construct is both completely free and open source, points that many independent developers feel strongly about.
Links of Interest for ConstructXNA Game Studio ExpressThis has been the big darling of the independent scene for a while now - not only did Microsoft develop the relatively friendly C# language, they also actively cultured a community around it for game development, creating the XNA platform and releasing plenty of tools and tutorials to go with it. And just recently, they've opened up games created with XNA to the Xbox Live Marketplace, meaning that if you chose to develop a roguelike in this way, you can almost immediately publish it for millions of gamers the world over to enjoy (and get paid for your troubles, too)
Links of Interest for XNA- Role Playing Game Starter Kit. Whilst not a roguelike per-say, this free Project from Microsoft will still contain a lot of interesting information and code to look at that might help you with your own game.
Multimedia FusionUnityUnity is a toolset that has gathered quite a bit of hurrah in the Indie scene. It's certainly very sexy, offers a free Indie version (and a very affordable Professional version) that comes packed with features - such as supporting many different languages (Javascript, C# and Boo), web deployment, iPhone and Wii development, intergrated physics and terrain editors, networking - basically, Unity is the tool you want to be using. And hey, you can't fault a toolset that can create such games as Velociraptor Safari, can you?
Links of Interest for Unity- The thread on TIGSource announcing the release of Unity 2.5 for Windows. A very nice thread that contains many questions you'd want to ask, answered by the developers and users themselves.
Ren'PyRen'Py is a Visual Novel creator that's programmed in Python but uses a simpler syntax (is that even possible with Python?) for creating the game itself. It's also easily extensible into other genres with similar foundations, such as Dating Sims and Life Sims. There's not been a roguelike written for it yet, and even then it'd be a fairly unorthodox and unique roguelike - and yes, consider that a challenge.
Miscellaneous LinksWebBay12Forum