Frankly, I think combat magic in most RPGs (especially text-based) is so cumbersome it’s not even usable. I imagine this fool wearing some calfskin jacket (anything else is too heavy, oy vey) and a pointy star-emblazened wizard hat stabbing in vain with a knife in between manually-initiated blindingly-powerful displays of force.
The fact is: wizards don’t hold knives and shields. They hold wands or sources of other magical potency. And they kill you with them.
Thus my proposal.
Wizards hold wands as weapons. Different types of wands (crooked, steel, green aura… up to the designer) do different things in combat. Magic is passive and automatic, meaning the typical combat tick also incorporates magical exchanges if applicable. These “things” are controlled by weapon skills, because that’s what they are.
Look, I’m an dwarf-ogre thug. I wouldn’t know magic if it bit me in my ogre butt. You hand me a wand and I don’t know what to do with it. It is junk to me, though perhaps marketable junk. I sell this piece of junk to somebody wearing a star-emblazened cap and they beat me up and take my lunch money. The wand becomes a weapon.
Turn the situation around and hand me a 100lb spiked club. Same circumstances apply.
QED, a wand is a weapon.
Weapon skills for different styles and severities of magic. Stance and all other Sigma system attributes are similarly affected by choices of a certain available weapon skill.
This article makes more sense if the one below is read first!
How Will Character Classes Be Managed?
Character classes will be (surprise!) modular, (surprise!) automatically detected and loaded from a subdirectory of the main source. The system will expect to see a base.py character class module (name will be configurable), which will be used as the class of default for things like workaday denizens that don’t have special attributes (the goombas of Ravren, I suppose).
All class modules are required to implement functions returning results of the asymptotic “phi” function from the combat system specification. The base phi function will be provided in libsigma, so no need to sling exponentials in designer code. This is the major statistical control and generation step in class definition. The two adjustable parameters for each class statistic are phi0 and L95, meaning the initial value of the statistic and the level at which the statistic hits 95%.
Classes must specify if members are dominant-handed or ambidextrous. I’m sure there will be universal agreement around monks being ambidextrous. I get shivers just thinking about the possibilities!
Handedness (i.e., right or left) is rolled 50⁄50 at character creation. I think I prefer ambidexterity as a class characteristic, rather than assuming a swordsman suddenly levels and gains the ability to swing his weak hand on an equal basis with the practiced hand.
Duple statistics — meaning (integer) \ (percentage variability range) — will be set up using a class-based initial value (rolled to determine initial statistics such as health and power) and an incremental value for level up evaluation. Duple statistics will follow a linear-biased random walk due to this organization.
This keeps health from getting inflated to Final Fantasy proportions.
Finally, classes will hold dictionaries of lists, indexed to level number, containing all the weapon skills and abilities (separate dictionaries) to be attained at each level. I anticipate libsigma having a convenience function for managing what otherwise would be a soup of curly braces and brackets to make that structure work syntactically.
With renewed attention to Sigma, I’m watching my own subversion commit rate increase at a fairly dramatic rate. I’m trying to figure out how to describe the current phase of the project…
What came to mind was actually metafunctionality, which I then decided to equate to a growingly stable extensibility API.
But, since just about anything interesting within the system is a modular extension, we’re really saying we’ve built about a quarter of the house on about half the foundation.
This might sound goofy, but it’s actually the way to go with a purely modular program; you want your infrastructure to tail a lagging implementation. Otherwise, you’re too busy canning your dogfood to eat it. This spawns ad-hockery.
Like when I wrote the first implementation of character_in_room, which is designed to find out if a character by a certain name is in a room. When I ad hoc implemented this (very central and core) library function, I wrote it such that the room to search was determined with a reference to another character.
I hate that sentence above, so what it really means is that if you didn’t have a character to reference within the room you wanted to search you couldn’t search the room.
The subsequent implementation takes a room rather than a player, so you can use the function in probably twice as many ways as was possible before.
If I had thought API first rather than git-‘er-dun, that wouldn’t have happened in the first place.
What I’m staring at right now is a sketch of how the player class, statistical, and combat system (all inseparately tied in concept and implementation) is going to look in code, rather than prose. The implementation seems tight, simple, and efficient. We’ll see how long it takes to roll out.
One question for Meta: Do we know who the third person on the Google Code project is? Has this slipped my mind?
I go through a fairly high-frequency cycle recently, where I say, “I should learn Haskell. All the cool kids are doing it.” Then I see something like this and my eyes glaze over and roll back into my head.
I pull up a tutorial and they start using that great academic phrase “the lambda calculus,” using “the calculus” in every case, rather than just referring to it as calculus, for goodness’ sake.
I feel like all these functional languages subscribe to a false concept of productivity, namely the assumption that staring at a screen for eight hours and creating a one-liner that solves the problem in a mathematically-interesting manner is somehow superior to banging the same result out in three hours in forty lines of good, old-fashioned procedural or object-oriented code.
I don’t know. I’m typically one to exalt the concept of “beautiful code,” getting those indentations and variable names just right, so it has the look of something truly put together, almost in a poetic way. But, this is pretty much the limit of my pretentiousness. Doing things in a cool way just doesn’t have as much charm to me as getting things done.
I also don’t like a type of language whose tutorials are pretty much apologetic that something as simple as I/O just isn’t really suited for the language naturally and requires workarounds only explainable to an intermediate user of that very language.
How do you print “Hello, World” in a program devoid of state? I know it’s possible, but why force it?
In other inquiries, is Sigma truly the best project du jour for whomever wants to exert the energy? Is there a better, cooler, faster option? If so, what? I’m game. To make a game.
Watching a few episodes of Mad Men really gives some context to the roots of the anti-sexual harassment movement.
It also makes modern-day “offensive” things like complementing new hairstyles seem sillier than ever.
I am also moved to consider how important it actually is to look dignified. Not to say the characters on the show actually act dignified, but there’s something about the gray flannel suit. And this is coming from someone who prefers jeans at work (as long as I can get away with it!).
How many generations have been prominently associated with apathy?
We are really at a loss for good near-real-time managerial information. SAP is just terrible for this stuff. Then you go outside SAP and get yelled at by IT because you’re not being an Enterprise player.
This is one of those deals where everyone’s positions sound reasonable when presented, but you mesh them into reality and it’s all borked.
I really treat the Finance-IT conflict with a sense of noble gamesmanship. Neither side communicates. It’s a chess match. Spin abounds. Spreadsheets get pushed into desktop application space because it’s impossible to create desktop applications.
It’s just a different set of motives. You have Finance getting measured based on how useful their data is. You have IT getting measured based on how well they enforce a reality-divorced policy. “Minimizing step-outs” in the corporate argot.
It could be such a winning partnership. I think it is in some smaller companies.
To follow up almost immediately, I’m somewhat encouraged by Sara Bareilles, most famous for showing up in that coolguy’s living room in the recent Rhapsody commercial. We see similar production out of Colbie Caillat right now.
It’s nice to hear “singer-songwriter” in conjunction with women performers, rather than a cup size and filmography that for some strange reason is captured entirely on a night-vision Handycam.
Somewhat relatedly, there should be some rule that Norah Jones should not be played in a room with easy access to firearms or potent prescription drugs. How could you win so many Grammy awards before anyone even knows about you, and then still be that depressing?
I by no means intend this blog to become focused on handbag design, but it’s a decent example of what I feel happening right now:
We’re seeing a bit of expression seeping through the media interface, especially amongst women. And it doesn’t seem to be the pit-hair variety that we had to endure during the 90’s. Well, maybe for a lot longer than that.
Men, I think, are a bit consumed with productivity and achievement right now, which is consistent with generational analysis for the Millenials (Shell’s and my preferred term for the “Y” generation). Either achievement or trying to project that elusive image that membership in the leisure class is bought by affording that $100 pre-wrinkled A&F shirt without needing a straight job.
We have some very humorous foppery for our times with these American Eagle types. I mean the kind who walk into the store wearing branded clothes from the store, from head to toe.