Difference between revisions of "User:Simone"

From City of Hope MUSH
Jump to navigation Jump to search
Line 12: Line 12:
  
 
* Create and stat multiple NPCs. You can put notes on NPCs and customize their health levels, and statting is very similar to using +bulkstat in cgen. They can also be renamed or deleted.
 
* Create and stat multiple NPCs. You can put notes on NPCs and customize their health levels, and statting is very similar to using +bulkstat in cgen. They can also be renamed or deleted.
* Roll using stat names. +npc/roll Bob=Dexterity + Melee will add Bob's dexterity and melee and +roll the sum with the game's existing +roll code. +npc/rollw Bob=Dexterity + Melee will do the same, but add any wound penalties Bob has. The code also announces to the room what you're rolling, so you don't have to explain to your players that THIS undescriptive roll of five dice is for Bob's willpower roll and THAT undescriptive roll of five dice is his soak.  
+
* Roll using stat names. +npc/roll Bob=Dexterity + Melee will add Bob's dexterity and melee and +roll the sum with the game's existing +roll code. +npc/rollw Bob=Dexterity + Melee will do the same, but add any wound penalties Bob has. The code also announces to the room what you're rolling, so you don't have to explain to your players that ''this'' undescriptive roll of five dice is for Bob's willpower roll and ''that'' undescriptive roll of five dice is his soak.  
 
* Automatically handle +combat/init for multiple NPCs at once. +npc/init Alice/Bob/Charlie will calculate and use the game's +combat/init code for Alice, Bob, and Charlie, including adding any wound penalties and other initiative modifiers. You still have to use it at the beginning of each combat round, but it does the math for you and is one command instead of potentially several.
 
* Automatically handle +combat/init for multiple NPCs at once. +npc/init Alice/Bob/Charlie will calculate and use the game's +combat/init code for Alice, Bob, and Charlie, including adding any wound penalties and other initiative modifiers. You still have to use it at the beginning of each combat round, but it does the math for you and is one command instead of potentially several.
 
* Damage or heal NPCs. Bashing damage will automatically roll over into lethal if there's too much of it.
 
* Damage or heal NPCs. Bashing damage will automatically roll over into lethal if there's too much of it.

Revision as of 15:49, 22 April 2020

Current Characters

  • Simone: Defiler demon, singer, and magical fae friend. Main.
  • Lance: peacock pooka, usually only brought out for something specific. Comedy alt.
  • Augusta: stereotypical Hermetic. It's not a stick up her ass, it's a wand.

NPC Code

This is a work in progress and has not been tested in actual gameplay, so it may break in fun and interesting ways. After being annoyed with having to waste seconds constantly look up NPCs' stats and health, I spent hours putting this together. Efficient!

What It Does

  • Create and stat multiple NPCs. You can put notes on NPCs and customize their health levels, and statting is very similar to using +bulkstat in cgen. They can also be renamed or deleted.
  • Roll using stat names. +npc/roll Bob=Dexterity + Melee will add Bob's dexterity and melee and +roll the sum with the game's existing +roll code. +npc/rollw Bob=Dexterity + Melee will do the same, but add any wound penalties Bob has. The code also announces to the room what you're rolling, so you don't have to explain to your players that this undescriptive roll of five dice is for Bob's willpower roll and that undescriptive roll of five dice is his soak.
  • Automatically handle +combat/init for multiple NPCs at once. +npc/init Alice/Bob/Charlie will calculate and use the game's +combat/init code for Alice, Bob, and Charlie, including adding any wound penalties and other initiative modifiers. You still have to use it at the beginning of each combat round, but it does the math for you and is one command instead of potentially several.
  • Damage or heal NPCs. Bashing damage will automatically roll over into lethal if there's too much of it.
  • Equivalents to +gain and +lose. Unlike +gain and +lose, these also work for stats that aren't pools, so you can temporarily boost other stats.

What It Doesn't Do Yet

  • Allow you to save various forms for NPCs and have them shift. The code's 90% done but the interface is more awkward than I would like.

How Do I Use This?

Copy the code below - yes, it's long, hush - and paste it into the game. (You can omit the lines about setting it DARK and STICKY if for some reason you want to.) Check +npc/help for basic commands to use in a scene, and +npc/help2 for how to actually set up NPCs.

NPC Code - Expand Me!

@create %N's NPC Notebook

@lock/use NPC Notebook=me

@set NPC Notebook=inherit

@set NPC Notebook=sticky

@link NPC Notebook=me

@set NPC Notebook=dark

@desc NPC Notebook=%ch[lpad(-> NPC: %N's NPC Notebook%b,78,-)]%cn%rAn NPC management system for at least 95.5%% of your STing needs. Create and stat NPCs, keep track of their health, roll their stats like you would a PC, automatically handle their +combat/init, and more.%R%r[lpad(+npc/help,20)]How to use the code in a scene.%r[lpad(+npc/help2,20)]How to set up and manage NPCs.%r%rWiki page: https://www.cityofhopemush.net/index.php/User:Simone%r%ch[repeat(-,78)]%cn

&npc_fn.namenpc NPC Notebook=[iter(elements(%0,2,.),capstr(lcstr(##)),_,%b)]

&npc_fn.getdice NPC Notebook=[edit(trim(squish(iter(edit(%0,%b-,%b+-,-%b,-),switch(1,[isint(##)],[trim(##,b,%b)][setq(2,iadd(%q2,##))],[t(setr(1,grab(v(%q0),[trim(##,l,-)]*,|)))],[if(strmatch(##,-*),-)][first(%q1,:)][setq(2,iadd(%q2,[if(strmatch(##,-*),-)][last(last(%q1,:),/)]))],setq(3,setunion(%q3,"[trim(##,l,-)]",|))),+,+),+),b,+),+,%b+%b,+%b-,-%b)]

&npc_fn.getwound NPC Notebook=[last(iter(v([elements(%0,1 2,.)].health),if(cand(strmatch(##,*/*),t(last(##,/))),if(isword(first(##,/)),0,first(##,/))),|,|),|)]

&npc_fn.namehealth NPC Notebook=[if(setr(0,last(trim(iter(%0,if(t(last(##,/)),switch(1,[isint(first(##,/))],is at a [first(##,/)] penalty,[strmatch(##,*/*)],is [first(##,/)],has more damage than health)),|,|),b,|),|)),%q0,is unhurt)]

&npc_fn.healthrep NPC Notebook=[repeat([%0]%b,iadd(words(remove(matchall(v(%q0),*%0,|),0)),if(strmatch(%q1,%0),%1)))]

&npc_fn.npcsheet NPC Notebook=[if(iter(v([%0].stats),switch(1,[cor(strmatch(##,*/*),t(match(v(npc_list.pools),first(##,:),|)))],setr(i,setunion(%qi,##,|)),[strmatch(##,Initiative*)],setr(j,Initiative Modifier:[last(##,:)]),[t(match(v(npc_list.bio),first(##,:),|))],setr(a,setunion(%qa,##,|)),[t(match(v(npc_list.attributes),first(##,:),|))],setr(b,setunion(%qb,##,|)),[t(match(v(npc_list.talents),first(##,:),|))],setr(c,setunion(%qc,##,|)),[t(match(v(npc_list.skills),first(##,:),|))],setr(d,setunion(%qd,##,|)),[t(match(v(npc_list.knowledges),first(##,:),|))],setr(e,setunion(%qe,##,|)),[t(match(v(npc_list.backgrounds),first(##,:),|))],setr(f,setunion(%qf,##,|)),[t(match(v(npc_list.misc),first(##,:),|))],setr(h,setunion(%qh,##,|)),setr(g,setunion(%qg,##,|))),|,%b),trim(iter(a b [if(lte(words(setr(k,trim(squish(%qc|%qd|%qe,|),b,|)),|),12),k,c d e)] f g h i j,if(r(##),%r[wrap(edit(trim(r(##),b,|),|,[lit(,)]%b,:,:%b),74,,,,3)]),%b,null(-)),b,%b),%rNot statted!)]

&npc_cmd.npc NPC Notebook=$+npc:@pemit %#=%chNPC -> [if(setr(0,lattr(me/npc.*.health)),You have the following NPCs: [itemize(iter(%q0,u(npc_fn.namenpc,##), ,|),|)]. +npc <name> to see more,You don't have any NPCs)].%cn

&npc_cmd.npcs NPC Notebook=$+npcs:@pemit %#=%chNPC -> [if(setr(0,lattr(me/npc.*.health)),You have the following NPCs: [itemize(iter(%q0,u(npc_fn.namenpc,##), ,|),|)]. +npc <name> to see more,You don't have any NPCs)].%cn

&npc_cmd.npclook NPC Notebook=$+npc *:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@pemit %#=%ch[lpad(-> NPC: [u(npc_fn.namenpc,%q0)]%b,78,-)]%cn[u(npc_fn.npcsheet,setr(0,elements(%q0,1 2,.)))]%r%r[wrap(Health: [iter(v([%q0].health),if(strmatch(##,*/),##-,%cr%ch##%cn),|,%b|%b)],74,left,,,8)]%r[u(npc_fn.namenpc,%q0)] [ulocal(npc_fn.namehealth,v([%q0].health))].%r[if(setr(n,lattr(me/[%q0].note-*)),%ch[lpad(-> Notes%b,78,-)]%cn%r[iter(%qn,wrap(#[last(##,-)]: [v(##)],74,,,,iadd(strlen(last(##,-)),3)), ,%r)]%r)]%ch[repeat(-,78)]%cn}

&npc_cmd.npcsheet NPC Notebook=$+npc/sheet *:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@pemit %#=%ch[lpad(-> NPC: [u(npc_fn.namenpc,%q0)]'s Sheet%b,78,-)]%cn[u(npc_fn.npcsheet,setr(0,elements(%q0,1 2,.)))]%r%ch[repeat(-,78)]%cn}

&npc_cmd.npcnotes NPC Notebook=$+npc/notes *:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@pemit %#=%ch[lpad(-> NPC: [u(npc_fn.namenpc,%q0)]'s Notes%b,78,-)]%cn%r[if(setr(n,lattr(me/[elements(%q0,1 2,.)].note-*)),iter(%qn,wrap(#[last(##,-)]: [v(##)],74,,,,iadd(strlen(last(##,-)),3)), ,%r),No notes set!)]%r%ch[repeat(-,78)]%cn}

&npc_cmd.create NPC Notebook=$+npc/create *:@switch/first 1=[t(lattr(me/npc.[edit(%0,%b,_)].*))],{@pemit %#=%chNPC -> You already have an NPC named "[iter(edit(%0,_,%b),capstr(lcstr(%0)))]."%cn},{@set me=npc.[edit(%0,%b,_)].health:OK/ OK/ -1/ -1/ -2/ -2/ -5/ Incapacitated/;@pemit %#=%chNPC -> NPC "[iter(edit(%0,_,%b),capstr(lcstr(##)))]" created.}

&npc_cmd.stat NPC Notebook=$+npc/stat *=*:@switch/first 0=[t([setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health)))][setq(0,[elements(%q0,1 2,.)].stats)])],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@set me=[%q0]:[setr(3,trim(squish(iter(setunion(iter(setr(2,v(%q0)),if(setr(1,grab(%1,[first(##,:)]:*,|)),%q1,##),|,|),iter(%1,if(not(match(%q2,[first(##,:)]:*,|)),##),|,|),|),if(gte(strlen(strtrunc(after(##,:),1)),1),iter(iter(edit(##,:%b,:,:+,:),capstr(lcstr(itext(0))),:,:),capstr(itext(0)))),|,|),|),b,|))];@pemit %#=%chNPC -> [u(npc_fn.namenpc,%q0)]'s stats have been adjusted.[if(setr(4,setdiff(%q3,%q2,|)),%r[wrap(Added/Changed: [edit(%q4,|,[lit(,)]%b,:,:%b)],70,left,space(7))])][if(setr(5,trim(squish(iter(%1,if(lt(strlen(after(##,:)),1),iter(before(##,:),capstr(lcstr(itext(0))))),|,|),|),b,|)),%r[wrap(Deleted: [edit(%q5,|,[lit(,)]%b)],70,left,space(7))])]}

&npc_cmd.addnote NPC Notebook=$+npc/addnote *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.*))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@set me=[elements(%q0,1 2,.)].note-[setr(1,inc(last(sort(iter(lattr(me/[elements(%q0,1 2,.)].note-*),after(##,-))))))]:%1;@pemit %#=%chNPC -> Note added to [u(npc_fn.namenpc,%q0)] as note #[%q1].%cn}

&npc_cmd.delnote NPC Notebook=$+npc/delnote *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.*))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},[hasattr(me,setr(0,[elements(%q0,1 2,.)].note-[%1]))],{@pemit %#=%chNPC -> NPC [u(npc_fn.namenpc,%q0)] doesn't have a note #[%1].},{@set me=[%q0]:;@pemit %#=%chNPC -> Note #[%1] deleted from NPC [u(npc_fn.namenpc,%q0)].}

&npc_cmd.health NPC Notebook=$+npc/health *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@set me=[%q0]:[setr(1,iter(strip(%1,/),[trim(iter(##,capstr(##)),b,%b)]/,|,|))];@pemit %#=%chNPC -> [u(npc_fn.namenpc,%q0)]'s health levels adjusted and any damage removed. They are now:%r[wrap(edit(%q1,/,,|,%b|%b),71,left,space(7))]%cn}

&npc_cmd.hurt NPC Notebook=$+npc/hurt *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},[setr(1,switch(strtrunc(%1,1),a,agg,l,lethal,b,bashing,0))],{@pemit %#=%chNPC -> I don't recognize "[first(%1,/)]" as a damage type.%cn},[setr(2,if(strmatch(%1,*/*),if(cand(isint(last(%1,/)),gt(last(%1,/),0)),last(%1,/),0),1))],{@pemit %#=%chNPC -> Damage number has to be a positive integer.%cn},{@set me=[%q0]:[setr(5,trim(iter([setr(3,iter(v(%q0),if(strmatch(##,*/*),[first(##,/)]/),|,|))]|--[setq(4,[setr(a,u(npc_fn.healthrep,agg,%q2))] [setr(l,u(npc_fn.healthrep,lethal,%q2))] [if(cand(gt(words(%qa %ql [setr(b,u(npc_fn.healthrep,bashing,%q2))]),words(%q3,|)),lte(words(%qa %ql),words(%q3,|))),repeat(lethal%b,isub(words(%qa %ql %qb),words(%q3,|))))] %qb)],switch(0,[strmatch(##,--)],[first(##,/)]/[elements(%q4,#@)],[strmatch(elements(%q4,#@),bashing)],elements(%q4,#@)),|,|),b,|))];@femit/room me=%chNPC -> [u(npc_fn.namenpc,%q0)] takes %q2 %q1 damage and [ulocal(npc_fn.namehealth,%q5)].}

&npc_cmd.heal NPC Notebook=$+npc/heal *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.health))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},[setr(1,switch(strtrunc(%1,1),a,agg,l,lethal,b,bashing,0))],{@pemit %#=%chNPC -> I don't recognize "[first(%1,/)]" as a damage type.%cn},[setr(2,switch(1,[not(strmatch(%1,*/*))],1/1,[strmatch(%1,*/all)],all/[words(iter(v(%q0),if(strmatch(##,*%q1),1),|))],[cand(isint(last(%1,/)),gt(last(%1,/),0))],[last(%1,/)]/[last(%1,/)],0))],{@pemit %#=%chNPC -> Damage number has to be "all" or a positive integer.%cn},{@set me=[%q0]:[setr(4,iter([v(%q0)][setq(3,[u(npc_fn.healthrep,agg,-[last(%q2,/)])] [u(npc_fn.healthrep,lethal,-[last(%q2,/)])] [u(npc_fn.healthrep,bashing,-[last(%q2,/)])])],[if(strmatch(##,*/*),[first(##,/)]/)][elements(%q3,#@)],|,|))];@femit/room me=%chNPC -> [u(npc_fn.namenpc,%q0)] heals [first(%q2,/)] %q1 damage and [ulocal(npc_fn.namehealth,%q4)].%cn}

&npc_cmd.gain NPC Notebook=$+npc/gain *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.stats))))],{@pemit %#=%chNPC -> "[capstr(%0)]" either doesn't exist or isn't statted.%cn},[t(setr(1,grab(v(%q0),[first(%1,/)]*,|)))],{@pemit %#=%chNPC -> NPC [u(npc_fn.namenpc,%q0)] doesn't have stat "[capstr(first(%1,/))]."},[isint(first(after(%q1,:),/))],{@pemit %#=%chNPC -> [first(%q1,:)] isn't a numerical stat.},[t(setr(2,switch(1,[not(strmatch(%1,*/*))],1,[cand(isint(after(%1,/)),gt(after(%1,/),0))],after(%1,/),[isword(after(%1,/))],all))],{@pemit %#=%chNPC -> Stat gain amount has to be either a positive integer or "all."},[not(cand(strmatch(%q2,all),not(strmatch(%q1,*/*))))],{@pemit %#=%chNPC -> You can't use "all" as a stat amount on stats that aren't pools.},[setr(3,if(strmatch(%q1,*/*),switch(1,[cor(strmatch(%q2,all),gt(iadd(before(after(%q1,:),/),%q2),after(%q1,/)))],isub(after(%q1,/),before(after(%q1,:),/)),[eq(before(after(%q1,:),/),after(%q1,/))],0,%q2),%q2))],{@pemit %#=%chNPC -> NPC [u(npc_fn.namenpc,%q0)]'s [first(%q1,:)] is already as high as it goes. You can use +npc/stat to raise the maximum.},{@set me=[%q0]:[replace(v(%q0),member(v(%q0),%q1,|),[first(%q1,:)]:[iadd(first(last(%q1,:),/),%q3)][if(strmatch(%q1,*/*),/[last(%q1,/)])],|)];@femit/room me=%chNPC -> NPC [u(npc_fn.namenpc,%q0)][if(isint(%q2),%bgains %q3 [first(%q1,:)],'s [first(%q1,:)] is refilled)].[if(gt(%q2,%q3),pemit(%#,%chNPC -> [u(npc_fn.namenpc,%q0)] could only gain %q3 point[if(gt(%q3,1),s)] of [first(%q1,:)]%, not %q2. %(This note is seen only by you.%)))]}

&npc_cmd.lose NPC Notebook=$+npc/lose *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.stats))))],{@pemit %#=%chNPC -> "[capstr(%0)]" either doesn't exist or isn't statted.%cn},[t(setr(1,grab(v(%q0),[first(%1,/)]*,|)))],{@pemit %#=%chNPC -> NPC [u(npc_fn.namenpc,%q0)] doesn't have stat "[capstr(first(%1,/))]."},[isint(first(after(%q1,:),/))],{@pemit %#=%chNPC -> [first(%q1,:)] isn't a numerical stat.},[setr(2,switch(1,[not(strmatch(%1,*/*))],1,[isword(after(%1,/))],all,[gt(after(%1,/),0)],after(%1,/),0))],{@pemit %#=%chNPC -> Stat loss amount has to be either a positive integer or "all."},[setr(3,switch(1,[strmatch(%q1,Initiative*)],%q2,[eq(first(last(%q1,:),/),0)],0,[cor(isword(%q2),lt(isub(first(last(%q1,:),/),%q2),0))],first(last(%q1,:),/),%q2))],{@pemit %#=%chNPC -> [first(%q1,:)] is already at zero!},{@set me=[%q0]:[replace(v(%q0),member(v(%q0),%q1,|),[first(%q1,:)]:[isub(first(last(%q1,:),/),%q3)][if(strmatch(%q1,*/*),/[last(%q1,/)])],|)];@femit/room me=%chNPC -> NPC [u(npc_fn.namenpc,%q0)] loses [if(isword(%q2),all,%q3)] [first(%q1,:)].[if(gt(%q2,%q3),pemit(%#,%chNPC -> [u(npc_fn.namenpc,%q0)] didn't have %q2 point[if(gt(%q2,1),s)] to remove from [first(%q1,:)]. %q3 removed instead. %(This note is seen only by you.%)))]}

&npc_cmd.roll NPC Notebook=$+npc/roll *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.stats))))],{@pemit %#=%chNPC -> "[capstr(%0)]" either doesn't exist or isn't statted.%cn},[t(setr(d,u(npc_fn.getdice,before(%1,vs)))],{@pemit %#=%chNPC -> Nothing to roll![if(%q3,%bCouldn't find stat [itemize(%q3,|,or)].)]%cn},[gt(%q2,0)],{@femit/room me=%chNPC -> [u(npc_fn.namenpc,%q0)] tries to roll [if(%qd,%qd%b)]but has no dice!%cn[if(%q3,pemit(%#,%chNPC -> Couldn't find stat [itemize(%q3,|,or)].%cn))]},{@femit/room me=%chNPC -> [u(npc_fn.namenpc,%q0)] rolls %qd[if(setr(5,after(%1,%bvs%b)),%bvs [%q5])]%cn[if(%q3,pemit(%#,%chNPC -> Couldn't find stat [itemize(%q3,|,or)].%cn))];@force %#=+roll %q2[if(%q5,%bvs %q5)]}

&npc_cmd.rollw NPC Notebook=$+npc/rollw *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)]*.stats))))],{@pemit %#=%chNPC -> "[capstr(%0)]" either doesn't exist or isn't statted.%cn},[t(setr(d,u(npc_fn.getdice,before(%1,vs)))],{@pemit %#=%chNPC -> Nothing to roll![if(%q3,%bCouldn't find stat [itemize(%q3,|,or)].)]%cn},[gt(setr(2,iadd(%q2,setr(4,u(npc_fn.getwound,%q0)))),0)],{@femit/room me=%chNPC -> [u(npc_fn.namenpc,%q0)] tries to roll [if(%qd,%qd%b)]but has no dice!%cn[if(%q3,pemit(%#,%chNPC -> Couldn't find stat [itemize(%q3,|,or)].%cn))]},{@femit/room me=%chNPC -> [u(npc_fn.namenpc,%q0)] rolls %qd[if(%q4,%b%(%q4 penalty for wounds%))][if(setr(5,after(%1,%bvs%b)),%bvs [%q5])]%cn[if(%q3,pemit(%#,%chNPC -> Couldn't find stat [itemize(%q3,|,or)].%cn))];@force %#=+roll %q2[if(%q5,%bvs %q5)]}

&npc_cmd.init NPC Notebook=$+npc/init *:@dolist/delimit / %0={@switch/first 0=[t(setr(0,first(lattr(me/npc.[##]*.stats))))],{@pemit %#=%chNPC -> "[capstr(%0)]" either doesn't exist or isn't statted.%cn},{@force %#=+combat/init [u(npc_fn.namenpc,%q0)] [iadd(last(grab(v(%q0),Dex*,|),:),last(grab(v(%q0),Wits*,|),:),last(grab(v(%q0),Initiative*,|),:),u(npc_fn.getwound,%q0))]}}

&npc_cmd.rename NPC Notebook=$+npc/rename *=*:@switch/first 0=[t(setr(0,first(lattr(me/npc.[edit(%0,%b,_)].*))))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@dolist %q0={@mvattr me=##,[replace(##,2,edit(%1,%b,_),.)]};@pemit %#=%chNPC -> NPC [u(npc_fn.namenpc,%q0)] renamed to [iter(edit(%1,_,%b),capstr(lcstr(##)))].%cn}

&npc_cmd.delete NPC Notebook=$+npc/delete *:@switch/first 0=[t(setr(0,lattr(me/npc.[edit(%0,%b,_)].*)))],{@pemit %#=%chNPC -> No such NPC as "[capstr(%0)]"!%cn},{@dolist %q0={@set me=##:};@pemit %#=%chNPC -> NPC [u(npc_fn.namenpc,first(%q0))] deleted.%cn}

&cmd_npc.help NPC Notebook=$+npc/help:@pemit %#=%ch[lpad(-> NPC: Help! Using NPCs in Scenes%b,78,-)]%cn%r[ljust(+npc,38)]List your NPCs%r[ljust(+npc <name>,38)]View stats, health, and notes for <name>%r[ljust(+npc/sheet <name>,38)]View just <name>'s stats and health%r[ljust(+npc/notes <name>,38)]View <name>'s notes%r%r+npc/roll <name>=<pool> %[vs <diff>%]%r[ljust(+npc/rollw <name>=<pool> %[vs <diff>%],38)]Roll w/ wound penalties%r[wrap(lit(* <pool> works just like +roll. You can use stat names, numbers (positive or negative), or a combination.),74,left,%b%b%b)]%r%r+npc/init <name>/<name>/etc.%r[wrap(lit(* Automatically use the game's NPC +combat/init command for <names>),74,left,%b%b%b)]%r[wrap(lit(* You can set init modifiers with the special stat "Initiative". See +npc/help2.),74,left,%b%b%b)]%r%r+npc/gain <name>=<stat>%[/<amount or "all">%]%r+npc/lose <name>=<stat>%[/<amount or "all">%]%r[wrap(lit(* Gain or lose points from a stat. Defaults to one point.),74,left,%b%b%b)]%r[wrap(lit(* Works with all stats, not just pools. A good way to handle temporary boosts to attributes, inits, etc.),74,left,%b%b%b)]%r%r+npc/hurt <name>=<type>%[/<amount>%]%r+npc/heal <name>=<type>%[/<amount or "all">%]%r%b%b%b* Defaults to one level if you don't specify an amount.%R[wrap(lit(* Bashing automatically becomes lethal if it exceeds the NPC's health.),74,left,%b%b%b)]%r%rFor information on setting up and statting NPCs, see +npc/help2.%r%ch[repeat(-,78)]%cn

&npc_cmd.help2 NPC Notebook=$+npc/help2:@pemit %#=%ch[lpad(-> NPC: Help! Setting Up NPCs%b,78,-)]%cn%r+npc/create <name>%r+npc/rename <name>=<new name>%r+npc/delete <name>%r+npc/addnote <name>=<note text>%r+npc/delnote <name>=<note #>%R%r+npc/stat <name>=<stat1>:<value>|<stat2>:<value>|etc.%r%b%b%b* Stats <name>. To remove a stat, leave <value> blank.%r[wrap(lit(* Pools with temporary and permanent values (e.g. Willpower, blood, etc.), needed to be added as "<stat>:<temp>/<perm>".),74,left,%b%b%b)]%r[wrap(lit(* Initiative: you can use "initiative:<value>" to set a positive or negative init modifier that's automatically used with +npc/init.),74,left,%b%b%b)]%R%R+npc/health <name>=<health level>|<health level>|etc.%r[wrap(lit(* Changes an NPC's health levels from the default. Use the format:),74,left,%b%b%b)]%r[space(5)]OK|OK|-2|-4|Incapacitated%r%b%b%b* Don't add a level for dead!%r[wrap(lit(* Named levels don't have penalties, either because the character isn't injured enough or is too injured to be doing much.),74,left,%b%b%b)]%r[wrap(lit(* If an NPC takes more damage than they have health, it will either be converted to lethal (if it's bashing) or the code will let you know. On the +npc info sheet, this will appear as damage listed after the last health level. For example:),74,left,%b%b%b)]%r[space(6)]OK/aggravated | -3/aggravated | Incapacitated/aggravated | lethal%R%ch[repeat(-,78)]%cn

&npc_list.bio NPC Notebook=Nature|Demeanor|Tribe|Clan|House|Faction|Type|Breed|Visage|Guild|Kith|Race|Tradition|Convention|Court|Seelie Legacy|Unseelie Legacy|Winter Legacy|Legacy Winter|Legacy Seelie|Legacy Unseelie|Summer Legacy|Legacy Summer|Legacy Yin|Legacy Yang|Affiliation|Age|Amenti|Apocalyptic Form|Aspect|Auspex|Birthday|Cabal|Camp|Cause of Death|Celestial Name|Changeday|Chantry Name|Chi Balance|Citizenship|Code Name|Creed|Legion|Death Date|Date of Birth|Date of Embrace|Date of Change|Date of Chrysalis|Dharma|Direction|Domitor|Essence|Elemental Affinity|Fae Name|Full Name|Fullname|Hamarti|Hamartia|Rank|Inheritance|Lament|Lodge|Methodology|Mortal Life|Occupation|P'o Nature|Pack|Motley|Household|Pryio|Regret|Resonance|Rite Name|Seeming|Sept|Shade|Shadow|Stream|Sire|Threshold|Totem Spirit|Uji|Urge Wyrm|Varna|Wu

&npc_list.attributes NPC Notebook=Intelligence|Wits|Perception|Appearance|Charisma|Manipulation|Dexterity|Strength|Stamina

&npc_list.talents NPC Notebook=Alertness|Athletics|Awareness|Brawl|Do|Dodge|Empathy|Expression|Intimidation|Kenning|Leadership|Primal Urge|Streetwise|Subterfuge|Acting|Artistic Expression|Biorhythms|Carousing|Diplomacy|Flight|Fortune-telling|Guile|Haggling|Homiletics|Instruction|Interrogation|Intrigue|Intuition|Juggling|Lucid Dreaming|Malkavian Time|Masquerade|Mimicry|Negotiation|Newspeak|Panhandling|Persuasion|Poetic Expression|Public Speaking|Scan|Scrounging|Search|Seduction|Sense Deception|Style|Swimming|Throwing|Ventriloquism

&npc_list.skills NPC Notebook=Animal Ken|Crafts|Drive|Etiquette|Firearms|Iskakku|Kailindo|Melee|Performance|Security|Stealth|Survival|Technology|Martial Arts|Acrobatics|Animal Training|Archery|Artillery|Biotech|Blacksmith|Blind Fighting|Boat Handling|Body Crafting|Body Crafts|Brewing|Bribery|Brood Kenning|Calligraphy|Camouflage|Carpentry|Climbing|Cooking|Dancing|Debate|Demolitions|Disguise|Elusion|Energy Weapons|Escapology|Falconry|Fast-talk|Fire Dancing|First Aid|Fishing|Forgery|Gambling|Game Playing|Gunsmithing|Heavy Weapons|Helmsman|Herbalism|High Ritual|Hunting|Hypertech|Hypnotism|Jetpack|Jeweler|Journalism|Jury-rig|Larceny|Leatherworking|Lip Reading|Lockpicking|Maieusis|Mechanic|Meditation|Microgravity Operations|Mining|Misdirection|Mnesis Emulation|Music|Networking|Origami|Parachuting|Photography|Pickpocket|Pilot|Police Procedure|Portents|Pottery|Psychoanalysis|Repair|Research|Ride|Scuba|Singing|Skiing|Sleight Of Hand|Soulshaping|Speed Reading|Storytelling|Temporal Sense|Torture|Tracking|Traps|Vamp

&npc_list.knowledges NPC Notebook=Academics|Bureaucracy|Computer|Cosmology|Enigmas|Finance|Gremayre|Investigation|Law|Linguistics|Medicine|Occult|Politics|Rituals|Science|Accounting|Alchemy|Anthropology|Archaeology|Architecture|Area Knowledge|Art History|Astrology|Astronomy|Biology|Biopsychology|Botany|Chemistry|Chimerical Alchemy|Church History|City Secrets|Computer Hacking|Computer Programming|Conspiracy Theory|Construct Politics|Covert Culture|Criminology|Cryptology|Culture|Cybernetics|Ecology|Economics|Electronics|Engineering|Enochian|Ethnology|Fine Arts|Forensics|Forensic Pathology|Gematria|Genetics|Geology|Heraldry|History|Hypermathematics|Law Enforcement|Literature|Logic|Mathematics|Media|Metallurgy|Metaphysics|Meteorology|Military Science|Mythology|Naturalist|Numerology|Paleography|Paraphysics|Parapsychology|Pharmacopoeia|Philosophy|Phlogeny|Physics|Power-brokering|Propaganda|Psychodynamics|Psychology|RD Data|Religion|Religious Rites|Religious Scriptures|Sacred Geometry|Sacred Scriptures|Saurimancy|Sociobiology|Subdimensions|Terrorism|Theology|Toxicology|Tribal Lore|Umbrood Protocols|Vice|Virtual Space|Xenobiology|Lore Bygone|Lore Changeling|Lore Demon|Lore Fera|Lore Garou|Lore Hunter|Lore Kuei-jin|Lore Mage|Lore Mummy|Lore Sewer|Lore Sorcerer-Psychic|Lore Spirit|Lore Vampire|Lore Wraith|Lore Wyrm|Bygone Lore|Changeling Lore|Demon Lore|Fera Lore|Garou Lore|Hunter Lore|Kuei-jin Lore|Mage Lore|Mummy Lore|Sewer Lore|Sorcerer-Psychic Lore|Spirit Lore|Vampire Lore|Wraith Lore|Wyrm Lore

&npc_list.backgrounds NPC Notebook=Age|Allies|Alternate Identity|Ancestors|Arcane|Archive|Arsenal|Artifact|Avatar|Ayllu|Ba|Backers|Backup|Batsu|Black Hand Membership|Blessing|Blood Donor|Bystanders|Chantry|Chimera|Chole|Clan Prestige|Cloaking|Colony|Companion|Consecrated|Contacts|Contemplation|Cray|Cult|Database|Demesne|Den Realm|Destiny|Detective License|Device|Domitor|Dream|Dreamers|Dross|Eidolon|Elder Status|Eminence|Enhancement|Equipment|Everyman|Exposure|Face|Fae Steed|Fame|Familiar|Familiar Companion|Familiar Spirit|Fate|Feth Fiada|Fetish|Followers|Freak Factor|Generation|Genius|Ghost Insight|Go-en|Golem|Grace Under Pressure|Guide|Haunt|Health Insurance|Herd|Holdings|Home Base|Horoscope|Husk|Hypercram|Illi|Influence|Information Network|Jade Talisman|Jamak|Ka|Kinfolk|Laboratory|Legacy|Legend|Library|Living Family|Magisterial Office|Memoriam|Memory|Mentor|Military|Mnesis|Neteru|Node|Notoriety|Numen|Nushi|Occult Library|Old Soul|Orisha Bond|Other People's Secrets|Pacts|Pakua|Paragon|Passion|Past Lives|Past Weapons|Patron|Pentex Rank|Plague|Political Connections|Prestige|Pure Breed|Regard|Relic|Reliquary|Remembrance|Remora|Renown|Requisitions|Resources|Retainers|Retinue|Rites|Royal Lineage|Royal Title|Samapa|Sanctuary|Sanctum|Scathach Status|Secrets|Secret Pure Spirit|Secret Weapons|Sempai|Shield|Spies|Spirit Allies|Spirit Companion|Spirit Heritage|Spirit Network|Spirit Slave|Status|Steel Nerves|Symbiosis|Title|Tomb|Totem|Touched|Treasure|Trinket|Trod|Umbral Glade|Umbral Maps|Veil|Vessel|Visage|Vision|Wallow|Warren|Wonder|Wraith Family|Years

&npc_list.misc NPC Notebook=Arete|Enlightenment|Torment|Spite|Angst|Autonomy|Banality|Humanity|Courage|Conviction|Conscience|Instinct|Self Control|Self-Control|Path of Enlightenment|Path of Blood|Path of Bones|Path of Caine|Path of Cathari|Path of Death and the Soul|Path of Ecstasy|Path of Evil Revelations|Path of Feral Heart|Path of Harmony Conscience|Path of Honorable Accord|Path of Lilith|Path of Metamorphosis|Path of Night|Path of Orion|Path of Paradox|Path of Power and the Inner Voice|Path of Redemption|Path of Righteous Night|Path of Scorched Heart|Path of Self-Focus|Path of Sutekh|Path of Tears|Path of Typhon|Path of the Warrior|Path

&npc_list.pools NPC Notebook=Balance|Blood|Chi|Demon Chi|Faith|Glamour|Gnosis|Mana|Nightmare Dice|Paradox|Pathos|Prime Energy|Quintessence|Rage|Sekhem|Temp Angst|Temp Autonomy|Temp Banality|Temp Spite|Temp Torment|Vitality|Waka|Willpower|Yang Chi|Yin Chi|Yugen|Magical Essence|Magical Weakness|Permanent Paradox