TinyMUCK/Fuzzball MPI stuff

Since WolfSkunks are inflatible in three parts, and since MUCKs such as FurryMUCK and Tapestries are the closest thing we can get in being one w/o medical modifications or expensive fursuiting, might as well do a digital imitation.

BUT FIRST... some recognition.  Most of this code is baised off of Morphy's airtank code.  Morphy also helped with the coding of the bust to cup size by being possibly one of the few owners of pixelust's breast expansion CDROM, which included the description of how the large (75" and greater) breast sizes are coded.

NOTE:  Make sure your MUCK client can handle the long lines I'll be presenting here.  I'm going to break 'em up for explination's sake, but it works when all it one line.  I used TinyFuge, but I found that TrebucketTk, a truly crossplatform client, works better. You will need to append each line so that it all begins with the "@" sign, and make sure there are no spaces at the end of each line.

AND HERE WE GO!



Set yourself up

@set me=inches:144

How tall are you in inches?  As a WolfSkunk, I'm 12' tall.  This is important as the inflatable body parts are baised off of this measurement.

@set me=bmod:8
@set me=cmod:10
@set me=smod:24

These settings allow us to change our height to our breast size, cock length, and ballsac diameter.  These setting are how relative to the body height are the statistics.  In real life, it would be a hermaphrodite, a true realistic hermaprodite, having D-cup size breasts, a 7" penis and a ballsac of 3" diameter.  On me on the muck, it's a H size cup (on an 84-inch frame!), and double the length and size.  And that's before inflation!!!



Creating the 'tank

@create gastank

*POOM!* You have something named "gastank".  Grab the number, you'll need it!  Some of the MPI code here will refer to you or the gastank... so if you see WSRedWolf or STrRedWolf, put in your character's name; a #number... the number you got for creating the gastank.

@action rwib;rwdb;rwsb;rwic;rwdc;rwsc;rwis;rwds;rwss=gastank

This hooks all the commands together to the gastank.  I'm using "rw" as a prefix for each command so I don't confuse it for anyone else - you should change this here and with the other sections below.  Note that with the commands, I use "I" for inflatino, "D" to deflate, and "S" to set the percentage size.  From there, it's Breasts, Cock or ballSac.

@link rwib=$nothing

The code does the inflation in MPI, so you don't need to have a MUCKER bit.  We gotta make sure it does nothing but execute that MPI code, which will be stored someplace else.  So?  Link it to NOTHING!!!

@fail rwib=You try to turn the gastank's valve open but it's stuck!
@ofail rwib=tries to turn open the valve on the gastank but it won't budge!

Keep you gastank locked at all times... except durring pleasure.

@succ rwib={if:{smatch:{&cmd},rwib},{rwib:{&arg}}}
{if:{smatch:{&cmd},rwdb},{rwdb:{&arg}}}{if:{smatch:{&cmd},rwsb},{rwsb:{&arg}}}
{if:{smatch:{&cmd},rwic},{rwic:{&arg}}}{if:{smatch:{&cmd},rwdc},{rwdc:{&arg}}}
{if:{smatch:{&cmd},rwsc},{rwsc:{&arg}}}{if:{smatch:{&cmd},rwis},{rwis:{&arg}}}
{if:{smatch:{&cmd},rwds},{rwds:{&arg}}}{if:{smatch:{&cmd},rwss},{rwss:{&arg}}}

This is the starting point of each command.  MPI allows us to define macros in /_msgmacs/ and call 'em like commands here.  This way we save DB space.  Note I'm spliting up these lines, each line starting with an @ sign...

@set rwib=maxb:10000
@set rwib=maxc:10000
@set rwib=maxs:10000
@set rwib=minb:10
@set rwib=minc:14
@set rwib=mins:6

TinyMUCK Fuzzball has some limitations on MPI mathematics -- most specifically it does integer math and can only go so far...  besides, this will keep it from being too overinflated, and be a living incarnation of Doug Winger's artwork (but, hey, you can get close).

@set rwib=_msgmacs/footinch:{if:{le:{:1},12},{:1}",{div:{:1},12}'-{mod:{:1},12}"}

Morphy, who demonstrated the code for his character Umi (an inflatable fem tiger balloonie), used this to describe her height as she was inflated or deflated.  We'll use this as a pattern, and for the ballsac, since it's a bit logical to have foot-'round balls. ;)

@set rwib=_msgmacs/bustinch:{if:{le:{:1},144},{:1}",{div:{:1},12}'-{mod:{:1},12}"}
@set rwib=_msgmacs/cockinch:{if:{le:{:1},24},{:1}",{div:{:1},12}'-{mod:{:1},12}"}

Note that we changed them for the shaft and breasts, since who has a 2 foot bust measurement?  It's better visually to have a numrical value up to a certian point.  With the breasts, it's under 144 inches (I could do 175, which would be more visual with some breast expansion enthusiasts), while the cock is 24 inches (two feet).

@set rwib=_msgmacs/compbra:
{null:{with:a,{prop:binches,STrRedWolf},
 {if:{lt:{&a},76},{if:{lt:{&a},7},{compbra1:{&a}},{compbra2:{&a}}},{compbra3:{&a}}}
 {with:d,{midstr:ABCDEFGHIJKLMNOPQRSTUVWXYZ,{prop:bralet,STrRedWolf}},
  {store:{&d}x{prop:bramul,STrRedWolf},brasize,STrRedWolf}}}}

I got to hand to Prismo, for getting me on this one.  This changes the bust measurement to a letter cup size.  This and three other lines perform this magic.

@set rwib=_msgmacs/compbra1:
{store:{add:{div:{:1},2},1},bralet,STrRedWolf}{store:{add:{mod:{:1},2},1},bramul,STrRedWolf}
@set rwib=_msgmacs/compbra2:
{with:b,{subt:{:1},6},{store:{add:{div:{&b},3},4},bralet,STrRedWolf}
{store:{add:{mod:{&b},3},1},bramul,STrRedWolf}}
@set rwib=_msgmacs/compbra3:
{with:b,{subt:{:1},75},{store:{add:{mod:{&b},26},1},bralet,STrRedWolf}
{store:{add:{div:{&b},26},4},bramul,STrRedWolf}}

I'm using a bit of a modified way of determinine cup sizes.  As usual, determine your bust measurement by measuring under your breasts (the chest or frame measure), add 5, add another inch if it's odd, and subtract that from the measurement around your breasts.  That's the bust measurement (our binches).  If it's under 7 inches, the cup sizes starting from 1" are A, AA, B, BB, C, CC.  If it's under 75, it starts as D, DD, DDD, E, EE, EE, F... well, you can get the pattern.  Once it hits 75 or above, it uses pixelust's formula from his CDROM:  subtract 75 from the bust measurement(name this "X"); divide by 26.  Add the whole number (no rounding!) to 4 to get the number of letters to use.  Multiply the whole number by 26, and subtract it from X.  0=A, 25=Z.

@set rwib=_msgmacs/compbust:{store:{div:{mult:{div:{prop:inches,STrRedWolf},
{prop:bmod,STrRedWolf}},
{prop:bper,STrRedWolf}},100},binches,STrRedWolf}
{if:{lt:{prop:binches,STrRedWolf},1},{store:1,binches,STrRedWolf}}
{store:{bustinch:{prop:binches,STrRedWolf}},bsize,STrRedWolf}{compbra}
@set rwib=_msgmacs/compcock:{store:{div:{mult:{div:{prop:inches,STrRedWolf},
{prop:cmod,STrRedWolf}},
{prop:cper,STrRedWolf}},100},cinches,STrRedWolf}
{if:{lt:{prop:cinches,STrRedWolf},1},{store:1,cinches,STrRedWolf}}
{store:{cockinch:{prop:cinches,STrRedWolf}},csize,STrRedWolf}
@set rwib=_msgmacs/compsack:{store:{div:{mult:{div:{prop:inches,STrRedWolf},
{prop:smod,STrRedWolf}},
{prop:sper,STrRedWolf}},100},sinches,STrRedWolf}
{if:{lt:{prop:sinches,STrRedWolf},1},{store:1,sinches,STrRedWolf}}
{store:{footinch:{prop:sinches,STrRedWolf}},ssize,STrRedWolf}

These go in, do the expansion/deflation calculations, and store both the value in one property, and the presentable foot/inch measure in another.  I added the compbra call to compbust so when the breasts change, everything changes apropriate.

@set rwib=_msgmacs/rwdb:{null:{store:{subt:{prop:bper,STrRedWolf},{abs:{:1}}},bper,STrRedWolf}
{if:{lt:{prop:bper,STrRedWolf},{prop:minb,this}},{store:{prop:minb,this},bper,STrRedWolf}}{compbust}}
{null:{otell:{eval:uses the {name:#28469}{lit:,} shrinking STrRedWolf's chest to {prop:bsize,STrRedWolf} [{prop:bper,STrRedWolf}%{lit:,} {prop:brasize,STrRedWolf} cup]...},here,#-1}}
@set rwib=_msgmacs/rwdc:{null:{store:{subt:{prop:cper,STrRedWolf},{abs:{:1}}},cper,STrRedWolf}
{if:{lt:{prop:cper,STrRedWolf},{prop:minc,this}},{store:{prop:minc,this},cper,STrRedWolf}}{compcock}}
{null:{otell:{eval:uses the {name:#28469}{lit:,} shrinking STrRedWolf's cock to {prop:csize,STrRedWolf} [{prop:cper,STrRedWolf}%]...},here,#-1}}
@set rwib=_msgmacs/rwds:{null:{store:{subt:{prop:sper,STrRedWolf},{abs:{:1}}},sper,STrRedWolf}
{if:{lt:{prop:sper,STrRedWolf},{prop:mins,this}},{store:{prop:mins,this},sper,STrRedWolf}}{compsack}}
{null:{otell:{eval:uses the {name:#28469}{lit:,} shrinking STrRedWolf's ballsack to {prop:ssize,STrRedWolf} [{prop:sper,STrRedWolf}%]...},here,#-1}}

@set rwib=_msgmacs/rwib:{null:{store:{add:{prop:bper,STrRedWolf},{abs:{:1}}},bper,STrRedWolf}
{if:{gt:{prop:bper,STrRedWolf},{prop:maxb,this}},{store:{prop:maxb,this},bper,STrRedWolf}}{compbust}}
{null:{otell:{eval:uses the {name:#28469}{lit:,} swelling STrRedWolf's chest to {prop:bsize,STrRedWolf} [{prop:bper,STrRedWolf}%{lit:,} {prop:brasize,STrRedWolf} cup]...},here,#-1}}
@set rwib=_msgmacs/rwic:{null:{store:{add:{prop:cper,STrRedWolf},{abs:{:1}}},cper,STrRedWolf}
{if:{gt:{prop:cper,STrRedWolf},{prop:maxc,this}},{store:{prop:maxc,this},cper,STrRedWolf}}{compcock}}
{null:{otell:{eval:uses the {name:#28469}{lit:,} swelling STrRedWolf's cock to {prop:csize,STrRedWolf} [{prop:cper,STrRedWolf}%]...},here,#-1}}
@set rwib=_msgmacs/rwis:{null:{store:{add:{prop:sper,STrRedWolf},{abs:{:1}}},sper,STrRedWolf}
{if:{gt:{prop:sper,STrRedWolf},{prop:maxs,this}},{store:{prop:maxs,this},sper,STrRedWolf}}{compsack}}
{null:{otell:{eval:uses the {name:#28469}{lit:,} swelling STrRedWolf's ballsack to {prop:ssize,STrRedWolf} [{prop:sper,STrRedWolf}%]...},here,#-1}}

@set rwib=_msgmacs/rwsb:{null:{store:{abs:{:1}},bper,STrRedWolf}
{if:{lt:{prop:bper,STrRedWolf},{prop:minb,this}},{store:{prop:minb,this},bper,STrRedWolf}}{compbust}}
{null:{otell:{eval:adjusts something. Suddenly{lit:,} STrRedWolf's chest is {prop:bsize,STrRedWolf} [{prop:bper,STrRedWolf}%{lit:,} {prop:brasize,STrRedWolf} cup]...},here,#-1}}
@set rwib=_msgmacs/rwsc:{null:{store:{abs:{:1}},cper,STrRedWolf}
{if:{lt:{prop:cper,STrRedWolf},{prop:minc,this}},{store:{prop:minc,this},cper,STrRedWolf}}{compcock}}
{null:{otell:{eval:adjusts something. Suddenly{lit:,} STrRedWolf's cock is {prop:csize,STrRedWolf} [{prop:cper,STrRedWolf}%{]...},here,#-1}}
@set rwib=_msgmacs/rwss:{null:{store:{abs:{:1}},sper,STrRedWolf}
{if:{lt:{prop:sper,STrRedWolf},{prop:mins,this}},{store:{prop:mins,this},sper,STrRedWolf}}{compsack}}
{null:{otell:{eval:adjusts something. Suddenly{lit:,} STrRedWolf's ballsack is {prop:ssize,STrRedWolf} [{prop:sper,STrRedWolf}%]...},here,#-1}}

And here, we have the code for doing the inflation, deflation, and quick resetting.  It goes in, calls all the relivant macros, and produces a report sent out to everyone.  Quite a peice.


Describing yourself

Once you have everything set up, it's a bit simple to add the statistics to your description. Where you want the bust's bra cup size, use {prop:brasize,name}. The breast measurement, as well as the shaft and ballsac size, are also properties bsize, csize, ssize. Insert your character's name used on the MUCK where "name" is, and it'll print out.