So, recently i was wondering why the hell df eats so many resources, and why its so slow on new-version release. Than, i revisited google, and he told me, that df is closed source. Well, that didn't go anywhere closer to my expectations.
And i asking myself one question- "WHY?!
WHAT KIND OF SOCIAL LIFE DOES THAT GUY HAS?!(sorry, wrong quote)".
But seriously, why?
Game itself is massive...well, you all know its massive as hell. But my complain is simple - author doing it mostly alone. And i bet he mostly sucks at large structures optimizations. No offence, but have you seen how modern databases work? MySQL, PostgreSQL, hell even firebird - with even medium database for, to example this forum its much more gigantic than single session in dwarf fortress fortress mode. I mean, sure its not realtime, untill people don't starting to spam messages simultaneously, but than it still holds if we're talking about around 200-300 peoples.
Prime df slowdown is works around moving creatures with loads of integer and boolean data. Again, if somebody will quote this
Why say 500... I have seen programs 10 years old that had multiple thousands with little slowdown. (Darwinia)
I have a sneaky suspicion though that they use massively simplified pathfinding and job finding. Also dwarf fortress really does not track 100 dwarves, it tracks 100 dwarves, 100,000 stones, 3000 flutes, 5000 body parts 5,000,000 contaminants, 2,000,000 separate temperatures, 56,000 fluid tiles....
he will show that he is arrogant dumb###k in generic programming.
Objects which do not have simple path-finding ai, neither realtime random generator calls (dwarf can be taken by mood, it can hit other dwarf etc.) has almost no weight - loop-cycle threats them as pieces of map itself, but in stand-alone name-space ("it can be picked up by creature, it can be moved by water stream, but otherwise its passive so i don't need to work on it every game cycle - just check its condition"-says game engine).
But i digress.
//The next part of message addressed to developer of df.for (user=0, user++, database[user]<gameauthor.number+1)//Indian coding they say. To hell with them i say.
{
Guy, developer, nerd if you wish (no offence, just don't know how you call yourself). I understand you don't like when people touching your hobby creation, but, in the love of f#ck, dwarf fortress deserves a bit more than regular hobby-workaround. Its not like df is another tetris clone. Its complex sandbox game with tonns and tonns of different types of fun - starting from masochistic fun (loosing is fun eh), economic simulation fun, tactical rts fun etc... And people like it. Alot. Even more. Infinitely.
So, i dare you, create sourceforge project and place df under GPLv3 license...or if you're kind LGPL license. And let people contribute into it. You know df isn't simple game so i bet there is some good programmers playing it, which will contribute helluvalot optimizations, maybe some new ideas if you wish.
Don't believe me? Take a look at spring-rts. Its brilliant example how small 3d-viewer for replays of Total Annihilation can grow into full project with legacy of total annihilation files, but maintain itself new, fresh, flexible and powerful engine. All because of contributors. There is large community now (around 100 users which actively developing games for it and 20 developers which maintain code).
So. To sum-up or tl;dr - df needs opensource. Really. Really-really. Imagine possibilities - multi-threading, cuda support, optimizations, usage of databases instead of plain text files etc.
And even more - strict work with new dimensions (isometrical, 3d) if you wish, good mouse support (not only for d) (again if you wish). etc.
So, i hope you'll think about it.
}
//end of message