-lots of stuff here -
Thanks for the detailed review! I'm glad you found it useful.
Love the creature generator, got a few good ones that seem like perfect things to throw against my hapless fortresses.
If you don't mind me asking how did you get it to generate the creatures? In one of the resource libraries do you have a dictionary of body, material, and body-template tokens along with a general creature template?
Thanks!
How did I get it to gen creatures? Very carefully. (Actually, that's a bit of an understatement.) There aren't any "resource libraries" apart from "entitydata.txt". It decides each line in the file separately. First it creates a list. It appends the creature name line to the list, followed by an empty description line. It goes on down the creature data, putting in the various tags, then the body tokens and everything else, until it gets to the end. Once it gets to the end, it overwrites the description line with a semi-accurate description, prints it to the file, and starts work on the next creature.
The only thing that might resemble a "library" is a HUGE line of code with tons of body parts, weighted to make more common body parts more prevalent. It chooses from these at random. Most creatures get a mouth to stop weird things from happening, but that's the only thing that's fixed. Some creatures get eyes, some creatures don't. If they don't, they get extravision. If they get fingers without hands, it manually removes the fingers, or adds hands before them. It's a mess, really, but it works. (Honestly, Toady's whole system is a mess, and clearly wasn't designed with anything like this in mind, lol.)
I've always wanted to try writing a creature generator but one of the best ways that came to me was copying each tag into a dictionary or other list schema and then jumbling them up together that way. That doesn't seem the most productive or best way to do so. Don't even have a clue as to how I would create rules to get something intelligible or raw worthy. Do you have any pointers or suggestions I might be able to use? I don't want the source code but I'd like an idea of a possible pseudo-implementation I could start with, I'll struggle with it from there.
You're right, it's not the most productive way. You have to have if-then rules that determine what
can be added. If a creature has fingers, for example, then it
can get claws or fingernails - but that doesn't necessarily mean it
will. You go through it one line at a time. Mixing everything up and randomizing it would be very, very detrimental to your game's loading time and size of the errorlog.txt. (lol. Trust me on this one, I had it over a megabyte in size at one point.)
The source code is included - check the *.kpl file.
Man, I was really rooting for Girlinhat when she was actually talking about making that program; seemed bloody awesome at the time, and it still does now that you've actually done it. I'll probably use this at some point, maybe just because I like ‼surprises‼ in games.
Is your DFlang system an update to the older DFlang still available on the DFFD? I haven't had any real issues with the older one, so I'll wait and see how much more advanced yours can get beyond generating off much shorter strings.
DFLangCreate is actually completely separate. It bears (as far as I know) few resemblances (if any) to DFLang. I actually created it before I knew DFLang existed.
DFLang works (as I understand) by letting you add in words from real-world languages. It tries to make words that sound like they go with those real-world languages. My program lets you custom-create a language. Instead of being restricted to something you'd hear in real life, you can make a language that looks like "eenoweeno buggubbaweegee mugga hannomoogo", if you feel so inclined. The length of the words genned is determined by the length of the fake (or real) words you put in, so if you put in: "parsimonious,accoutrements,sesquipedalian,circumlocution,remunerative,idiosyncratic,anomalistic,perfidiousness,unencumbered,auspicious,unparagoned,magnanimous"
it might spit this out at you.
[T_WORD:ABBEY:samelemes]
[T_WORD:ACE:retrodad]
[T_WORD:ACT:umecis]
[T_WORD:AFTER:aumavenaminus]
[T_WORD:AGE:pedipiss]
[T_WORD:AGELESS:ciodanemiarioras]
[T_WORD:ALE:mematios]
[T_WORD:ANCIENT:cireccetalepiss]
[T_WORD:ANGEL:relaciomecas]
[T_WORD:ANGER:celerfuinore]
[T_WORD:ANIMAL:ruilepiruricetre]
[T_WORD:APE:umiritre]
[T_WORD:APPLE:memlevelin]
[T_WORD:ARCH:retrigud]
I'm pretty sure DFLang can't do that.
But then, I've never actually used it, so I don't know.
On the down side, DFLang's creations are probably a LOT more likely to look like real-world languages. The best mine can do is imitate.