Ok, time to update bashing.
Here's the principles: (in approximately the order of importance)
Anybody has a *chance* to bash anybody, it does not necessarily have to be a GOOD chance. On a roll of 1d100, a 1 always succeeds, a 100 always fails, regardless of any other factor. And that can be adjusted as needed.
First things first, following Banon's idea of 5 sizes of races (every race will have to be catalogued, not a big deal, just a switch statement).
Tiny, Small, Medium, Large, Huge
Tiny -> halflings, gnomes, pigmys, etc
Small -> dwarves, goblins
Medium -> elves, humans, orcs
Large -> ogres, half-ogres, trolls
Huge -> dragons, giants, half-giants
Now we set up a matrix (implementation of this is not difficult, but this is easiest to show).
Bashee listed horizontally, Basher listed vertically.
T S M L H
T 0 -10 -30 -50 -70
S +10 0 -10 -30 -50
M -10 +10 0 -10 -30
L -30 -10 +10 0 -10
H -50 -30 -10 +10 0
Basically, large size differences make for difficult bashing. Equal sizes are base chances, being one size bigger makes for easier bashing.
So that takes care of sizes. Next comes level.
My thought was 1 level difference is a 2% swing.
So if you are 5 levels above, you get 10% bonus to bash. If you are 10 levels under, you have a 20% penalty.
Dexterity set up similar to now, with a 5% bonus for the reaction bonus +'s, and you get a similar penalty for your opponents dexterity.
Now here's an interesting step. The efficacy of your bash is strength determined. Depending on how well you succeed (how much you make your bash roll by) and your strength, that will determine the length of the bash. There is nothing that says bashes have to WAIT_STATE for a full round, or that each bash will have the same amount. So my idea is to have bashes be anywhere from .5 to 3 rounds of violence. A 19 strength individual succeeding in the bash roll by a large margin would keep the opponent WAIT_STATED for 3 rounds. A barely made it bash roll by a character with a 16 strength would not be as effective and might last only for half a round, or maybe a full round (depending on how mobs behave mid-round, not sure how often mobact.c and spec_proc calls are made, whether mid-round WAIT_STATES would have any palpable effect). Also, the WAIT_STATE of the basher would be someway tied to the WAIT_STATE of the bashee. Not completely equal I would think, but maybe the WAIT_STATE + 1 round, if we want casters to have at least a chance to stand and cast something. Not sure, but it might be interesting.
Btw, when I say 'interesting' I usually mean 'can't you just hear the players scream?'.
That's the bare bones, the implementation of all this is easy, but I don't have the time to go into it here.
I like it..
heh, well, it sounds good.
afaik, all races are alraedy catalogued into size (though what would you do with an enormous spider? arachnids are T(iny), but this one..)
naw, there's the thing about spells. they're gonna be fragging players left and right, obviously. I can just hear the 'frag' and the 'kazapapapapa'. I can also imagine the fun I'll be having upstairs. Likewise, I can imagine the flood of complaints, rants, flames, curses and quitters this is gonna result in.
I say let's do it :)
I don't think races have really been catalogued, except for IsSmall() and IsGiant().
How about we treat the ACT_HUGE flag as an automatic increase in 2 sizes. If you want an enormous arachnid, you flag it huge, it goes from Tiny to Medium. Obviously, can't go bigger than Huge. Not ideal, I agree, but also players will have a devil of a time realizing what "size" mobs are. There will be no more message of: is MUCH too large to bash!
Let builders set a size, defaulting to the race size. Obviously, we can add a "mobsize" attribute to the char_data structure fairly easily. And a command line interface to change a mobs size (like setobjspeed, or setwtype) would save us the time to build it into medit, and make it a little less accessible for builders to say "My guard dog is HUGE, so's my pigmy mage, and my halfling thief, and my human guard, and my..." Older mobs can be updated as needed, but that should wait until after we've nuked the current zone list.
The last element of a race_type element is a race's size (constants.c:5438).
ACT_HUGE meaning size+2 could work, though I'd say, no larger than Gargantuan, rather than huge. Hmm, or maybe not, reserve gargantuan for certain races only. Same for adding a size flag for mob structures. Maybe growth would add +1 to size? Gives that spell some use too, rather than just look cool.
And about deleting zones.. I'm really quite opposed to this, I don't see the point of making the world smaller, it's small enough as it is. I'd rather see them revamped.
Ok, so if the sizes are done, and there are 6 sizes...
Tiny 1, Small 2, Medium 3, Large 4, Huge 5, Gargantuan 6
Keeping the same scale that would be:
T S M L H G
T 0 -10 -30 -50 -70 -90
S +10 0 -10 -30 -50 -70
M -10 +10 0 -10 -30 -50
L -30 -10 +10 0 -10 -30
H -50 -30 -10 +10 0 -10
G -70 -50 -30 -10 +10 0
However, if we want to say that Gargantuan is really really big...
T S M L H G
T 0 -10 -30 -50 -70 -95
S +10 0 -10 -30 -50 -90
M -10 +10 0 -10 -30 -85
L -30 -10 +10 0 -10 -75
H -50 -30 -10 +10 0 -65
G -70 -50 -30 -10 +10 0
In this way Half-Giants / Giants would still have a reasonable chance of bashing a dragon, but at best (assuming they are 95% at bash and have a +bash item) it would be 35% chance. So you better either be prepared to get breathed on, or bring along 3 bashers and pray.
Sorry about not realizing that the sizes were already done, I was looking for a helper function, not a data structure.
Log in to post a comment.