i don't like tracking the actual size of organs. when you're dealing with a number of races whose size relative to one another can differ so greatly (goblins range from 3'6" to 5'9", while imperials are a minimum of 6' and as tall as 10'6"), it gets very difficult to tell what exactly constitutes an 'average' size. 8" isn't bad for a standard six foot human, but for that short-as-hell goblin it's virtually knee-length, and for the tall-as-hell imperial it's just embarrassing. fortunately there's an answer for this, one that's (sort of) already in the game.
the game doesn't actually track your weight in terms of pounds, or kilograms. instead, it tracks your body mass index (or some approximation of it), and then multiplies that against your height (i think the formula is height^2 * BMI / 28,800, with height being measured in 1/10th inches and weight coming out in pounds - no idea how accurate this is; if someone has an actual formula i'd be happy to see it). i'm thinking of just doing something similar and then applying it to things like hair, genitals, wings, etc, to make it much easier to tell what is large and what isn't. this is mostly for the player's benefit - without graphics, it's sometimes easy to forget that you're actually four feet tall, and that (otherwise) unimpressive tool is actually quite large for your size.
it will also help prevent people from walking around with dongs that drag on the ground, but that's just a side benefit.
finished a large deal of the organ handling methods tonight. this is part of the reason i wanted to redo them in the fashion i did; instead of having 3 separate methods for virtually every piece of data stored by each organ (get, set, modify), it's all been condensed to about 40. now, the syntax is: getOrganType(1, head) or getOrganType(head). technically it's actually about 160 methods, but half of them are essentially 'halves' of the same function (one handling basic organs and the other handling sexual organs; the two store slightly different information and thus need different data structures, and thereby methods) and of those, half are one line methods that manually call getOrganType(1, head) when you just put in getOrganType(head). and yes, i could drop this number by half by only using a single data type for all organs and then just ignoring the extra sexy-type information for things like legs and arms, but the only extra code that gets written is a copy/pasted header with the names of the data types being changed. the rest of the code would need to get written either way.
i have tomorrow off, so should be done with organs by the end of then. probably going to spend several hours streaming (if anyone actually watches).
Take care with BMI, it doesn't work well once you get outside the normal human range of heights. A six foot human (1.82m) weighing 145lb (66kg) has a BMI of 66/(1.82x1.82) or 20 - bang on "normal".
ReplyDeleteNow a go5blin, exactly half that size, is 0.91m (3 foot) high, and should weigh an eighth of the human, so 8.25kg (18lbs). But the goblin's BMI is now 8.25/(0.91x0.91) or 10 - waif like! Similarly a 12' giant having the same proportions as the original human gets a BMI of 40!
the formula for bmi is bmi = (weight in lbs * 703) / height in inches^2, or ( bmi * height^2 ) / 703 = weight (in lbs). my formula uses 576 instead of 703 (adjusted for the fact that i'm measuring height in tenth, rather than full, inches and my 'average' bmi equivalent is 10), which results in overall heavier measurements - appropriate for what should be rather strong, sturdily built adventurer types.
ReplyDeleteif my knolwedge of mass and volume is correct, weight should really be growing at a cubic rather than square rate, but i don't feel like dicking around with the math to get a formula that works exactly correctly, and the one in place looks reasonable, even if it isn't perfect for very tall and very short characters.