Didi's Improved Chargen: Mark II

dn't write Didi's Chargen, that was written by someone named...you guessed it...DIDI. However, I have significantly re-written it over time. This means it is more and more "my" code effort as it goes through various versions. This is the most improved version to date, with the Womb, 2 chargen rooms, function holder etc. There's also a separate object for character sheet formatting. Mark II includes working secondary abilities code in chargen and some function fixes. Except for one minor problem with the character sheet code, this chargen should be fully functional for *basic mortal* characters. It's still missing merit and flaw code. Expect *no* support or hand-holding. Should work on TinyMUSH 3x and TinyMUX as-is, TinyMUSH 2.2.x's will want to remove the ANSI hilighting.

Author: Gwen Morse
Category: Other
Features: color substitutions.
Compatibility: TinyMUX.

Instructions

Copy and paste the below code into a compatible MUSH or MUX.

MUSHCode for Didi's Improved Chargen: Mark II

@@ Not much documentation for this chargen. It's a bit 'cleaner' than the first Didi chargen I had up, code wise.
@@ There are so many fixes I never bothered to document them all. However, it's still very much in the "style"
@@ of the first code I began working with (which was my goal -- to update "Didi's" chargen).

@@ The dbref #'s of the different rooms/objects are provided on the top of each in this log so that you can @edit the
@@ numbers to be suitable for your own game.

@@ The character sheets now have their own object *just* for the formatting commands. This makes it easier to edit/maintain.
@@ However, the sheets are a bit broken as I'm still in 'transition' between old sheet functions and new ones. The basics
@@ work, but, you don't get the proper "tops" by race. A decent coder should be able to see what I mean and fix that.

@@ Otherwise, everything else works (except those sheet tops). The sabils code now works (it didn't used to), so,
@@ secondary abilities can now be bought in chargen.

@@ Merits and Flaws are in production. Also in production, updating many of the useful chargen code object functions
@@ to be globally accessable. Also in production, updated character sheets. Also in production, multiple wound types.
@@ Also in production, supernatural sphere chargen integrated with this chargen.

@@ I think you can see I still have quite a bit on my plate to get this all up and running. However, any updates I add
@@ will not 'break' this code, only improve on it, so, you can safely install it and fiddle with it as you like. Whatever
@@ I come up with will only help, later.

@@ dbref=#212
@dig/teleport Chargen -- Womb
@lock here=#0
@Desc here=%r[center(* %ch%cr[mudname()] Chargen Womb%cn *,79,-)]%r%rThe Womb:%r%r[space(4)]Welcome to [mudname()].%r%r[space(4)]Before you begin designing your character, we advise you to read ALL the news items and think very carefully about what you want your character to be like. You can see the concepts of various characters already on the game by typing '+concepts'.%r%r[space(4)]This chargen is *MORTAL ONLY* at this time. You can send a supernatural character through here, but certain point pools and stats will *not* be available. Sphere-based chargen is in the works.%r%r[space(4)]Note that the [mudname()] Staff will be carefully examining your character before it is approved for roleplay. If you have too many 4 or 5s, particularly in melee, brawl, dodge, alertness, and firearms, your entrance into roleplay will be delayed.%r%r[space(4)]To begin character generation, type +begin <concept> where concept is a few words about your character's basic purpose/profession. Your concept is anonymous and only used to generate the +concepts list.%r%r[space(5)]For information on channels type 'help comsys'.%r%rNOTE: CHARACTERS WHO DO NOT LEAVE THIS ROOM WITHIN FIVE DAYS MAY BE NUKED!!!%r%r[repeat(-,79)]%r
@VA here=$+begin *:@switch/first [and(or(strmatch(get(%#/sex),f*),strmatch(get(%#/sex),m*)),gt(words(get(%#/desc)),0))]=0,@pemit %#={You must set your gender and a valid description before you can '+begin'. %rTo do so, Type:%r%r@sex me=<Male or Female>%r@desc me=<Your description>},{@trigger me/restart=%#;&concept %#=mid(%0, 0, 76); @lock %#/concept=me; &started %#=1; @unlock/telout me; @tel %#=#210; @lock/TeloutLock me=!IS_STAFF/0}
@VB here=$+concepts:@pemit %#=[center(CONCEPTS,76,-)][iter(sort(search(type=p)),switch(get(##/concept),,,%r[get(##/concept)]))]
@Listen here=* has arrived.
@Ahear here=@switch orflags(%#,WZwi?)=0,{@link %#=here;@set %#=ANSI;};@switch hasattr(%#,race)=0,{&race %#=mortal};
&IS_STAFF here=[orflags(%#,WwZ)]
&RESTART here=&bacp %0=switch(get(%0/race), mage, 7, 5); &bgnds %0=0 0 0 0 0; &virts %0=1 1 1; &virp %0=switch(get(%0/race), mortal, 7, kinfolk, 7, mortal+, 7, consor, 7, ghoul, 7, kinain, 7, medium, 7, vampire, 7,0); &freebies %0=switch(get(race,%0*), mortal, 21, mortal+, 21, 15); &wounds %0=0; &wp %0=0; &hu %0=0; &ABILS %0=[iter(lnum(61),0)]; &TATTRS %0=[iter(lnum(9),0)]; &powp %0=switch(get(%0/race),mage,6,vampire,3,fae,3,wraith,3,0); &xp %0=0; @dolist powers powvals set_attr set_abil done attr tattr attr2 abils abilvals sabils sabilvals bgndvals virtvals wpp mfs mp fp flawnums mernums attrs2 attr2 abils2 bgnds2 virts2 wp2 hu2 atp1 atp2 atp3 abp1 abp2 abp3={&## %0};
@VC here=$+race *:@switch match(mortal mortal+ vampire mage were wraith fae,%0)=0,{@pemit %#=CHARGEN: That is not an appropriate race at this time. Try: mortal, mortal+, vampire, mage, were, wraith, or fae.},{@pemit %#=CHARGEN: You set your race to [capstr(%0)]; &race %#=capstr(%0)}
&credits here=Chargen written a long time ago by the immortalized "Didi", and brought to Texas Twilight. A MUX version brought to Full Circle MUX. These versions brought to "Minneapolis by Night" then acquired by Gwen Morse. Rebuilt and Improved by Gwen Morse, with significant assistance from Gary Weiner. Handy Secondary Abilities split provided by Regan@manyWoDMUs. Sabils chargen purchasing fixed by Olson@Winter'sEdge.
&credits-cmd here=$credits:@pemit %#=%r[get(me/credits)]%r

@lock/TeloutLock here=!IS_STAFF/0
@set here=DARK
@set here=FLOATING
@set here=INHERIT
@set here=SAFE

@@ dbref=#210
@dig/teleport Chargen Step One
&PRIMARY_AT here=6
&SECONDARY_AT here=4
&TERTIARY_AT here=3
&PRIMARY_AB here=11
&SECONDARY_AB here=7
&TERTIARY_AB here=4
&RESTART here=$restart:@trig #212/restart=%#; @pemit %#=You 'restart'.
@Desc here=%r[center(* %ch%cr[mudname()] Chargen Step One %cn*,79,-)]%r%rAttributes, Abilities, Advantages & Virtues:%r%r[space(4)]You have begun character generation. Enter the priorities for your attributes and abilities. Some abilities and secondary abilities are restricted. If you want your character to have knowledge of the supernatural ("Lores") you must submit a background and have it passed by the appropriate staff.%r%r[space(4)]You may completely scrap your stats and start over by typing 'restart' at any time.%r[space(4)]When you are happy with your character, type 'happy' to go onto the next stage (freebies). If you do not spend all your points they will be lost when you type 'happy', this is so you may make your character as weak as you desire.%r[space(4)]'+points' will show you what points are left in your pools.%r
@Adesc here=@switch/first [get(%#/set_attr)]=1,{@pemit %#=[space(4)]Use 'adjattr <attrnum> <amount> to alter your Attributes and '+attrs' or '+stats' to view the results.},{@pemit %#=[space(4)]Your attributes are divided into three groups: Physical, Social and Mental, choose the order of priority of these groups by entering their initial letters in the order you desire.%re.g. SMP would put Social first, Mental second and Physical last.};@switch/first [get(%#/set_abil)]=1,{@pemit %#=[space(4)]Use 'adjabil <abilnum> <amount>' to alter your Abilities and '+abils' or '+stats' to view the results. %r[space(4)]Use 'adjsabil <sabilname> <amount>' to alter your Secondary Abilities and '+abils' or '+stats' to view the results. '+sabils' will give you information about the Secondary Abilities you can choose from.},{@pemit %#=[space(4)]Your abilities are divided into three groups: Talents, Skills and Knowledges, choose the order of priority of these groups by entering their initial letters in the order you desire.%re.g. STK would put Skills first, Talents second and Knowledges last.%r};@wait 0={@pemit %#=[space(4)]Use 'adjvir <virnum> <amount>' to alter your Virtues and '+advs' or '+stats' to view the results.%r[space(4)]Use 'adjbg <bgnum> <amount>' to alter your Backgrounds and '+advs' or '+stats' to view the results.%r[space(4)]'+misc' or '+stats' will show the results of Virtue adjustments on Humanity and Willpower.%r%r[repeat(-,79)]%r}
&PSM here=$psm:&ATP1 %#=[v(primary_at)];&ATP2 %#=[v(secondary_at)]; &ATP3 %#=[v(tertiary_at)];@trig me/resetattr=%#
&PMS here=$pms:&ATP1 %#=[v(primary_at)];&ATP3 %#=[v(secondary_at)]; &ATP2 %#=[v(tertiary_at)];@trig me/resetattr=%#
&SPM here=$spm:&ATP2 %#=[v(primary_at)];&ATP1 %#=[v(secondary_at)]; &ATP3 %#=[v(tertiary_at)];@trig me/resetattr=%#
&SMP here=$smp:&ATP2 %#=[v(primary_at)];&ATP3 %#=[v(secondary_at)]; &ATP1 %#=[v(tertiary_at)];@trig me/resetattr=%#
&MPS here=$mps:&ATP3 %#=[v(primary_at)];&ATP1 %#=[v(secondary_at)]; &ATP2 %#=[v(tertiary_at)];@trig me/resetattr=%#
&MSP here=$msp:&ATP3 %#=[v(primary_at)];&ATP2 %#=[v(secondary_at)]; &ATP1 %#=[v(tertiary_at)];@trig me/resetattr=%#
&TSK here=$tsk:&ABP1 %#=[v(primary_ab)];&ABP2 %#=[v(secondary_ab)]; &ABP3 %#=[v(tertiary_ab)];@trig me/resetabils=%#
&TKS here=$tks:&ABP1 %#=[v(primary_ab)];&ABP3 %#=[v(secondary_ab)]; &ABP2 %#=[v(tertiary_ab)];@trig me/resetabils=%#
&STK here=$stk:&ABP2 %#=[v(primary_ab)];&ABP1 %#=[v(secondary_ab)]; &ABP3 %#=[v(tertiary_ab)];@trig me/resetabils=%#
&SKT here=$skt:&ABP2 %#=[v(primary_ab)];&ABP3 %#=[v(secondary_ab)]; &ABP1 %#=[v(tertiary_ab)];@trig me/resetabils=%#
&KTS here=$kts:&ABP3 %#=[v(primary_ab)];&ABP1 %#=[v(secondary_ab)]; &ABP2 %#=[v(tertiary_ab)];@trig me/resetabils=%#
&KST here=$kst:&ABP3 %#=[v(primary_ab)];&ABP2 %#=[v(secondary_ab)]; &ABP1 %#=[v(tertiary_ab)];@trig me/resetabils=%#
&RESETATTR here=&set_attr %0=1; &ATTR %0=1 1 1 1 1 1 1 1 1; @pemit %0=You may now alter the value of your attributes by using the command%r'adjattr <attribute number> <amount>', the amount is the number of points to add to that attribute, You have a pool of points for each attribute group which you allocate when you 'adjattr'. The adjust amount may be negative, allowing you to take points back into the pools if you make a mistake. Entering a new attribute priority (e.g. psm) will reset your attributes, leaving your other stats unaffected. You may examine your attributes with '+attrs'.
&RESETABILS here=&set_abil %0=1; &ABILS %0=[iter(lnum(61),0)]; @pemit %0=You may modify your score in abilities by using the command%r'adjabil <ability number> <amount>'. You have a pool of points for each ability group which you allocate when you 'adjabil'. The adjust amount may be negative, allowing you to take points back into the pools if you make a mistake. You can view the points left in your pools with the command '+points'. Entering a new ability priority (e.g. TSK), will reset your abilities, leaving your other stats unaffected. You may inspect your abilities with '+abils'.
&ADJATTR here=$adjattr * *:@switch/first 0=[get(%#/set_attr)],{@pemit %#=You must select a priority for your attributes before you may set their values, type one of PSM, SPM, SPM, SMP, MPS, MSP. (P=Physical, S=Social, M=Mental).},isnum(%0),{@pemit %#='%0' is not an attribute number. Attributes must be adjusted by their number as shown in '+attrs'.},[u(#209/testattr,%0)],{@pemit %#=There is no attribute number '%0'.},isnum(%1),{@pemit %#=Silly adjust amount: '%1'.},{@switch/first [u(#209/chkvalneg,1,5,%1,u(#209/getatp,%#,%0),u(#209/gattr,%#,%0))] = 0,@pemit %#=Not enough points left., 1, @pemit %#=You cannot reduce an attribute below one., 2, {@pemit %#=You may not raise an attribute over 5.}, 3,{&ATTR %#=[replace(get(%#/ATTR),%0,add(%1,u(#209/gattr,%#,%0)))]; &[u(#209/atpa,%0)] %#=[sub(u(#209/getatp,%#,%0),%1)]; @pemit %#={[u(#209/attrname,%0)] now [u(#209/gattr,%#,%0)], pool now [u(#209/getatp,%#,%0)]}}}
&ADJABIL here=$adjabil * *:@switch/first 0=[get(%#/set_abil)],{@pemit %#=You must select a priority for your abilities before you may set their values, type one of TSK, TKS, STK, SKT, KTS or KST. (T=Talents, S=Skills, K=Knowledges).},[u(#209/testabil,%0)],{@pemit %#=There is no ability number '%0'.},isnum(%0),{@pemit %#='%0' is not an ability number. Abilities must be adjusted by their number as shown in '+abils'.},isnum(%1),{@pemit %#=Silly adjust amount: '%1'.},{@switch/first [u(#209/chkvalneg,0,3,%1,u(#209/getabp,%#,%0),u(#209/gabil,%#,%0))]=0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce an ability below zero., 2, {@pemit %#=You may not raise an ability over 3 at this point.}, 3,{&ABILS %#=[replace(get(%#/ABILS),%0,add(%1,u(#209/gabil,%#,%0)))]; &[u(#209/abpa,%0)] %#=[sub(u(#209/getabp,%#,%0),%1)]; @pemit %#={[u(#209/abilname,%0)] now [u(#209/gabil,%#,%0)], pool now [u(#209/getabp,%#,%0)]}}}
&ADJVIR here=$adjvir * *:@switch/first 0=isnum(%0),{@pemit %#='%0' is not a virtue number. Virtues must be adjusted by their number as shown in '+advs'.},[u(#209/testvirt,%0)],{@pemit %#=There is no virtue number '%0'.},isnum(%1),@pemit %#=Silly adjust amount: '%1'.,{@switch/first [u(#209/chkvalneg,1,5,%1,get(%#/VIRP),u(#209/gvirt,%#,%0))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce a virtue below one., 2, {@pemit %#=You may not raise a virtue over 5.}, 3,{&VIRTS %#=[replace(get(%#/VIRTS),%0,add(%1,u(#209/gvirt,%#,%0)))]; &VIRP %#=[sub(get(%#/VIRP),%1)]; &wp %#=[u(#209/gvirt,%#,3)]; &hu %#=[add(u(#209/gvirt,%#,1),u(#209/gvirt,%#,2))]; @pemit %#={[u(#209/virtname,%0)] now [u(#209/gvirt,%#,%0)], pool now [get(%#/VIRP)]}}}
&ADJBG here=$adjbg * *:@switch/first 0=isnum(%0),{@pemit %#='%0' is not a background number. Backgrounds must be adjusted by their number as shown in '+advs'.},u(#209/testbg,%0),{@pemit %#=There is no background number '%0'.},isnum(%1),@pemit %#=Silly adjust amount: '%1'.,{@switch/first [u(#209/chkvalneg,0,4,%1,get(%#/BACP),u(#209/gbg,%#,%0))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce a background below zero., 2, {@pemit %#=You may not raise a background over 4.}, 3,{&BGNDS %#=[replace(get(%#/BGNDS),%0,add(%1,u(#209/gbg,%#,%0)))]; &BACP %#=[sub(get(%#/BACP),%1)]; @pemit %#={[u(#209/bgname,%0)] now [u(#209/gbg,%#,%0)], pool now [get(%#/BACP)]}}}
&POINTS here=$+points:@pemit %#=%r[switch(get(%#/set_attr),1,{Attribute Points Remaining: Physical: [get(%#/ATP1)], Social: [get(%#/ATP2)], Mental: [get(%#/ATP3)]%r%r},{Attribute point priority not yet selected.%r})][switch(get(%#/set_abil),1,{Ability Points Remaining: Talents: [get(%#/ABP1)], Skills: [get(%#/ABP2)], Knowledges: [get(%#/ABP3)]%rAbilities cost one ability point to increase. Secondary abilities cost half an ability point to increase.%r%r},{Ability point priority not yet selected.%r})][switch(get(%#/started),1,{Virtue Points Remaining: [get(%#/VIRP)]%b%bBackground Points Remaining: [get(%#/BACP)]%rAdjusting Concience and Self-Control affects your Humanity score. Adjusting Courage affects your Willpower score.%r},{There seems to be a problem, get help from a staff member.})]
&ATTRS here=$+attrs:@switch/first [get(%#/set_attr)]=1,{@trig #223/showattr=%#,%#,1},@pemit %#=Your priorities have not yet been set for Attributes.
&ABILS here=$+abils:@switch/first [get(%#/set_abil)]=1,{@trig #223/showabil=%#,%#,1},@pemit %#=Your priorities have not yet been set for Abilities.
&MISC here=$+misc:@switch/first [get(%#/started)]=1,{@trig #223/showmisc=%#,%#},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&STATS here=$+stats:@switch/first [get(%#/set_attr)]=1,{@trig #223/showattr=%#,%#,0},{@pemit %#=Your priorities have not yet been set for Attributes.}; @switch/first [get(%#/set_abil)]=1,{@trig #223/showabil=%#,%#,0},{@pemit %#=Your priorities have not yet been set for Abilities.}; @switch/first [get(%#/started)]=1,{@trig #223/showadvs=%#,%#,0; @trig #223/showmisc=%#,%#},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&HAPPY here=$happy:@switch/first [get(%#/set_attr)]=1,{@switch/first [get(%#/set_abil)]=1,{&atp1 %#; &atp2 %#; &atp3 %#; &abp1 %#; &abp2 %#; &abp3 %#; &bacp %#; &virp %#; &powp %#; &attr2 %#=[get(%#/attr)]; &abils2 %#=[get(%#/abils)]; &bgnds2 %#=[get(%#/bgnds)]; &virts2 %#=[get(%#/virts)]; &wp2 %#=[get(%#/wp)]; &hu2 %#=[get(%#/hu)]; @unlock/telout me; @tel %#=#213; @lock/TeloutLock here=!IS_STAFF/0; @link %#=#213},@pemit %#=You have not done your abilities yet.},@pemit %#=You have not done your attributes yet.
&CHARGEN here=$+chargen:@pemit %#=You are already in chargen. If you want to restart type 'restart'.
&SABILS here=$+sabils:@pemit %#=%rYou can get listings of the individual Secondary Abilities by category. %r%r[space(3)]'+talents' gives you Secondary Talents (usually defined as inborn or intuitive abilities)%r%r[space(3)]'+skills' gives you Secondary Skill (usually defined as abilities learned through hands-on application)%r%r[space(3)]'+knows' gives you Secondary Knowledges (usually defined as book-learned or scholarly abilities)%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&ADJSABIL here=$adjsabil * *:@switch/first 0=[get(%#/set_abil)],{@pemit %# = You must select a priority for your abilities before you may set secondary ability values, type one of TSK, TKS, STK, SKT, KTS or KST. (T=Talents, S=Skills, K=Knowledges).},[u(#209/testsabil,%0)],{@pemit %#=There is no secondary ability '%0'.},not(sign(match(get(#209/offlimits),%0*))),{@pemit %#=You are are not authorized to choose the restricted '%0' as a secondary ability.},{[setq(1,match(lcstr(get(#209/SABILNAMES)),[lcstr(%0)]*))] [setq(2,member(get(%#/SABILS),%q1))] [setq(3,u(#209/SABP,%#,%0))]; @switch/first isnum(%1) = 0,@pemit %#=Silly adjust amount: '%1'.,{@switch/first [u(#209/CHKVALHALF,0,3,%1,get(%#/ABP%q3),u(#209/GSABIL,%#,%q2))] = 0,@pemit %# = Not enough points left.,1,@pemit %# = You cannot reduce a secondary ability below zero.,2,{@pemit %# = You may not raise a secondary ability over 3 at this point.},3,{[u(#209/SABILADJ,%#,sabils,sabilvals,%q1,%1)]; &ABP%q3 %# = [sub(get(%#/ABP%q3),fdiv(%1,2))][setq(4,member(get(%#/SABILS),%q1))][setq(5,u(#209/GSABIL,%#,%q4))]; @pemit %# = {[u(#209/SABILNAMEZ,%0)] now [switch(isnum(%q5),0,0,%q5)], ability pool now [get(%#/ABP%q3)]}}}}
&TALENTS here=$+talents:@pemit %#=%r[center(Secondary Talents,75)]%r%r[iter(rest(lnum(words(get(#209/sabilnames)))),[switch(eq(extract(get(#209/sabiltypes),##,1),1),1,%b%b[extract(get(#209/sabilnames),##,1)])])]%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&SKILLS here=$+skills:@pemit %#=%r[center(Secondary Skills,75)]%r%r[iter(rest(lnum(words(get(#209/sabilnames)))),[switch(eq(extract(get(#209/sabiltypes),##,1),2),1,%b%b[extract(get(#209/sabilnames),##,1)])])]%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&KNOWS here=$+know*:@pemit %#=%r[center(Secondary Knowledges,75)]%r%r[iter(rest(lnum(words(get(#209/sabilnames)))),[switch(eq(extract(get(#209/sabiltypes),##,1),3),1,%b%b[extract(get(#209/sabilnames),##,1)])])]%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&SABILTOP here=switch(1,sign(member(3 68 71 76 129 133 136 144,%0)),1,sign(member(13 61 63 67 72 135,%0)),2,match(124,%0),u(gabil,%#,44),sign(member(125 126 127 131 132 134 139 140 141 142,%0)),u(gabil,%#,41),match(146,%0),u(gsabil,%#,127),4)
&SABILTOPMSG here=switch(1,sign(member(3 68 71 76 129 133 136 144,%0)),You cannot raise your [u(#209/SABILNAME,%0)] score above 1 without clearing it with an admin.,sign(member(13 61 63 67 72 135,%0)),You cannot raise your [u(#209/SABILNAME,%0)] score above 2 without clearing it with an admin.,match(114,%0),Your Astrology score cannot be greater than your Occult score.,sign(member(125 126 127 131 132 134 139 140 141 142,%0)),Your [u(#209/SABILNAME,%0)] cannot be greater than your Science score.,match(146,%0),Your Toxicology score cannot be greater than your Chemistry score.,You may not raise a secondary ability over 4 without clearing it with an admin.)
&IS_STAFF here=[orflags(%#,WwZ)]
&ADVS here=$+advs:@switch/first [get(%#/started)]=1,{@trig #223/showadvs=%#,%#,1},@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
@set here=DARK
@set here=FLOATING
@set here=INHERIT
@set here=UNFINDABLE
@set here=SAFE

@@ dbref=#213
@dig/teleport Chargen Step Two
&UNDO here=$undo:&attr %#=[get(%#/attr2)];&abils %#=[get(%#/abils2)];&bgnds %#=[get(%#/bgnds2)];&virts %#=[get(%#/virts2)];&hu %#=[get(%#/hu2)];&wp %#=[get(%#/wp2)];&freebies %#=[u(#209/FREEBIES,%#)];@pemit %#=Changes undone.
@Desc here=%r[center(* %ch%cr[mudname()] Chargen Step Two%cn *,79,-)]%r%rFreebies:%r%r[space(4)]You are now in the last stage of character generation. You have a pool of 'freebie' points which may be used to increase any of your statistics. You may increase attributes (5 freebies per point), abilities (2 freebies per point), secondary abilities (1 freebie per point), virtues (2 freebies per point), willpower (2 freebies per point), backgrounds and humanity (both 1 freebie per point). %r%r[space(4)]This is done with the commands you should know by now, 'adjattr', 'adjabil', 'adjbg' and 'adjvir'. To alter your Humanity and Willpower you should use the commands 'adjwp <amount>' and 'adjhu <amount>'. %r%r[space(4)]To view your stats and the stat numbers use '+stats', '+attrs', '+abils', '+advs', and '+misc'. To see how many points you have left use '+points'. To see the lists of secondary abilities, '+sabils'. Unlike the previous stage you cannot specify a negative value to reduce a stat once you have increased it. You may however type 'undo' to restart freebie allocation from scratch, and 'restart' to start character generation from the very beginning. %r%r[space(4)]You do not have to spend all your freebie points, type 'done' whenever you like to exit character generation and enter into the game world. %r%r[repeat(-,79)]%r
&ADJATTR here=$adjattr * *:@switch get(%#/set_attr)=1,{@switch [u(#209/TESTATTR,%0)]=0,@pemit %#=There is no attribute number '%0'.,{@switch %1 = 0,{@pemit %#=Silly adjust amount: '%1'.},{@switch [u(#209/chkvalpos,1,5,%1,get(%#/freebies),u(#209/gattr,%#,%0))] = 0,{@pemit %#=Not enough points left.},1,{@pemit %#=You cannot reduce an attribute here.},2,{@pemit %#=You may not raise an attribute over 5.},3,{&ATTR %# = [replace(get(%#/ATTR),%0,add(%1,u(#209/gattr,%#,%0)))]; &freebies %# = [sub(get(%#/freebies),mul(5,%1))]; @pemit %# = {[u(#209/ATTRNAME,%0)] now [u(#209/gattr,%#,%0)], [get(%#/freebies)] freebie points remaining.}}}}},{@pemit %# = Your character has been mis-generated, call a wizard or admin for help.}
&ADJBG here=$adjbg * *:@switch [u(#209/testbg,%0)]=0,@pemit %#=There is no background number '%0'.,{@switch %1=0,@pemit %#=Silly adjust amount: '%1'.,{@switch [u(#209/chkvalpos,1,3,%1,get(%#/freebies),u(#209/gbg,%#,%0))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce a background here., 2, {@pemit %#=You may not raise a background over 4.}, 3,{&BGNDS %#=[replace(get(%#/BGNDS),%0,add(%1,u(#209/gbg,%#,%0)))]; &freebies %#=[sub(get(%#/freebies),%1)]; @pemit %#={[u(#209/bgname,%0)] now [u(#209/gbg,%#,%0)], [get(%#/freebies)] freebie points remaining.}}}}
&ADJWP here=$adjwp *:@switch %1=0,@pemit %#=Silly adjust amount: '%1'.,{@switch [u(#209/chkvalpos,1,8,%0,get(%#/freebies),get(%#/wp))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce willpower here., 2, {@pemit %#=You may not raise willpower over 8.}, 3,{&wp %#=[add(get(%#/wp),%0)]; &freebies %#=[sub(get(%#/freebies),mul(2,%0))]; @pemit %#={Willpower now [get(%#/wp)], [get(%#/freebies)] freebie points remaining.}}}
&ADJHU here=$adjhu *:@switch %1=0,@pemit %#=Silly adjust amount: '%1'.,{@switch [u(#209/chkvalpos,1,10,%0,get(%#/freebies),get(%#/hu))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce humanity here., 2, {@pemit %#=You may not raise humanity over 10.}, 3,{&hu %#=[add(get(%#/hu),%0)]; &freebies %#=[sub(get(%#/freebies),%0)]; @pemit %#={Humanity now [get(%#/hu)], [get(%#/freebies)] freebie points remaining.}}}
&POINTS here=$+points:@pemit %#=You have [get(%#/freebies)] freebie points remaining.
&ATTRS here=$+attrs:@switch [get(%#/set_attr)]=1,{@trig #223/fshowattr=%#,%#,1},@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&ABILS here=$+abils:@switch [get(%#/set_abil)]=1,{@trig #223/fshowabil=%#,%#,1},@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&ADVS here=$+advs:@switch [get(%#/started)]=1,{@trig #223/fshowadvs=%#,%#,1},@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&MISC here=$+misc:@switch [get(%#/started)]=1,{@trig #223/showmisc=%#,%#},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&STATS here=$+stats:@switch [get(%#/set_attr)]=1,{@trig #223/fshowattr=%#,%#,0},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}; @switch [get(%#/set_abil)]=1,{@trig #223/fshowabil=%#,%#,0},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}; @switch [get(%#/started)]=1,{@trig #223/fshowadvs=%#,%#,0; @trig #223/showmisc=%#,%#},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&CHARGEN here=$+chargen:@pemit %#=You are already in chargen, type 'restart' if you want to start over.
&ADJABIL here=$adjabil * *:@switch get(%#/set_abil)=1,{@switch [u(#209/testabil,%0)]=0,@pemit %#=There is no ability number '%0'.,{@switch %1=0,@pemit %#=Silly adjust amount: '%1'.,{@switch [u(#209/chkvalpos,1,5,%1,get(%#/freebies),u(#209/gabil,%#,%0))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce an ability here., 2, {@pemit %#=You may not raise an ability over 5.}, 3,{&ABILS %#=[replace(get(%#/ABILS),%0,add(%1,u(#209/gabil,%#,%0)))]; &freebies %#=[sub(get(%#/freebies),mul(2,%1))]; @pemit %#={[u(#209/abilname,%0)] now [u(#209/gabil,%#,%0)], [get(%#/freebies)] freebie points remaining.}}}}},{@pemit %#=Your character has been mis-generated, call a wizard or admin for help.}
&ADJVIR here=$adjvir * *:@switch [u(#209/TESTVIRT,%0)]=0,@pemit %#=There is no virtue number '%0'.,{@switch %1=0,@pemit %#=Silly adjust amount: '%1'.,{@switch [u(#209/chkvalpos,2,5,%1,get(%#/freebies),u(#209/gvirt,%#,%0))]= 0,@pemit %#=Not enough points left., 1,@pemit %#=You cannot reduce a virtue here., 2, {@pemit %#=You may not raise a virtue over 5.}, 3,{&VIRTS %#=[replace(get(%#/VIRTS),%0,add(%1,u(#209/gvirt,%#,%0)))]; &freebies %#=[sub(get(%#/freebies),mul(2,%1))]; @switch %0=3,{&wp %#=[add(get(%#/wp),%1)]; @switch [gt(get(%#/wp),10)]=1,&wp %#=10;},; @switch %0=1,{&hu %#=[add(get(%#/hu),%1)];@switch [gt(get(%#/hu),10)]=1,&hu %#=10;},2,{&hu %#=[add(get(%#/hu),%1)]; @switch [gt(get(%#/hu),10)]=1,&hu %#=10;},; @pemit %#={[u(#209/virtname,%0)] now [u(#209/gvirt,%#,%0)], [get(%#/freebies)] freebie points remaining.}}}}
&ADJSABIL here=$adjsabil * *:@switch 0=[get(%#/set_abil)],{@pemit %# = You must select a priority for your abilities before you may set secondary ability values, type one of TSK, TKS, STK, SKT, KTS or KST. (T=Talents, S=Skills, K=Knowledges).},[u(#209/testsabil,%0)],{@pemit %#=There is no secondary ability '%0'.},not(sign(match(get(#209/offlimits),%0*))),{@pemit %#=You are are not authorized to choose the restricted '%0' as a secondary ability.},{[setq(1,match(lcstr(get(#209/SABILNAMES)),[lcstr(%0)]*))] [setq(2,member(get(%#/SABILS),%q1))] [setq(3,u(#209/SABP,%#,%0))] ; @switch isnum(%1) = 0,@pemit %#=Silly adjust amount: '%1'.,{@switch [u(#209/CHKVALPOS,1,5,%1,get(%#/FREEBIES),u(#209/GSABIL,%#,%q2))] = 0,@pemit %# = Not enough points left.,1,@pemit %# = You cannot reduce a secondary ability here.,2,{@pemit %# = You may not raise a secondary ability over 5 at this point.},3,{[u(#209/SABILADJ,%#,sabils,sabilvals,%q1,%1)]; &FREEBIES %# = [sub(get(%#/FREEBIES),1)][setq(4,member(get(%#/SABILS),%q1))][setq(5,u(#209/GSABIL,%#,%q4))]; @pemit %# = {[u(#209/SABILNAMEZ,%0)] now [switch(isnum(%q5),0,0,%q5)], ability pool now [get(%#/FREEBIES)]}}}}
&DONE here=$done:@switch u(#209/OVERLIM,%#)=0,{&null me=[setq(0,u(#209/makelist,get(%#/abils)))][setq(1,iter(%q0,u(#209/gabil,%#,##)))][setq(2,u(#209/makelist,get(%#/bgnds)))][setq(3,iter(%q2,u(#209/gbg,%#,##)))][setq(4,u(#209/makelist,get(%#/virts)))][setq(5,iter(%q4,u(#209/gvirt,%#,##)))]; &abils %#=%q0; &abilvals %#=%q1; &bgnds %#=%q2; &bgndvals %#=%q3; &virts %#=%q4; &virtvals %#=%q5; &freebies %#; &attr2 %#; &abils2 %#; &virts2 %#; &bgnds2 %#; &wp2 %#; &hu2 %#; &wpp %#=[get(%#/wp)]; &tattr %#=[get(%#/attr)]; @link %#=#0; @set %#=ENTER_OK; @lock %#=%#; @lock/enter %#=%#; @wait 1=@pemit %#={Character generation is complete, time to set up your background. <+bg/help>.}; &done %#=1; @unlock/telout me; @tel %#=#0; @lock/TeloutLock me=!IS_STAFF/0},{@pemit %#=You have exceeded the maximum for your stats (4 for backgrounds, 8 for willpower, 10 for humanity, 5 for everything else). You will not be able to leave until you 'undo' your mistakes.}
&FLAWS here=$+flaw*:@pemit %#=[repeat(=,33)] FLAWS [repeat(=,33)][iter(rest(lnum(15)),%r[switch(u(hasflaw,##),1,*%b,%b%b)][ljust(F##,3)][ljust([extract(u(flist),##,1,|)] <[u(flawval,##)]>,31)][switch(u(hasflaw,add(##,14)),1,*%b,%b%b)][ljust(F[add(##,14)],
&RESTART here=$restart:@trig #212/restart=%#; @tel %#=#210; @link %#=#210; @pemit %#=You 'restart'.
&TALENTS here=$+talents:@pemit %#=%r[center(Secondary Talents,75)]%r%r[iter(rest(lnum(words(get(#209/sabilnames)))),[switch(eq(extract(get(#209/sabiltypes),##,1),1),1,%b%b[extract(get(#209/sabilnames),##,1)])]) ]%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&SKILLS here=$+skills:@pemit %#=%r[center(Secondary Skills,75)]%r%r[iter(rest(lnum(words(get(#209/sabilnames)))),[switch(eq(extract(get(#209/sabiltypes),##,1),2),1,%b%b[extract(get(#209/sabilnames),##,1)])])] %r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&KNOWS here=$+know*:@pemit %#=%r[center(Secondary Knowledges,75)]%r%r[iter(rest(lnum(words(get(#209/sabilnames)))),[switch(eq(extract(get(#209/sabiltypes),##,1),3),1,%b%b[extract(get(#209/sabilnames),##,1)] )])]%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&SABILS here=$+sabils:@pemit %#=%rYou can get listings of the individual Secondary Abilities by category. %r%r[space(3)]'+talents' gives you Secondary Talents (usually defined as inborn or intuitive abilities)%r%r[space(3)]'+skills' gives you Secondary Skill (usually defined as abilities learned through hands-on application)%r%r[space(3)]'+knows' gives you Secondary Knowledges (usually defined as book-learned or scholarly abilities)%r%rNOTE: Code staff is aware that the formatting is ugly/awkward to read. It is being worked on.%r
&IS_STAFF here=[orflags(%#,WwZ)]
@lock/TeloutLock here=!IS_STAFF/0
@set here=DARK
@set here=FLOATING
@set here=INHERIT
@set here=SAFE

@@ dbre=#209
@create Chargen Code Holder <CHO>=10
&STAT Chargen Code Holder <CHO>=[switch(orflags(WwZ),1,switch(member(get(attrnames),%1),0,switch(member(get(abilnames),%1),0,switch(member(get(sabilnames),%1),0,switch(member(get(pownames),%1),0,switch(member(get(virtnames),%1),0,switch(member(get(bgnames),%1),0,switch(member(get(miscnames),%1),0,#-1,u(gcmisc,%0,member(get(miscnames),%1))),u(gcbg,%0,member(get(bgnames),%1))),u(gcvirt,%0,member(get(virtnames),%1))),u(gcpow,%0,member(get(pownames),%1))),u(gcsabil,%0,member(get(sabilnames),%1))),u(gcabil,%0,member(get(abilnames),%1))),u(gcattr,%0,member(get(attrnames),%1))),#-1 PERMISSION DENIED)]
&TSTAT Chargen Code Holder <CHO>=[switch(orflags(WwZ),1,switch(member(get(attrnames),%1),0,switch(member(get(abilnames),%1),0,switch(member(get(sabilnames),%1),0,switch(member(get(pownames),%1),0,switch(member(get(virtnames),%1),0,switch(member(get(bgnames),%1),0,switch(member(get(miscnames),%1),0,#-1,u(gctmisc,%0,member(get(miscnames),%1))),u(gcbg,%0,member(get(bgnames),%1))),u(gcvirt,%0,member(get(virtnames),%1))),u(gcpow,%0,member(get(pownames),%1))),u(gcsabil,%0,member(get(sabilnames),%1))),u(gcabil,%0,member(get(abilnames),%1))),u(gctattr,%0,member(get(attrnames),%1))),#-1 PERMISSION DENIED)]
&HASSTATS Chargen Code Holder <CHO>=[and(get(%0/started),get(%0/set_attr),get(%0/set_abil),get(%0/done))]
&MISCNAMES Chargen Code Holder <CHO>=Race Class Humanity Willpower Health Experience Gnosis Rage Blood Generation Rank Sekhem Ba Ka Paradox Quintessence Study
&MISCIDS Chargen Code Holder <CHO>=race class hu wp wounds xp gnosis rage bp generation rank sekhem ba ka dox quint study corpus pathos glam ban arete
&POOLIDS Chargen Code Holder <CHO>=race class hu wpp wounds xp gps rp bpp generation rank sek ba ka dox quint study corpusp pathosp glamp banp arete
&GCMISC Chargen Code Holder <CHO>=switch(get(%0/[extract(v(miscids),%1,1)]),,#-2,get(%0/[extract(v(miscids),%1,1)]))
&GCTMISC Chargen Code Holder <CHO>=switch(get(%0/[extract(v(miscids),%1,1)]),,#-2,get(%0/[extract(v(poolids),%1,1)]))
&ATTRNAMES Chargen Code Holder <CHO>=Strength Dexterity Stamina Charisma Manipulation Appearance Perception Intelligence Wits
&GATTR Chargen Code Holder <CHO>=extract(get(%0/ATTR),%1,1)
&GCATTR Chargen Code Holder <CHO>=extract(get(%0/ATTR),%1,1)
&SABILNAME Chargen Code Holder <CHO>=extract(v(sabilnames),%0,1)
&GCSABIL Chargen Code Holder <CHO>=switch([member(get(%0/sabils),%1)],0,0,extract(get(%0/sabilvals),member(get(%0/sabils),%1),1))
&VIRTNAMES Chargen Code Holder <CHO>=Conscience Self-Control Courage Honour Love Truth Callousness Instincts Morale Glory Honor Wisdom Treachery Infamy Cunning Power Cruelty Blood-Purity Humour Actor Fae Nature Prop Scene Time
&TESTVIRT Chargen Code Holder <CHO>=and(gt(%0,0),lt(%0,4))
&VIRTNAME Chargen Code Holder <CHO>=extract(v(virtnames),%0,1)
&GVIRT Chargen Code Holder <CHO>=extract(get(%0/virts),%1,1)
&GCVIRT Chargen Code Holder <CHO>=switch([member(get(%0/virts),%1)],0,0,extract(get(%0/virtvals),member(get(%0/virts),%1),1))
&BGNAMES Chargen Code Holder <CHO>=Allies Contacts Fame Influence Resources Age Alt-Identity Arcane Avatar Artifact Backers BH-Membership Cenaculum Chantry Chimera Den-Realm Destiny Dream Dreamers Eidolon Elder-Status Familiar Familiar-Spirit Fetish Generation Gremayre Haunt Herd Holdings Hunter-Status Kinfolk Legacy Library Memoriam Mentor Military-Force Mnesis Node Notoriety Occult-Library Old-Soul Pack-Recognition Past-Life Pol-Connections Pure-Breed Rank Relic Reputation Retainers Rites Retinue Sabbat-Status Sanctum Sidekicks Status Talisman Title Totem Treasures Trods True-Hand-Status Wealth
&TESTBG Chargen Code Holder <CHO>=and(gt(%0,0),lt(%0,6))
&BGNAME Chargen Code Holder <CHO>=extract(v(bgnames),%0,1)
&GBG Chargen Code Holder <CHO>=extract(get(%0/bgnds),%1,1)
&GCBG Chargen Code Holder <CHO>=switch([member(get(%0/bgnds),%1)],0,0,extract(get(%0/bgndvals),member(get(%0/bgnds),%1),1))
&GCPOW Chargen Code Holder <CHO>=switch([member(get(%0/powers),%1)],0,0,extract(get(%0/powvals),member(get(%0/powers),%1),1))
&GWNDNAME Chargen Code Holder <CHO>=extract(v(woundnames),add(get(%0/wounds),1),1)
&PENALTY Chargen Code Holder <CHO>=extract(switch(get(%0/race),mortal,v(penalties),mortal+,v(penalties),v(spenalties)),get(%0/wounds),1)
&WOUNDNAMES Chargen Code Holder <CHO>=Unhurt Bruised Hurt Injured Wounded Mauled Crippled Incapacitated Dead
&PENALTIES Chargen Code Holder <CHO>=0 -1 -2 -3 -4 -5 n/a n/a
&SPENALTIES Chargen Code Holder <CHO>=0 0 0 -1 -1 -1 -5 n/a
&SPLITABILS Chargen Code Holder <CHO>=iter(u(lwnum,words(%0)),switch(div(sub(extract(%0,##,1),1),21),%1,extract(%0,##,1)))
&NTOV Chargen Code Holder <CHO>=extract(%1,member(%0,extract(%2,%3,1)),1)
&SPLITSABILS Chargen Code Holder <CHO>=iter(u(lwnum,words(%0)),switch(extract(v(sabiltypes),extract(%0,##,1),1),%1,extract(%0,##,1)))
&SABILNAMES Chargen Code Holder <CHO>=Animal-Empathy Artistry Blatancy Carousing Diplomacy Divination Dreaming Fortune-Telling Haggling Homeletics Instruction Interrogation Intrigue Lucid-Dreaming Masquerade Mimicry Panhandling Poetry Public-Speaking Scan Scrounging Search Seduction Sense-Deception Spirit-Aware Style Swimming Throwing Ventriloquism Acrobatics Animal-Training Art-Appreciation Archery Artillery Blacksmith Blind-Fighting Blood-Prep Boat-Handling Body-Alteration Body-Reading Brewing/Distill Bribery Bujo Camouflage Carpentry Climbing Cooking Crafts Dancing Debate Demolitions Diversion Disguise Drinking Escapology Falconry Fast-Draw Fast-Talk Fencing Fire-Eating Fire-Walking First-Aid Fishing Forgery Fortune-Telling Gambling Game-Playing Glassblowing Heavy-Weapons Herbalist High-ritual Hunting Hypnotism Indoctrination Jeweler Journalism Kalindo Leatherworking Lip-Reading Lock-Picking Mechanic Meditation Misdirection Parachuting Photography Pickpocket Pilot Police-Procedure Pottery Psychoanalysis Research Ride Scuba Singing Skiing Sleight-of-Hand Snake-Charming Speed-Reading Stone-Masonry Storytelling Talith Temporal-Sense Tightrope-Walk Torture Tracking Traps Accounting Alchemy Anthropology Archeology Architecture Area-Knowledge Art-History Astrology Astronomy Biology Chemistry Church-History Computer-Hack Covert-Culture Criminology Cryptography Cybernetics Economics Electronics Engineering Forensics Gematria Genetics Geography Geology Hearth-Wisdom Heraldry History Literature Mathematics Metallurgy Meteorology Military-Science Naturalist Numerology Paleography Parapsychology Physics Psychology Rites Sacred-Geometry Sacred-Scriptures Secret-Code-Lang Taxidermy Thanatology Theology Toxicology Wood-Craft
&SABILTYPES Chargen Code Holder <CHO>=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
&APPROVED Chargen Code Holder <CHO>=[switch(get(%#/bga),,0,1)]
&GCTATTR Chargen Code Holder <CHO>=switch(get(%0/TATTR),,extract(get(%0/ATTR),%1,1),extract(get(%0/TATTR),%1,1))
&GVATTR Chargen Code Holder <CHO>=[setq(8,extract(get(%0/ATTR),%1,1))][setq(9,extract(get(%0/TATTR),%1,1))][switch(sub(%q8,%q9),0,%q8,%q8 \(%q9\))]
&GETATP Chargen Code Holder <CHO>=get(%0/atp[div(add(%1,2),3)])
&ATPA Chargen Code Holder <CHO>=atp[div(add(%0,2),3)]
&TESTATTR Chargen Code Holder <CHO>=and(gte(%0,0),lt(%0,10))
&ATTRNAME Chargen Code Holder <CHO>=extract(v(attrnames),%0,1)
&ABILNAMES Chargen Code Holder <CHO>=Acting Alertness Athletics Brawl Dodge Empathy Expression Intimidation Leadership Streetwise Subterfuge 12 13 14 15 16 17 18 19 20 21 Awareness Intuition Kenning Primal-Urge Animal-Ken Crafts Drive Etiquette Meditation Melee Music Repair Security Stealth Survival 12 13 14 15 16 17 18 19 20 21 Diversion Firearms Performance Technology Bureaucracy Computer Culture Enigmas Finance Investigation Law Linguistics Medicine Politics Science 13 14 15 16 Cosmology Malkavian-Time Mythlore Occult Rituals
&GABIL Chargen Code Holder <CHO>=extract(get(%0/ABILS),%1,1)
&GETABP Chargen Code Holder <CHO>=get(%0/abp[add(1,div(%1,25))])
&ABPA Chargen Code Holder <CHO>=abp[add(1,div(%0,25))]
&GCABIL Chargen Code Holder <CHO>=switch([member(get(%0/abils),%1)],0,0,extract(get(%0/abilvals),member(get(%0/abils),%1),1))
&TESTABIL Chargen Code Holder <CHO>=and(gt(%0,0),lt(%0,75),lt(mod(sub(%0,1),25),11))
&ABILNAME Chargen Code Holder <CHO>=extract(v(abilnames),%0,1)
&MAKELIST Chargen Code Holder <CHO>=iter(iter(lnum(words(%0)),switch(extract(%0,add(1,##),1),0,,add(1,##))),##)
&INDEXLIST Chargen Code Holder <CHO>=iter(%0,u(%1,%2,##))
&LWNUM Chargen Code Holder <CHO>=cat(rest(lnum(%0)),%0)
&POWNAME Chargen Code Holder <CHO>=extract(v(pownames),%0,1)
&POWNAMES Chargen Code Holder <CHO>=Animalism Auspex Bardo Celerity Chimerstry Daimoinon Dementation Dominate Fortitude Melpominee Mytherceria Necromancy Obeah Obfuscate Obtenebration Potence Presence Protean Quietus Sanguinus Serpentis Spiritus Thanatosis Thaumaturgy Vicissitude Visceratika Lure-of-Flames Movement-Mind Weather-Control Conjuring Neptune's-Might Spirit-Thaumaturgy Taste-of-Blood Elemental-Mastery Corruption Gift-of-Morpheus Correspondance Entropy Forces Life Mind Matter Prime Spirit Time True-Faith Alchemy Amulets Celestial Conjuration Conveyance Cursing Divination Enchantment Ephemera Fascination Figurines Healing Hekau Hellfire Herbalism Necromancy Shadows Shapeshifting Summon-Bind-Ward Via-Ignis Weathercraft Astral-Form Clairvoyance Psychometry Telekinesis Telepathy Duration Extent Ritual Dark-Thaumaturgy Chains-of-Pleasure Hands-Destruction Fires-of-Inferno Pestilence Phobos Secret-Knowledge Torture Pyrokinesis Rift Kai Investments Qlippothic-Entropy Dance-of-Knives Instinct Luck Evil-Eye The-Sight Mediumship Draba Truth-of-the-Rom Zapaderin Spirit-of-the-Wolf Faerie-Threads Patteran Blood-Sense Nihilistics Temporis Biothaumaturgy Sthiska Argos Castigate Embody Fatalism Inhabit Keening Lifeweb Moliate Outrage Pandemonium Phantasm Puppetry Usury Biothaumaturgy Flux Intimation Mnemosynis Chicanery Legerdemain Primal Soothsay Sovereign Wayfare Sight Naming
&SHEETTOP Chargen Code Holder <CHO>=@pemit %0=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]
&REKNOWNNAME Chargen Code Holder <CHO>=extract(v(reknownnames),%0,1)
&REKNOWNNAMES Chargen Code Holder <CHO>=Glory Honor Wisdom
&GVREKNOWN Chargen Code Holder <CHO>=extract(get(%0/reknown),%1,1)
&GCREKNOWN Chargen Code Holder <CHO>=switch([member(get(%0/reknown),%1)],0,0,extract(get(%0/virtvals),member(g et(%0/reknown),%1),1))
&LORENAMES Chargen Code Holder <CHO>=Arcanum-Lore Bastet-Lore Camarilla-Lore City-Secrets Clan-Knowledge Demon-Lore Dream-Lore Faerie-Lore Familiar-Lore Guild-Lore Hierarchy-Lore Inquisition-Lore Kindred-Lore Mage-Lore Nunnehi-Lore Ratkin-Lore Romany-Lore Sabbat-Lore Sewer-Lore Spirit-Lore Stone-Lore Techno-Lore Tempest-Lore Tradition-Lore Umbra-Lore Underworld-Lore Voodoo-Lore Wyrm-Lore Black-Hand-Lore Ghoul-Lore Nephandi-Lore Umbrood-Lore Aetherial-Lore Verbena-Lore Euthanatos-Lore Hermetic-Lore VoidEngineer-Lore Chorus-Lore VirtualAdept-Lore Akashic-Lore CoX-Lore Dreamspeaker-Lore SoE-Lore NWO-Lore Progenitor-Lore Toreador-Lore Setite-Lore Ventrue-Lore Gangrel-Lore Nosferatu-Lore Giovanni-Lore Lasombra-Lore Samedi-Lore Malkavian-Lore Brujah-Lore Tremere-Lore Gremayre Plant-Lore Hollower-Lore Inquisition-Lore Kinfolk-Lore Corax-Lore Wood-Lore ShadowCourt-Lore Hunter-Lore Garou-Lore Court-Lore Kitsune-Lore Unseelie-Lore Seelie-Lore Kuei-Jin-Lore Ananasi-Lore Gurahl-Lore Nuwisha-Lore Mokole-Lore Tribal-Lore Vampire-Lore Myth-Lore
&LORENAME Chargen Code Holder <CHO>=extract(v(lorenames),%0,1)
&GLORE Chargen Code Holder <CHO>=extract(get(%0/LORES),%1,1)
&GCLORE Chargen Code Holder <CHO>=switch([member(get(%0/LORES),%1)],0,0,extract(get(%0/lorevals),member(get(%0/LORES),%1),1))
&TESTLORE Chargen Code Holder <CHO>=and(gt(%0,0),lt(%0,46),lt(mod(sub(%0,1),15),11))
&SPLITLORES Chargen Code Holder <CHO>=iter(u(lwnum,words(%0)),switch(mod(sub(##,1),3),%1,extract(%0,##,1)))
&OVERLIM Chargen Code Holder <CHO>=fold(add_nums,[iter(cat(get(%0/attr),get(%0/abils),get(%0/virts)),gt(##,5))] [iter(get(%0/bgnds),gt(##,4))] [gt(get(%0/wp),8)] [gt(get(%0/hu),10)])
&OVERPOOL Chargen Code Holder <CHO>=fold(add_nums,iter(cat(get(%0/atp1),get(%0/atp2),get(%0/atp2),get(%0/abp1),get(%0/abp2),get(%0/abp3),get(%0/bacp),get(%0/virp)),lt(##,0)))
&ADD_NUMS Chargen Code Holder <CHO>=add(%0,%1)
&FREEBIES Chargen Code Holder <CHO>=switch(get(%0/race), Mortal, 21, Kinfolk, 21, Mortal+, 21, Consor, 21, Ghoul, 21, Kinain, 21, Medium, 21, 15)
&CHKVALPOS Chargen Code Holder <CHO>=switch(gt(0,sub(%3,%2)),1,0,switch(lt(%2,0), 1,1,switch(gt(add(%2,%4),%1), 1,2 ,3)))
&CHKVALNEG Chargen Code Holder <CHO>=switch(gt(0,sub(%3,%2)),1,0,switch(lt(add(%2,%4),%0), 1,1, switch(gt(add(%2,%4),%1), 1,2 ,3)))
&TESTSABIL Chargen Code Holder <CHO>=match(u(sabilnames),%0*)
&OFFLIMITS Chargen Code Holder <CHO>=Masquerade Blatancy Kalindo Fire-Eating Fire-Walking Bribery Bujo Diversion Talith Do Escapology Pickpocket Pilot Temporal-Sense Spirit-Awareness Lock-Picking City-Secrets Thanatology Casting Rites Blood-Prep Malk-Time High-Ritual Gematria Sacred-Science Alchemy Hearth-Wisdom Sacred-Geometry Paleography Secret-Code-Lang
&TESTSABIL-WORKING Chargen Code Holder <CHO>=and(match(lcstr(u(sabilnames)),%0*)),not(sign(member(get(offlimits),u(sabilnames,%0)))))
&GSABIL Chargen Code Holder <CHO>=extract(get(%0/SABILVALS),%1,1)
&TIDY Chargen Code Holder <CHO>=iter(%0,add(0,##))
&ORDER Chargen Code Holder <CHO>=iter(%0,switch([lt(##,10)][lt(##,100)],11,00##,01,0##,##))
&SABILADJ Chargen Code Holder <CHO>=[setq(6,setunion(u(order,get(%0/%1)),u(order,%3)))][setq(7,member(%q6,u(order,%3)))][setq(8,get(%0/%2))][switch([gt(words(%q6),words(get(%0/%1)))],1,[set(%0,%1:[u(tidy,%q6)])][set(%0,%2:[cat(extract(%q8,1,sub(%q7,1)),%4,extract(%q8,%q7,words(%q6)))])],[setq(9,add(%4,extract(%q8,%q7,1)))][switch([gt(%q9,0)],1,[set(%0,%2:[u(tidy,replace(%q8,%q7,%q9))])],[set(%0,%2:[cat(extract(get(%0/%2),1,sub(%q7,1)),extract(get(%0/%2),add(%q7,1),words(get(%0/%2))))])][set(%0,%1:[u(tidy,setdiff(u(order,get(%0/%1)),u(order,%3)))])])])]
&SABILNAMEZ Chargen Code Holder <CHO>=extract(v(sabilnames),%q1,1)
&HIDDEN Chargen Code Holder <CHO>=bb_read bb_omit bg bga done unsummon stats timeon vacation xp votes birthtime concept bacp virp powp freebies atp2 atp3 atp1 abp3 abp2 abp1 attr2 abils2 bgnds2 virts2 wp2 hu2 healed lores lorevals powers powvals virts virtvals bgnds bgndvals wounds attr tattr race abils abilvals sabils sabilvals bg wp bp gnosis bpp generation rage sekhem corpus pathos glam ban wpp bpp gpp gps rp ba ka sek quint dox angst app corpusp pathosp glamp banp thorns dpassions psyche shadow hu arete faith mfs specializes spells rituals gifts rites investments weapons equipments class group sect special form rank lastvote done started set_abil set_attr set_lore auras nature demeanor influences ooc_from current_form statsbg prime-count prime-month prime-month-last
&SABP Chargen Code Holder <CHO>=extract(u(sabiltypes),match(u(sabilnames),%1*),1)
&CHKVALHALF Chargen Code Holder <CHO>=switch(gt(0,sub(%3,fdiv(%2,2))),1,0,switch(lt(add(%2,%4),%0),1,1,switch(gt(add(%2,%4),%1),1,2 ,3)))
&GBWNDS Chargen Code Holder <CHO>=switch(hasattr(%0,bwnds),0,0,get(%0/bwnds))
&GCWNDS Chargen Code Holder <CHO>=switch(hasattr(%0,cwnds),0,0,get(%0/cwnds))
&GLWNDS Chargen Code Holder <CHO>=switch(hasattr(%0,lwnds),0,0,get(%0/lwnds))
&GAWNDS Chargen Code Holder <CHO>=switch(hasattr(%0,awnds),0,0,get(%0/awnds))
&GWNDS Chargen Code Holder <CHO>=[setq(0,add(u(gawnds,%0),u(gpwnds,%0),u(gbwnds,%0)))][setq(1,u(gcwnds,%0))][switch(gte(r(0),%q1),1,%q0,%q1)]
&GWNDPEN Chargen Code Holder <CHO>=[extract(switch(hasattr(%0,class),1,v(spenalties),v(penalties)),add(u(gwnds,%0),1),1)]
&GWNDLEV Chargen Code Holder <CHO>=[setq(8,add(u(gwnds,%0),1))][extract(switch(hasattr(%0,woundnames),1,get(%0/woundnames),v(woundnames)),switch(gt(%q8,8),1,9,%q8),1)]
&GRWNDS Chargen Code Holder <CHO>=[add(u(gawnds,%0),u(gpwnds,%0),u(gbwnds,%0))]
&FIL_SABILS Chargen Code Holder <CHO>=rest(lnum(words(u(sabilnames))))
&CLEARSET Chargen Code Holder <CHO>=class sect arete quint dox generation bp bpp
&GPWNDS Chargen Code Holder <CHO>=switch(hasattr(%0,pwnds),0,0,get(%0/pwnds))
@set Chargen Code Holder <CHO>=DARK
@set Chargen Code Holder <CHO>=INHERIT
@set Chargen Code Holder <CHO>=UNFINDABLE
@set Chargen Code Holder <CHO>=SAFE

@@ dbref=#223
@create Sheet Format Object <SFO>=10
&SHOWATTR Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ATTRIBUTES [repeat(=,30)]%r-- Physical, pool [ljust(get(%1/atp1),2)]--%b%b-- Social, pool [ljust(get(%1/atp2),2)] --- %b-- Mental, pool [ljust(get(%1/atp3),2)] ---%r1%bStrength[rjust(u(gattr,%1,1),12)][space(2)]4%bCharisma[rjust(u(gattr,%1,4),12)]%b%b7%bPerception[rjust(u(gattr,%1,7),10)]%r2%bDexterity[rjust(u(gattr,%1,2),11)]%b%b5%bManipulation[rjust(u(gattr,%1,5),8)]%b%b8%bIntelligence[rjust(u(gattr,%1,8),8)]%r3%bStamina[rjust(u(gattr,%1,3),13)]%b%b6%bAppearance[rjust(u(gattr,%1,6),10)]%b%b9%bWits[rjust(u(gattr,%1,9),16)][switch(%2,1,%r[repeat(-,72)],)];
&SHOWABIL Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ABILITIES [repeat(=,31)]%r-- Talents, pts [ljust(get(%1/abp1),3)] -- --- Skills, pts [ljust(get(%1/abp2),3)] --- -- Knowledges, pts [ljust(get(%1/abp3),3)]--[iter(1 2 3 4 5 6 7 8 9 10 11,%r[ljust(##,2)][ljust(u(abilname,##),18)][rjust(u(gabil,%1,##),2)][rjust(add(##,25),3)]%b[ljust(u(abilname,add(##,25)),18)][rjust(u(gabil,%1,add(##,25)),2)][rjust(add(##,50),3)]%b[ljust(u(abilname,add(##,50)),18)][rjust(u(gabil,%1,add(##,50)),2)])]%r[setq(5,iter(%q5,u(abilname,##)))][setq(0,get(%1/sabils))][setq(1,get(%1/sabilvals))][setq(2,u(splitsabils,r(0),1))][setq(6,cat(%q6,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(3,cat(%q3,iter(%q2,u(sabilname,##))))][setq(2,u(splitsabils,r(0),2))][setq(7,cat(%q7,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(4,cat(%q4,iter(%q2,u(sabilname,##))))][setq(2,u(splitsabils,r(0),3))][setq(8,cat(%q8,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(5,cat(%q5,iter(%q2,u(sabilname,##))))][setq(9,max(words(%q6),words(%q7),words(%q8)))][repeat(-,25)] SECONDARY ABILITIES [repeat(-,25)][iter(u(lwnum,%q9),%r%b%b[ljust(extract(%q3,##,1),18)][rjust(extract(%q6,##,1),2)][space(4)][ljust(extract(%q4,##,1),18)][rjust(extract(%q7,##,1),2)][space(4)][ljust(extract(%q5,##,1),18)][rjust(extract(%q8,##,1),2)])][switch(%2,1,%r[repeat(-,72)],)]
&SHOWADVS Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ADVANTAGES [repeat(=,30)]%r%b%b-- Powers,pool [get(%1/powp)] --[space(2)]-- Backgrounds,pool [get(%1/bacp)] -%b%b-- Virtues, pool [get(%1/virp)] %b--[iter(u(lwnum,6),%r[space(24)][switch(lt(##,6),1,{## [ljust(u(bgname,##),18)][rjust(u(gbg,%1,##),2)]},space(22))]%b%b[switch(lt(##,4),1,{## [ljust(u(virtname,##),18)][rjust(u(gvirt,%1,##),2)]},)])][switch(%2,1,%r[repeat(-,72)],)];
&SHOWMISC Sheet Format Object <SFO>=@pemit %0=[repeat(-,72)]%r%b%bHumanity[rjust(get(%1/hu),12)][space(4)]Willpower[rjust([get(%1/wp)]/[get(%1/wp)],11)][space(4)]Experience[rjust(get(%1/xp),10)]%r[switch(get(%1/race),vampire,{%b%bBlood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)]},were,{%b%bRage[rjust([get(%1/rage)]/[get(%1/rp)],16)]},mage,{%b%bQuint/Paradox[rjust([get(%1/quint)]/[get(%1/dox)],7)]},[space(22)])][space(4)]Health[rjust(u(gwndname,%1),14)][space(4)][switch(get(%1/wounds),0,,Penalty[rjust(u(penalty,%1),13)])]%r[repeat(-,72)]
&XSHOWCOM Sheet Format Object <SFO>=@pemit %0=[setq(0,get(%1/race))][center(%b[Name(%1)] -[switch(r(0),vampire,%b[get(%1/generation)]th generation [get(%1/class)] vampire%b,were,%b[get(%1/class)] shifter - rank [get(%1/rank)]%b,mage,%b[get(%1/class)] mage%b,mummy,%bAn ancient immortal Egyptian%b,ghoul,%b[get(%1/class)]'s ghoul%b,fomori,A [get(%1/class)] fomori%b)],72,-)]%r%b%bStrength[rjust(u(gvattr,%1,1),12)][space(4)]Brawl[rjust(u(gcabil,%1,4),15)][space(4)]Health[rjust(u(gwndname,%1),14)]%r%b%bDexterity[rjust(u(gvattr,%1,2),11)][space(4)]Dodge[rjust(u(gcabil,%1,5),15)][space(4)]Willpower[rjust([get(%1/wp)]/[get(%1/wpp)],11)]%r%b%bStamina[rjust(u(gvattr,%1,3),13)][space(4)]Melee[rjust(u(gcabil,%1,19),15)][space(4)][switch(r(0),vampire,Blood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)],ghoul,Blood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)],were,Rage[rjust([get(%1/rage)]/[get(%1/rp)],16)],mage,Quint/Paradox[rjust([get(%1/quint)]/[get(%1/dox)],7)],Faith[rjust(u(gcpow,%1,46),15)])]%r%b%bPerception[rjust(u(gvattr,%1,7),10)][space(4)]Firearms[rjust(u(gcabil,%1,26),12)][space(4)][switch(r(0),were,Gnosis[rjust([get(%1/gnosis)]/[get(%1/gps)],14)])]%r%b%bWits[rjust(u(gvattr,%1,9),16)][space(4)]Alertness[rjust(u(gcabil,%1,2),11)][space(4)]Alias[rjust(get(%1/alias),15)]%r[repeat(-,72)]
&XSHOWATTR Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ATTRIBUTES [repeat(=,30)]%r%b%b----- Physical -----[space(4)]------ Social ------[space(4)]------ Mental ------%r%b%bStrength[rjust(u(gvattr,%1,1),12)][space(4)]Charisma[rjust(u(gvattr,%1,4),12)][space(4)]Perception[rjust(u(gvattr,%1,7),10)]%r%b%bDexterity[rjust(u(gvattr,%1,2),11)][space(4)]Manipulation[rjust(u(gvattr,%1,5),8)][space(4)]Intelligence[rjust(u(gvattr,%1,8),8)]%r%b%bStamina[rjust(u(gvattr,%1,3),13)][space(4)]Appearance[rjust(u(gvattr,%1,6),10)][space(4)]Wits[rjust(u(gvattr,%1,9),16)][switch(%2,1,%r[repeat(-,72)],)];
&XSHOWABIL Sheet Format Object <SFO>=@pemit %0=[setq(0,get(%1/abils))][setq(1,get(%1/abilvals))][setq(3,u(splitabils,r(0),0))][setq(4,u(splitabils,r(0),1))][setq(5,u(splitabils,r(0),2))][setq(6,iter(u(lwnum,words(%q3)),u(ntov,r(0),%q1,%q3,##)))][setq(7,iter(u(lwnum,words(%q4)),u(ntov,r(0),%q1,%q4,##)))][setq(8,iter(u(lwnum,words(%q5)),u(ntov,r(0),%q1,%q5,##)))][setq(3,iter(%q3,u(abilname,##)))][setq(4,iter(%q4,u(abilname,##)))][setq(5,iter(%q5,u(abilname,##)))][setq(0,get(%1/sabils))][setq(1,get(%1/sabilvals))][setq(2,u(splitsabils,r(0),1))][setq(6,cat(%q6,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(3,cat(%q3,iter(%q2,u(sabilname,##))))][setq(2,u(splitsabils,r(0),2))][setq(7,cat(%q7,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(4,cat(%q4,iter(%q2,u(sabilname,##))))][setq(2,u(splitsabils,r(0),3))][setq(8,cat(%q8,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(5,cat(%q5,iter(%q2,u(sabilname,##))))][setq(9,max(words(%q6),words(%q7),words(%q8)))][repeat(=,30)] ABILITIES [repeat(=,31)]%r%b%b----- Talents ------[space(4)]------ Skills ------[space(4)]--- Knowledges ----[iter(u(lwnum,%q9),%r%b%b[ljust(extract(%q3,##,1),18)][rjust(extract(%q6,##,1),2)][space(4)][ljust(extract(%q4,##,1),18)][rjust(extract(%q7,##,1),2)][space(4)][ljust(extract(%q5,##,1),18)][rjust(extract(%q8,##,1),2)])][switch(%2,1,%r[repeat(-,72)],)];
&XSHOWMISC Sheet Format Object <SFO>=@pemit %0=[setq(0,get(%1/race))][repeat(-,72)]%r%b%b[switch(r(0),changeling,Glamour[rjust([get(%1/glam)]/[get(%1/glamp)],11)],wraith,Pathos[rjust([get(%1/pathos)]/[get(%1/pathosp)],14)],were,Gnosis[rjust([get(%1/gnosis)]/[get(%1/gps)],14)],mummy,Sekhem[rjust([get(%1/sekhem)]/[get(%1/sek)],14)],mage,Arete[rjust([get(%1/arete)],15)],switch(get(%1/path),,Humanity[rjust(get(%1/hu),12)],[ljust(get(%1/path),18)][rjust(get(%1/pathval),2)]))][space(4)]Willpower[rjust([get(%1/wp)]/[get(%1/wpp)],11)][space(4)]Experience[rjust(get(%1/xp),10)]%r[switch(r(0),vampire,{%b%bBlood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)]},ghoul,{%b%bBlood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)]},were,{%b%b[switch(strmatch(u(%1/class),*ananasi*),1,Blood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)],Rage[rjust([get(%1/rage)]/[get(%1/rp)],16)])]},changeling,%b%bBanality[rjust([get(%1/ban)]/[get(%1/banp)],10)],wraith,%b%bCorpus[rjust([get(%1/corpus)]/[get(%1/corpusp)],14)],mage,{%b%bQuint/Paradox[rjust([get(%1/quint)]/[get(%1/dox)],7)]},mummy,{%b%bBa/Ka[rjust([get(%1/ba)]/[get(%1/ka)],15)]},[space(22)])][space(4)]Health[rjust(u(gwndname,%1),14)][space(4)][switch(get(%1/wounds),0,,Penalty[rjust(u(penalty,%1),13)])]%r[repeat(-,72)]%r
&SHOWLORES Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] Lores [repeat(=,31)]%r%b%b[iter(1 2 3 4 5 6 7 8 9 10 11,%r[ljust(##,2)][ljust(u(lorename,##),18,.)][rjust(u(glore,%1,##),2,.)][rjust(add(##,15),3)]%b[ljust(u(lorename,add(##,15)),18,.)][rjust(u(glore,%1,add(##,15)),2,.)][rjust(add(##,30),3)]%b[ljust(u(lorename,add(##,30)),18,.)][rjust(u(glore,%1,add(##,30)),2,.)])][switch(%2,1,%r[repeat(-,72)],)];
&XSHOWLORE Sheet Format Object <SFO>=@pemit %0=[switch(get(%0/set_lore),1,[setq(0,get(%1/lores))][setq(1,get(%1/lorevals))][setq(3,u(splitlores,r(0),0))][setq(4,u(splitlores,r(0),1))][setq(5,u(splitlores,r(0),2))][setq(6,iter(u(lwnum,words(%q3)),u(ntov,r(0),%q1,%q3,##)))][setq(7,iter(u(lwnum,words(%q4)),u(ntov,r(0),%q1,%q4,##)))][setq(8,iter(u(lwnum,words(%q5)),u(ntov,r(0),%q1,%q5,##)))][setq(3,iter(%q3,u(lorename,##)))][setq(4,iter(%q4,u(lorename,##)))][setq(5,iter(%q5,u(lorename,##)))][setq(9,max(words(%q6),words(%q7),words(%q8)))][repeat(=,32)] LORES [repeat(=,33)][iter(u(lwnum,%q9),%r%b%b[ljust(extract(%q3,##,1),18)][rjust(extract(%q6,##,1),2)][space(4)][ljust(extract(%q4,##,1),18)][rjust(extract(%q7,##,1),2)][space(4)][ljust(extract(%q5,##,1),18)][rjust(extract(%q8,##,1),2)])][switch(%2,1,%r[repeat(-,72)],)])]
&XSHOWSHAD Sheet Format Object <SFO>=@pemit %0=[repeat(-,72)]%r%b%bArchetype[rjust([get(%1/shadow)],11)][space(4)]Angst[rjust([get(%1/angst)]/[get(%1/app)],15)][space(4)]Psyche[rjust([get(%1/psyche)],15)][setq(7,get(%1/thorns))][switch(%q7,,,%r--Thorns[repeat(-,64)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/dpassions))][switch(%q7,,,%r--Dark Passions[repeat(-,57)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])]
&XSHOWTOP Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[switch(get(%1/race),pvampire,Vampire,[ljust(capstr(lcstr(get(%1/race))),30)])][switch(get(%1/race),android,Class:%b[get(%1/class)],changeling,Court:%b[ljust(capstr(lcstr(get(%1/class))),10)],mage,Essence:%b[ljust(capstr(lcstr(get(%1/essence))),10)],were,Auspice:%b[ljust(capstr(lcstr(get(%1/auspice))),10)],mortal+,Type:%b[get(%1/class)],mortal,[ifelse(hasattr(%1,class),Type: [get(%1/class)],)])]%r[space(5)][switch(get(%1/race),changeling,Seeming: [ljust(get(%1/seeming),27)],mage,Group:%b[ljust(get(%1/class),30)],were,Breed:%b[ljust(capstr(lcstr(get(%1/class))),29)],pvampire,Clan:%b[ljust(capstr(lcstr(get(%1/class))),30)],vampire,Clan:%b[ljust(capstr(lcstr(get(%1/class))),30)],ghoul,Regnant:%b[ljust(capstr(lcstr(get(%1/class))),30)],mortal*,[ifelse(hasattr(%1,rank),Rank: [get(%1/rank)],)])][switch(get(%1/race),changeling,Kith: [get(%1/kith)]%r[space(5)]House: [get(%1/house)],pvampire,Generation:%b[get(%1/generation)],vampire,Generation:%b[get(%1/generation)],were,Tribe:%b[get(%1/sect)],kinfolk,Tribe:%b[get(%1/class)],gypsie,[ljust(Family: [get(%1/class)],35)]%bElement: [get(%1/element)])]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-MAGE Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Group:%b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Sect:%b[ljust(get(%1/sect),30)]Essence:%b[ljust(capstr(lcstr(get(%1/special))),10)]%r[space(5)]Chantry:%b[ljust(get(%1/group),27)]Cabal:%b[ljust(capstr(lcstr(get(%1/clique))),10)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-WERE Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Were-Type:%b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Tribe:%b[ljust(get(%1/sect),29)]Auspice:%b[ljust(capstr(lcstr(get(%1/special))),10)]%r[space(5)]Breed:%b[ljust(get(%1/form),29)]Pack:%b[ljust(capstr(lcstr(get(%1/clique))),10)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-CHANGELING Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Kith:%b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Court:%b[ljust(get(%1/sect),29)]Seeming:%b[ljust(capstr(lcstr(get(%1/special))),10)]%r[space(5)]House:%b[ljust(get(%1/group),29)]Household:%b[ljust(capstr(lcstr(get(%1/clique))),10)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-WRAITH Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Guild:%b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Circle:%b[ljust(get(%1/group),29)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-VAMPIRE Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Clan:%b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Sect:%b[ljust(get(%1/sect),30)]Clique:%b[ljust(get(%1/clique),27)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-MORTAL+ Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Power Type:%b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Group:%b[ljust(get(%1/sect),29)]Division:%b[ljust(capstr(lcstr(get(%1/clique))),10)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-MORTAL Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Group:%b[ljust(capstr(lcstr(get(%1/clique))),10)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWTOP-GHOUL Sheet Format Object <SFO>=%r[center([mudname()] - Character Stats: %ch%cr[name(num(*%1))]%cn [num(%1)],73,=)]%r[space(5)]Race:%b[ljust(capstr(lcstr(get(%1/race))),30)]Regnant: %b[ljust(capstr(lcstr(get(%1/class))),10)]%r[space(5)]Sect:%b[ljust(get(%1/sect),30)]Family:%b[ljust(get(%1/special),27)]%r[space(5)][ljust(Nature: [get(%1/nature)],30)][space(6)]Demeanor: [get(%1/demeanor)][switch(%2,0,%r[repeat(-,72)],)]
&XSHOWATTR2 Sheet Format Object <SFO>=[repeat(=,30)] ATTRIBUTES [repeat(=,30)]%r%b%b----- Physical -----[space(4)]------ Social ------[space(4)]------ Mental ------%r%b%bStrength[rjust(u(gvattr,%1,1),12)][space(4)]Charisma[rjust(u(gvattr,%1,4),12)][space(4)]Perception[rjust(u(gvattr,%1,7),10)]%r%b%bDexterity[rjust(u(gvattr,%1,2),11)][space(4)]Manipulation[rjust(u(gvattr,%1,5),8)][space(4)]Intelligence[rjust(u(gvattr,%1,8),8)]%r%b%bStamina[rjust(u(gvattr,%1,3),13)][space(4)]Appearance[rjust(u(gvattr,%1,6),10)][space(4)]Wits[rjust(u(gvattr,%1,9),16)][switch(%2,1,%r[repeat(-,72)],)]%r
&FSHOWATTR Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ATTRIBUTES [repeat(=,30)]%r%b%b----- Physical -----[space(4)]------ Social ------[space(4)]------ Mental ------%r1%bStrength[rjust(u(gattr,%1,1),12)][space(2)]4%bCharisma[rjust(u(gattr,%1,4),12)]%b%b7%bPerception[rjust(u(gattr,%1,7),10)]%r2%bDexterity[rjust(u(gattr,%1,2),11)]%b%b5%bManipulation[rjust(u(gattr,%1,5),8)]%b%b8%bIntelligence[rjust(u(gattr,%1,8),8)]%r3%bStamina[rjust(u(gattr,%1,3),13)]%b%b6%bAppearance[rjust(u(gattr,%1,6),10)]%b%b9%bWits[rjust(u(gattr,%1,9),16)][switch(%2,1,%r[repeat(-,72)],)];
&FSHOWABIL Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ABILITIES [repeat(=,31)]%r%b%b----- Talents ------[space(4)]------ Skills ------[space(4)]--- Knowledges ----[iter(1 2 3 4 5 6 7 8 9 10 11,%r[ljust(##,2)][ljust(u(abilname,##),18)][rjust(u(gabil,%1,##),2)][rjust(add(##,25),3)]%b[ljust(u(abilname,add(##,25)),18)][rjust(u(gabil,%1,add(##,25)),2)][rjust(add(##,50),3)]%b[ljust(u(abilname,add(##,50)),18)][rjust(u(gabil,%1,add(##,50)),2)])] %r[setq(5,iter(%q5,u(abilname,##)))][setq(0,get(%1/sabils))][setq(1,get(%1/sabilvals))][setq(2,u(splitsabils,r(0),1))][setq(6,cat(%q6,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(3,cat(%q3,iter(%q2,u(sabilname,##))))][setq(2,u(splitsabils,r(0),2))][setq(7,cat(%q7,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(4,cat(%q4,iter(%q2,u(sabilname,##))))][setq(2,u(splitsabils,r(0),3))][setq(8,cat(%q8,iter(u(lwnum,words(%q2)),u(ntov,r(0),%q1,%q2,##))))][setq(5,cat(%q5,iter(%q2,u(sabilname,##))))][setq(9,max(words(%q6),words(%q7),words(%q8)))][repeat(-,25)] SECONDARY ABILITIES [repeat(-,25)][iter(u(lwnum,%q9),%r%b%b[ljust(extract(%q3,##,1),18)][rjust(extract(%q6,##,1),2)][space(4)][ljust(extract(%q4,##,1),18)][rjust(extract(%q7,##,1),2)][space(4)][ljust(extract(%q5,##,1),18)][rjust(extract(%q8,##,1),2)])][switch(%2,1,%r[repeat(-,72)],)]
&FSHOWADVS Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] ADVANTAGES [repeat(=,30)]%r%b%b------ Powers ------[space(4)]--- Backgrounds ----[space(4)]----- Virtues ------[iter(u(lwnum,6),%r[space(24)][switch(lt(##,6),1,{## [ljust(u(bgname,##),18)][rjust(u(gbg,%1,##),2)]},space(22))]%b%b[switch(lt(##,4),1,{## [ljust(u(virtname,##),18)][rjust(u(gvirt,%1,##),2)]},)])][switch(%2,1,%r[repeat(-,72)],)];
&FSHOWMISC Sheet Format Object <SFO>=@pemit %0=[repeat(-,72)]%r%b%bHumanity[rjust(get(%1/hu),12)][space(4)]Willpower[rjust([get(%1/wp)]/[get(%1/wp)],11)][space(4)]Experience[rjust(get(%1/xp),10)]%r[switch(get(%1/race),vampire,{%b%bBlood Pool[rjust([get(%1/bp)]/[get(%1/bpp)],10)]},were,{%b%bRage[rjust([get(%1/rage)]/[get(%1/rp)],16)]},mage,{%b%bQuint/Paradox[rjust([get(%1/quint)]/[get(%1/dox)],7)]},[space(22)])][space(4)]Health[rjust(u(gwndname,%1),14)][space(4)][switch(get(%1/wounds),0,,Penalty[rjust(u(penalty,%1),13)])]%r[repeat(-,72)]
&FSHOWLORES Sheet Format Object <SFO>=@pemit %0=[repeat(=,30)] Lores [repeat(=,31)]%r%b%b[iter(1 2 3 4 5 6 7 8 9 10 11,%r[ljust(##,2)][ljust(u(lorename,##),18,.)][rjust(u(glore,%1,##),2,.)][rjust(add(##,15),3)]%b[ljust(u(lorename,add(##,15)),18,.)][rjust(u(glore,%1,add(##,15)),2,.)][rjust(add(##,30),3)]%b[ljust(u(lorename,add(##,30)),18,.)][rjust(u(glore,%1,add(##,30)),2,.)])][switch(%2,1,%r[repeat(-,72)],)];
&XSHOWADVS Sheet Format Object <SFO>=@pemit %0=[setq(0,get(%1/powers))][setq(1,get(%1/powvals))][setq(2,get(%1/bgnds))][setq(3,get(%1/bgndvals))][setq(4,get(%1/virts))][setq(5,get(%1/virtvals))][setq(6,max(words(r(0)),words(%q2),words(%q4)))][repeat(=,30)] ADVANTAGES [repeat(=,30)]%r%b%b------ Powers ------[space(4)]--- Backgrounds ----[space(4)]----- [switch(get(%1/race),were,Reknown,Virtues)] ------[iter(u(lwnum,%q6),%r%b%b[ljust(u(powname,extract(r(0),##,1)),18)][rjust(extract(%q1,##,1),2)][space(4)][ljust(u(bgname,extract(%q2,##,1)),18)][rjust(extract(%q3,##,1),2)][space(4)][ljust(u(virtname,extract(%q4,##,1)),12)][rjust(extract(%q5,##,1),8)])][setq(7,get(%1/mfs))][switch(%q7,,,%r--Merits/Flaws[repeat(-,58)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/gifts))][switch(%q7,,,%r--Gifts[repeat(-,65)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/rites))][switch(%q7,,,%r--Rites[repeat(-,65)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/rituals))][switch(%q7,,,%r--Rituals[repeat(-,63)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/spells))][switch(%q7,,,%r--Spells[repeat(-,64)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/investments))][switch(%q7,,,%r--Investments[repeat(-,59)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/weapons))][switch(%q7,,,%r--Weapons[repeat(-,63)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/equipments))][switch(%q7,,,%r--Equipment[repeat(-,61)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][setq(7,get(%1/specializes))][switch(%q7,,,%r--Specializations[repeat(-,55)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)]))])][switch(%2,1,%r[repeat(-,72)],)];
&SHEET-HEALTH Sheet Format Object <SFO>=[center(> Health <,72,=)]%r%b%bUnaggravated[rjust(u(gbwnds,%1),8)][space(4)]Paradox[rjust(u(gpwnds,%1),13)][space(4)]Aggravated[rjust(u(gawnds,%1),10)]%r%b%bChimerical[rjust(u(gcwnds,%1),10)][space(4)]Health[rjust(u(gwndlev,%1),14)][space(4)]Wound Penalty[rjust(u(gwndpen,%1),7)][switch(%2,1,%r[repeat(-,72)])]
&FLAW_LIST Sheet Format Object <SFO>=Absent-Minded:3|Addicted to Kindred Vitae:3|Addiction:1-3|Age:1|Agency Outsider:3|Airhead:1|Alien Appearance:1-5|Allergic:1-3|Amnesia:2|Anachronism:2|Artistically Inept:2|Asthma:1|Bad Artistic Taste:2|Bad Sight:2|Banned Transformation:1-6|Bastard Childer:2|Barren Sterile:4|Bizarre Hunger:2-4|Blackmailed:1-2|Blind:6|Blunt Teeth:1|Bureaucratic Vendetta:2|Burned Out:1|Can't Cross Running Water:3|Cast No Reflection:2|Child:3|Clan Enmity:2|Club Foot:1|Colour Blindness:1|Compulsion:1|Compulsive Speech:1-2|Conflicting Loyalties:1-3|Confused:2|Curiosity:2|Cursed:1-5|Dangerous Secret:2|Dark Fate:5|Dark Secret:1|Deaf:4|Death Wish:1-5|Debts:3|Deep Sleeper:1|Deformity:1-3|Demon Plagued:2|Diabolic Sire:2|Diabolical Mentor:2|Disease Carrier:4|Disfigured:2|Disgraced:2|Double Agent:2|Driving Goal:3|Du'at Enemy:2|Echoes:1-5|Eerie Presence:2|Emotional Isolation:1|Enemy:1-5|Ennui:2|Extreme Paranoia:3|Female Agent:1|Flashbacks:3|Foe From the Past:1-3|Forced Transformation:1-4|Geas:1-7|Hard of Hearing:1|Hatred:3|Haunted:3|Hemophiliac:3|Hero Worship:1|Hunchback:2|Hunted:4|Illiterate:1|Inept:5|Infamous Mentor:1|Infamous Sire:1|Inferiority Complex:1|Infertile Vitae:3|Insane Mentor:1|Insane Past Life:1|Insane Sire:1|Intolerance:1|Irretractable Fangs:1|Jilted Paramour:1-3|Jinx:3-4|Known Diabolist:5|Lame:3|Lazy:1|Lifesaver:3|Light-Sensitive:5|Low Self-Image:2|Lunacy:2|Magic Susceptibility:2|Magical Imperative:2-7|Magical Prohibition:2-7|Manchurian Candidate:5|Mark of the Predator:2|Masochist:1|Matricide/Patricide:4|Mentor's Resentment:1|Methuselah's Thirst:7|Mild Phobia:1|Minority Agent:1|Mistaken Identity:1|Mixed Heritage:1-2|Monstrous:3|Mute:4|Naive:1|Nightmares:1|No Partial Transformation:1|Nosferatu Caitiff:1|Notoriety:3|Obsession:2|One Arm:3|One Eye:2|Outsider:2|Overconfident:1|Pack Disgrace:2|Pack Enemy:3|Pack Mentality:2|Pack Punishment:1|Pack Rival:1|Pain of the Past:4|Paranoia:2|Paraplegic:6|Parasitic Infestation:2|Permanent Wound:3|Persistent Parents:2|Pierced Veil:3|Poor Taste:1|Potent Blood:3|Poverty:1|Prestation Debt:1-5|Prey Exclusion:1|Primal Mark:2|Probationary Sect Member:4|Proselytizer:1|Psychic Vampire:5|Putrescent:3|Quick Tempered:2|Recently Arisen:3|Repelled by Crosses:3|Repulsed by Garlic:1|Rival:1|Routine:2|Ruse of the Wolf's Clothing:2|Sadism/Masochism:2|Scary Presence:2|Secret Diabolist:2|Secret Friendship:1|Selective Digestion:2|Severe Phobia:3|Short:1|Shy:1|Siege Mentality:3|Sign of the Wolf:2|Silsila Enemy:4|Silver Tolerance:5-7|Sire's Resentment:1|Slip Sideways:1|Slow Healing:3|Social Outcast:3|Soft-Hearted:1|Special Responsibility:1|Speech Impediment:1|Sphere Inept:5|Spirit Magnet:2-6|Stench:1|Strangeness:1|Strict Carnivore:1|Superstitious:2|Taint of Corruption:1-7|Territorial:2-3|Thaumivore:5|The Bard's Tongue:1|The Beast Within:5|Thin-Blooded:4|Throwback:1-5|Tortured Artist:1|Twisted Apprenticeship:1|Twisted Upbringing:1|Ulterior Motive:2|Unconquered Enemy:1|Uneducated:5|Unscented:1|Unskilled:5|Vainglorious:1-3|Veiled:5|Vengeance:2|Vengeful Childe:2|Vulgar:1|Vulnerability to Silver:2|Ward:3|Weak-Willed:2|Whimsy:1|Wolf Years:5|Wyrm Taint:4-7|Jupiter Descending:6|Mars Descending:6|Mercury Descending:3|Venus Descending:2
&SHEET-ADVS Sheet Format Object <SFO>=@pemit %#=[setq(0,get(%1/powers))][setq(1,get(%1/powvals))][setq(2,get(%1/bgnds))][setq(3,get(%1/bgndvals))][setq(4,get(%1/virts))][setq(5,get(%1/virtvals))][setq(6,max(words(r(0)),words(r(2)),words(r(4))))][center(> Advantages <,72,=)]%r%b%b[center([switch(get(%1/race),chimera*,%bArts%b,changeling*,%bArts%b,dauntain*,%bArts/Agendas%b,mage*,%bSpheres%b,vampire*,%bDisciplines%b,%bPowers%b)],20,-)][space(4)]--- Backgrounds ----[space(4)][center([switch(get(%1/race),chimera*,%bRealms%b,changeling*,%bRealms%b,dauntain*,%bRealms%b,were*,%bRenown%b,%bVirtues%b)],20,-)][iter(u(lwnum,r(6)),%r%b%b[ljust(u(powname,extract(r(0),##,1)),18)][rjust(extract(r(1),##,1),2)][space(4)][ljust(u(bgname,extract(r(2),##,1)),18)][rjust(extract(r(3),##,1),2)][space(4)][ljust(u(virtname,extract(r(4),##,1)),12)][rjust(extract(r(5),##,1),8)])][switch(%2,1,%r[repeat(-,72)],)][switch(hasattr(%1,mfs),1,%r[center(> Merits & Flaws <,72,=)][make2col(get(%1/mfs))])]
@set Sheet Format Object <SFO>=INHERIT
@set Sheet Format Object <SFO>=SAFE
@parent Sheet Format Object <SFO>=#209

@@ dbref=#216
@create Global Stats Object <GST>=10
&HELP Global Stats Object <GST>=$+stathelp:@switch u(isjudge,%#)=1,{@pemit %#=%r[center(* %ch%crStat System Help%cn *,79,-)]%r%r+setattr <name>=<attr> <val>%r+setabil <name>=<abil> <val>%r+setbg <name>=<bg> <val>%r+setvir <name>=<virtue> <val>%r+setpow <name>=<power> <val>%r%r+setmortal <name> - makes a character mortal.%r+setvamp <name>=<Sect>/<Clan> <Generation>%r+setmage <name>=<Sect>/<Group name or Orphan> <arete>%r+setfae <name>=<seelie|unseelie|shadow> <seeming>/<kith>/<house>%r+setghoul <name>=<master>/<Sect> <Family> - creates ghoul, sets blood points.%r+setmortal+ <name>=<Power>/<Group> - sets a special mortal such as a Psychic.%r+setshifter <name>=<Garou or Bete type (ie: Ratkin)> <Tribe or Bete group>/<Breed Form>/<Auspice>%r%r+setpath <name>=<path>%r+setrank <name>=<rank>%r%r+addthing <name>=[gift|rite|ritual|spell] <text of thing>%r+rmthing <name>=[gift|rite|ritual|spell] <number in character's list>%r+setpool <name>=<pool listing> <number> (basic setting)%r+adjpool <name>=<pool listing> <number> (add/subtract from spendable pools)%r+pools (gives you a listing of the various pools)%r%rUse '+clearchar' to clear a character with messed up stats, partly complete stats etc. %rUse '+initchar <name>=<concept>' to prepare a character for new stats. %rUse '+dochar' to convert a chargen format char into a normal format char.%r%rStats can be set on objects other than players. A <name> may be a player name, *player name, db ref, object name etc. A <number in list> means the position in the list (starting with 1) that the string in question exists as.%r%r[repeat(-,79)]%r},@pemit %#=Huh? (Type "help" for help.)
&SETLORE Global Stats Object <GST>=$+setlore *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/lorenames)),[lcstr(%1)]*))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such Lore %1},{@switch member(lnum(11),%2)=0,{@pemit %#=Silly stat value: %2},{@switch %2=0,{@trig me/rmitem=r(0),lores,lorevals,%q1; @pemit %#=[u(#209/lorename,%q1)] of [u(#209/gcabil,r(0),%q1)] removed.},{@pemit %#=Value of [u(#209/lorename,%q1)] was [u(#209/gclore,r(0),%q1)], now %2.;@trig me/additem=r(0),lores,lorevals,%q1,%2}}}}},@pemit %#=Huh? (Type "help" for help.)
&SETATTR Global Stats Object <GST>=$+setattr *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/attrnames)),[lcstr(%1)]*))]; @switch r(0)=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such attribute %1},{@switch member(lnum(11),%2)=0,{@pemit %#=Silly stat value: %2},{@pemit %#=Value of [u(#209/attrname,%q1)] was [u(#209/gvattr,r(0),%q1)], now %2.; &attr %q0=replace(get(r(0)/attr),%q1,%2); &tattr %q0=replace(get(r(0)/attr),%q1,%2)}}}},@pemit %#=Huh? (Type "help" for help.)
&SETABIL Global Stats Object <GST>=$+setabil *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/abilnames)),[lcstr(%1)]*))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such ability %1},{@switch member(lnum(11),%2)=0,{@pemit %#=Silly stat value: %2},{@switch %2=0,{@trig me/rmitem=r(0),abils,abilvals,%q1; @pemit %#=[u(#209/abilname,%q1)] of [u(#209/gcabil,r(0),%q1)] removed.},{@pemit %#=Value of [u(#209/abilname,%q1)] was [u(#209/gcabil,r(0),%q1)], now %2.;@trig me/additem=r(0),abils,abilvals,%q1,%2}}}}},@pemit %#=Huh? (Type "help" for help.)
&SETSABIL Global Stats Object <GST>=$+setsabil *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/sabilnames)),[lcstr(%1)]*))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such secondary ability %1},{@switch member(lnum(11),%2)=0,{@pemit %#=Silly stat value: %2},{@switch %2=0,{@trig me/rmitem=r(0),sabils,sabilvals,%q1; @pemit %#=[u(#209/sabilname,%q1)] of [u(#209/gcsabil,r(0),%q1)] removed.},{@pemit %#=Value of [u(#209/sabilname,%q1)] was [u(#209/gcsabil,r(0),%q1)], now %2.;@trig me/additem=r(0),sabils,sabilvals,%q1,%2}}}}},@pemit %#=Huh? (Type "help" for help.)
&SETBG Global Stats Object <GST>=$+setbg *=* *:@switch u(isjudge,%#)=1,{@wait 1=&bg %#=;&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/bgnames)),[lcstr(%1)]*))]; @switch r(0)=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such background %1},{@switch member(lnum(6),%2)=0,{@pemit %#=Silly stat value: %2},{@switch %2=0,{@trig me/rmitem=r(0),bgnds,bgndvals,%q1; @pemit %#=[u(#209/bgname,%q1)] of [u(#209/gcbg,r(0),%q1)] removed.},{@pemit %#=Value of [u(#209/bgname,%q1)] was [u(#209/gcbg,r(0),%q1)], now %2.;@trig me/additem=r(0),bgnds,bgndvals,%q1,%2;}}}}},@pemit %#=Huh? (Type "help" for help.)
&SETVIR Global Stats Object <GST>=$+setvir *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/virtnames)),[lcstr(%1)]*))]; @switch r(0)=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such virtue %1},{@switch 1=0,{@pemit %#=Silly stat value: %2},{@switch %2=0,{@trig me/rmitem=r(0),virts,virtvals,%q1; @pemit %#=[u(#209/virtname,%q1)] of [u(#209/gcvirt,r(0),%q1)] removed.},{@pemit %#=Value of [u(#209/virtname,%q1)] was [u(#209/gcvirt,r(0),%q1)], now %2.;@trig me/additem=r(0),virts,virtvals,%q1,%2}}}}},@pemit %#=Huh? (Type "help" for help.)
&SETPOW Global Stats Object <GST>=$+setpow *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/pownames)),[lcstr(%1)]*))]; @switch r(0)=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such power %1},{@switch member(lnum(11),%2)=0,{@pemit %#=Silly stat value: %2},{@switch %2=0,{@trig me/rmitem=r(0),powers,powvals,%q1; @pemit %#=[u(#209/powname,%q1)] of [u(#209/gcpow,r(0),%q1)] removed.},{@pemit %#=Value of [u(#209/powname,%q1)] was [u(#209/gcpow,r(0),%q1)], now %2.;@trig me/additem=r(0),powers,powvals,%q1,%2}}}}},@pemit %#=Huh? (Type "help" for help.)
&INITCHAR Global Stats Object <GST>=$+initchar *=*:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@unlock %q0/race; &abils %q0; &abilvals %q0; &sabils %q0; &sabilvals %q0; &bgnds %q0; &bgndvals %q0; &virts %q0; &virtvals %q0; &hu %q0; &wp %q0; &wpp %q0; &powers %q0; &powvals %q0; &bp %q0; &bpp %q0; &rage %q0; &rp %q0; &gnosis %q0; &gps %q0; &ba %q0; &ka %q0; &sekhem %q0; &sek %q0; &xp %q0; &generation %q0; &attr2 %q0; &abils2 %q0; &abilvals2 %q0; &bgnds2 %q0; &bgndvals2 %q0; &virts2 %q0; &virtvals2 %q0; &hu2 %q0; &wp2 %q0; &freebies %q0; &virp %q0; &bacp %q0; &atp1 %q0; &atp2 %q0; &atp3 %q0; &abp1 %q0; &abp2 %q0; &abp3 %q0; &class %q0; &rank %q0; &gifts %q0; &rites %q0; &rituals %q0; &spells %q0; &ll %q0; &lang %q0; &npc %q0; &attr %q0=0 0 0 0 0 0 0 0 0; &tattr %q0=* * * * * * * * *; &race %q0=mortal;&wounds %q0=0;&xp %q0=0; &concept %q0=%1;&started %q0=1; &set_attr %q0=1; &set_abil %q0=1; &done %q0=1; @link %q0=#5; @pemit %#=Reset and initialised stats on [name(r(0))]!}},@pemit %#=Huh? (Type "help" for help.)
&CLEARCHAR Global Stats Object <GST>=$+clearchar *:@switch u(issetter,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{&tattr %q0; &attr %q0; &abils %q0; &abilvals %q0; &sabils %q0; &sabilvals %q0; &bgnds %q0; &bgndvals %q0; &virts %q0; &virtvals %q0; &hu %q0; &wp %q0; &wpp %q0; &powers %q0; &powvals %q0; &bp %q0; &bpp %q0; &rage %q0; &rp %q0; &gnosis %q0; &gps %q0; &ba %q0; &ka %q0; &sekhem %q0; &sek %q0; &xp %q0=0; &wounds %q0; &started %q0; &set_attr %q0; &set_abil %q0; &done %q0; &race %q0; &class %q0; &rank %q0; &sect %q0; &seeming %q0; &kith %q0; &influences %q0; &nature %q0; &demeanor %q0; &concept %q0; &generation %q0; &attr2 %q0; &abils2 %q0; &abilvals2 %q0; &bgnds2 %q0; &bgndvals2 %q0; &virts2 %q0; &virtvals2 %q0; &hu2 %q0; &wp2 %q0; @drain %q0; &freebies %q0; &virp %q0; &bacp %q0; &atp1 %q0; &atp2 %q0; &atp3 %q0; &abp1 %q0; &abp2 %q0; &abp3 %q0; &gifts %q0; &rites %q0; &rituals %q0; &spells %q0; &equip %q0; &ll %q0; &lang %q0; &npc %q0; &chanauth %q0; &arete %q0; &quint %q0; &dox %q0; &corpus %q0; &pathos %q0; &glam %q0; &ban %q0; &corpusp %q0; &pathosp %q0; &glamp %q0; &banp %q0; &gpp %q0; &sleep %q0; &faith %q0; &pathval %q0; &healed %q0; &auras %q0; @pemit %#=Cleared stats from [name(r(0))]!}},@pemit %#=Huh? (Type "help" for help.)
&DOCHAR Global Stats Object <GST>=$+dochar *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{&tattr=[get(%#/attr)]; &abils %q0=[u(tidy,get(r(0)/abils)]; &abilvals %q0=[u(tidy,get(r(0)/abilvals)]; &sabils %q0=[u(tidy,get(r(0)/sabils)]; &sabilvals %q0=[u(tidy,get(r(0)/sabilvals)]; &bgnds %q0=[u(tidy,get(r(0)/bgnds)]; &bgndvals %q0=[u(tidy,get(r(0)/bgndvals)]; &virts %q0=[u(tidy,get(r(0)/virtvals)]; &powers %q0=[u(tidy,get(r(0)/powers)]; &powvals %q0=[u(tidy,get(r(0)/powvals)]; &attr2 %q0; &abils2 %q0; &abilvals2 %q0; &bgnds2 %q0; &bgndvals2 %q0; &virts2 %q0; &virtvals2 %q0; &hu2 %q0; &wp2 %q0; @pemit %#=Converted stats on [name(r(0))]! }},@pemit %#=Huh? (Type "help" for help.)
&SETPATH Global Stats Object <GST>=$+setpath *=*:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{&path %q0=[secure(%1)]}},@pemit %#=Huh? (Type "help" for help.)
&SETRANK Global Stats Object <GST>=$+setrank *=*:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch member(lnum(10),%1)=0,{@pemit %#=Silly rank number.},{&rank %q0=%1}}},@pemit %#=Huh? (Type "help" for help.)
&PSHOWATTR Global Stats Object <GST>=$+attrs:@switch get(%#/set_attr)=1,{@trig #223/xshowattr=%#,%#,1},@pemit %#=You do not have attributes set on your character. Contact a member of staff for help.
&PSHOWABIL Global Stats Object <GST>=$+abils:@switch get(%#/set_abil)=1,{@trig #223/xshowabil=%#,%#,1},@pemit %#=You do not have abilities set on your character. Contact a member of staff for help.
&PSHOWADVS Global Stats Object <GST>=$+advs:@switch get(%#/started)=1,{@trig #223/xshowadvs=%#,%#,1},@pemit %#=You do not have advantages set on your character. Contact a member of staff for help.
&PSHOWMISC Global Stats Object <GST>=$+misc:@switch get(%#/started)=1,{@switch [get(%#/race)]=wraith,{@trig #223/xshowshad=%#,%#};@wait 0=@trig #223/xshowmisc=%#,%#},{@pemit %#=You do not have stats set on your character. Contact a member of staff for help.}
&PSHOWCOM Global Stats Object <GST>=$+com:@switch get(%#/set_attr)=1,{@switch get(%#/set_abil)=1,{@switch get(%#/started)=1,{@trig #223/xshowcom=%#,%#,0},{@pemit %#=You do not have stats set on your character. Contact a member of staff for help.}},{@pemit %#=You do not have abilities set on your character. Contact a member of staff for help.}},{@pemit %#=You do not have attributes set on your character.}
&PSHOWSTATS Global Stats Object <GST>=$+stats:@switch get(%#/set_attr)=1,{@trig #209/sheettop=%#,%#;@trig #223/xshowattr=%#,%#,0},{@pemit %#=You do not have attributes set on your character. Contact a member of staff for help.}; @switch get(%#/set_abil)=1,{@trig #223/xshowabil=%#,%#,0; @trig #223/xshowlore=%#,%#,0},{@pemit %#=You do not have abilities set on your character. Contact a member of staff for help.}; @switch get(%#/started)=1,{@trig #223/xshowadvs=%#,%#,0; @switch [get(%#/race)]=wraith,{@trig #223/xshowshad=%#,%#};@wait 0=@trig #223/xshowmisc=%#,%#},{@pemit %#=You do not have stats set on your character. Contact a member of staff for help.}
&SHOWMISC Global Stats Object <GST>=$+misc *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch r(0)=#-1,{@pemit %#=Cannot see %0.},{@switch [get(r(0)/started)]=1,{@switch [get(r(0)/race)]=wraith,{@trig #223/xshowshad=%#,r(0),1};@wait 0=@trig #223/xshowmisc=%#,r(0),1},@pemit %#=No stats set on that character.}},@pemit %#=Huh? (Type "help" for help.)
&SHOWCOM Global Stats Object <GST>=$+com *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch r(0)=#-1,{@pemit %#=Cannot see %0.},{@switch get(r(0)/set_attr)=1,{@switch get(r(0)/set_abil)=1,{@switch get(r(0)/started)=1,{@trig #223/xshowcom=%#,r(0),0},{@pemit %#=No stats set on that character.}},{@pemit %#=No abilities set on that character.}},{@pemit %#=No attributes set on that character.}}},@pemit %#=Huh? (Type "help" for help.)
&SHOWSTATS Global Stats Object <GST>=$+stats *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch r(0)=#-1,{@pemit %#=Cannot see %0.},{@switch [get(r(0)/set_attr)]=1,{@trig #209/sheettop=%#,[num(*%0)]; @trig #223/xshowattr=%#,r(0),0},{@pemit %#=There are no attributes set on that character.}; @switch get(r(0)/set_abil)=1,{@trig #223/xshowabil=%#,r(0),0;@trig #223/xshowlore=%#,r(0),0},{@pemit %#=There are no abilities set on that character.}; @switch [get(r(0)/started)]=1,{@trig #223/xshowadvs=%#,r(0),0;@switch [get(r(0)/race)]=wraith,{@trig #223/xshowshad=%#,r(0),1};@wait 0=@trig #223/xshowmisc=%#,r(0),1},{@pemit %#=There are no stats set on that character.}}},@pemit %#=Huh? (Type "help" for help.)
&TMPATTR Global Stats Object <GST>=$+tmpattr *=* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/attrnames)),[lcstr(%1)]*))]; @switch r(0)=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@switch %q1=0,{@pemit %#=No such attribute %1},{@switch member(lnum(11),%2)=0,{@pemit %#=Silly stat value: %2},{@pemit %#=Value of [u(#209/attrname,%q1)] was [u(#209/gvattr,r(0),%q1)], temporarily %2.; &tattr %q0=replace(get(r(0)/tattr),%q1,%2)}}}},@pemit %#=Huh? (Type "help" for help.)
&RESETATTR Global Stats Object <GST>=$+resetattr *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,match(lcstr(get(#209/attrnames)),[lcstr(%1)]*))]; @switch r(0)=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{&tattr %q0=[get(r(0)/attr)]; @pemit %#=Temporary attributes for [name(r(0))] reset to normal values.}},@pemit %#=Huh? (Type "help" for help.)
&CHARGEN Global Stats Object <GST>=$+chargen:@switch [and(get(%#/started),get(%#/done),get(%#/set_attr),get(%#/set_abil))]=0,{@tel %#=#212},{@pemit %#=You already have stats on your character. Call a wizard if you have a problem with your stats.}
&RMTHING Global Stats Object <GST>=$+rmthing *=* *:@switch u(issetter,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,get(r(0)/[secure(%1)]s))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{ @switch member(gift rite derangement passion fetter ritual investment spell mf,%1)=0,{@pemit %#=[secure(%1)] is not one of the types of power list that you may delete from in this way (gift, rite, derangement, passion, fetter, ritual, investment, spell, mf).},{@switch or(lte(%2,0),gt(%2,words(%q1,|)))=1,{@pemit %#=[secure(%2)] is not in the range for [name(r(0))]'s %1s.},{@switch/first %2=1,{&%1s %q0=[rest(%q1,|)]},[words(%q1,|)],{&%1s %q0=[index(%q1,|,1,sub(%2,1))]},{&%1s %q0=[index(%q1,|,1,sub(%2,1))]|[index(%q1,|,add(%2,1),99)]}; @wait 0=@pemit %#=[setq(7,get(r(0)/%1s))]--[ljust(%1s,72,-)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1),23)] ))]%r[repeat(-,72)]}}}},@pemit %#=Huh? (Type "help" for help.)
&ADDTHING Global Stats Object <GST>=$+addthing *=* *:@switch u(issetter,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))][setq(1,get(r(0)/[secure(%1)]s))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{ @switch member(gift rite derangement passion fetter ritual investment spell mf weapon equipment,%1)=0,{@pemit %#=[secure(%1)] is not one of the types of power list that you may add to in this way (gift, rite, derangement, passion, fetter, ritual, investment, spell, mf, weapon, equipment).},{&null me=[setq(0,setunion(u(order,get(%0/%1s)),u(order,%3)))][setq(1,member(r(0),u(order,%3)))][setq(2,get(%0/%2))];@switch [gt(words(r(0)),words(get(%0/%1)))]=1,{&%1s %0=[u(tidy,r(0))]; &%1s %0=[cat(extract(%q2,1,sub(%q1,1)),%3,extract(%q2,%q1,words(r(0))))]},{&%1s %0=%2|}; @wait 0=@pemit %# = [setq(7,u(r(0)/%1s))]--[ljust(%1s,72,-)][iter(u(lwnum,words(%q7,|)),switch(mod(##,3),1,%r%b%b[ljust(index(%q7,|,##,1),23)],[ljust(index(%q7,|,##,1), 23)]))]%r[repeat(-,72)]}}},@pemit %#=Huh? (Type "help" for help.)
&ADJPOOL Global Stats Object <GST>=$+adjpool *=* *:@switch u(isjudge,%#)=1,{@switch [setr(0,u(findpc,%#,%0))][setq(1,lcstr(%1))]=#-1,{@pemit %#=Cannot see %0.},{@switch [member(v(pools),%q1)]=0,{@pemit %#=No such pool: %ch"%1"%cn. The pools include: [u(pools)].},{&null me=[setq(2,u(getpool,r(0),%q1))]; @switch isnum(%2)=0,{@pemit %#=%2 is not a sensible modifier.},{@trig me/setpool=%q0,%q1,[add(%2,%q2)];@pemit %#=[name(r(0))]'s %q1 pool was %q2, now set to [add(%2,%q2)].}}}},@pemit %#=Huh? (Type "help" for help.)
&SETPOOLS Global Stats Object <GST>=$+setpool *=* *:@switch u(isjudge,%#)=1,{@switch [setr(0,u(findpc,%#,%0))][setq(1,lcstr(%1))]=#-1,{@pemit %#=Cannot see %0.},{@switch [member(v(pools),%q1)]=0,{@pemit %#=No such pool: %ch"%1"%cn. The pools include: [u(pools)].},{&null me=[setq(2,u(getpool,r(0),%q1))]; @switch isnum(%2)=0,{@pemit %#=%2 is not a sensible modifier.},{@trig me/setpool=%q0,%q1;@trig me/setpool2=%q0,%q1,%2; @pemit %#=%r[name(r(0))]'s %q1 pool is now set from %q2 to %2.}}}},{@pemit %#=Huh? (Type "help" for help.)}
&POOL Global Stats Object <GST>=$+pools:@switch u(isjudge,%#)=1,{@pemit %#=The pools for the '+setpool' and +adjpool' commands are: [iter(u(POOLS),'##')].},{@pemit %#=Huh? (Type "help" for help.)}
&PSHOWLORE Global Stats Object <GST>=$+lores:@switch get(%#/set_lore)=1,{@trig #223/xshowlore=%#,%#,1},@pemit %#=You do not have lores set on your character. Contact a member of staff for help.
&ADDWOUND Global Stats Object <GST>=$+addwound *=*:@switch u(isjudge,%#)=0,{@pemit %#=Huh?%b%b(Type 'help' for help)},{[setq(9,[num(*%0)])]; &wounds %q9=[add([u(%q9/wounds)],%1)]; @pemit %#=[name(%q9)]'s Wounds adjusted by (%1). New total: [u(%q9/wounds)]}
&REMWOUND Global Stats Object <GST>=$+remwound *=*:@switch u(isjudge,%#)=0,{@pemit %#=Huh?%b%b(Type 'help' for help)},{[setq(9,[num(*%0)])];&wounds %q9=[sub([u(%q9/wounds)],%1)]; @pemit %#=[name(%q9)]'s Wounds adjusted by ([sub(0,%1)]). New total: [u(%q9/wounds)]}
&ADJXP Global Stats Object <GST>=$+adjxp *=*:@switch u(isjudge,%#)=1,{@switch [u(findpc,%#,%0)]=#-1,{@pemit %#=Cannot find the player "%0".},{@unlock *%0/xp;&xp *%0=[add([u(*%0/xp)],%1)];@pemit %#=[name(*%0)]'s XPts adjusted by (%1). New total: [u(*%0/xp)]}},@pemit %#=Huh? (Type "help" for help.)
&SWHO Global Stats Object <GST>=$+swho:@switch [orflags(%#,WZw)]=1,{@pemit %#=Character[space(11)]Idle Type[iter(lwho(),switch(u(##/race),mortal,,,,endless,,%r[setq(1,add(%q1,1))][ljust(name(##),20)][setq(0,idle(##))][rjust(switch(gte(r(0),60),1,[div(r(0),60)]m ,[mod(r(0),60)]s ),4)] [switch(u(##/race),mortal+,Mortal [u(##/class)].,pvampire,[u(##/generation)]th generation [u(##/class)] vampire.,vampire,[u(##/generation)]th generation [u(##/class)] vampire.,were,[u(##/class)] Rank [u(##/rank)] shifter.,mage,[u(##/class)] mage.,mummy,An ancient immortal Mummy.,ghoul,[u(##/class)]'s ghoul.,demon,A [u(##/class)] demon.,fomori,A [u(##/class)] fomori.,android,A [u(##/class)] Android,kinfolk,[u(##/class)] Kinfolk,gypsie,Gypsie: [u(##/class)] family,changeling,[u(##/class)] [u(##/kith)] [u(##/seeming)] Changeling,wraith,Wraith,UNKNOWN <<[u(##/race)]/[u(##/class)]>>)]))]%r%q1 supers connected.},{@pemit %#=Huh? (Type "help" for help.)}
&SHOWMSHADOW Global Stats Object <GST>=$+shadow *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch r(0)=#-1,{@pemit %#=Cannot see %0.},{@switch [get(r(0)/started)]=1,{@trig #223/xshowshad=%#,r(0),1},@pemit %#=No stats set on that character.}},@pemit %#=Huh? (Type "help" for help.)
&ADDXP Global Stats Object <GST>=$+addxp *=*:@switch or(hasflag(%#,Wizard),hasflag(%#,Admin),get(%#/setstat))=1,{&null me=[setq(0,u(findpc,%#,%0))];@switch [type(r(0))]=PLAYER,{@switch [isnum(%1)][hasflag(r(0),npc)]=10,{&xp %q0=[add(get(r(0)/xp),trunc(%1))];@pemit %#=XP value for [name(r(0))] was [sub(get(r(0)/xp),trunc(%1))], now [get(r(0)/xp)].},*1,{@pemit %#=Sorry, that person is an NPC, and NPCs may not receive nor spend XP.},{@pemit %#=Silly xp adjust amount: %1.}},@pemit %#=That is not a player.},@pemit %#=Huh? (Type "help" for help.)
&SETPOOL Global Stats Object <GST>=&null me=[setq(0,member(v(pools),%1))];&[extract(v(poolids),r(0),1)] %0=%2;
&SETPOOL2 Global Stats Object <GST>=&null me=[setq(0,member(v(pools),%1))];&[extract(v(poolmids),r(0),1)] %0=%2;
&GETPOOL Global Stats Object <GST>=[get(%0/[extract(v(poolids),member(v(pools),%1),1)])]
&POOLS Global Stats Object <GST>=will blood gnosis rage ba ka sekhem quint paradox corpus pathos glamour banality humanity arete angst
&POOLMIDS Global Stats Object <GST>=wp bp gnosis rage ba ka sekhem quint dox corpus pathos glam ban hu arete angst
&POOLIDS Global Stats Object <GST>=wpp bpp gps rp ba ka sek quint dox corpusp pathosp glamp banp hu arete app
&FINDPC Global Stats Object <GST>=[setq(6,locate(%0,%1,aimnpP))][switch(%q6,#-*,locate(%0,*%1,p),%q6)]
&ISJUDGE Global Stats Object <GST>=[orflags(%#,WZw)]
&ISADMIN Global Stats Object <GST>=[orflags(%#,WZ)]
&ISETTER Global Stats Object <GST>=[orflags(%#,WZw)]
&RMITEM Global Stats Object <GST>=&null me=[setq(0,member(get(%0/%1),%3))]; @switch %q0=0,,{&%2 %0=[cat(extract(get(%0/%2),1, sub(r(0),1)), extract(get(%0/%2),add(r(0),1),words(get(%0/%2))))]; &%1 %0=[u(tidy,setdiff(u(order,get(%0/%1)),u(order,%3)))]}
&ADDITEM Global Stats Object <GST>=&null me=[setq(0,setunion(u(order,get(%0/%1)),u(order,%3)))][setq(1,member(r(0),u(order,%3)))][setq(2,get(%0/%2))];@switch [gt(words(r(0)),words(get(%0/%1)))]=1,{&%1 %0=[u(tidy,r(0))]; &%2 %0=[cat(extract(%q2,1,sub(%q1,1)),%4,extract(%q2,%q1,words(r(0))))]},{&%2 %0=[u(tidy,replace(%q2,%q1,%4))]}
&TIDY Global Stats Object <GST>=iter(%0,add(0,##))
&ISSETTER Global Stats Object <GST>=orflags(%#,WZz)
&LWNUM Global Stats Object <GST>=cat(rest(lnum(%0)),%0)
&ORDER Global Stats Object <GST>=iter(%0,switch([lt(##,10)][lt(##,100)],11,00##,01,0##,##))
&SETGHOUL Global Stats Object <GST>=$+setghoul *=*/* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{&race %q0=ghoul; &class %q0=[secure(%1)]; &sect %q0=[secure(%2)];&special %q0=[secure(%3)]; &bp %q0=10; &bpp %q0=10; @pemit %#='%0' is now a %2-aligned ghoul of %1 <and/or %3 family>.;}},@pemit %#=Huh? (Type "help" for help.)
&SETMORTALPLUS Global Stats Object <GST>=$+setmortal+ *=*/*:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{&race %q0=mortal+; &class %q0=[secure(%1)]; &sect %q0=[secure(%2)]; @pemit %#=[name(r(0))] set to mortal plus [secure(%1)] aligned with the [secure(%2)].}},@pemit %#=Huh? (Type "help" for help.)
&SETSHIFTER Global Stats Object <GST>=$+setshifter *=* *:@switch u(issetter,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@dolist get(#209/CLEARSET)={&## %#}; @switch %1=garou,{&class %q0=Garou; &tribe %q0=[capstr(index(%2,/,1,1))];&breed %q0=[capstr(index(%2,/,2,1))]; &auspice %q0=[capstr(index(%2,/,3,1))]; &race %q0=were; @pemit %#=[name(r(0))] is now a Garou [secure(%2)] shapeshifter.},{&class %q0=[capstr(%1)];&sect %q0=[capstr(index(%2,/,1,1))];&breed %q0=[capstr(index(%2,/,2,1))];&auspice %q0=[capstr(index(%2,/,3,1))]; &race %q0=were; @pemit %#=[name(r(0))] is now an %1 [secure(%2)] shapeshifter.}}},{@pemit %#=Huh? (Type "help" for help.)}
&SETMAGE Global Stats Object <GST>=$+setmage *=*/* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@dolist get(#209/CLEARSET)={&## %#}; @switch [match(Tradition Technocracy Marauder Nephandus Orphan Craft,%2)]=0,{@pemit %#=Not an appropriate sect. Try one of the following: Tradition, Technocracy, Marauder, Nephandus, Orphan, Craft.},{@switch [member(1 2 3 4 5,%3)]=0,{@pemit %#=That is a silly Arete rating (%3).},{@pemit %#='[name(*%0)]' is now a %1-aligned %2 mage with %3 Arete.;&class %q0=[capstr(secure(%2))]; &sect %q0=[capstr(secure(%1))]; &arete %q0=%3; &race %q0=mage; &quint %q0=0; &dox %q0=0;}}}},{@pemit %#=Huh? (Type "help" for help.)}
&SETFAE Global Stats Object <GST>=$+setfae *=* *:@switch u(issetter,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@dolist get(#209/CLEARSET)={&## %#}; @switch %1=seelie,{&sect %q0=Seelie;&special %q0=[capstr(index(%2,/,1,1))];&class %q0=[capstr(index(%2,/,2,1))];&group %q0=[capstr(index(%2,/,3,1))]; &race %q0=changeling; @pemit %#=[name(r(0))] is now a Seelie [secure(%2)] changeling.},unseelie,{&sect %q0=Unseelie;&special %q0=[capstr(index(%2,/,1,1))];&class %q0=[capstr(index(%2,/,2,1))];&group %q0=[capstr(index(%2,/,3,1))]; &race %q0=changeling; @pemit %#=[name(r(0))] is now an Unseelie [secure(%2)] changeling.},shadow,{&sect %q0=Shadow Court;&special %q0=[capstr(index(%2,/,1,1))]; &class %q0=[capstr(index(%2,/,2,1))];&group %q0=[capstr(index(%2,/,3,1))]; &race %q0=changeling; @pemit %#=[name(r(0))] is now a Shadow Court [secure(%2)] changeling.},{@pemit %#=Which Affiliation: 'seelie', 'unseelie', or 'shadow' court?}}},{@pemit %#=Huh? (Type "help" for help.)}
&SETVAMP Global Stats Object <GST>=$+setvamp *=*/* *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@dolist get(#209/CLEARSET)={&## %#}; @switch [match(Camarilla Sabbat Independant Anarch,%2)]=0,{@pemit %#=Not an appropriate sect. Try one of the following: Camarilla Sabbat Independant Anarch.},{@switch [member(4 5 6 7 8 9 10 11 12 13 14 15,%3)]=0,{@pemit %#=That is a silly Generation rating (%2).},{@pemit %#='[name(*%0)]' is now a %1-aligned %2 vampire of the %3 generation.;&class %q0=[capstr(secure(%2))]; &sect %q0=[capstr(secure(%1))]; &generation %q0=%3; &race %q0=vampire; &bp %q0=0; &bpp %q0=0;}}}},{@pemit %#=Huh? (Type "help" for help.)}
&SETMORTAL Global Stats Object <GST>=$+setmortal *:@switch u(isjudge,%#)=1,{&null me=[setq(0,u(findpc,%#,%0))]; @switch %q0=#-1,{@pemit %#=Cannot locate [secure(%0)]},#-2,{@pemit %#=Which [secure(%0)]?},{@dolist get(#209/CLEARSET)={&## %#};&race %q0=mortal;@pemit %#=[name(r(0))]'s race set to mortal.}},@pemit %#=Huh? (Type "help" for help.)
&PSHOWADVS2 Global Stats Object <GST>=$+advs2:@switch get(%#/started)=1,{@trig #223/sheet-advs=%#,%#,1},@pemit %#=You do not have advantages set on your character. Contact a member of staff for help.
@set Global Stats Object <GST>=INHERIT
@set Global Stats Object <GST>=SAFE