User:Victor Bearwolf/Test
From Game Logs
< User:Victor Bearwolf
Revision as of 22:11, 31 January 2021 by Victor Bearwolf (talk | contribs) (Next step: edit chummergen code itself...)
Notes
- Сохранить код ниже как *.xsl файл в Chummer4\sheets\.
- Образец вывода: Viktoria Novak.Viktoria X. Novak (VXN, Vixen)
SURGE'd Elf Lone Star DetectiveBOD AGI REA STR CHA INT LOG WIL EDG 1 6(3) 5(8) 1 7 5 5 1 1 Magic: 5
Essence: 6
Initiative / IP: 10(13) / 1(4)
Matrix Initiative / IP: 8 / 2
Astral Initiative / IP: 10 / 3
Lift / Carry: 15kg / 10kg
Movement: walk 15/37, swim 6
Armor: ballistic 7, impact 5
Condition Tracks: physical 9, stun 9Active Skills: Assensing 6, Con 4, Dodge 4, Etiquette 4, Leadership 4, Longarms 1, Negotiation 4, Perception 4, Pilot Ground Craft 1, Pistols 4Knowledge Skills: Area Knowledge: Seattle 4, Bars and Clubs 1, English N, Law Enforcement 6, Magical Theory 4, Magical Threats 4, News 2, Sperethiel 4, Street Racing 1, Underworld 4Qualities: Adept, Broad Auditory System (Ultrasound), Celerity, Changeling (Class III SURGE), Day Job (40 hrs/week), Distinctive Style, Extravagant Eyes, Geas (Combat Sense, Nature Affinity), Geas (Improved Reflexes, Nature Affinity), Glamour, Low-Light Vision, Nano Intolerance, Prejudiced (Specific, Biased) (Humanis Policlub), Records on File (Lone Star), SINner (Standard) (Viktoria X. Novak, UCAS), The Warrior's Way, Unusual Hair, Vestigial Tail, Vomeronasal OrganPowers: Astral Perception, Combat Sense 3, Commanding Voice, Eidetic Sense Memory, Improved Reflexes 3, Magic Sense - В чаммере можно в опциях на вкладке Global выбрать сохранённый файл дефолтным чаршитом.
- Необязательно, но там же в опциях на вкладке Character and Printing можно включить печать всех навыков, бухгалтерии кармы/нюен и заметок (после изменения настроек печати необходим перезапуск чаммера).
- Рекомендуется заполнить поля на вкладке Character Info (в редакторе персонажа, не опциях).
- Дополнительную информацию можно записывать в поле Notes самого персонажа (в Character Info). Поддерживаются категории, цитаты и комментарии к отдельным скиллам, остальное игнорируется:
Some text to be ignored or something. You can write anything here and everywhere - only text in double brackets is looked for: [[Category:Seattle Investigators Xtravaganza]] - text in square brackets will be used as header; {{Q|Why is it that every time I think I know the answers, someone goes and changes the questions?|Special Agent Fox Mulder|||nolink=1}} - quotes will be printed too; ((Perception|+3 smell, hearing, vision)) - and that's how you write down comments to be used with skills.
- Work in progress, comments requested.
Code
<?xml version="1.0" encoding="UTF-8" ?> <!-- UR SR4 Character Sheet --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/characters/character"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body style="font-family:courier new,courier; font-size: 9pt;"> <xsl:call-template name="include.sidemenu"/> <xsl:call-template name="include.summary"/> <xsl:call-template name="include.headers"/> <xsl:call-template name="include.quotes"/> <xsl:call-template name="section.character"/> <xsl:call-template name="section.description"/> <xsl:call-template name="section.background"/> <xsl:call-template name="section.actionskills"/> <xsl:call-template name="section.knowledgeskills"/> <!-- <xsl:call-template name="section.languageskills"/> --> <xsl:call-template name="section.attacks"/> <xsl:call-template name="section.qualities"/> <xsl:call-template name="section.powers"/> <xsl:call-template name="section.martialarts"/> <xsl:call-template name="section.complexforms"/> <xsl:call-template name="section.spells"/> <xsl:call-template name="section.spirites"/> <xsl:call-template name="section.vehicles"/> <xsl:call-template name="section.lifestyles"/> <xsl:call-template name="section.contacts"/> <xsl:call-template name="section.sins"/> <xsl:call-template name="section.commlinks"/> <xsl:call-template name="section.weapons"/> <xsl:call-template name="section.armor"/> <xsl:call-template name="section.gear"/> <!-- <xsl:call-template name="section.equipment"/> --> <xsl:call-template name="section.augmentations"/> <xsl:call-template name="section.nuyen"/> <xsl:call-template name="section.karma"/> </body> </html> </xsl:template> <xsl:template name="include.headers"> [[Category:Characters]]<br/> <xsl:if test="contains(notes, '[[') and contains(notes, ']]')"> <xsl:call-template name="text.headers"> <xsl:with-param name="text"> <xsl:value-of select="notes"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="include.summary"> {{Sidebar|Name=<onlyinclude>{{SR4_Statblock<br/> |Name=<xsl:value-of select="name"/><xsl:if test="alias != ''"> (<xsl:value-of select="alias"/>)</xsl:if><br/> |Detail= <xsl:choose> <xsl:when test="concept != ''"><xsl:value-of select="concept"/></xsl:when> <xsl:otherwise> <xsl:if test="sex != ''"><xsl:value-of select="sex"/> </xsl:if> <xsl:if test="qualities/quality[contains(name,'Infected')]"><xsl:value-of select="substring-after(qualities/quality[contains(name,'Infected')]/name,' ')"/> </xsl:if> <xsl:if test="qualities/quality[name = 'Drake']">Drake </xsl:if> <xsl:if test="qualities/quality[contains(name,'Changeling')]">Changeling </xsl:if> <xsl:choose> <xsl:when test="metavariant != ''"><xsl:value-of select="metavariant"/> </xsl:when> <xsl:otherwise><xsl:value-of select="metatype"/> </xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="adept = 'True' and magician = 'True'">Mystic</xsl:when> <xsl:when test="adept = 'True'">Adept</xsl:when> <xsl:when test="magician = 'True'">Mage</xsl:when> <xsl:when test="technomancer = 'True'">Technomancer</xsl:when> <xsl:when test="cyberwares/cyberware[name = 'Control Rig']">Rigger</xsl:when> <xsl:otherwise>Shadowrunner</xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose><br/> |BOD=<xsl:value-of select="attributes/attribute[name = 'BOD']/base"/> <xsl:if test="attributes/attribute[name = 'BOD']/total != attributes/attribute[name = 'BOD']/base">(<xsl:value-of select="attributes/attribute[name = 'BOD']/total"/>)</xsl:if><br/> |AGI=<xsl:value-of select="attributes/attribute[name = 'AGI']/base"/> <xsl:if test="attributes/attribute[name = 'AGI']/total != attributes/attribute[name = 'AGI']/base">(<xsl:value-of select="attributes/attribute[name = 'AGI']/total"/>)</xsl:if><br/> |REA=<xsl:value-of select="attributes/attribute[name = 'REA']/base"/> <xsl:if test="attributes/attribute[name = 'REA']/total != attributes/attribute[name = 'REA']/base">(<xsl:value-of select="attributes/attribute[name = 'REA']/total"/>)</xsl:if><br/> |STR=<xsl:value-of select="attributes/attribute[name = 'STR']/base"/> <xsl:if test="attributes/attribute[name = 'STR']/total != attributes/attribute[name = 'STR']/base">(<xsl:value-of select="attributes/attribute[name = 'STR']/total"/>)</xsl:if><br/> |CHA=<xsl:value-of select="attributes/attribute[name = 'CHA']/base"/> <xsl:if test="attributes/attribute[name = 'CHA']/total != attributes/attribute[name = 'CHA']/base">(<xsl:value-of select="attributes/attribute[name = 'CHA']/total"/>)</xsl:if><br/> |INT=<xsl:value-of select="attributes/attribute[name = 'INT']/base"/> <xsl:if test="attributes/attribute[name = 'INT']/total != attributes/attribute[name = 'INT']/base">(<xsl:value-of select="attributes/attribute[name = 'INT']/total"/>)</xsl:if><br/> |LOG=<xsl:value-of select="attributes/attribute[name = 'LOG']/base"/> <xsl:if test="attributes/attribute[name = 'LOG']/total != attributes/attribute[name = 'LOG']/base">(<xsl:value-of select="attributes/attribute[name = 'LOG']/total"/>)</xsl:if><br/> |WIL=<xsl:value-of select="attributes/attribute[name = 'WIL']/base"/> <xsl:if test="attributes/attribute[name = 'WIL']/total != attributes/attribute[name = 'WIL']/base">(<xsl:value-of select="attributes/attribute[name = 'WIL']/total"/>)</xsl:if><br/> |EDG=<xsl:value-of select="attributes/attribute[name = 'EDG']/base"/> <xsl:if test="attributes/attribute[name = 'EDG']/total != attributes/attribute[name = 'EDG']/base">(<xsl:value-of select="attributes/attribute[name = 'EDG']/total"/>)</xsl:if><br/> <xsl:if test="magenabled = 'True'"> |MAG=<xsl:value-of select="attributes/attribute[name = 'MAG']/base"/> <xsl:if test="attributes/attribute[name = 'MAG']/total != attributes/attribute[name = 'MAG']/base">(<xsl:value-of select="attributes/attribute[name = 'MAG']/total"/>)</xsl:if><br/> </xsl:if> <xsl:if test="resenabled = 'True'"> |RES=<xsl:value-of select="attributes/attribute[name = 'RES']/base"/> <xsl:if test="attributes/attribute[name = 'RES']/total != attributes/attribute[name = 'RES']/base">(<xsl:value-of select="attributes/attribute[name = 'RES']/total"/>)</xsl:if><br/> </xsl:if> |Ess=<xsl:value-of select="attributes/attribute[name = 'ESS']/base"/><br/> |Init=<xsl:value-of select="init/base"/> <xsl:if test="init/total != init/base">(<xsl:value-of select="init/total"/>)</xsl:if> / <xsl:value-of select="ip/base"/> <xsl:if test="ip/total != ip/base">(<xsl:value-of select="ip/total"/>)</xsl:if><br/> <xsl:if test="matrixip/base"> |MInit=<xsl:value-of select="matrixinit/base"/> / <xsl:value-of select="matrixip/base"/><br/></xsl:if> <xsl:if test="astralip/base"> |AInit=<xsl:value-of select="astralinit/base"/> / <xsl:value-of select="astralip/base"/><br/></xsl:if> <xsl:if test="memory != attributes/attribute[name = 'LOG']/total + attributes/attribute[name = 'WIL']/total"> |Memory=<xsl:value-of select="memory"/><br/></xsl:if> <xsl:if test="composure != attributes/attribute[name = 'WIL']/total + attributes/attribute[name = 'CHA']/total"> |Composure=walk <xsl:value-of select="composure"/><br/></xsl:if> <xsl:if test="judgeintentions != attributes/attribute[name = 'INT']/total + attributes/attribute[name = 'CHA']/total"> |Judge=walk <xsl:value-of select="judgeintentions"/><br/></xsl:if> |LiftCarry=<xsl:value-of select="liftweight"/>kg / <xsl:value-of select="carryweight"/>kg<br/> |Movement=walk <xsl:value-of select="movementwalk"/> <xsl:if test="movementswim != 0">, swim <xsl:value-of select="movementswim"/></xsl:if> <xsl:if test="movementfly != 0">,fly <xsl:value-of select="movementfly"/></xsl:if><br/> |Armor=ballistic <xsl:value-of select="armorb"/>, impact <xsl:value-of select="armori"/><br/> |CTracks=physical <xsl:value-of select="physicalcm"/>, stun <xsl:value-of select="stuncm"/><br/> <xsl:variable name="skills" select="skills/skill[knowledge = 'False' and rating > 0]"/> <xsl:if test="$skills"> |ASkills= <xsl:for-each select="$skills"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:call-template name="text.list"/> </xsl:for-each><br/> </xsl:if> <xsl:variable name="knowledges" select="skills/skill[knowledge = 'True']"/> <xsl:if test="$knowledges"> |KSkills= <xsl:for-each select="$knowledges"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:call-template name="text.list"/> </xsl:for-each><br/> </xsl:if> <xsl:variable name="qualities" select="qualities/quality | critterpowers/critterpower[category = 'Weakness']"/> <xsl:if test="$qualities"> |Qualities= <xsl:for-each select="$qualities"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:value-of select="name"/> <xsl:if test="(name = 'Magician' or name = 'Mystic Adept') and ../../tradition != ''"> (<xsl:value-of select="../../tradition"/>)</xsl:if> <xsl:if test="name = 'Technomancer' and not(../../stream = '' or ../../stream = 'Default')"> (<xsl:value-of select="../../stream"/>)</xsl:if> <xsl:if test="extra != ''"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each><br/> </xsl:if> <xsl:variable name="powers" select="powers/power | critterpowers/critterpower[category != 'Weakness']"/> <xsl:if test="$powers"> |Powers= <xsl:for-each select="$powers"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:call-template name="text.list"/> </xsl:for-each><br/> </xsl:if> <xsl:if test="spells/spell"> |Spells= <xsl:for-each select="spells/spell"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:call-template name="text.list"/> </xsl:for-each><br/> </xsl:if> <xsl:if test="techprograms/techprogram"> |CForms= <xsl:for-each select="techprograms/techprogram"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:call-template name="text.list"/> </xsl:for-each><br/> </xsl:if> <xsl:if test="martialarts/martialart"> |MArts= <xsl:for-each select="martialarts/martialart"> <xsl:sort select="name"/> <xsl:call-template name="text.list"/> </xsl:for-each> <xsl:if test="martialartmaneuvers/martialartmaneuver">, <xsl:for-each select="martialartmaneuvers/martialartmaneuver"> <xsl:sort select="name"/> <xsl:call-template name="text.list"/> </xsl:for-each> </xsl:if><br/> </xsl:if> |Border=0<br/> }}</onlyinclude>}}<br/><br/> </xsl:template> <xsl:template name="include.quotes"> <xsl:if test="contains(notes, '{{Q|') and contains(notes, '}}')"> <xsl:call-template name="text.quotes"> <xsl:with-param name="text"> <xsl:value-of select="notes"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="include.sidemenu"> __NOTOC__<br/> <div style="clear:left; float:left; margin-top:38em; margin-left:-12.9em; width:10.35em; padding:0px; position:sticky; position:-webkit-sticky; top:0.5em;"><br/> <h3 class="portlet" style="font-size:1em;">contents</h3><br/> <div class="toc" style="width:100%;"><br/> [[#Character|Character]]<br/><br/> <xsl:if test="description != ''">[[#Description|Description]]<br/><br/></xsl:if> <xsl:if test="background != ''">[[#Background|Background]]<br/><br/></xsl:if> <xsl:if test="skills/skill[knowledge = 'False']">[[#Active Skills|Active Skills]]<br/><br/></xsl:if> <xsl:if test="skills/skill[knowledge = 'True' and islanguage = 'False']">[[#Knowledge Skills|Knowledge Skills]]<br/><br/></xsl:if> <!--<xsl:if test="skills/skill[knowledge = 'True' and islanguage = 'True']">[[#Languages|Languages]]<br/><br/></xsl:if> --> <xsl:if test="//*/weapon">[[#Attacks|Attacks]]<br/><br/></xsl:if> <xsl:if test="qualities/quality | critterpowers/critterpower[category = 'Weakness']">[[#Qualities|Qualities]]<br/><br/></xsl:if> <xsl:if test="powers/power | critterpowers/critterpower[category != 'Weakness']">[[#Powers|Powers]]<br/><br/></xsl:if> <xsl:if test="martialarts/martialart">[[#Martial Arts|Martial Arts]]<br/><br/></xsl:if> <xsl:if test="techprograms/techprogram">[[#Complex Forms|Complex Forms]]<br/><br/></xsl:if> <xsl:if test="spells/spell">[[#Spells|Spells]]<br/><br/></xsl:if> <xsl:if test="spirits/spirit"> <xsl:choose> <xsl:when test="technomancer = 'True'">[[#Sprites|Sprites]]</xsl:when> <xsl:otherwise>[[#Spirits|Spirits]]</xsl:otherwise> </xsl:choose> <br/><br/> </xsl:if> <xsl:if test="vehicles/vehicle">[[#Vehicles and Drones|Vehicles and Drones]]<br/><br/></xsl:if> <xsl:if test="lifestyles/lifestyle">[[#Lifestyles|Lifestyles]]<br/><br/></xsl:if> <xsl:if test="contacts/contact">[[#Contacts|Contacts]]<br/><br/></xsl:if> <xsl:if test="//*[issin = 'True' or contains(name, 'SIN,')]">[[#SINs|SINs]]<br/><br/></xsl:if> <xsl:if test="//*[iscommlink = 'True' or isnexus = 'True']">[[#Commlinks|Commlinks]]<br/><br/></xsl:if> <xsl:if test="weapons/weapon">[[#Weapons|Weapons]]<br/><br/></xsl:if> <xsl:if test="armors/armor">[[#Armor|Armor]]<br/><br/></xsl:if> <xsl:if test="gears/gear[iscommlink != 'True' or isnexus != 'True']">[[#Gear|Gear]]<br/><br/></xsl:if> <!--<xsl:if test="armors/armor | weapons/weapon[name != 'Unarmed Attack'] | gears/gear[not(contains(name, 'renade:'))]">[[#Equipment|Equipment]]<br/><br/></xsl:if> --> <xsl:if test="cyberwares/cyberware">[[#Augmentations|Augmentations]]<br/><br/></xsl:if> <xsl:if test="expenses/expense[type = 'Nuyen']">[[#Nuyen Expenses|Nuyen Expenses]]<br/><br/></xsl:if> <xsl:if test="expenses/expense[type = 'Karma']">[[#Karma Expenses|Karma Expenses]]<br/><br/></xsl:if> </div></div><br/><br/> </xsl:template> <xsl:template name="section.description"> <xsl:if test="description != ''"> == Description ==<br/> <p align="justify"> <xsl:call-template name="text.multiline"> <xsl:with-param name="text" select="description"/> </xsl:call-template> </p> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.background"> <xsl:if test="background != ''"> == Background ==<br/> <p align="justify"> <xsl:call-template name="text.multiline"> <xsl:with-param name="text" select="background"/> </xsl:call-template> </p> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.character"> == Character ==<br/> <div style="display:flex; flex-flow:row wrap;"> <div style="font-family:monospace; font-size:medium; padding-right:100px;"><br/> <b>Name:</b> <xsl:value-of select="name"/><br/><br/> <b>Alias(es):</b> <xsl:value-of select="alias"/><br/><br/> <b>Metatype:</b> <xsl:value-of select="metatype"/> <xsl:if test="metavariant != '' or qualities/quality[name = 'Drake'] or qualities/quality[contains(name,'Changeling')] or qualities/quality[contains(name,'Infected')]"> (<xsl:if test="qualities/quality[contains(name,'Infected')]"><xsl:value-of select="substring-after(qualities/quality[contains(name,'Infected')]/name,' ')"/><xsl:if test="qualities/quality[contains(name,'Changeling')] or metavariant != ''"> </xsl:if></xsl:if> <xsl:if test="qualities/quality[name = 'Drake']">Drake<xsl:if test="qualities/quality[contains(name,'Changeling')] or metavariant != ''"> </xsl:if></xsl:if> <xsl:if test="qualities/quality[contains(name,'Changeling')]">Changeling<xsl:if test="metavariant != ''"> </xsl:if></xsl:if> <xsl:if test="metavariant != ''"><xsl:value-of select="metavariant"/></xsl:if>) </xsl:if><br/><br/> <xsl:if test="sex != ''"><b>Sex:</b> <xsl:value-of select="sex"/><br/><br/></xsl:if> <xsl:if test="age != ''"><xsl:choose> <xsl:when test="number(age) = age"><b>Age:</b> <xsl:value-of select="age"/></xsl:when> <xsl:otherwise><b>Date of Birth:</b> <xsl:value-of select="age"/></xsl:otherwise> </xsl:choose><br/><br/></xsl:if> <xsl:if test="height != ''"><b>Height:</b> <xsl:value-of select="height"/><br/><br/></xsl:if> <xsl:if test="weight != ''"><b>Weight:</b> <xsl:value-of select="weight"/><br/><br/></xsl:if> <xsl:if test="skin != ''"><b>Skin:</b> <xsl:value-of select="skin"/><br/><br/></xsl:if> <xsl:if test="hair != ''"><b>Hair:</b> <xsl:value-of select="hair"/><br/><br/></xsl:if> <xsl:if test="eyes != ''"><b>Eyes:</b> <xsl:value-of select="eyes"/><br/><br/></xsl:if> <br/><br/> <b>Street Cred:</b> <xsl:value-of select="totalstreetcred"/><br/><br/> <b>Notoriety:</b> <xsl:value-of select="totalnotoriety"/><br/><br/> <b>Public Awareness:</b> <xsl:value-of select="totalpublicawareness"/><br/><br/> <b>Karma:</b> <xsl:value-of select="karma"/> / <xsl:value-of select="totalkarma"/><br/><br/> <b>Nuyen:</b> <xsl:value-of select="nuyen"/><br/> </div><div style="font-family:monospace; font-size:medium; padding-right:100px;"><br/> <b>BOD:</b> <xsl:value-of select="attributes/attribute[name = 'BOD']/base"/> <xsl:if test="attributes/attribute[name = 'BOD']/total != attributes/attribute[name = 'BOD']/base">(<xsl:value-of select="attributes/attribute[name = 'BOD']/total"/>) </xsl:if><br/><br/> <b>AGI:</b> <xsl:value-of select="attributes/attribute[name = 'AGI']/base"/> <xsl:if test="attributes/attribute[name = 'AGI']/total != attributes/attribute[name = 'AGI']/base">(<xsl:value-of select="attributes/attribute[name = 'AGI']/total"/>) </xsl:if><br/><br/> <b>REA:</b> <xsl:value-of select="attributes/attribute[name = 'REA']/base"/> <xsl:if test="attributes/attribute[name = 'REA']/total != attributes/attribute[name = 'REA']/base">(<xsl:value-of select="attributes/attribute[name = 'REA']/total"/>) </xsl:if><br/><br/> <b>STR:</b> <xsl:value-of select="attributes/attribute[name = 'STR']/base"/> <xsl:if test="attributes/attribute[name = 'STR']/total != attributes/attribute[name = 'STR']/base">(<xsl:value-of select="attributes/attribute[name = 'STR']/total"/>) </xsl:if><br/><br/> <b>CHA:</b> <xsl:value-of select="attributes/attribute[name = 'CHA']/base"/> <xsl:if test="attributes/attribute[name = 'CHA']/total != attributes/attribute[name = 'CHA']/base">(<xsl:value-of select="attributes/attribute[name = 'CHA']/total"/>) </xsl:if><br/><br/> <b>INT:</b> <xsl:value-of select="attributes/attribute[name = 'INT']/base"/> <xsl:if test="attributes/attribute[name = 'INT']/total != attributes/attribute[name = 'INT']/base">(<xsl:value-of select="attributes/attribute[name = 'INT']/total"/>) </xsl:if><br/><br/> <b>LOG:</b> <xsl:value-of select="attributes/attribute[name = 'LOG']/base"/> <xsl:if test="attributes/attribute[name = 'LOG']/total != attributes/attribute[name = 'LOG']/base">(<xsl:value-of select="attributes/attribute[name = 'LOG']/total"/>) </xsl:if><br/><br/> <b>WIL:</b> <xsl:value-of select="attributes/attribute[name = 'WIL']/base"/> <xsl:if test="attributes/attribute[name = 'WIL']/total != attributes/attribute[name = 'WIL']/base">(<xsl:value-of select="attributes/attribute[name = 'WIL']/total"/>) </xsl:if><br/><br/> <b>EDG:</b> <xsl:value-of select="attributes/attribute[name = 'EDG']/base"/> <xsl:if test="attributes/attribute[name = 'EDG']/total != attributes/attribute[name = 'EDG']/base">(<xsl:value-of select="attributes/attribute[name = 'EDG']/total"/>) </xsl:if><br/><br/> <xsl:if test="magenabled = 'True'"> <b>MAG:</b> <xsl:value-of select="attributes/attribute[name = 'MAG']/base"/> <xsl:if test="attributes/attribute[name = 'MAG']/total != attributes/attribute[name = 'MAG']/base">(<xsl:value-of select="attributes/attribute[name = 'MAG']/total"/>) </xsl:if><br/><br/> </xsl:if> <xsl:if test="resenabled = 'True'"> <b>RES:</b> <xsl:value-of select="attributes/attribute[name = 'RES']/base"/> <xsl:if test="attributes/attribute[name = 'RES']/total != attributes/attribute[name = 'RES']/base">(<xsl:value-of select="attributes/attribute[name = 'RES']/total"/>) </xsl:if><br/><br/> </xsl:if> </div><div style="font-family:monospace; font-size:medium;"><br/> <b>Essence:</b> <xsl:value-of select="attributes/attribute[name = 'ESS']/base"/><br/><br/> <b>Initiative / IPasses:</b> <xsl:value-of select="init/base"/> <xsl:if test="init/total != init/base">(<xsl:value-of select="init/total"/>)</xsl:if> / <xsl:value-of select="ip/base"/> <xsl:if test="ip/total != ip/base">(<xsl:value-of select="ip/total"/>)</xsl:if><br/><br/> <xsl:if test="astralip/base"> <b>Astral Initiative / IPasses:</b> <xsl:value-of select="astralinit/base"/> / <xsl:value-of select="astralip/base"/><br/><br/> </xsl:if> <xsl:if test="matrixip/base"> <b>Matrix Initiative / IPasses:</b> <xsl:value-of select="matrixinit/base"/> / <xsl:value-of select="matrixip/base"/><br/><br/> </xsl:if> <xsl:if test="magician = 'True'"><b>Resist Drain:</b> <xsl:value-of select="drain"/><br/><br/></xsl:if> <xsl:if test="technomancer = 'True'"><b>Resist Fading:</b> <xsl:choose> <xsl:when test="drain[2]"><xsl:value-of select="drain[2]"/></xsl:when> <xsl:otherwise><xsl:value-of select="drain"/></xsl:otherwise> </xsl:choose> <br/><br/> </xsl:if> <b>Memory:</b> <xsl:value-of select="memory"/><br/><br/> <b>Composure:</b> <xsl:value-of select="composure"/><br/><br/> <b>Judge Intentions:</b> <xsl:value-of select="judgeintentions"/><br/><br/> <b>Lift and Carry:</b> <xsl:value-of select="liftandcarry"/> (<xsl:value-of select="liftweight"/>kg / <xsl:value-of select="carryweight"/>kg)<br/><br/> <b>Movement:</b> walk <xsl:value-of select="movementwalk"/> <xsl:if test="movementswim != 0">, swim <xsl:value-of select="movementswim"/></xsl:if> <xsl:if test="movementfly != 0">,fly <xsl:value-of select="movementfly"/></xsl:if><br/><br/> <b>Armor:</b> ballistic <xsl:value-of select="armorb"/>, impact <xsl:value-of select="armori"/><br/><br/> <b>Physical Condition Track:</b> <xsl:value-of select="physicalcmfilled"/> / <xsl:value-of select="physicalcm"/><br/><br/> <b>Stun Condition Track:</b> <xsl:value-of select="stuncmfilled"/> / <xsl:value-of select="stuncm"/><br/> </div></div><br/><br/><br/> </xsl:template> <xsl:template name="section.actionskills"> <xsl:variable name="actions" select="skills/skill[knowledge = 'False']"/> <xsl:if test="$actions"> == Active Skills ==<br/> {| class="hover zebra sortable" style="width:100%;"<br/> |-<br/> ! width="203px" | Skill<br/> ! width="53px" | ATTR<br/> ! width="53px" | Rtg<br/> ! width="53px" | Pool<br/> ! width="78px" | Math<br/> ! width="78px" | Category<br/> ! width="128px" | Group<br/> ! Notes<br/> <xsl:for-each select="$actions"> |-<br/> | <xsl:value-of select="name"/><xsl:if test="spec != ''"> [<xsl:value-of select="spec"/>]</xsl:if><br/> | style="text-align:center;" | <xsl:value-of select="attribute"/><br/> | style="text-align:center;" | <xsl:if test="rating > 0"><xsl:value-of select="rating"/></xsl:if><br/> | style="text-align:right;" | '''<xsl:value-of select="total"/>''' || (<xsl:value-of select="attributemod"/> <xsl:choose> <xsl:when test="rating = 0">-1</xsl:when> <xsl:otherwise>+<xsl:value-of select="rating"/></xsl:otherwise> </xsl:choose> <xsl:if test="ratingmod > 0">+<xsl:value-of select="ratingmod"/></xsl:if> <xsl:if test="ratingmod < 0"><xsl:value-of select="ratingmod"/></xsl:if> <xsl:if test="poolmod > 0">+<xsl:value-of select="poolmod"/></xsl:if> <xsl:if test="poolmod < 0"><xsl:value-of select="poolmod"/></xsl:if>) || <xsl:value-of select="substring-before(skillcategory,' ')"/> || <xsl:value-of select="skillgroup"/> || <xsl:if test="contains(/characters/character/notes, concat('((', name, '|')) and contains(/characters/character/notes, '))')"><xsl:value-of select="substring-before(substring-after(/characters/character/notes, concat('((', name, '|')), '))')"/></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.knowledgeskills"> <xsl:variable name="knowledges" select="skills/skill[knowledge = 'True']"/> <!-- <xsl:variable name="knowledges" select="skills/skill[knowledge = 'True' and islanguage = 'False']"/> --> <xsl:if test="$knowledges"> == Knowledge Skills ==<br/> {| class="hover zebra sortable" style="width:100%;"<br/> |-<br/> ! width="203px" | Skill<br/> ! width="53px" | ATTR<br/> ! width="53px" | Rtg<br/> ! width="53px" | Pool<br/> ! width="78px" | Math<br/> ! width="78px" | Category<br/> ! Notes<br/> <xsl:for-each select="$knowledges"> |-<br/> | <xsl:value-of select="name"/><xsl:if test="spec != ''"> [<xsl:value-of select="spec"/>]</xsl:if><br/> | style="text-align:center;" | <xsl:value-of select="attribute"/><br/> | style="text-align:center;" | <xsl:value-of select="rating"/><br/> | style="text-align:right;" | '''<xsl:value-of select="total"/>''' || (<xsl:value-of select="attributemod"/>+<xsl:value-of select="rating"/> <xsl:if test="ratingmod > 0">+<xsl:value-of select="ratingmod"/></xsl:if> <xsl:if test="ratingmod < 0"><xsl:value-of select="ratingmod"/></xsl:if> <xsl:if test="poolmod > 0">+<xsl:value-of select="poolmod"/></xsl:if> <xsl:if test="poolmod < 0"><xsl:value-of select="poolmod"/></xsl:if>) || <xsl:value-of select="skillcategory"/> || <xsl:if test="contains(/characters/character/notes, concat('((', name, '|')) and contains(/characters/character/notes, '))')"><xsl:value-of select="substring-before(substring-after(/characters/character/notes, concat('((', name, '|')), '))')"/></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.languageskills"> <xsl:variable name="items" select="skills/skill[knowledge = 'True' and islanguage = 'True']"/> <xsl:if test="$items"> == Languages ==<br/> {| class="hover zebra sortable" style="width:100%;"<br/> |-<br/> ! width="203px" | Skill<br/> ! width="53px" | ATTR<br/> ! width="53px" | Rtg<br/> ! width="53px" | Pool<br/> ! width="78px" | Math<br/> ! width="78px" | Category<br/> ! Notes<br/> <xsl:for-each select="$items"> |-<br/> | <xsl:value-of select="name"/><xsl:if test="spec != ''"> [<xsl:value-of select="spec"/>]</xsl:if><br/> | style="text-align:center;" | <xsl:value-of select="attribute"/><br/> | style="text-align:center;" | <xsl:choose> <xsl:when test="rating > 0"><xsl:value-of select="rating"/><br/> | style="text-align:right;" | '''<xsl:value-of select="total"/>'''</xsl:when> <xsl:otherwise>N<br/> | style="text-align:right;" | '''N'''</xsl:otherwise> </xsl:choose> || <xsl:if test="rating > 0">(<xsl:value-of select="attributemod"/> <xsl:choose> <xsl:when test="rating = 0">-1</xsl:when> <xsl:otherwise>+<xsl:value-of select="rating"/></xsl:otherwise> </xsl:choose> <xsl:if test="ratingmod > 0">+<xsl:value-of select="ratingmod"/></xsl:if> <xsl:if test="ratingmod < 0"><xsl:value-of select="ratingmod"/></xsl:if> <xsl:if test="poolmod > 0">+<xsl:value-of select="poolmod"/></xsl:if> <xsl:if test="poolmod < 0"><xsl:value-of select="poolmod"/></xsl:if>) </xsl:if> || <xsl:value-of select="skillcategory"/> || <xsl:if test="contains(/characters/character/notes, concat('((', name, '|')) and contains(/characters/character/notes, '))')"><xsl:value-of select="substring-before(substring-after(/characters/character/notes, concat('((', name, '|')), '))')"/></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.attacks"> <xsl:variable name="items" select="//*/weapon"/> <xsl:if test="$items"> == Attacks ==<br/> {| class="hover zebra sortable" style="width:100%;"<br/> |-<br/> ! Name !! Type !! Range !! Pool !! DMG !! AP !! Mode !! Notes<br/> <xsl:for-each select="$items"> <xsl:sort select="concat(weaponname, name)"/> |-<br/> | <xsl:choose> <xsl:when test="weaponname != ''"><xsl:value-of select="weaponname"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> || <xsl:value-of select="type"/> || <xsl:choose> <xsl:when test="type = 'Melee'">Reach <xsl:value-of select="reach"/></xsl:when> <xsl:otherwise>Range <xsl:value-of select="ranges/short"/> / <xsl:value-of select="ranges/medium"/> / <xsl:value-of select="ranges/long"/> / <xsl:value-of select="ranges/extreme"/></xsl:otherwise> </xsl:choose> || <xsl:value-of select="dicepool"/> || <xsl:value-of select="damage"/> || <xsl:value-of select="ap"/> || <xsl:if test="mode != ''"><xsl:value-of select="mode"/></xsl:if> ||<br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.lifestyles"> <xsl:if test="lifestyles/lifestyle"> == Lifestyles ==<br/> <xsl:for-each select="lifestyles/lifestyle"> <xsl:sort select="concat(lifestylename, name)"/> <xsl:text>;<span id="</xsl:text> <xsl:choose> <xsl:when test="lifestylename != ''"><xsl:value-of select="lifestylename"/>"><xsl:value-of select="lifestylename"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/>"><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> <xsl:text></span></xsl:text> <span style="font-weight:normal; font-style:italic;"> (<xsl:choose> <xsl:when test="purchased = 'True'">permanent</xsl:when> <xsl:otherwise><xsl:value-of select="months"/> month<xsl:if test="months > 1">s</xsl:if></xsl:otherwise> </xsl:choose>)</span><br/> :<xsl:choose> <xsl:when test="not(type = 'Standard')"><xsl:value-of select="substring(comforts,1,3)"/>/<xsl:value-of select="substring(entertainment,1,3)"/>/<xsl:value-of select="substring(necessities,1,3)"/>/<xsl:value-of select="substring(neighborhood,1,3)"/>/<xsl:value-of select="substring(security,1,3)"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose>, base cost <xsl:value-of select="cost"/>/mo. <xsl:if test="qualities/quality"> <xsl:for-each select="qualities/quality"> <xsl:sort select="."/> <xsl:value-of select="normalize-space(.)"/> <xsl:choose> <xsl:when test="position() != last()">, </xsl:when> <xsl:otherwise>.</xsl:otherwise> </xsl:choose> </xsl:for-each><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.sins"> <xsl:if test="//*[issin = 'True' or contains(name, 'SIN,')]"> == SINs ==<br/> <xsl:for-each select="//*[issin = 'True' or contains(name, 'SIN,')]"> <xsl:sort select="extra"/> ;<span id="sin!<xsl:value-of select="extra"/>"> <xsl:value-of select="extra"/> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:choose> <xsl:when test="contains(name, ',')"> <xsl:value-of select="normalize-space(substring-after(name, ','))"/> <xsl:if test="rating != 0">, Rating <xsl:value-of select="rating"/></xsl:if> </xsl:when> <xsl:otherwise> <xsl:value-of select="name"/> <xsl:if test="rating != 0">, Rating <xsl:value-of select="rating"/></xsl:if> </xsl:otherwise> </xsl:choose>) </span><br/> <xsl:if test="children/gear[contains(name, 'License')]"> :<p align="justify"> Licenses: <xsl:for-each select="children/gear[contains(name, 'License')]"> <xsl:sort select="concat(gearname, name, extra)"/> <xsl:if test="qty > 1"><xsl:value-of select="qty"/>x </xsl:if> <xsl:if test="notes != ''">{{Tooltip|Text=</xsl:if> <xsl:choose> <xsl:when test="extra != ''"><xsl:value-of select="extra"/></xsl:when> <xsl:when test="gearname != ''"><xsl:value-of select="gearname"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> <xsl:if test="contains(name, 'Fake')"> (Fake, Rating <xsl:value-of select="rating"/>)</xsl:if> <xsl:if test="notes != ''">|Style=text-align:justify;|Popup=<xsl:value-of select="normalize-space(notes)"/>}}</xsl:if> <xsl:if test="children/gear"> [<xsl:for-each select="children/gear"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[not(contains(name, 'License'))]"> :<p align="justify"> Incl.: <xsl:for-each select="children/gear[not(contains(name, 'License'))]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.commlinks"> <xsl:if test="//*[iscommlink = 'True' or isnexus = 'True']"> == Commlinks ==<br/> <xsl:for-each select="//*[iscommlink = 'True' or isnexus = 'True']"> <xsl:sort select="concat(gearname, name)"/> ;<span id="comm!<xsl:value-of select="concat(gearname, name)"/>"> <xsl:choose> <xsl:when test="gearname != ''"><xsl:value-of select="gearname"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:if test="gearname != ''"><xsl:value-of select="name"/>, </xsl:if><xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> :<p align="justify"> <xsl:choose> <xsl:when test="isnexus = 'True'">Nexus:</xsl:when> <xsl:otherwise>Commlink:</xsl:otherwise> </xsl:choose> Response <xsl:value-of select="response"/>, Signal <xsl:value-of select="signal"/>, System <xsl:value-of select="system"/>, Firewall <xsl:value-of select="firewall"/>. </p><br/> <xsl:if test="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft')) and equipped = 'True']"> :<p align="justify"> Running Software: <xsl:for-each select="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft')) and equipped = 'True']"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft')) and equipped = 'False']"> :<p align="justify"> Stored Software: <xsl:for-each select="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft')) and equipped = 'False']"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[issin = 'True' or contains(name, 'SIN,')]"> :<p align="justify"> Linked SIN(s): <xsl:for-each select="children/gear[issin = 'True' or contains(name, 'SIN,')]"> <xsl:sort select="concat(gearname, name, extra)"/> <xsl:choose> <xsl:when test="contains(name, ',')"> <xsl:value-of select="substring-before(name, ',')"/> (<xsl:value-of select="normalize-space(substring-after(name, ','))"/>, <xsl:if test="rating != 0">Rating <xsl:value-of select="rating"/>,</xsl:if> </xsl:when> <xsl:otherwise> <xsl:value-of select="name"/> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>,</xsl:if> </xsl:otherwise> </xsl:choose> [[#sin!<xsl:value-of select="extra"/>|<xsl:value-of select="extra"/>]]) <xsl:if test="children/gear"> [<xsl:for-each select="children/gear"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[contains(category, 'Option')]"> :<p align="justify"> Modifications: <xsl:for-each select="children/gear[contains(category, 'Option')]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[isos = 'False' and isprogram = 'False' and issin = 'False' and not(contains(name, 'SIN,')) and not(contains(category, 'Soft')) and not(contains(category, 'Option'))]"> :<p align="justify"> Accessories: <xsl:for-each select="children/gear[isos = 'False' and isprogram = 'False' and issin = 'False' and not(contains(name, 'SIN,')) and not(contains(category, 'Soft')) and not(contains(category, 'Option'))]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.vehicles"> <xsl:if test="vehicles/vehicle"> == Vehicles and Drones ==<br/> <xsl:for-each select="vehicles/vehicle"> <xsl:sort select="concat(vehiclename, name)"/> ;<span id="<xsl:value-of select="name"/>"> <xsl:choose> <xsl:when test="vehiclename != ''"><xsl:value-of select="vehiclename"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:if test="vehiclename != ''"><xsl:value-of select="name"/>, </xsl:if><xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> :<p align="justify"> <xsl:choose> <xsl:when test="contains(name, '(')"><xsl:value-of select="substring-before(substring-after(name, '('), ')')"/>:</xsl:when> <xsl:when test="contains(category, 'Drones: ')"><xsl:value-of select="substring-after(category, ': ')"/> Drone:</xsl:when> <xsl:when test="substring(category, string-length(category)) = 's'"><xsl:value-of select="substring(category, 1, string-length(category) - 1)"/>:</xsl:when> <xsl:otherwise><xsl:value-of select="category"/>:</xsl:otherwise> </xsl:choose> Handling <xsl:value-of select="handling"/>, Acceleration <xsl:value-of select="accel"/>, Speed <xsl:value-of select="speed"/>, Body <xsl:value-of select="body"/>, Armor <xsl:value-of select="armor"/>.</p><br/> :<p align="justify"> Dogbrain: Pilot <xsl:value-of select="pilot"/>, Device <xsl:value-of select="devicerating"/>, Response <xsl:value-of select="response"/>, System <xsl:value-of select="system"/>, Signal <xsl:value-of select="signal"/>, Firewall <xsl:value-of select="firewall"/>.</p><br/> :<p align="justify"> Sensor Array: Sensor <xsl:value-of select="sensor"/>, Signal <xsl:value-of select="sensorsignal"/> <xsl:if test="gears/gear[name = 'Vehicle Sensor']/children/gear"> <xsl:text>, </xsl:text> <xsl:for-each select="gears/gear[name = 'Vehicle Sensor']/children/gear"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each> </xsl:if> <xsl:text>.</p></xsl:text><br/> <xsl:if test="mods/mod"> :<p align="justify"> Modifications: <xsl:for-each select="mods/mod"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="gears/gear[name != 'Vehicle Sensor']"> :<p align="justify"> Add. Equipment: <xsl:for-each select="gears/gear[iscommlink != 'True' and name != 'Vehicle Sensor']"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.armor"> <xsl:variable name="armor" select="armors/armor"/> <xsl:if test="$armor"> == Armor ==<br/> {| class="hover sortable" style="border-collapse:collapse; border-spacing:0px; table-layout:fixed; width:100%;"<br/> |-<br/> ! style="padding:0px;" | Name<br/> ! style="width:25%; padding:0px; text-align:left;" | Category<br/> ! style="width:25%; padding:0px; text-align:left;" | Location<br/> ! style="width:40px; padding:0px; text-align:left;" | Eq.<br/> <xsl:for-each select="$armor"> <xsl:sort select="concat(armorname, name)"/> |-<br/> | style="max-width:0; overflow:visible; | <div style="width:200%;"> <span id="<xsl:value-of select="concat(name, '!', armorname)"/>" style="font-weight:bold; font-style:normal;"> <xsl:choose> <xsl:when test="armorname != ''"><xsl:value-of select="armorname"/></xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="name = 'Custom Placeholder'"><xsl:value-of select="extra"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> <xsl:if test="(extra != '') and (name != 'Custom Placeholder')"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>)</xsl:if> <xsl:if test="qty > 1"> x<xsl:value-of select="qty"/></xsl:if> </span><span style="font-weight:normal; font-style:italic;"> (<xsl:if test="(armorname != '') or (name = 'Custom Placeholder')"><xsl:value-of select="name"/>, </xsl:if><xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> :<p align="justify">Armor: <xsl:choose> <xsl:when test="category = 'Helmets and Shields' or category = 'SecureTech PPP System'"> +<xsl:value-of select="b"/> Ballistic, +<xsl:value-of select="i"/> Impact. </xsl:when> <xsl:otherwise> <xsl:value-of select="b"/> Ballistic, <xsl:value-of select="i"/> Impact, <xsl:variable name="limit"> <xsl:choose> <xsl:when test="armormods/armormod[name = 'YNT SoftWeave']"> <xsl:value-of select="/characters/character/attributes/attribute[name = 'BOD']/total * 2 + /characters/character/attributes/attribute[name = 'STR']/total"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="/characters/character/attributes/attribute[name = 'BOD']/total * 2"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="b < $limit"> <xsl:choose> <xsl:when test="i < $limit"><xsl:value-of select="0"/></xsl:when> <xsl:otherwise><xsl:value-of select="ceiling((i - $limit) div 2)"/></xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="i < limit"><xsl:value-of select="ceiling((b - $limit) div 2)"/></xsl:when> <xsl:otherwise><xsl:value-of select="ceiling((b - $limit) div 2) + ceiling((i - $limit) div 2)"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> Encumbrance. </xsl:otherwise> </xsl:choose> </p><br/> <xsl:if test="armormods/armormod or gears/gear[contains(category, 'Enhancement')] or children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> :<p align="justify"> Modifications: <xsl:for-each select="armormods/armormod | gears/gear[contains(category, 'Enhancement')] | children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="accessories/accessory"> :<p align="justify"> Accessories: <xsl:for-each select="accessories/accessory"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="gears/gear[not(contains(category, 'Enhancement'))] or children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement'))]"> :<p align="justify"> Incl.: <xsl:for-each select="gears/gear[not(contains(category, 'Enhancement'))] | children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement')) and not(contains(category, 'Soft')) and not(contains(name, 'SIN,')) and isprogram = 'False' and isos = 'False' and issin = 'False']"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </div><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"> <xsl:value-of select="category"/></span><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"><xsl:value-of select="location"/></span><br/> | style="vertical-align:top;" | <xsl:if test="equipped = 'True'"><span style="font-weight:bold; font-style:normal;">✓</span></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.weapons"> <xsl:variable name="weapons" select="weapons/weapon[name != 'Unarmed Attack' and not(contains(category, 'Cyberware'))]"/> <xsl:if test="$weapons"> == Weapons ==<br/> {| class="hover sortable" style="border-collapse:collapse; border-spacing:0px; table-layout:fixed; width:100%;"<br/> |-<br/> ! style="padding:0px;" | Name<br/> ! style="width:25%; padding:0px; text-align:left;" | Type<br/> ! style="width:25%; padding:0px; text-align:left;" | Location<br/> ! style="width:40px; padding:0px; text-align:left;" | Eq.<br/> <xsl:for-each select="$weapons"> <xsl:sort select="concat(weaponname, name)"/> |-<br/> | style="max-width:0; overflow:visible; | <div style="width:200%;"> <span id="<xsl:value-of select="concat(name, '!', weaponname)"/>" style="font-weight:bold; font-style:normal;"> <xsl:choose> <xsl:when test="weaponname != ''"><xsl:value-of select="weaponname"/></xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="name = 'Custom Placeholder'"><xsl:value-of select="extra"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> <xsl:if test="(extra != '') and (name != 'Custom Placeholder')"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>)</xsl:if> <xsl:if test="qty > 1"> x<xsl:value-of select="qty"/></xsl:if> </span><span style="font-weight:normal; font-style:italic;"> (<xsl:if test="(weaponname != '') or (name = 'Custom Placeholder')"><xsl:value-of select="name"/>, </xsl:if><xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> :<p align="justify"><xsl:value-of select="type"/> Weapon: <xsl:choose> <xsl:when test="type = 'Melee'">Reach <xsl:value-of select="reach"/></xsl:when> <xsl:otherwise>Range <xsl:value-of select="ranges/short"/> / <xsl:value-of select="ranges/medium"/> / <xsl:value-of select="ranges/long"/> / <xsl:value-of select="ranges/extreme"/></xsl:otherwise> </xsl:choose>, Damage <xsl:value-of select="damage"/>, AP <xsl:value-of select="ap"/><xsl:if test="mode != ''">, Mode <xsl:value-of select="mode"/></xsl:if>.</p><br/> <xsl:if test="gears/gear[contains(category, 'Enhancement')] or mods/weaponmod or children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> :<p align="justify"> Modifications: <xsl:for-each select="gears/gear[contains(category, 'Enhancement')] | mods/weaponmod | children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="accessories/accessory"> :<p align="justify"> Accessories: <xsl:for-each select="accessories/accessory"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="underbarrel/weapon"> :<p align="justify"> Add. Weapons: <xsl:for-each select="underbarrel/weapon"> <xsl:sort select="concat(weaponname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="gears/gear[not(contains(category, 'Enhancement'))] or children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement'))]"> :<p align="justify"> Incl.: <xsl:for-each select="gears/gear[not(contains(category, 'Enhancement'))] | children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement'))]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </div><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"> <xsl:value-of select="category"/></span><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"><xsl:value-of select="location"/></span><br/> | style="vertical-align:top;" | <xsl:if test="equipped = 'True'"><span style="font-weight:bold; font-style:normal;">✓</span></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.gear"> <xsl:variable name="gear" select="gears/gear[not(contains(name, 'renade:')) and not(contains(name, 'SIN,')) and issin != 'True' and iscommlink != 'True']"/> <xsl:if test="$gear"> == Gear ==<br/> {| class="hover sortable" style="border-collapse:collapse; border-spacing:0px; table-layout:fixed; width:100%;"<br/> |-<br/> ! style="padding:0px;" | Name<br/> ! style="width:25%; padding:0px; text-align:left;" | Type<br/> ! style="width:25%; padding:0px; text-align:left;" | Location<br/> ! style="width:40px; padding:0px; text-align:left;" | Eq.<br/> <xsl:for-each select="$gear"> <xsl:sort select="concat(gearname, name)"/> |-<br/> | style="max-width:0; overflow:visible; | <div style="width:200%;"> <span id="<xsl:value-of select="concat(name, '!', gearname)"/>" style="font-weight:bold; font-style:normal;"> <xsl:choose> <xsl:when test="gearname != ''"><xsl:value-of select="gearname"/></xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="name = 'Custom Placeholder'"><xsl:value-of select="extra"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> <xsl:if test="(extra != '') and (name != 'Custom Placeholder')"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>)</xsl:if> <xsl:if test="qty > 1"> x<xsl:value-of select="qty"/></xsl:if> </span><span style="font-weight:normal; font-style:italic;"> (<xsl:if test="(gearname != '') or (name = 'Custom Placeholder')"><xsl:value-of select="name"/>, </xsl:if><xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:if test="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft'))]"> :<p align="justify"> Software: <xsl:for-each select="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft'))]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[issin = 'True' or contains(name, 'SIN,')]"> :<p align="justify"> Linked SIN(s): <xsl:for-each select="children/gear[issin = 'True' or contains(name, 'SIN,')]"> <xsl:sort select="concat(gearname, name, extra)"/> <xsl:choose> <xsl:when test="contains(name, ',')"> <xsl:value-of select="substring-before(name, ',')"/> (<xsl:value-of select="normalize-space(substring-after(name, ','))"/>, <xsl:if test="rating != 0">Rating <xsl:value-of select="rating"/>,</xsl:if> </xsl:when> <xsl:otherwise> <xsl:value-of select="name"/> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>,</xsl:if> </xsl:otherwise> </xsl:choose> [[#sin!<xsl:value-of select="extra"/>|<xsl:value-of select="extra"/>]]) <xsl:if test="children/gear"> [<xsl:for-each select="children/gear"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="gears/gear[contains(category, 'Enhancement')] or children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> :<p align="justify"> Modifications: <xsl:for-each select="gears/gear[contains(category, 'Enhancement')] | children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="accessories/accessory"> :<p align="justify"> Accessories: <xsl:for-each select="accessories/accessory"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="gears/gear[not(contains(category, 'Enhancement'))] or children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement')) and not(contains(category, 'Soft')) and not(contains(name, 'SIN,')) and isprogram = 'False' and isos = 'False' and issin = 'False']"> :<p align="justify"> Incl.: <xsl:for-each select="gears/gear[not(contains(category, 'Enhancement'))] | children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement')) and not(contains(category, 'Soft')) and not(contains(name, 'SIN,')) and isprogram = 'False' and isos = 'False' and issin = 'False']"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </div><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"> <xsl:value-of select="category"/></span><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"><xsl:value-of select="location"/></span><br/> | style="vertical-align:top;" | <xsl:if test="equipped = 'True'"><span style="font-weight:bold; font-style:normal;">✓</span></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.equipment"> <xsl:variable name="gear" select="armors/armor | weapons/weapon[name != 'Unarmed Attack' and not(contains(category, 'Cyberware'))] | gears/gear[not(contains(name, 'renade:')) and not(contains(name, 'SIN,')) and issin != 'True' and iscommlink != 'True']"/> <xsl:if test="$gear"> == Equipment ==<br/> {| class="hover sortable" style="border-collapse:collapse; border-spacing:0px; table-layout:fixed; width:100%;"<br/> |-<br/> ! style="padding:0px;" | Name<br/> ! style="width:25%; padding:0px; text-align:left;" | Type<br/> ! style="width:25%; padding:0px; text-align:left;" | Location<br/> ! style="width:40px; padding:0px; text-align:left;" | Eq.<br/> <xsl:for-each select="$gear"> <xsl:sort select="concat(armorname, weaponname, gearname, name)"/> |-<br/> | style="max-width:0; overflow:visible; | <div style="width:200%;"> <span id="<xsl:value-of select="concat(name, '!', armorname, weaponname, gearname)"/>" style="font-weight:bold; font-style:normal;"> <xsl:choose> <xsl:when test="concat(armorname, weaponname, gearname) != ''"><xsl:value-of select="concat(armorname, weaponname, gearname)"/></xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="name = 'Custom Placeholder'"><xsl:value-of select="extra"/></xsl:when> <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> <xsl:if test="(extra != '') and (name != 'Custom Placeholder')"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>)</xsl:if> <xsl:if test="qty > 1"> x<xsl:value-of select="qty"/></xsl:if> </span><span style="font-weight:normal; font-style:italic;"> (<xsl:if test="(concat(armorname, weaponname, gearname) != '') or (name = 'Custom Placeholder')"><xsl:value-of select="name"/>, </xsl:if><xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:choose> <xsl:when test="local-name() = 'armor'"> :<p align="justify">Armor: <xsl:choose> <xsl:when test="category = 'Helmets and Shields' or category = 'SecureTech PPP System'"> +<xsl:value-of select="b"/> Ballistic, +<xsl:value-of select="i"/> Impact. </xsl:when> <xsl:otherwise> <xsl:value-of select="b"/> Ballistic, <xsl:value-of select="i"/> Impact, <xsl:variable name="limit"> <xsl:choose> <xsl:when test="armormods/armormod[name = 'YNT SoftWeave']"> <xsl:value-of select="/characters/character/attributes/attribute[name = 'BOD']/total * 2 + /characters/character/attributes/attribute[name = 'STR']/total"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="/characters/character/attributes/attribute[name = 'BOD']/total * 2"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="b < $limit"> <xsl:choose> <xsl:when test="i < $limit"><xsl:value-of select="0"/></xsl:when> <xsl:otherwise><xsl:value-of select="ceiling((i - $limit) div 2)"/></xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="i < limit"><xsl:value-of select="ceiling((b - $limit) div 2)"/></xsl:when> <xsl:otherwise><xsl:value-of select="ceiling((b - $limit) div 2) + ceiling((i - $limit) div 2)"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> Encumbrance. </xsl:otherwise> </xsl:choose> </p><br/> </xsl:when> <xsl:when test="local-name() = 'weapon'"> :<p align="justify"><xsl:value-of select="type"/> Weapon: <xsl:choose> <xsl:when test="type = 'Melee'">Reach <xsl:value-of select="reach"/></xsl:when> <xsl:otherwise>Range <xsl:value-of select="ranges/short"/> / <xsl:value-of select="ranges/medium"/> / <xsl:value-of select="ranges/long"/> / <xsl:value-of select="ranges/extreme"/></xsl:otherwise> </xsl:choose>, Damage <xsl:value-of select="damage"/>, AP <xsl:value-of select="ap"/><xsl:if test="mode != ''">, Mode <xsl:value-of select="mode"/></xsl:if>.</p><br/> </xsl:when> <xsl:otherwise></xsl:otherwise> </xsl:choose> <xsl:if test="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft'))]"> :<p align="justify"> Software: <xsl:for-each select="children/gear[(isos = 'True' or isprogram = 'True' or contains(category, 'Soft'))]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="children/gear[issin = 'True' or contains(name, 'SIN,')]"> :<p align="justify"> Linked SIN(s): <xsl:for-each select="children/gear[issin = 'True' or contains(name, 'SIN,')]"> <xsl:sort select="concat(gearname, name, extra)"/> <xsl:choose> <xsl:when test="contains(name, ',')"> <xsl:value-of select="substring-before(name, ',')"/> (<xsl:value-of select="normalize-space(substring-after(name, ','))"/>, <xsl:if test="rating != 0">Rating <xsl:value-of select="rating"/>,</xsl:if> </xsl:when> <xsl:otherwise> <xsl:value-of select="name"/> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>,</xsl:if> </xsl:otherwise> </xsl:choose> [[#sin!<xsl:value-of select="extra"/>|<xsl:value-of select="extra"/>]]) <xsl:if test="children/gear"> [<xsl:for-each select="children/gear"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="armormods/armormod or gears/gear[contains(category, 'Enhancement')] or mods/weaponmod or children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> :<p align="justify"> Modifications: <xsl:for-each select="armormods/armormod | gears/gear[contains(category, 'Enhancement')] | mods/weaponmod | children/gear[contains(category, 'Option') or contains(category, 'Enhancement')]"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="accessories/accessory"> :<p align="justify"> Accessories: <xsl:for-each select="accessories/accessory"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="underbarrel/weapon"> :<p align="justify"> Add. Weapons: <xsl:for-each select="underbarrel/weapon"> <xsl:sort select="concat(weaponname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="gears/gear[not(contains(category, 'Enhancement'))] or children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement')) and not(contains(category, 'Soft')) and not(contains(name, 'SIN,')) and isprogram = 'False' and isos = 'False' and issin = 'False']"> :<p align="justify"> Incl.: <xsl:for-each select="gears/gear[not(contains(category, 'Enhancement'))] | children/gear[not(contains(category, 'Option')) and not(contains(category, 'Enhancement')) and not(contains(category, 'Soft')) and not(contains(name, 'SIN,')) and isprogram = 'False' and isos = 'False' and issin = 'False']"> <xsl:sort select="concat(gearname, name)"/> <xsl:call-template name="text.children"/> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </div><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"> <xsl:value-of select="concat(translate(substring(local-name(),1,1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(local-name(),2,string-length(local-name())-1))"/>, <xsl:value-of select="category"/></span><br/> | style="vertical-align:top;" | <span style="font-weight:bold; font-style:normal;"><xsl:value-of select="location"/></span><br/> | style="vertical-align:top;" | <xsl:if test="equipped = 'True'"><span style="font-weight:bold; font-style:normal;">✓</span></xsl:if><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.augmentations"> <xsl:if test="cyberwares/cyberware"> == Augmentations ==<br/> <xsl:for-each select="cyberwares/cyberware"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"><xsl:value-of select="name"/> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>)</xsl:if> (<xsl:value-of select="ess"/> Essence) </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/><br/> <xsl:if test="children/cyberware"> :<p align="justify"> <xsl:for-each select="children/cyberware"> <xsl:sort select="name"/> <xsl:call-template name="text.children"/> </xsl:for-each> .</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.martialarts"> <xsl:if test="martialarts/martialart"> == Martial Arts ==<br/> <xsl:for-each select="martialarts/martialart"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"><xsl:value-of select="name"/> <xsl:if test="rating > 0"> <xsl:value-of select="rating"/></xsl:if> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> <xsl:for-each select="martialartadvantages/martialartadvantage"> <xsl:sort select="name"/> :<xsl:value-of select="name"/><br/> </xsl:for-each> </xsl:for-each> <xsl:for-each select="martialartmaneuvers/martialartmaneuver"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"><xsl:value-of select="name"/></span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/><br/> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.qualities"> <xsl:if test="qualities/quality | critterpowers/critterpower[category = 'Weakness']"> == Qualities ==<br/> <xsl:for-each select="qualities/quality | critterpowers/critterpower[category = 'Weakness']"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"> <xsl:value-of select="name"/> <xsl:if test="(name = 'Magician' or name = 'Mystic Adept') and ../../tradition != ''"> (<xsl:value-of select="../../tradition"/>)</xsl:if> <xsl:if test="name = 'Technomancer' and not(../../stream = '' or ../../stream = 'Default')"> (<xsl:value-of select="../../stream"/>)</xsl:if> <xsl:if test="extra != ''"> (<xsl:value-of select="extra"/>)</xsl:if> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.powers"> <xsl:if test="powers/power | critterpowers/critterpower[category != 'Weakness']"> == Powers ==<br/> <xsl:for-each select="powers/power | critterpowers/critterpower[category != 'Weakness']"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"> <xsl:value-of select="name"/> <xsl:if test="rating > 0"> <xsl:value-of select="rating"/></xsl:if> <xsl:if test="extra != ''"> (<xsl:value-of select="extra"/>)</xsl:if> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.complexforms"> <xsl:if test="techprograms/techprogram"> == Complex Forms ==<br/> <xsl:for-each select="techprograms/techprogram"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"> <xsl:value-of select="name"/> <xsl:if test="rating > 0"> <xsl:value-of select="rating"/></xsl:if> <xsl:if test="extra != ''"> (<xsl:value-of select="extra"/>)</xsl:if> </span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:if test="programoptions/programoption"> :<p align="justify">Options: <xsl:for-each select="programoptions/programoption"> <xsl:sort select="name"/> <xsl:value-of select="name"/> <xsl:if test="rating > 0"><xsl:text> </xsl:text><xsl:value-of select="rating"/></xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each>.</p><br/> </xsl:if> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.spells"> <xsl:if test="spells/spell"> == Spells ==<br/> <xsl:for-each select="spells/spell"> <xsl:sort select="name"/> ;<span id="<xsl:value-of select="name"/>"> <xsl:value-of select="name"/> <xsl:if test="rating > 0"> <xsl:value-of select="rating"/></xsl:if> <xsl:if test="extra != ''"> (<xsl:value-of select="extra"/>)</xsl:if> , DV: <xsl:value-of select="dv"/></span> <span style="font-weight:normal; font-style:italic;"> (<xsl:value-of select="source"/> <xsl:value-of select="page"/>)</span><br/> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.contacts"> <xsl:if test="contacts/contact"> == Contacts ==<br/> <xsl:for-each select="contacts/contact"> <xsl:sort select="concat(type, name)"/> ;<span id="<xsl:value-of select="name"/>"> <xsl:value-of select="name"/> </span> <span style="font-weight:normal; font-style:italic;"> <xsl:choose> <xsl:when test="type = 'Contact'">(Contact, Connection <xsl:value-of select="connection"/>, Loyalty <xsl:value-of select="loyalty"/>)<br/></xsl:when> <xsl:when test="type = 'Enemy'">(Enemy, Connection <xsl:value-of select="connection"/>, Incidence <xsl:value-of select="loyalty"/>)<br/></xsl:when> <xsl:otherwise>(Pet)<br/></xsl:otherwise> </xsl:choose> </span><br/> <xsl:if test="notes != ''"> :<p align="justify"><xsl:call-template name="text.multiline"><xsl:with-param name="text" select="notes"/></xsl:call-template></p><br/> </xsl:if> </xsl:for-each> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.spirites"> <xsl:if test="spirits/spirit"> <xsl:choose> <xsl:when test="technomancer = 'True'">== Sprites ==<br/></xsl:when> <xsl:otherwise>== Spirits ==<br/></xsl:otherwise> </xsl:choose> {| class="hover zebra sortable" style="table-layout:fixed; width:100%;"<br/> |-<br/> ! width="178px" | Type<br/> ! width="178px" | Name<br/> ! width="53px" | Force<br/> ! width="53px" | Serv.<br/> ! width="53px" | <xsl:choose> <xsl:when test="technomancer = 'True'">Reg'd</xsl:when> <xsl:otherwise>Bound</xsl:otherwise> </xsl:choose><br/> ! Notes<br/> <xsl:for-each select="spirits/spirit"> <xsl:sort select="name"/> |-<br/> || <xsl:value-of select="name"/> || <xsl:value-of select="crittername"/><br/> | style="text-align:center;" | <xsl:value-of select="force"/><br/> | style="text-align:center;" | <xsl:value-of select="services"/><br/> | style="text-align:center;" | <xsl:if test="bound = 'True'">V</xsl:if> || <xsl:value-of select="notes"/><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.karma"> <xsl:if test="expenses/expense[type = 'Karma']"> == Karma Expenses ==<br/> {| class="hover zebra" cellpadding="5px" style="width:100%;"<br/> |-<br/> ! width="118px" | Date<br/> ! width="63px" | Amount<br/> ! Reason<br/> ! width="63px" | Result<br/> <xsl:for-each select="expenses/expense[type = 'Karma']"> <xsl:sort select="position()" order="descending" data-type="number"/> |-<br/> || <xsl:value-of select="date"/><br/> | style="text-align:right;" | <xsl:value-of select="amount"/> || <xsl:value-of select="reason"/><br/> | style="text-align:right;" | <xsl:value-of select="sum(following-sibling::expense[type = 'Karma']/amount)+amount"/><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="section.nuyen"> <xsl:if test="expenses/expense[type = 'Nuyen']"> == Nuyen Expenses ==<br/> {| class="hover zebra" cellpadding="5px" style="width:100%;"<br/> |-<br/> ! width="118px" | Date<br/> ! width="63px" | Amount<br/> ! Reason<br/> ! width="63px" | Result<br/> <xsl:for-each select="expenses/expense[type = 'Nuyen']"> <xsl:sort select="position()" order="descending" data-type="number"/> |-<br/> || <xsl:value-of select="date"/><br/> | style="text-align:right;" | <xsl:value-of select="amount"/> || <xsl:value-of select="reason"/><br/> | style="text-align:right;" | <xsl:value-of select="sum(following-sibling::expense[type = 'Nuyen']/amount)+amount"/><br/> </xsl:for-each> |}<br/> <br/><br/><br/> </xsl:if> </xsl:template> <xsl:template name="text.children"> <xsl:if test="qty > 1"><xsl:value-of select="qty"/>x </xsl:if> <xsl:if test="notes != ''">{{Tooltip|Text=</xsl:if> <xsl:choose> <xsl:when test="concat(weaponname, gearname) != ''"> <xsl:value-of select="concat(weaponname, gearname)"/> </xsl:when> <xsl:when test="name = 'Custom Placeholder' and extra != ''"> <xsl:value-of select="extra"/> </xsl:when> <xsl:when test="contains(name, ',')"> <xsl:value-of select="substring-before(name, ',')"/> (<xsl:value-of select="normalize-space(substring-after(name, ','))"/>) </xsl:when> <xsl:otherwise> <xsl:value-of select="name"/> </xsl:otherwise> </xsl:choose> <xsl:if test="(extra != '') and (name != 'Custom Placeholder')"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:if test="rating != 0"> (Rating <xsl:value-of select="rating"/>)</xsl:if> <xsl:if test="notes != ''">|Style=text-align:justify;|Popup=<xsl:value-of select="normalize-space(notes)"/>}}</xsl:if> <xsl:if test="./*/*/*"> <xsl:text> <span style="opacity:0.67;">[</xsl:text> <xsl:for-each select="./*/*"> <xsl:sort select="concat(weaponname, gearname, name, extra)"/> <xsl:call-template name="text.children"/> </xsl:for-each> <xsl:text>]</span></xsl:text> </xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:template> <xsl:template name="text.headers"> <xsl:param name="text"/> [[<xsl:value-of select="substring-before(substring-after($text, '[['), ']]')"/>]]<br/> <xsl:if test="contains(substring-after($text, ']]'), '[[') and contains(substring-after($text, ']]'), ']]')"> <xsl:call-template name="text.headers"> <xsl:with-param name="text"> <xsl:value-of select="substring-after($text, ']]')"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="text.list"> <xsl:value-of select="name"/> <xsl:if test="spec != ''"> [<xsl:value-of select="spec"/>]</xsl:if> <xsl:if test="extra != ''"> (<xsl:value-of select="extra"/>)</xsl:if> <xsl:choose> <xsl:when test="rating != 0"> <xsl:value-of select="rating"/></xsl:when> <xsl:when test="rating = 0 and islanguage = 'True'"> N</xsl:when> </xsl:choose> <xsl:if test="./*/*"> <xsl:text> [</xsl:text> <xsl:for-each select="./*/*"> <xsl:sort select="concat(name, spec, extra)"/> <xsl:call-template name="text.children"/> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="position() != last()">, </xsl:if> </xsl:template> <xsl:template name="text.multiline"> <xsl:param name="text"/> <xsl:choose> <xsl:when test="contains($text,' ')"> <xsl:choose> <xsl:when test="normalize-space(substring-before($text,' ')) != ''"> <xsl:value-of select="substring-before($text,' ')"/><br/> </xsl:when> <xsl:otherwise> </p><p align="justify"> </xsl:otherwise> </xsl:choose> <xsl:call-template name="text.multiline"> <xsl:with-param name="text"> <xsl:value-of select="substring-after($text,' ')"/> </xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="text.quotes"> <xsl:param name="text"/> {{Q|<xsl:value-of select="substring-before(substring-after($text, '{{Q|'), '}}')"/>}}<br/> <xsl:if test="contains(substring-after($text, '}}'), '{{Q|') and contains(substring-after($text, '}}'), '}}')"> <xsl:call-template name="text.quotes"> <xsl:with-param name="text"> <xsl:value-of select="substring-after($text, '}}')"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template> </xsl:stylesheet>