Why's it so hard to create a character generator that rocks?

Spoot said:
Wait a second.....most/all D20 software won't allow addition of custom classes? What about spells, weapons, armour, profs, etc........if you can't add new ones.....doens't that kinda defeat the purpose of having the software?

I think most do allow it, but that's where a lot of the instability and errors come from - trying to build an engine flexible enough to do that.

And, yes, not having such an ability makes the software worthless to most of the market. It is "yesterday's tools", in that case.
 

log in or register to remove this ad

andargor said:
Hmm, I'm going to go out on a limb here...

The people here seem to be quite passionate as much about what's in a character "generator" (note the quotes, I don't want to discuss semantics :) ), as to what approach should be used.

I, too, find some of the limitations of PCGen frustrating. Don't get me wrong, a great deal of effort has gone into it, and I do appreciate it. The greatest wealth of PCGen is the sheer quantity of available data and the community to support it.

So I too decided to code my own program.

I lurk in d20-XML and PCGen-XML, since I believe that XML will be the way to go instead of proprietary languages like LST. One approach that has been discussed is using XML to describe "objects" that are added to a character. So a "level" is essentially a container for several "objects": bonuses to class level, bonus to BAB, bonus to caster level, adding special abilities, bonuses to saves, etc. are all objects.

I've coded a little demo from my "unfinished" program that demonstrates this. It's not usable or pretty, but it does show what I mean. You can get it at:

http://www.andargor.com/files/panther-demo.zip

I make no promises on when this will be available :) I'm going to release that engine under GNU GPL, so no "customer" pressure, please. :D

I'd like to have your comments!

Andargor

First off, more power to ya ! ;)

Second, though, XML is not a "language" properly. You can't write a software tool using XML that can add 1+1. It does not "do" anything; it is a "data description language", not a "data modification language" (to use database terms). I am not as familiar with XSL, so perhaps XSL can show "1+1" as "2", but that's not the kind of programming that gets you far in building a character tool.

The value of XML is its ability to self-describe data. That makes data more portable between systems. PCGen and E-tools, for example, could import each other's saved characters if they were saved in XML. Or, both tools could import the same XML-format list of new spells.

However, behind that wondrous ability is a requirement.

The parties exchanging the data have to come to some agreements as to what data is exchanged. Yes, XML is self-describing. But it does so using agreed-on terms. Without agreement, there is no "magic" in XML. That was the point of a previous thread, which I have long-since lost track of.

Still, I will be curious to see how far you get with it. :)

And, before I come off sounding too negative, here's a comment I have shared with my friends from time to time: "There is little I have been asked to code in the business world that is more complicated than the stuff I have worked on for gaming." Writing gaming tools is an excellent way to sharpen programming skills.
 

Silveras... "always with you it cannot be done." :p Just kidding.

Why do you crush my dreams of seeing the perfect character generator? ;)
 

There's been some comment on 'over rides' for feat/PrC requirements.

Have you even looked at the Preferences menu of PCGen?

I ask because this feature is present. Yes, there are settings to disable feat/PrC requirements, to ignore max skill ranks, to ignore cross class skill points, etc...

I'd recommend taking another look at this area of the program.

Is PCGen perfect? Nope. Humans code it, humans make errors, that's life.

As for a 'perfect' character generator to fullfill every single person's needs/wants/desires? Never happen. Why? Again, Humans.

Everyone wants/needs/desires something different.

So what's a coder to do? Code the most flexibility possible, trying to guage/guess all the possible permutations, and make it happen.

No _one_ program is ever going to satisfy everyone. It's not a reality that'll ever happen. Someone will not like the 'visual layout' of This program, but like its data content... someone else will love the 'visual layout' and not want all the data content... someone else loves both, someone else hates both... etc, ad naseum...

So coders do the best they can, the best they know how to. And this drives other people to make their own programs, which drives the previous coders to make adjustments in their program... wash, rinse, repeat.

No, there never will be a 'Perfect for everyone' character generator. All we can do, those of us that work on them, is try to allow for as much variation as possible and tweak things that are/become broken.

That's the reality of the situation folks.
 

Silveras said:
And, before I come off sounding too negative, here's a comment I have shared with my friends from time to time: "There is little I have been asked to code in the business world that is more complicated than the stuff I have worked on for gaming." Writing gaming tools is an excellent way to sharpen programming skills.

This is so true. The software I'm developing for gaming has taken a life of it's own (after killing mine I think) and gives new meaning to the term "feature creep". :D

One of the most difficult projects I've worked on in the business world was accruing interest on child support. This seems like a cakewalk at first.....then you add in all the state/federal laws and all the exceptions and you'll head will start spinning like in The Exorcist. And yet, this had less loopholes than the thing I'm coding now. :\
 

Silveras said:
First off, more power to ya ! ;)
Second, though, XML is not a "language" properly.

Erm, I never said it was. :)

My engine uses C++ for XML manipulation and provides a Javascript environment. The JS code implements game system logic, and uses the XML "objects" (note the quotes) to build a character.

Silveras said:
The value of XML is its ability to self-describe data. That makes data more portable between systems. PCGen and E-tools, for example, could import each other's saved characters if they were saved in XML. Or, both tools could import the same XML-format list of new spells.

However, behind that wondrous ability is a requirement.

The parties exchanging the data have to come to some agreements as to what data is exchanged. Yes, XML is self-describing. But it does so using agreed-on terms. Without agreement, there is no "magic" in XML. That was the point of a previous thread, which I have long-since lost track of.

Yes, an oft debated topic. However, with XSL this is facilitated as long as there is enough detail in the XML. An altogether different issue than programming approaches.



Silveras said:
Still, I will be curious to see how far you get with it. :)

Me too, isn't this fun? :D

Andargor
 

Joshua Randall said:
I'm with you, barsoomcore. I just want to be able to add skills and feats and have the math come out correct. PCGen can't even do that consistently. (No, really: it can't.)

A challenge for you programmers: build a character generator (or tracker) using only the subset of the SRD 3.5 that appears in the PH; i.e., not including any PrC's or monsters-as-characters or whatnot. Now, can your generator make mathematically perfect, complex PCs with a dozen different weapon feats, and have the BAB come out correct? When you can do that, you can sell me your product. :)
I tried that, back in 3.0. I needed a way to create characters and manage them during the game, and I wanted all the boring stuff to be made by the software. C++, heavily object-oriented, worked on Linux. Every game object (class, feat, monster, stat, whatever) had its own class, and lots of inheritance was involved (eg, Item -> Weapon -> Ranged Weapon -> Light Crossbow). Every object could send or receive messages, and the effect of a user action would cascade through the character to change everything that needs to be changed.

I could click on Barbarian Rage and the code for the Rage would be called, which would tell Constitution "go up by two". Constitution would shout out "I went up by two!", HP would hear it and adjust itself, and so on. Very easy to debug, too; just trace the messages.

Advantage: I could create a half-fiend vampiric ogre ranger/barbarian dual-wielding a bastard sword and a +2 keen dagger, with Weapon Finesse, raging, and read the correct attacks and damage for each attack on the screen. Then terminate the rage and read the new correct attacks and damage, including the fatigue effect. Then terminate the fatigue and read the right stuff again. Then unequip the weapons and read the claw/bite attacks. It even did monks with shuriken, and you know the infernal way shuriken work in 3.0. Pretty good I think. I had all the PHB and a bunch of monsters and templates before I got tired of it (minus the actual effects of spells, though the infrastructure was there).

Big disadvantage: can't add stuff without recompiling. Adding something trivial such as a weapon with no special rules, or a feat with no mechanical effects, is as easy as copying/pasting a single line in a source file and changing the name - the logic would be inherited by parent classes. But complex stuff, eh, you must know C++ and the program's message architecture.

What can I say - back then, I was already good at coding but I hadn't done much software engineering. The message-based architecture was a good idea, as was the inheritance, but lots of other details I'm a bit ashamed of (reason for which I won't release the program). The possibility of adding code to any aspect of any game object means ultimate flexibility - but being forced to do it is bad, not counting the fact that integrating different versions would be a problem.

Maybe a hybrid approach would work better: define game objects in simple, limited XML, with the option to also give them an actual class. Simple stuff like "it's a melee weapon dealing 1d8 piercing damage" can be in the XML (the Weapon base class will interpret this), complex stuff like "you can forfeit an attack to gain a +2 dodge bonus to AC" goes in the code. The class could be stored in a DLL; the program would read the class name, load the code, and start communicating with it via the well-defined message system. This way, you could make "packages" for a book, containing an XML file and a DLL; users would simply download them and plop them in the program dir, and the new stuff would be available in the program and even interact correctly with other packages written by other people (as correctly as the books themselves do anyway... which sometimes isn't much). Any user would be able to add simple stuff, while developers and other "power users" willing to write a bit of C++ and read the message specifications could make the complex, active things. Other programs could just read the XML and make what they want with the data it contains, or link to the DLLs and start swapping messages. Saving/loading could be conceptually similar, too.

Anyway, I won't make this. I estimate around one year of hard work to fully define the message system and XML, build the program, make the PHB package, and test them. I don't have that kind of free time any more. Out of academic interest, what do you professionals think about this architecture?
 

Mynex said:
There's been some comment on 'over rides' for feat/PrC requirements.

Have you even looked at the Preferences menu of PCGen?

I ask because this feature is present. Yes, there are settings to disable feat/PrC requirements, to ignore max skill ranks, to ignore cross class skill points, etc...
You miss my point, Mynex. I'm not saying that having such features is bad in and of itself. I'm saying that the fact that PCGen includes such complex features goes a long way to explaining why other elements of the program like its interface, its reliability and its performance are so awful the thing is almost completely unusable.

If the programmers had taken on a smaller task, and then worried about polishing the product, the usability would be so much better than it currently is it would hardly be recognizable.

Of course, they didn't, because they're programmers and want to do the FUN stuff. :D
Mynex said:
As for a 'perfect' character generator to fullfill every single person's needs/wants/desires? Never happen. Why? Again, Humans.

Everyone wants/needs/desires something different.
I don't want the "perfect" character generator to fulfill every single person's needs/wants/desires. I want one that fulfills MY needs/wants/desires. Those are very, very different ideas.

There is no 'perfect' tool for everyone in ANY field. Even hammers are customized for different users. But there are 'perfect' tools for specific user groups. You betcha.
Mynex said:
So what's a coder to do? Code the most flexibility possible, trying to guage/guess all the possible permutations, and make it happen.
And that's how you end up with huge monsters that are never finished and never end up satisfying ANYONE's needs.

Far better to pick ONE permutation, and do it right. Decide on some user group you want to satisfy and do everything you can to satisfy them, forgetting about everyone else. PCGen would be a fine tool if what you wanted was the ability to ignore your rulebooks and just create characters, develop them over time and be confident that they were perfectly in accordance with the rules. I say would be because it doesn't actually do that, but that seems to be the idea behind the product. Which I get as being a reasonably sensible goal. It just doesn't happen to describe my needs in any way.

PCGen doesn't meet my needs. None of this is to dog on the PCGen team, who have in all honesty accomplished a very great deal. The thread is a discussion on character generators, and I posted my thoughts on what I would like.
Mynex said:
No, there never will be a 'Perfect for everyone' character generator. All we can do, those of us that work on them, is try to allow for as much variation as possible and tweak things that are/become broken.

That's the reality of the situation folks.
Nonsense. We who work on them have a different, and I submit better, path to follow. That is to design kick-ass tools and build them right. Determine a specific goal for your product and design it to do just that. Focus your design -- don't include customizability unless it serves the goal. Finding the right point of focus is really the critical job in software design -- once you've figured out exactly what the product is supposed to DO, building it is trivial. Most software projects fail because they never figure out what they're trying to do, not because what they're trying to do is too complicated.

There's a variety of tools already on the market, because different developers have identified different focus points they want their products to address. Most of these tools are, like PCGen, pretty uncertain of what that point of focus actually is, and suffer because of it. As time goes on and the "RPG Software" market matures, these tools will more clearly identify what they're trying to do (or new tools, with better focus, will emerge) and I'll get my "Busy DM Char Gen" tool.

Or I'll write it myself. I already wrote a "Busy GM Monster Stat Block Maker" (available (for Macintosh only) at Konfabulator), and am planning my "Busy GM Campaign Organizer" to follow. I'm sure hoping somebody ELSE will create a "Busy GM Char Gen" tool because if I have to do it, I'll be an old man by the time it gets done.

:D
 

Zappo said:
Maybe a hybrid approach would work better: define game objects in simple, limited XML, with the option to also give them an actual class. Simple stuff like "it's a melee weapon dealing 1d8 piercing damage" can be in the XML (the Weapon base class will interpret this), complex stuff like "you can forfeit an attack to gain a +2 dodge bonus to AC" goes in the code.

Zappo said:
Anyway, I won't make this. I estimate around one year of hard work to fully define the message system and XML, build the program, make the PHB package, and test them. I don't have that kind of free time any more. Out of academic interest, what do you professionals think about this architecture?

Conceptually, I totally agree with you. On the implementation level, I still believe "game system" code should be user-modifiable.

A lot of games use this approach (Dungeon Siege comes to mind) where the user can script in new objects and behavior. I looked around for a long time for a good scripting language, and Javascript seems to be the winner. Take a look at my measly attempt (link in my second-to-last post), and tell me what you think. :)

Note that I have implemented objects in a "verbose" manner in XML (and loaded by the user-defined functions into a C++ "standard engine"). But this will be changed to a hierarchy of objects (e.g.: Weapon -> Longsword) akin to classes. So "inheritance" is possible. :)

Andargor
 
Last edited:

WingOver said:
Silveras... "always with you it cannot be done." :p Just kidding.

Why do you crush my dreams of seeing the perfect character generator? ;)

I am a realist. What can I say ?

Professionally, my role usually becomes "We can't do that, but here's what we can do..."

Note that I am not saying a tool ideal for your uses can't be done; I'm just saying that it can't be done as a generic tool to please a large enough consumer base.
 

Remove ads

Top