Constricting restrictions
28 December 2009
When I started Neko, I made myself some restrictions — as little use of third party libraries as possible (however without reinventing the wheel), everything small and agile and everything dynamically linked at run time.
However, now I’ve hit problems that these restrictions make further development of Neko really hard… anyone can help?
· · ·
Restrictions and Open Source
The restrictions mentioned above were made because of one of the major goals that guided me when switching to C++ — I wanted to go open source with the engine, and have both people collaborating with me on it’s development, as well as using it for their own purposes. I knew that the more libraries you have to install the more hassle it is to code using a given engine (that is especially true for us poor Windows users that don’t have the light of aptitude) shining upon us). The second problem was the complexity of boost for C++ developers — while it’s now quite popular, it’s still something that pro-grade programmers feel comfortable with, while beginners have a hard time getting used to the more esoteric possibilities that boost opens.
I aimed at getting Neko useful for the beginning roguelike programmer, and making it a tool that would allow really quickly and really easily build a roguelike no matter of C++ experience. I wanted it to be something that I “gave back” to the community under a really liberal licence (MIT-like).
Hence my idea of simplifying Neko as much as possible — all shared libraries are linked invisibly to the developer, there are as few of them as possible, and there’s no boost. Instead of linking to common libraries like libxml, Neko comes with a simplified XML toolset.
Backfire
However, the more I get into it, the more these seemingly innocent restrictions backfire at me. The current list of problems is listed below:
- NekoXML — while I’m really proud of this little child of mine, and while the restrictions assumed made some of the usage code noticeably simpler than of it’s more robust siblings, I still lack XPath-like functionality, which contrary to a XML parser is non-trivial. Coding it would take time, valuable time.
- Crypto — I need a simple cryptographic algorithm to keep the score, player and data files safe from sunday hackers. No, I’m not trying to wage war here against the more technically inclined (greetz sorear and add1!), but provide means of protecting the forum from “children” posting fake mortems and the like. (Yeah, I make the bold assumption that if someone is able to track down an IDEA key in a executable he probably is mature enough not to behave like a dork — false, but at least knocks of 95% of the possible candidates). Sure I could implement a simple Cipher (I’ve got a absurd and strictly sentimental pull towards the Anubis cipher) , both because of the sentimental name, as well as the curse protection), but it would take time to implement it.
- Zlib — I need compression for various tasks, as any non-trivial data handling application. Zlib’s huge, and the smaller libraries don’t have a licence that is friendly for inclusion in a MIT licensed library. I could rollup my own GZ implementation, but that would take… time.
- Lua — this one really hit me today. First of all, I need Lua anyway — and using it via it’s natural C-based interface is a pain in the ass. I’d be the first to throw everything and just go with LuaBind, however, this would violate my basic guidelines for Neko. I’m more and more convinced, that XML is inferior to Lua for storing data, hence I wanted to do what can be done using Lua. But I’m faced with the barebones C interface… I could write a nice wrapper for it, but again … you guessed it… time…
Time
Time, time, time, time… It’s a resource that I’m always lacking. And I need results from Neko, really fast — ChaosForge needs to move forward, gain more recognition, provide more complicated roguelikes that gather more and more people… for I want to be able to work on it fulltime.
Yes, I could break my rules, but that would violate Neko’s ease of use for beginners… does anyone care about that however? Where’s the solution?