From: <edd...@us...> - 2009-07-15 03:06:09
|
Revision: 10109 http://pcgen.svn.sourceforge.net/pcgen/?rev=10109&view=rev Author: eddyanthony Date: 2009-07-15 03:06:07 +0000 (Wed, 15 Jul 2009) Log Message: ----------- 2821635 New HTML sheets for laptops for use at table Added Paths: ----------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Added: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm (rev 0) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-07-15 03:06:07 UTC (rev 10109) @@ -0,0 +1,6052 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<!-- +PCGen Character Sheet Template +============================== + +Author: Richard O'Doherty-Gregg +Email: Od...@bi... +Modifications by: arcady +Email: ar...@ya... +Revisons: Barak 10/15/02 +Email: ba...@vo... +Revisons: Roger Host 11/05/02 Added Barbarian options +Email: rh...@dl... +Revisons: Roger Host 11/xx/02 Added Defensive fighting options +Email: rh...@dl... +Revisons: Roger Host 12/30/02 Added support for non-abilities. Changed ordering of AC to Total:Flat:Touch +Email: rh...@dl... +Revisons: Roger Host 1/ 6/03 Added new spell formats. Added max skill header. + Added the companion tables. Added formatting to this HTM to make it easier + to follow the layout of the tables. +Email: rh...@dl... +Revisons: Roger Host 2/26/03 Added new style skill block to comprehensive skill listing (useable untrained flag) + Customized the turning table to fill in the values of the max HD of undead that may be turned. + Added filtering around some optional sub-tables (proficiencies, templates) + Updated weapon blocks to the new style +Email: rh...@dl... +Revision: Thomas Jannes 09/08/03 Added the stat-modifying code & Corrected EQ% to EQ.% + +Email:pc...@ch... +Revisions: Chuck Pint 05/06/04 Fixed Javascript to work with Mozilla-based browsers by changing "document.all" to "document.getElementById". + Changed all special characters (Wingdings) to UTF-8 characters + Removed depeciated "font" and changed to CSS. + Fixed Monk AC wisdom bonus with wisdom changes + Updated all CSS to have only one standard. + +Revisions: Chuck Pint 06/26/04 Fixed problems with buttons and printing. + Fixed HTML to bring up to XHTML 1.0 + +Revisions: Chuck Pint 07/04/04 Added base scores to abilities stat block + Added printout of "Notes" for equipment. + Added "FACE" to size line in header. + Changed "To Hit" to "Attack Bonus" or in some cases simply "Bonus". + +Revisions: Chuck Pint 07/06/04 Fixed spacing problem with abilities stat block + +Revisions: Chuck Pint 10/09/04 Added turn/rebuke plants + Added fix for sheets where there are less than 3 weapons + Changed checks to use correct base stat mod (.NOTEMP.NOEQUIP) +Revisions: Chuck Pint 10/17/04 Fixed modPlusMinusNone() to return "" for zero case - otherwise it returns "undefined" + +Revisions: Chuck Pint 12/04/04 Fixed minor HTML warnings, Undead turning (again!), Barbarian rage times, and Psionics. + +Revisions: Eddy Anthony 1/16/06 Converted Will check to reference array number instead of name in preperation to converting the data to use "Will" as the check name + +Revisions: Tir-Gwaith 25/10/07 Converted Barbarian away from purely 3.0, reference defined VARs in all instances. Still needs more work. + +Bugs: Money in two containers is not merged. + +Branched from csheet_fantasy_combined.htm by: Mike Elliott (satinDOTknightsATyahooDOTcom) 14/7/09 + +$Revision$ +$Author$ +$Date$ +--> + +<!-- + VERY IMPORTANT: + + The IIF, ELSE, ENDIF, FOR etc tokens cannot have whitespace in front of them + otherwise they will not process correctly! +--> +<head> +<meta http-equiv="content-type" content="text-html; charset=utf-8" /> +<title>|NAME|</title> +<style type="text/css"> +@media print{ + table#config, + td#config1, + td#config2, + td#config3, + td#removeh, + td#removea0, + td#removea1, + td#removea2, + td#removea3, + td#removea4, + td#removea5, + td#removeb0, + td#removeb1, + td#removeb2, + td#removeb3, + td#removeb4, + td#removeb5 { display:none;} +} +</style> + +<!-- + each syle type consists of the following: + first : alignment type first is hozontal, second is vertical (c=center, l=left, r=right, b=bottom, t=top, m=middle) + second : number is always the font size + third : border type (m=no border s=1pt border, b=bottom border, t=top border r=right border, l=left border, g=light gray thick border, d=thick solid border) + fourth : color changes (missing=black on white, w=white on black, g=black on light gray, l=black on light blue) + a "B" on the end is for bold fonts. + a "I" on the end is for Italic fonts. + a "U" on the end is for Underline fonts. +--> +<style type="text/css"> + body { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; margin: 0px; padding: 0px; } + td { font-family:arial; font-size:6pt; text-align:left; font-weight:normal; } + tr { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; } + table { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; } + div { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; } + span { font-family:arial; font-size:6pt; text-align:left; font-weight:normal; } + p { font-family:arial; font-size:8pt; text-align:left; color:black; background:white; font-weight:normal; } + + .l2 { font-size:2pt; text-align:left; } + + .c4 { font-size:4pt; text-align:center; } + .c4s { font-size:4pt; text-align:center; border:1px solid black; } + .c4w { font-size:4pt; text-align:center; color:white; background:black; } + .c4wB { font-size:4pt; text-align:center; color:white; background:black; font-weight:bold; } + .l4 { font-size:4pt; text-align:left; } + .l4s { font-size:4pt; text-align:left; border:1px solid black; } + .lt4s { font-size:4pt; text-align:left; vertical-align:top; border:1px solid black; } + + .b5 { font-size:5pt; text-align:center; vertical-align:bottom; } + .c5 { font-size:5pt; text-align:center; } + .c5g { font-size:5pt; text-align:center; border:5px solid #DDDDDD; } + .c5w { font-size:5pt; text-align:center; color:white; background:black; } + .c5wB { font-size:5pt; text-align:center; color:white; background:black; font-weight:bold; } + .cb5 { font-size:5pt; text-align:center; vertical-align:bottom; } + .cm5swB{ font-size:5pt; text-align:center; vertical-align:middle; color:white; background:black; border:1px solid black; font-weight:bold; } + .l5 { font-size:5pt; text-align:left; } + .l5b { font-size:5pt; text-align:left; border-bottom-width:1px; border-bottom:1pt solid black; } + .l5s { font-size:5pt; text-align:left; border:1px solid black; border-bottom-width:1px; } + .lt5 { font-size:5pt; text-align:left; vertical-align:top; } + .lt5s { font-size:5pt; text-align:left; vertical-align:top; border:1px solid black; border-bottom-width:1px; } + .r5 { font-size:5pt; text-align:right; } + .r5b { font-size:5pt; text-align:right; border-bottom-width:1px; border-bottom:1pt solid black; } + .r5s { font-size:5pt; text-align:right; border:1px solid black; border-bottom-width:1px; } + .rt5 { font-size:5pt; text-align:right; vertical-align:top; } + + .c6 { font-size:6pt; text-align:center; } + .c6s { font-size:6pt; text-align:center; border:1px solid black; } + .c6w { font-size:6pt; text-align:center; color:white; background:black; } + .c6wB { font-size:6pt; text-align:center; color:white; background:black; font-weight:bold; } + .ct6mB{ font-size:6pt; text-align:center; vertical-align:top; font-weight:bold; } + .l6 { font-size:6pt; text-align:left; } + .l6g { font-size:6pt; text-align:left; background:#DDDDDD; } + .l6s { font-size:6pt; text-align:left; border:1px solid black; } + .l6w { font-size:6pt; text-align:left; color:white; background:black; } + .lt6 { font-size:6pt; text-align:left; vertical-align:top; } + .lt6b { font-size:6pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } + .lt6s { font-size:6pt; text-align:left; vertical-align:top; border:1px solid black; } + .r6w { font-size:6pt; text-align:right; color:white; background:black; } + .t6tg { font-size:6pt; text-align:left; vertical-align:top; border-top-width:1px; border-top:1pt solid black; background:#CCCCCC; } + + .c7 { font-size:7pt; text-align:center; } + .c7mB { font-size:7pt; text-align:center; font-weight:bold; } + .c7sB { font-size:7pt; text-align:center; border:1px solid black; font-weight:bold; } + .c7w { font-size:7pt; text-align:center; color:white; background:black; } + .c7wB { font-size:7pt; text-align:center; color:white; background:black; font-weight:bold; } + .cb7 { font-size:7pt; text-align:center; vertical-align:bottom;} + .cm7 { font-size:7pt; text-align:center; vertical-align:middle; } + .cm7mB{ font-size:7pt; text-align:center; vertical-align:middle; font-weight:bold; } + .ct7 { font-size:7pt; text-align:center; vertical-align:top; } + .ct7b { font-size:7pt; text-align:center; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } + .l7 { font-size:7pt; text-align:left; } + .l7b { font-size:7pt; text-align:left; border-bottom-width:1px; border-bottom:1pt solid black; } + .l7s { font-size:7pt; text-align:left; border:1px solid black; } + // The label size is not the same as the actual element that will be affected by the hover. Truely weird hover interactions. + .l7s A:hover { font-size:9pt; text-align:left; color:red;} + .lb7 { font-size:7pt; text-align:left; vertical-align:bottom; } + .lt7 { font-size:7pt; text-align:left; vertical-align:top; } + .lt7b { font-size:7pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } + .lt7s { font-size:7pt; text-align:left; vertical-align:top; border:1px solid black; } + .l7wB { font-size:7pt; text-align:left; color:white; background:black; font-weight:bold; } + .r7 { font-size:7pt; text-align:right; } + .r7w { font-size:7pt; text-align:right; color:white; background:black; } + .rt7 { font-size:7pt; text-align:right; vertical-align:top; } + .t7s { font-size:7pt; text-align:left; vertical-align:top; border:1px solid black; } + + .c8 { font-size:8pt; text-align:center; } + .c8mB { font-size:8pt; text-align:center; font-weight:bold; } + .c8s { font-size:8pt; text-align:center; border:1px solid black; } + .c8sB { font-size:8pt; text-align:center; border:1px solid black; font-weight:bold; } + .c8sgB{ font-size:8pt; text-align:center; border:1px solid black; background:#DDDDDD; font-weight:bold; } + .c8sw { font-size:8pt; text-align:center; border:1px solid black; } + .c8swB{ font-size:8pt; text-align:center; border:1px solid black; font-weight:bold; } + .c8wB { font-size:8pt; text-align:center; color:white; background:black; font-weight:bold; } + .cb8b { font-size:8pt; text-align:center; vertical-align:bottom; border-bottom-width:1px; border-bottom:1pt solid black; } + .cb8bB{ font-size:8pt; text-align:center; vertical-align:bottom; border-bottom-width:1px; border-bottom:1pt solid black; font-weight:bold; } + .cb8mB{ font-size:8pt; text-align:center; vertical-align:bottom; font-weight:bold; } + .ct8 { font-size:8pt; text-align:center; vertical-align:top; } + .ct8mB{ font-size:8pt; text-align:center; vertical-align:top; font-weight:bold; } + .ct8s { font-size:8pt; text-align:center; vertical-align:top; border:1px solid black; } + .ct8sB{ font-size:8pt; text-align:center; vertical-align:top; border:1px solid black; font-weight:bold; } + .ct8swB{ font-size:8pt; text-align:center; vertical-align:top; border:1px solid black; color:white; background:black; font-weight:bold; } + .l8 { font-size:8pt; text-align:left; } + .l8mB { font-size:8pt; text-align:left; font-weight:bold; } + .l8s { font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; } + .l8sB { font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } + .l8swB{ font-size:8pt; text-align:left; border:1px solid black; color:white; background:black; font-weight:bold; } + .l8tgB{ font-size:8pt; text-align:left; border-top-width:1px; border-top:1pt solid black; color:black; background:#CCCCCC; font-weight:bold; } + .l8wB { font-size:8pt; text-align:left; color:white; background:black; font-weight:bold; } + .l8w { font-size:8pt; text-align:left; color:white; background:black; } + .lb8 { font-size:8pt; text-align:left; vertical-align:bottom; } + .lt8 { font-size:8pt; text-align:left; vertical-align:top; } + // The label size is not the same as the actual element that will be affected by the hover. Truely weird hover interactions. + .lt8 A:hover { font-size:9pt; text-align:left; color:red;} + .lt8mB{ font-size:8pt; text-align:left; vertical-align:top; font-weight:bold; } + .lt8s { font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; } + .lt8sB{ font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } + .r8 { font-size:8pt; text-align:right; } + .r8B { font-size:8pt; text-align:right; font-weight:bold; } + .rt8 { font-size:8pt; text-align:right; vertical-align:top; } + .rt8s { font-size:8pt; text-align:right; vertical-align:top; border:1px solid black; } + .rt8sB{ font-size:8pt; text-align:right; vertical-align:top; border:1px solid black; font-weight:bold; } + .r8wB { font-size:8pt; text-align:right; color:white; background:black; font-weight:bold; } + + .c9 { font-size:9pt; text-align:center; } + .c9g { font-size:9pt; text-align:center; background:#DDDDDD; } + .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } + .c9w { font-size:9pt; text-align:center; color:white; background:black; } + .c9s { font-size:9pt; text-align:center; border:1px solid black; } + .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; } + .c9swB{ font-size:9pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } + .c9wB { font-size:9pt; text-align:center; color:white; background:black; font-weight:bold; } + .c9pB { font-size:9pt; text-align:center; color:#88DDFF; background:black; font-weight:bold; } + .cb9s { font-size:9pt; text-align:center; vertical-align:bottom; border:1px solid black; } + .cb9sB{ font-size:9pt; text-align:center; vertical-align:bottom; border:1px solid black; font-weight:bold; } + .cm9dB{ font-size:9pt; text-align:center; vertical-align:middle; border:4px solid black; font-weight:bold; } + .cm9swB{ font-size:9pt; text-align:center; vertical-align:middle; color:white; background:black; border:1px solid black; font-weight:bold; } + .cm9sB{ font-size:9pt; text-align:center; vertical-align:middle; border:1px solid black; font-weight:bold; } + .ct9 { font-size:9pt; text-align:center; vertical-align:top; } + .ct9mU{ font-size:9pt; text-align:center; vertical-align:top; text-decoration:underline; } + .l9 { font-size:9pt; text-align:left; } + .l9 A:hover { font-size:9pt; text-align:left; color:red; } + .l9s { font-size:9pt; text-align:left; border:1px solid black; } + .l9wB { font-size:9pt; text-align:left; color:white; background:black; font-weight:bold; } + .lb9 { font-size:9pt; text-align:left; vertical-align:bottom; } + .lh9 { font-size:9pt; text-align:left; color:blue; border:1px solid white;} + .lh9 A:hover { font-size:9pt; text-align:left; color:red; } + .lt9 { font-size:9pt; text-align:left; vertical-align:top; } + .lt9b { font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } + .lt9bw{ font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; color:white; background:black; } + .lt9mB{ font-size:9pt; text-align:left; vertical-align:top; font-weight:bold; } + .r9 { font-size:9pt; text-align:right; } + .r9w { font-size:9pt; text-align:center; color:white; background:black; } + .r9wB { font-size:9pt; text-align:right; color:white; background:black; font-weight:bold; } + + .c10B { font-size:10pt; text-align:center; font-weight:bold; } + .c10gB { font-size:10pt; text-align:center; border:5px solid #DDDDDD; font-weight:bold; } + .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } + .c10mB { font-size:10pt; text-align:center; color:white; background:black; font-weight:bold; } + .c10s { font-size:10pt; text-align:center; border:1px solid black; } + .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } + .c10sl { font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; } + .c10slB{ font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; font-weight:bold; } + .c10swB{ font-size:10pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } + .c10wB { font-size:10pt; text-align:center; color:white; background:black; font-weight:bold; } + .c10B { font-size:10pt; text-align:center; font-weight:bold; } + .c10yB { font-size:10pt; text-align:center; color:#FFFF20; background:black; font-weight:bold; } + .c10yB A:hover { font-size:10pt; text-align:center; color:#20FFFF; background:black; font-weight:bold; } + .l10 { font-size:10pt; text-align:left; } + .l10wB { font-size:10pt; text-align:left; color:white; background:black; font-weight:bold; } + .l10wB A:hover { font-size:10pt; text-align:center; color:#20FFFF; background:black; font-weight:bold; } + + .l11swB{ font-size:11pt; text-align:left; border:1px solid black; color:white; background:black; font-weight:bold; } + + .c12w { font-size:12pt; text-align:center; color:white; background:black; } + .c12wB { font-size:12pt; text-align:center; color:white; background:black; font-weight:bold; } + .l12 { font-size:12pt; text-align:left; } + .l12b { font-size:12pt; text-align:left; border-bottom-width:1px; border-bottom:1pt solid black; } + .l12mB { font-size:12pt; text-align:left; font-weight:bold; } + .lb12mB { font-size:12pt; text-align:left; vertical-align:bottom; font-weight:bold; } + .r12b { font-size:12pt; text-align:right; border-bottom-width:1px; border-bottom:1pt solid black; } + + .l14 { font-size:14pt; text-align:left; } + .l14b { font-size:14pt; text-align:left; border-bottom-width:1px; border-bottom:1pt solid black; } + + .extlink {font-size:11pt; text-align:left; border:1px solid black; color:white; background:black; font-weight:bold; } + .extlink A:link {font-size:11pt; text-align:left; color:#CCCCFF; background:black; font-weight:bold; } + .extlink A:visited {font-size:11pt; text-align:left; color:#CCCCFF; background:black; font-weight:bold; } + .extlink A:hover {text-decoration: underline overline; font-size:11pt; text-align:left; color:#FFCCCC; background:black; font-weight:bold; } + .extlink A:active {text-decoration: underline overline; font-size:11pt; text-align:left; color:#FFCCFF; background:black; font-weight:bold; } + +/* - The next line is not used, but somehow activates all the other hovers in IE7 to work as expected - */ + span.hovering :hover {color:#20FFFF;} + + INPUT.statmodbutton { + COLOR:#000000; + background-color:#DDDDDD; + border:1px solid #333333; + width:15px; + FONT-FAMILY:arial, geneva; + FONT-SIZE:8px; + text-align:center; + } + INPUT.activeButton { + background-color:#DDDDFF; + } + INPUT.greyButton { + background-color:#808080; + } + .breakhere { font-size:7pt; text-align:center; page-break-before:always } + .blkgry { display:block; background:#DDDDDD; } + .blkwht { display:block; background:white; } + .nobrkg { display:block; page-break-after:avoid; background:#DDDDDD; } + .nobrkw { display:block; page-break-after:avoid; background:white; } + .header { display:block; font-size:7pt; text-align:center; } + span.notes p {margin-top:0; margin-bottom:0;} +</style> +<script language="javascript" type="text/javascript"> +// <!-- +var charName = "|NAME|"; +var RageStatus = "Normal"; +var BarbLvl = 0; +var MonkLvl = 0; +var FALSE = 0; +var TRUE = 1; +// List of abilities +var STRindex = 0; +var DEXindex = 1; +var CONindex = 2; +var INTindex = 3; +var WISindex = 4; +var CHAindex = 5; +var AbArr = new Array(); + +// Ability modifiers +var ModToStat = new Array(); +var ModToStatMod = new Array(); +// List of Potential Skill Mastery Special Abilities +var PotentialSkillMasteryList = new Array(); +// List of supported character states +var StateArr = new Array(); +// List of all weapons +var WeapArr = new Array(); +// Hardcoded Global Debug variable for now:: Show Aspect information +var ShowAspects = 0; +// List of checks +var FORTindex = 0; +var REFindex = 1; +var WILLindex = 2; +var CheckArr = new Array(); +// Attack types +var ATKArr = new Array(); +// Skills +var SkillArr = new Array(); +// Initiative +var Init = new InitObject(|INITIATIVEMOD|,|INITIATIVEBONUS|); +// Hits +var HP = new HPObject( |HP| ); +var Subdual = new SubdualObject( '0' ); +// AC object +var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,0,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Misc|); +// List of skills forbidden to a raging Barb +var SkillsRedList = new Array("Alchemy","Appraise","Craft","Decipher Script","Diplomacy","Disable Device","Disguise","Escape Artist","Forgery","Gather Information","Handle Animal","Heal","Hide","Innuendo","Intuit Direction","Knowledge","Move Silently","Open Lock","Perform","Pick Pocket","Profession","Read Lips","Scry","Search","Sense Motive","Sleight of Hand","Spellcraft","Tumble","Use Magic Device"); +// List of the supported states a char can be in. +StateArr[0] = new CharState( "Rage", BarbMods, BarbMods ); +StateArr[1] = new CharState( "DefFighting", DefensiveCombatMods, DefensiveCombatMods ); +StateArr[2] = new CharState( "SpellArmor1", SpellCombatMods, SpellCombatMods ); +StateArr[3] = new CharState( "SpellArmor2", SpellCombatMods, SpellCombatMods ); +StateArr[4] = new CharState( "SpellArmor3", SpellCombatMods, SpellCombatMods ); +StateArr[5] = new CharState( "SpellArmor4", SpellCombatMods, SpellCombatMods ); +// And the globals to hold the current values... +spell_AC_bonus = 0; +spell_Defl_bonus = 0; +spell_Nat_bonus = 0; +spell_Shield_bonus = 0; +// Set up the table of information about stats +|FOR,%stat,0,COUNT[STATS]-1,1,1| +AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat.NOTEMP|",|STAT.%stat.MOD.NOTEMP|); +//Set up stat modifier array +ModToStat[%stat] = 0; +ModToStatMod[%stat] = 0; +|ENDFOR| +// Have to define this after AbArr is denfined. +var CurHP = new CurHPObject( |HP| ); +// A class to hold the number of spells that are memorized for each spell caster class and its levels +var Memorized = new Array(); +function MemSpellsLevel(nMax, nName, nLevel) +{ + this.Name = nName; // Cleric + this.Level = nLevel; // 1 (1st level) + this.Max = nMax; // 2 (spells) + this.mem = MemSpellMem; // Mark another as prepared + this.cast = MemSpellCast; // Clear mark because it was cast + this.error = 0; // Did *Mem or *Cast fail? + this.Cur = 0; // The number of spells at this level currently prepared. +} +function MemSpellMem() +{ + if(this.Cur < this.Max) { + this.Cur = this.Cur + 1; + this.error = 0; + } else { + alert("Error: You have already memorized " + this.Cur + " " + this.Name + " spells of level " + this.Level + "."); + this.error = 1; + } +} +function MemSpellCast() +{ + if(this.Cur > 0) { + this.Cur = this.Cur - 1; + this.error = 0; + } else { + alert("Error: You have no more " + this.Name + " spells of level " + this.Level + " to cast."); + this.error = 1; + } +} + +// Set up Skill Mastery List +// TODO When count("NAME.Name(sub name)) can be utilised then we can use that as the simple check +|FOR,%ability,0,count("ABILITIES")-1,1,1| +PotentialSkillMasteryList[%ability] = new String("|ABILITY.Special Ability.%ability|"); +|ENDFOR| + +// *********************************** +// Weapons (including default unarmed) +// *********************************** +// The code below is 'interesting', the IIF and FOR statements +// _cannot_ have whitespace in front of them + +// Used when constructing ranged information to add to weapons +var RangedStuff; + +// Deal with Unarmed +WeapArr[0] = new Weapon( -1, "UNARMED", "Melee", "|WEAPONH.TOTALHIT|", "|WEAPONH.DAMAGE|", "T", "0'", "|WEAPONH.CRIT|", "|WEAPONH.MULT|", "B", "T", "" ); +WeapArr[0].setOutputFormat(2); + +// Loop through the weapons +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,1| + WeapArr[%weap+1] = new Weapon(|%weap|,"|WEAPON.%weap.NAME|","|WEAPON.%weap.CATEGORY|","|WEAPON.%weap.TOTALHIT|","|WEAPON.%weap.DAMAGE|", FirstChar("|WEAPON.%weap.HAND|"), "|WEAPON.%weap.RANGE|", "|WEAPON.%weap.CRIT|", "|WEAPON.%weap.MULT|", "|WEAPON.%weap.TYPE|", "|WEAPON.%weap.SIZE|", "|WEAPON.%weap.SPROP|" ); +|IIF(WEAPON.%weap.CATEGORY:Ranged)| + WeapArr[%weap+1].setOutputFormat(1); +|IIF(WEAPON.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.%weap.RANGELIST.%range|'", "|WEAPON.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[%weap+1].addRangedData( RangedStuff ); +|ELSE| +|FOR,%ammo,0,WEAPON.%weap.CONTENTS-1,1,0| + RangedStuff = new WeaponRangedAmmoData( "|WEAPON.%weap.CONTENTS.%ammo|", "|WEAPON.%weap.CONTENTS.%ammo.SPROP|" ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.%weap.RANGELIST.%range|'", "|WEAPON.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); +|ENDFOR| + WeapArr[%weap+1].addRangedData( RangedStuff ); +|ENDFOR| +|ENDIF| +|ELSE| +|IIF(WEAPON.%weap.ISTYPE.Double.OR.WEAPON.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.%weap.CATEGORY:NATURAL)| + WeapArr[%weap+1].setOutputFormat(2); +|ELSE| + WeapArr[%weap+1].setOutputFormat(3); + WeapArr[%weap+1].addMeleeVector("|WEAPON.%weap.BASEHIT|", "|WEAPON.%weap.OHHIT|", "|WEAPON.%weap.THHIT|", "|WEAPON.%weap.TWPHITH|", "|WEAPON.%weap.TWPHITL|", "|WEAPON.%weap.TWOHIT|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.OHDAMAGE|", "|WEAPON.%weap.THDAMAGE|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.OHDAMAGE|" ); +|ENDIF| +|ENDIF| +|ENDFOR| + +// Set up the table of information about the checks +CheckArr[FORTindex] = new Check("Fortitude", "Constitution", |CHECK.FORTITUDE.TOTAL|, |CHECK.FORTITUDE.BASE|,2,|CHECK.FORTITUDE.MAGIC|,|CHECK.FORTITUDE.EPIC|,|CHECK.FORTITUDE.MISC.NOMAGIC.NOSTAT|); +CheckArr[REFindex] = new Check("Reflex", "Dexterity", |CHECK.REFLEX.TOTAL|, |CHECK.REFLEX.BASE|,1,|CHECK.REFLEX.MAGIC|,|CHECK.REFLEX.EPIC|,|CHECK.REFLEX.MISC.NOMAGIC.NOSTAT|); +CheckArr[WILLindex] = new Check("Willpower", "Wisdom", |CHECK.2.TOTAL|, |CHECK.2.BASE|,4,|CHECK.2.MAGIC|,|CHECK.2.EPIC|,|CHECK.2.MISC.NOMAGIC.NOSTAT|); +// Set up the attack information table +ATKArr[0] = new ATK("Melee","|ATTACK.MELEE.TOTAL|","|ATTACK.MELEE|",STRindex,|ATTACK.MELEE.SIZE|,|ATTACK.MELEE.EPIC|,|ATTACK.MELEE.MISC|); +ATKArr[1] = new ATK("Ranged","|ATTACK.RANGED.TOTAL|","|ATTACK.RANGED|",DEXindex,|ATTACK.RANGED.SIZE|,|ATTACK.RANGED.EPIC|,|ATTACK.RANGED.MISC|); +ATKArr[2] = new ATK("Grapple","|ATTACK.GRAPPLE.TOTAL|","|ATTACK.GRAPPLE|",STRindex,|ATTACK.GRAPPLE.SIZE|,|ATTACK.GRAPPLE.EPIC|,|ATTACK.GRAPPLE.MISC|); +// Now, set up the list of skills +|FOR,%skill,0,COUNT[SKILLS]-1,1,1| +SkillArr[%skill] = new Skill("|SKILL.%skill|","|SKILL.%skill.ABILITY|",|SKILL.%skill.TOTAL|,|SKILL.%skill.ABMOD|,|SKILL.%skill.RANK|,|SKILL.%skill.MISC|,"|SKILL.%skill.UNTRAINED|"); +|ENDFOR| +// A variable of type Ability supports the following +// Only those marked with * should be modified after creation +// name string RW STR +// longname string RW Strength +// Base int RW base value 16 or "*" (undead or construct or whatever) +// BaseMod int?? RW base modifier 3 +// val int RW start value 16 or "*" (undead or construct or whatever) +// modifier int?? RW start modifier 3 +// *tempvalue int RW modified value 18 +// *tempmodifier int?? RW modified modifier 4 +// hasTempMod bool RO true if object is in a modified (non-default) state +// curmodifier int RO gives the current modifier taking current state into account +// curModifierDiff int RO gives the difference between tempmodifier and modifier +function Ability(nName,nLongName,nBase,nBaseMod,nValue,nMod){ + this.name = nName; + this.longname = nLongName; + this.Base = nBase; + this.BaseMod = nBaseMod; + if ( nValue == "*" ) + this.val = nValue; + else + this.val = Math.round(nValue); // Convert to numeric form + this.modifier = nMod; + if ( this.val == "*" ) + this.tempvalue = 0; + else + this.tempvalue = Math.round(nValue); + this.tempmodifier = nMod; + this.hasTempMod = AbFlag; + this.curmodifier = AbCurMod; + this.curModifierDiff = AbModDiff; +} +function AbModDiff(){ + return ((this.hasTempMod())?this.tempmodifier-this.modifier:0) +} +function AbCurMod(){ + return ((this.hasTempMod())?this.tempmodifier:this.modifier) +} +function AbFlag() +{ + if ( this.val == '*' ) + return FALSE; + return !(this.val == this.tempvalue); +} +function StatNr(stat){ + tempStatNR = -1; + switch (stat) { + case "STR" : + tempStatNR = STRindex; + break; + case "DEX" : + tempStatNR = DEXindex; + break; + case "CON" : + tempStatNR = CONindex; + break; + case "INT" : + tempStatNR = INTindex; + break; + case "WIS" : + tempStatNR = WISindex; + break; + case "CHA" : + tempStatNR = CHAindex; + break; + default : + tempStatNR = -1; + break; + } + return tempStatNR; +} +// A variable of type Check supports the following +// Only those marked with * should be modified after creation +// name string RW Fortitude +// ability string RW Constitution +// val int RO current value taking everything into account +// total int RW Total check as passed by PCGen +// base int RW Class-defined base value +// statNr int RW Which stat modfies this check (0=STR, 1=DEX, etc) +// statmodifier int RO Current modifier based on current value of the appropriate stat (via Ability class in global AbArr variable) +// magic int RW Modifier due to magic +// race int RW Modifier due to race +// miscBase int RW Base Modifier due to "other" factors subtracting magic and race and stat +// *tempmodifier int?? RW add'l modifier due to some other factor (i.e. Barb Rage) +// hasTempMod bool RO true if a tempmodifier is in effect +// statmodflag bool RO true if affected by a temporary stat modifier +function Check(nName,nAb,nValue,nBase,nStatNrForMod,nMagic,nEpic,nMisc){ + this.name = nName; + this.ability = nAb; + this.val = CheckValue; + this.total = nValue; + this.base = nBase; + this.statNr = nStatNrForMod; + this.statmodifier = CheckStatMod; + this.magic = nMagic; + this.epic = nEpic; + this.misc = nMisc; + this.tempmodifier = 0; + this.hasTempMod = CheckFlag; + this.statmodflag = CheckStatModFlag; +} +function CheckValue(){ + temp = (this.total+AbArr[this.statNr].curModifierDiff()+this.tempmodifier); + return temp; +} +function CheckStatMod(){ + return AbArr[this.statNr].curmodifier(); +} +function CheckFlag(){ + return (this.tempmodifier != 0); +} +function CheckStatModFlag(){ + return AbArr[this.statNr].hasTempMod(); +} +function rollDice(numDice, dieSize) { + var result = 0; + if(numDice == 0) + return 0; + if(dieSize == 0) + return 0; + for (dieCount=0; dieCount<numDice; dieCount++) { + result = result + (Math.round(Math.random() * dieSize) % dieSize + 1); + } + return result; +} +// roll() is not actually used, as rollIntoDiv or RollAttack have cleaner displays. +// It has been left in for incase someone needs a Roll into an Alert() popup. +function roll(numDice, dieSize, bonus, caption) { + result = rollDice(numDice, dieSize); + var totalResult = 0; + totalResult += minOne(result + bonus); + var msg = caption + '\n' + "Result"; + msg += ": " + result + processBonus( bonus) + "="+ totalResult; + alert(msg); +} +// Global: newcolorcounter cycles through pastels and is used for the background in roll divs. +newcolorcounter = 1; +function newcolor() +{ + newcolorcounter = newcolorcounter + 1; + if (newcolorcounter > 4) newcolorcounter = 0; + if (newcolorcounter == 0) colorDIV = "#FFCCFF"; + if (newcolorcounter == 1) colorDIV = "#CCFFFF"; + if (newcolorcounter == 2) colorDIV = "#FFFFCC"; + if (newcolorcounter == 3) colorDIV = "#FFCCCC"; + if (newcolorcounter == 4) colorDIV = "#CCCCFF"; + return colorDIV; +} +// numDice = Number of Dice to roll +// dieSize = obviously the size of the die +// bonus = the +2 or -1 as appropriate +// caption = Any text to precede the result of the roll +// theDIV = the id of the div to write the information into +// (theDIV)_TD = the outer encasing div that gets it's background color changed. +// justResult = 1 = just print the numeric result of the roll, not the math to get there or caption. +function rollIntoDIV(numDice, dieSize, bonus, caption, theDIV, justResult) { + result = rollDice(numDice, dieSize); + var totalResult = 0; + totalResult += minOne(result + bonus); + var msg = caption + '\n' + "Result"; + msg += ": " + result + processBonus( bonus) + "="+ totalResult; + outerTD = theDIV + "_TD"; + if (document.getElementById(theDIV) != null) { + if(justResult == 1) { + document.getElementById(theDIV).innerHTML = " " + totalResult; + if (document.getElementById(outerTD) != null) { + document.getElementById(outerTD).bgColor = newcolor(); + } + } else { + document.getElementById(theDIV).innerHTML = msg; + if (document.getElementById(outerTD) != null) { + document.getElementById(outerTD).bgColor = newcolor(); + } + } + RecordDiceRoll(msg); // record the fluffy version in the "Color Key" with a timestamp. + } +} +function RollAttack(numDice, dieSize, bonus, DAMnumDice, DAMdieSize, DAMbonus, critMin, caption, theDIV, justResult) { + var msg = caption + '\n' + "Result"; + var shortmsg = ""; + var AttackResult = 0; + var DamageResult = 0; + var swings = new Array(); + if(bonus.search(/#/) == -1) { // +14/+8/+2 comes to us as +14#+8#+2 so the function call doesn't + swings[0] = bonus; // do math on the incoming value before handing it to us. Split + } else { // the swings up if there are multiples, and process. + swings = bonus.split("#"); + } + for (x=0; x<swings.length; x++) { + if(swings[x] != "") { + result = rollDice(numDice, dieSize); + AttackResult = 0; + AttackResult += result + parseInt(swings[x]); + if(x > 0) + shortmsg +="<br />"; + shortmsg += "H: " + AttackResult; + msg += ": Attack: " + result + processBonus(parseInt(swings[x])) + "="+ AttackResult; + Damresult = rollDice(DAMnumDice, DAMdieSize); + DamageResult = 0; + DamageResult += Damresult + DAMbonus; + shortmsg = shortmsg + ", D: " + DamageResult; + msg += ", Damage: " + Damresult + processBonus(DAMbonus) + "="+ DamageResult; + if(result >= critMin) { + shortmsg = shortmsg + "<br /><span class='c8mB'>Crit Threat</span>"; + msg += ", <b>Critical Threat</b>"; + } + } + } + outerTD = theDIV + "_TD"; + if (document.getElementById(theDIV) != null) { + if(justResult == 1) { + document.getElementById(theDIV).innerHTML = " " + shortmsg; + if (document.getElementById(outerTD) != null) { + document.getElementById(outerTD).bgColor = newcolor(); + } + } else { + document.getElementById(theDIV).innerHTML = msg; + if (document.getElementById(outerTD) != null) { + document.getElementById(outerTD).bgColor = newcolor(); + } + } + RecordDiceRoll(msg); + } +} + +function processBonus(damage) +{ + if (damage >= 0) + return "+" + damage; + else + return damage; +} +function minOne(roll) +{ + if (roll <= 0) + return parseInt(1); + return roll; +} +function rollTurning(checkBonus,turnDice,turnDieSize,turnBonus,turnLvl,intoDIV,caption) { + var checkResult = rollDice(1,20) + checkBonus; + var maxHD = 0; + if (checkResult <= 0) { + maxHD = turnLvl - 4; + } else if (checkResult <= 3) { + maxHD = turnLvl - 3; + } else if (checkResult <= 6) { + maxHD = turnLvl - 2; + } else if (checkResult <= 9) { + maxHD = turnLvl - 1; + } else if (checkResult <= 12) { + maxHD = turnLvl; + } else if (checkResult <= 15) { + maxHD = turnLvl + 1; + } else if (checkResult <= 18) { + maxHD = turnLvl + 2; + } else if (checkResult <= 21) { + maxHD = turnLvl + 3; + } else { + maxHD = turnLvl + 4; + } + var totalHD = rollDice(turnDice,turnDieSize) + turnBonus; + var msg = caption; + if(maxHD < 1) + msg += "Check=" +checkResult+ ": (max " + maxHD + " HD) Failed"; + else { + msg += "Check=" +checkResult+ ": " + totalHD + " total HD<br />(max " + maxHD + " HD each)"; + if(intoDIV.substr(0,6) == "Rebuke") { + msg += " (Control " + turnLvl + " HD total)"; + } else { + if (turnLvl/2 >= 1) + msg += " (Destroy " + parseInt(turnLvl/2) + " HD)"; + } + } + document.getElementById(intoDIV).innerHTML = " " + msg; + document.getElementById(intoDIV).bgColor = newcolor(); + RecordDiceRoll(intoDIV + ' ' + msg); +} + +var SpecialAttacksList = new Array(); +function NewSpecialAttacks(sNum, sName, sDesc, sAspect) { + this.number = sNum; + this.Name = sName; + this.Description = sDesc; + this.Aspect = sAspect; +} <!-- Yes, the variables are assigned outside the function to make them global --> +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialAttack")>0)| +|FOR,%specialAttack,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SpecialAttack")-1,1,0| +SpecialAttacksList[%specialAttack] = new NewSpecialAttacks(%specialAttack, "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.DESC|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.ASPECT|"); +|ENDFOR| +|ENDIF| + +var SpecialQualitiesList = new Array(); +function NewSpecialQualities(sNum, sName, sDesc, sAspect) { + this.number = sNum; + this.Name = sName; + this.Description = sDesc; + this.Aspect = sAspect; +} <!-- Yes, the variables are assigned outside the function to make them global --> +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialQuality")>0)| +|FOR,%bar,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SpecialQuality")-1,1,0| +SpecialQualitiesList[%bar] = new NewSpecialQualities(%bar, "|ABILITYALL.Special Ability.%bar.TYPE=SpecialQuality|", "|ABILITYALL.Special Ability.%bar.TYPE=SpecialQuality.DESC|", "|ABILITYALL.Special Ability.%bar.TYPE=SpecialQuality.ASPECT|"); +|ENDFOR| +|ENDIF| + +SpecialQualitiesListCurrent = -1; +SpecialAttacksListCurrent = -1; +function ToggleLayer( whichTable, whichLayer, whichText ) { + var Telem, Tvis, Lelem, Lvis, then, now, shortThen, shortNow; + Telem = document.getElementById( whichTable ); + Tvis = Telem.style; + Lelem = document.getElementById( whichLayer ); + Lvis = Lelem.style; + // if the style.display value is blank we try to figure it out here + if(Tvis.display==''&&Telem.offsetWidth!=undefined&&Telem.offsetHeight!=undefined) + Tvis.display = (Telem.offsetWidth!=0&&Telem.offsetHeight !=0)?'block':'none'; + if(whichTable == 'SPECIAL_ATTACKS_Table') { + then = SpecialAttacksListCurrent; + SpecialAttacksListCurrent = whichText; + // It would be nice to have these special description areas actually notify the viewer + // that the mechanics have been applied in calculations, or they have not and need to + // be applied manually. This is one experimental way of notification by changing the + // background color of the div to signify that listed mechanics need to be applied + // manually, or in some cases looked up in the original books. + // Full implementation would require a large sweep through the DATA sets to mark each + // Feat/SA/SU with an appropriate marker. + // Why do this? It makes more clear if a "+5 resistance to fire" has been applied + // in the Elemental Resistances field. Or +1 CasterLevel, or +2 misc AC... + if(SpecialAttacksList[whichText].Aspect == 'UNCALC: description') { + now = "<div class='l9' style='margin:0px;padding:5px;background:#FFFF88;'><B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description + '</div>'; + } else if(SpecialAttacksList[whichText].Aspect == 'UNCALC: mechanics') { + now = "<div class='l9' style='margin:0px;padding:5px;background:#FFDDBB;'><B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description + '</div>'; + } else if(SpecialAttacksList[whichText].Aspect == 'UNCALC: both') { + now = "<div class='l9' style='margin:0px;padding:5px;background:#CCAA77;'><B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description + '</div>'; + } else { + now = "<B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description; + if(ShowAspects == 1) + now = now + "<br />" + SpecialAttacksList[whichText].Aspect ; + } + } else if(whichTable == 'SPECIAL_QUALITIES_Table') { + then = SpecialQualitiesListCurrent; + SpecialQualitiesListCurrent = whichText; + if(SpecialQualitiesList[whichText].Aspect == 'UNCALC: description') { + now = "<div class='l9' style='margin:0px;padding:5px;background:#FFFF88;'><B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description + '</div>'; + } else if(SpecialQualitiesList[whichText].Aspect == 'UNCALC: mechanics') { + now = "<div class='l9' style='margin:0px;padding:5px;background:#FFDDBB;'><B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description + '</div>'; + } else if(SpecialQualitiesList[whichText].Aspect == 'UNCALC: both') { + now = "<div class='l9' style='margin:0px;padding:5px;background:#CCAA77;'><B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description + '</div>'; + } else { + now = "<B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description; + if(ShowAspects == 1) + now = now + "<br />" + SpecialQualitiesList[whichText].Aspect ; + } + } + if(then != whichText) { + Tvis.display = 'block'; + } else if(Tvis.display == '') { + Tvis.display = 'none'; + } else if(Tvis.display == 'block') { + Tvis.display = 'none'; + } else { + Tvis.display = 'block'; + } + document.getElementById(whichLayer).innerHTML = now; +} +function ToggleDIV( whichDIV ) { + var elem, vis; + elem = document.getElementById( whichDIV ); + vis = elem.style; + if(vis.display == 'none') { + vis.display = 'inline'; + } else if(vis.display == '') { + vis.display = 'inline'; + } else if(vis.display == 'inline') { + vis.display = 'none'; + } else if(vis.display == 'block') { + vis.display = 'none'; + } else { + vis.display = 'none'; + } +} +// A variable of type ATK ("attack") supports the following +// Only those marked with * should be modified after creation +// name string RW "Melee" or "Ranged" +// AttackBonusBase string RW Total attack as passed from PCGen +// modifyAttackBonus string RO Generate the possibly modified) "Attack Bonus" string +// base string RW base attack values due to classes +// AttackBonusBaseArr string array RW base split by "/" into individual attack modifiers +// abilityNum int RW Which stat modifies this attack (0=STR, 1=DEX, etc) +// statmodifier int RO Current modifier based on current value of the appropriate stat (via Ability class in global AbArr variable) +// sizemodifier int RW Attack modifier due to size +// miscmodifier int RW Additional attack modifiers +// NEW These next two are viewer controlled now in as the Temporary Hit and Temporary Damage fields with +/- boxes. +// *miscTHMod int RW User modify TH. This is an incremental change!! e.g. If going from +2 to +4, put 2 here +// *miscDamageMod int NEW RW User modify Damage. This is an incremental change!! e.g. If going from +2 to +4, put 2 here +// isModified bool RO True if this attack is modified by a modified underlying stat or other misc change +// *disabled string RW If not empty, displays in place of "Attack Bonus" and damage. +function ATK(nName,nValue,nBase,nStatNrForMod,nSizeMod,nEpicMod,nMiscMod){ + this.name = nName; + this.AttackBonusBase = nValue; + this.modifyAttackBonus = ATKWeaponModAttackBonus; + this.base = nBase; + this.AttackBonusBaseArr = this.AttackBonusBase.split(";"); + this.abilityNum = nStatNrForMod; + this.statmodifier = ATKStatMod; + this.sizemodifier = nSizeMod; + this.epicmodifier = nEpicMod; + this.miscmodifier = nMiscMod; + this.miscTHMod = 0; + this.miscDamageMod = 0; + this.isModified = ATKFlag; + this.disabled = "" +} +function ATKStatMod() +{ + return AbArr[this.abilityNum].curmodifier(); +} +function ATKFlag() +{ + if ( this.miscTHMod != 0 ) + return TRUE; + return AbArr[this.abilityNum].hasTempMod(); +} +// A variable of type Skill supports the following +// Only those marked with * should be modified after creation +// name string RW Spot +// ability string RW Base stat for skill +// statNr int RO stat number based on .ability +// total int RO Current skill modifier based on everything +// statmodifier int RO Modifier due to current base stat modifier (as taken from AbArr global array) +// *rank int RW Current skill ranks +// *miscmodifier int RW Current misc modifier to skill +// bUseUntrained bool RW true if this skill can be used untrained +// baseStatModified bool RO true if base stat is currently modified by something else +// notInRageMode bool RO true if skill disallowed in Barb Rage +function Skill(nName,nAbility,nTotal,nStatMod,nRank,nMiscMod,nUseUntrained){ + this.name = nName; + this.ability = nAbility; + this.statNr = SkillStatModNr; + this.total = SkillValue; + this.statmodifier = SkillStatModifier; + this.rank = nRank; + this.miscmodifier = nMiscMod; + if ( nUseUntrained == 'Y' ) + this.bUseUntrained = TRUE; + else + this.bUseUntrained = FALSE; + this.baseStatModified = SkillFlag; + this.notInRageMode = checkRedList; + this.bSkillMastery = false; + // Figure out whether we have Skill Mastery for this Skill + for (var i = 0; i < PotentialSkillMasteryList.length; i++) + { + var specialAbility = PotentialSkillMasteryList[i].substring(0,13); + if (specialAbility == "Skill Mastery") + { + var lastIndex = PotentialSkillMasteryList[i].lastIndexOf(")"); + if (PotentialSkillMasteryList[i].substring(15, lastIndex) == this.name) + { + this.bSkillMastery = true; + } + } + } +} +function checkRedList() { + tempFlag = FALSE; + for (i=0;i<SkillRedList.length;i++) + { + if ( SkillRedList[i].substr(0,SkillRedList[i].length) == this.name ) + { + tempFlag = TRUE; + } + } + return tempFlag; +} +function SkillStatModNr(){ + tempStatNR = ""; + switch (this.ability) { + case "STR" : + tempStatNR = STRindex; + break; + case "DEX" : + tempStatNR = DEXindex; + break; + case "CON" : + tempStatNR = CONindex; + break; + case "INT" : + tempStatNR = INTindex; + break; + case "WIS" : + tempStatNR = WISindex; + break; + case "CHA" : + tempStatNR = CHAindex; + break; + default : + tempStatNR = -1; + break; + } + return tempStatNR; +} +function SkillStatModifier() +{ + tStatMod = this.statNr(); + if ( tStatMod == -1 ) // Some skills have no stat base (Literacy) + return 0; + else + return AbArr[tStatMod].curmodifier(); +} +function SkillValue(){ + return (this.statmodifier()+this.miscmodifier+this.rank); +} +function SkillFlag() +{ + tStatMod = this.statNr(); + if ( tStatMod == -1 ) // Some skills have no stat base (Literacy) + return 0; + else + return AbArr[tStatMod].hasTempMod(); +} +// A variable of type ACObject supports the following +// Only those marked with * should be modified after creation +// flatBase int RW Flat-footed AC +// flat int RO Modified Flat-footed AC +// flatModified bool RO TRUE if flat != flatBase +// touchBase int RW touch AC +// touch int RO Modified touch AC +// touchModified bool RO TRUE if touch != touchBase +// totalBase int RW total AC +// total int RO Modified total AC +// totalModified bool RO TRUE if total != totalBase +// base int RW Base AC +// armor int RW Armor AC modifier due to armor +// shieldBase int RW Armor AC modifier due to physical shield +// shield int RW Armor AC modifier due to shield spells or physical shield +// shieldModified bool RO TRUE if shield != shieldBase +// abilityBase int RW AC modifier due to ability +// ability int RO AC modifier due to ability as modified by appropriate stats +// abilityModified bool RO TRUE if ability != abilityBase +// size int RW Current AC modifier due to size +// naturalarmor int RW Current AC modifier due to natural armor +// miscBase int RW Unmodified AC modifier due to other affects +// misc int RO Current AC modifier due to other affects +// miscModified bool RO TRUE if misc != miscBase +// maxdex int RW Maximum dex modifier due to armor. 0 MEANS NO MAXDEX +// *rageMod int RW Current AC modifier due to rage +// *defFightMod int RW Current AC modifier due fighting defensively +// *spellACMod int RW Current Armor modifier due spell (eg. Mage Armor) +// *spellShieldMod int RW Current Shield modifier due spell (eg. Shield) +// *spellDeflMod int RW Current Deflection modifier due spell (eg. Shield of Faith) +// *spellNatMod int RW Current Natural Armor modifier due spell (eg. Barkskin) +function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nDeflection,nAbility,nSize,nNatural,nMisc) +{ + this.spellACMod = 0; + this.spellDeflMod = 0; + this.spellNatMod = 0; + this.spellShieldMod = 0; + this.flatBase = nFlat; + this.flat = ACObjFlat; + this.flatModified = ACObjFlatModified; + this.touchBase = nTouch; + this.touch = ACObjTouch; + this.touchModified = ACObjTouchModified; + this.totalBase = nTotal; + this.total = ACObjTotal; + this.totalModified = ACObjTotalModified; + this.base = nBase; + this.armorBase = nArmor; + this.armor = ACObjArmor; + this.armorModified = ACObjArmorModified; + this.shieldBase = nShield; + this.shield = ACObjShield; + this.shieldModified = ACObjShieldModified; + this.deflectionBase = nDeflection; + this.deflection = ACObjDeflection; + this.deflectionModified = ACObjDeflectionModified; + this.abilityBase = nAbility; + this.ability = ACObjAbility; + this.abilityModified = ACObjAbilityModified; + this.size = nSize; + this.naturalarmorBase = nNatural; + this.naturalarmor = ACObjNaturalArmor; + this.naturalarmorModified = ACObjNaturalArmorModified; + this.miscBase = nMisc; + this.misc = ACObjMisc; + this.miscModified = ACObjMiscModified; + this.maxdex = Math.round(|MAXDEX|+10)-10; // NOTE NOTE the MAXDEX token can be replaced by an empty string, so have to check! + this.rageMod = 0; + this.defFightMod = 0; +} +function ACObjFlat() +{ + return this.flatBase-this.armorBase+this.armor()-this.shieldBase+this.shield()-this.deflectionBase+this.deflection()-this.naturalarmorBase+this.naturalarmor()-this.abilityBase+this.ability()-this.miscBase+this.misc(); +} +function ACObjFlatModified() +{ + if ( this.flatBase == this.flat() ) + return FALSE; + else + return TRUE; +} +function ACObjTouch() +{ + return this.touchBase-this.deflectionBase+this.deflection()-this.abilityBase+this.ability()-this.miscBase+this.misc(); +} +function ACObjTouchModified() +{ + if ( this.touchBase == this.touch() ) + return FALSE; + else + return TRUE; +} +function ACObjShield() +{ + out = Math.max(this.shieldBase, this.spellShieldMod); + return out; +} +function ACObjShieldModified() +{ + if ( this.shieldBase == this.shield() ) + return FALSE; + else + return TRUE; +} +function ACObjNaturalArmor() +{ + out = Math.max(this.naturalarmorBase, this.spellNatMod); + return out; +} +function ACObjNaturalArmorModified() +{ + if ( this.naturalarmorBase == this.naturalarmor() ) + return FALSE; + else + return TRUE; +} +function ACObjDeflection() +{ + out = Math.max(this.deflectionBase, this.spellDeflMod); + return out; +} +function ACObjDeflectionModified() +{ + if ( this.deflectionBase == this.deflection() ) + return FALSE; + else + return TRUE; +} +function ACObjArmor() +{ + out = Math.max(this.armorBase, this.spellACMod); + return out; +} +function ACObjArmorModified() +{ + if ( this.armorBase == this.armor() ) + return FALSE; + else + return TRUE; +} +function ACObjTotal() +{ + return this.totalBase-this.armorBase+this.armor()-this.shieldBase+this.shield()-this.deflectionBase+this.deflection()-this.naturalarmorBase+this.naturalarmor()-this.abilityBase+this.ability()-this.miscBase+this.misc(); +} +function ACObjTotalModified() +{ + if ( this.totalBase == this.total() ) + return FALSE; + else + return TRUE; +} +function ACObjAbilityModified() +{ + if ( this.abilityBase == this.ability() ) + return FALSE; + else + return TRUE; +} +function ACObjMiscModified() +{ + if ( this.miscBase == this.misc() ) + return FALSE; + else + return TRUE; +} +// Case 1: Both normal stat (14) mod and modified stat (16) mod <= MAXDEX (6) +// NOTENOTE This is also the case when there is no MAXDEX (this.maxdex==0) NOTENOTE +// Ability = base - normal modifier + new modifier +// = 2 - 2 + 3 +// Case 2: Normal stat (16) > MAXDEX (2) but modified stat (12) <= MAXDEX +// Ability = base - MAXDEX + new modifier +// = 2 - 2 + 1 +// Case 3: Normal stat (14) <= MAXDEX(2) but modified stat (16) > MAXDEX +// Ability = base - normal modifier + MAXDEX +// = 2 - 2 + 2 +// Case 4: Both normal stat (15) mod and modified stat (16) mod > MAXDEX (2) +// Ability = base (no change really for AC purposes) +function ACObjAbility() +{ + tempAbil = this.abilityBase; + // Also need to take into account if max dex due to armor makes change moot? + if ( AbArr[DEXindex].hasTempMod() ) // Dex is modified? + { + // Will dex change affect AC? + // Case 1: + if ( this.maxdex==0 ) // These first two cases really should be ORed, but w/o a double pipe..sigh + tempAbil = tempAbil + AbArr[DEXindex].curModifierDiff(); + else if ( AbArr[DEXindex].modifier <= this.maxdex && AbArr[DEXindex].tempmodifier <= this.maxdex ) + tempAbil = tempAbil + AbArr[DEXindex].curModifierDiff(); + // Case 2: + else if ( this.maxdex>0 && AbArr[DEXindex].modifier > this.maxdex && AbArr[DEXindex].tempmodifier <= this.maxdex ) + tempAbil = tempAbil - this.maxdex + AbArr[DEXindex].tempmodifier; + // Case 3: + else if ( this.maxdex>0 && AbArr[DEXindex].modifier <= this.maxdex && AbArr[DEXindex].tempmodifier > this.maxdex ) + tempAbil = tempAbil - AbArr[DEXindex].modifier + this.maxdex; + // Case 4: + else if ( this.maxdex>0 && AbArr[DEXindex].modifier > this.maxdex && AbArr[DEXindex].tempmodifier > this.maxdex ) + tempAbil = tempAbil; + } + return tempAbil; +} +function ACObjMisc() +{ + var ACWisdom = 0; + // A change in AC due to Monk wisdom> + // is a monk? Not wearing armor? Wis is modified? + if ( MonkLvl > 0 && Math.round(|ACCHECK|) == 0 && AbArr[WISindex].hasTempMod()) + { + if (AbArr[WISindex].tempmodifier <= 0) + ACWisdom = 0 - AbArr[WISindex].modifier; + else + ACWisdom = AbArr[WISindex].curModifierDiff(); + } + return this.miscBase+this.rageMod+this.defFightMod+ACWisdom; +} + +// A variable of type CharState supports the following +// Only those marked with * should be modified after creation +// name string RW What this state is. Rage, Defencive Fighting, etc. +// isActive bool RW Is this state currently activated? +// activate int RO function to activate this state +// deactivate RO function to deactivate this state +// outputStateString string RO function to return a descriptive string +// internalState string RW Used to record information for state +function CharState( aname, activateFunc, deactivateFunc ) +{ + this.name = aname; + this.isActive = 0; + this.activate = activateFunc; + this.deactivate = deactivateFunc; + this.outputStateString = CharStateOutputStateString; + this.internalState = "" +} +function CharStateOutputStateString() +{ + return this.internalState; +} +// A variable of type InitObject supports the following +// Only those marked with * should be modified after creation +// initTotalBase int RW Total initiative unmodified +// initTotal int RO Initiative as modified by Dex changes +// initBonus int RW Other initiative bonuses +function InitObject( iBase, iBonus ) +{ + this.initTotalBase = iBase; + this.initTotal = InitObjTotal; + this.initBonus = iBonus; +} +function InitObjTotal() +{ + tempInit = this.initTotalBase; + // Add/Sub any Dex changes + if ( AbArr[DEXindex].hasTempMod() ) + tempInit = tempInit + AbArr[DEXindex].curModifierDiff(); + return tempInit; +} +// A variable of type HPObject supports the following +// Only those marked with * should be modified after creation +// HPTotalBase int RW Total HP unmodified +// HPTotal int RO HP as modified by CON changes +function HPObject( hpTot ) +{ + this.HPTotalBase = hpTot; + this.HPTotal = HPObjTotal; +} +function HPObjTotal() +{ + tempHP = this.HPTotalBase; + // Add/Sub any CON changes + if ( AbArr[CONindex].hasTempMod() ) + tempHP = tempHP + |TOTALLEVELS|*(AbArr[CONindex].curModifierDiff()); + return tempHP; +} +function CurHPObject( hpTot ) +{ + this.CurHPTotalBase = hpTot; + this.CurHPDamage = 0; + this.CurHPTotal = CurHPObjTotal; + this.CurWPTotalBase = AbArr[CONindex].val; + this.CurWPDamage = 0; + this.CurWPTotal = CurWPObjTotal; +} +function SubdualObject( hpTot ) +{ + this.TotalBase = 0; + this.Damage = 0; +} +function CurHPObjTotal() +{ + tempHP = this.CurHPTotalBase; + // Add/Sub any CON changes + if ( AbArr[CONindex].hasTempMod() ) + tempHP = tempHP + |TOTALLEVELS|*(AbArr[CONindex].curModifierDiff()); + tempHP = tempHP - this.CurHPDamage; + return tempHP; +} + +// Viewer +/- buttons control the current count of Hit Points, subdual damage, or Wound Points. +function HPPlus() +{ + CurHP.CurHPDamage = CurHP.CurHPDamage - 1; + CurHPPrint(); +} +function HPMinus() +{ + CurHP.CurHPDamage = CurHP.CurHPDamage + 1; + CurHPPrint(); +} +function CurWPObjTotal() +{ + tempWP = this.CurWPTotalBase; + // Add/Sub any CON changes + if ( AbArr[CONindex].hasTempMod() ) + tempWP = AbArr[CONindex].tempvalue; + tempWP = tempWP - this.CurWPDamage; + return tempWP; +} +function WoundPlus() +{ + CurHP.CurWPDamage = CurHP.CurWPDamage - 1; + CurHPPrint(); +} +function WoundMinus() +{ + CurHP.CurWPDamage = CurHP.CurWPDamage + 1; + CurHPPrint(); +} +// Psionic Power Points can be tracked like current Hit Points. +var CurPowerPoints = new PowerPointObject(|VAR.TOTALPOWERPOINTS.INTVAL|); +function PowerPointObject(Tot) +{ + this.TotalBase = Tot; + this.Damage = 0; +} +function PowerPointPlus() +{ + CurPowerPoints.Damage = CurPowerPoints.Damage - 1; + if(CurPowerPoints.Damage < 0) ... [truncated message content] |
From: <tir...@us...> - 2009-10-11 15:33:29
|
Revision: 10703 http://pcgen.svn.sourceforge.net/pcgen/?rev=10703&view=rev Author: tir-gwaith Date: 2009-10-11 15:33:19 +0000 (Sun, 11 Oct 2009) Log Message: ----------- Fantasy: Add Deflection bonus to AC Breakdown For csheet+FantasyGrounds.xml, I've merged the Deflection Bonus into Misc, since I don't have a way to test the output (keeping status quo there) rpgwebprofiler info pulled from their site and updated to specs. Issue#: 2876462 Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_FantasyGrounds.xml Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_rpgwebprofiler.xml Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_FantasyGrounds.xml =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_FantasyGrounds.xml 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_FantasyGrounds.xml 2009-10-11 15:33:19 UTC (rev 10703) @@ -7,7 +7,7 @@ <intvalue name="acarmorbonus">|AC.Armor|</intvalue> <intvalue name="acbasehelper">|AC.Base|</intvalue> <intvalue name="acdexbonus"></intvalue> - <intvalue name="acmiscbonus">|AC.Misc|</intvalue> + <intvalue name="acmiscbonus">|AC.Misc+AC.Deflection.INTVAL|</intvalue> <stringvalue name="acmisctitle"></stringvalue> <intvalue name="acshieldbonus">|AC.Shield|</intvalue> <intvalue name="acsizebonus">|AC.Size|</intvalue> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -55,6 +55,8 @@ Revisions: Tir-Gwaith 25/10/07 Converted Barbarian away from purely 3.0, reference defined VARs in all instances. Still needs more work. +Revisions: Tir-Gwaith 10/11/09 Breaking out Deflection from Misc AC bonus + $Revision$ $Author$ $Date$ @@ -303,7 +305,7 @@ // Hits var HP = new HPObject( |HP| ); // AC object -var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Misc|); +var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Misc|); // List of skills forbidden to a raging Barb var SkillsRedList = new Array("Alchemy","Appraise","Craft","Decipher Script","Diplomacy","Disable Device","Disguise","Escape Artist","Forgery","Gather Information","Handle Animal","Heal","Hide","Innuendo","Intuit Direction","Knowledge","Move Silently","Open Lock","Perform","Pick Pocket","Profession","Read Lips","Scry","Search","Sense Motive","Sleight of Hand","Spellcraft","Tumble","Use Magic Device"); // List of the supported states a char can be in. @@ -649,13 +651,14 @@ // abilityModified bool RO TRUE if ability != abilityBase // size int RW Current AC modifier due to size // naturalarmor int RW Current AC modifier due to natural armor +// deflection int RW Current AC modifier due to deflection // miscBase int RW Unmodified AC modifier due to other affects // misc int RO Current AC modifier due to other affects // miscModified bool RO TRUE if misc != miscBase // maxdex int RW Maximum dex modifier due to armor. 0 MEANS NO MAXDEX // *rageMod int RW Current AC modifier due to rage // *defFightMod int RW Current AC modifier due fighting defensively -function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nAbility,nSize,nNatural,nMisc) +function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nAbility,nSize,nNatural,nDeflection,nMisc) { this.flatBase = nFlat; this.flat = ACObjFlat; @@ -674,6 +677,7 @@ this.abilityModified = ACObjAbilityModified; this.size = nSize; this.naturalarmor = nNatural; + this.deflection = nDeflection; this.miscBase = nMisc; this.misc = ACObjMisc; this.miscModified = ACObjMiscModified; @@ -1035,6 +1039,7 @@ tempHTML = tempHTML+'class="c9sB">'+AC.ability()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td class="c9sB">'+AC.size+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td class="c9sB">'+AC.naturalarmor+'<\/td><td class="c7mB">+<\/td>'; + tempHTML = tempHTML+'<td class="c9sB">'+AC.deflection+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.miscModified() ) tempHTML = tempHTML+styleTag; @@ -1059,6 +1064,7 @@ tempHTML = tempHTML+'<td width="25" class="c4">STAT<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">SIZE<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">NATURAL<br />ARMOR<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25" class="c4">DEFLECTION<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISC<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISS<br />CHANCE<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">ARCANE<br />FAILURE<\/td><td><\/td>'; Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -11,6 +11,8 @@ Email: ba...@vo... Version 1.01 +Revisions: Tir-Gwaith 10/11/09 Breaking out Deflection from Misc AC bonus + $Revision$ $Author$ $Date$ @@ -265,6 +267,8 @@ <td align="center" class="font7"><b>+</b></td> <td align="center" class="border9"><b>|AC.NaturalArmor|</b></td> <td align="center" class="font7"><b>+</b></td> + <td align="center" class="border9"><b>|AC.Deflection|</b></td> + <td align="center" class="font7"><b>+</b></td> <td align="center" class="border9"><b>|AC.Misc|</b></td> <td align="center" width="5"></td> <td align="center" class="border9"><br /></td> @@ -299,6 +303,8 @@ <td align="center"></td> <td align="center" width="25" class="font4">NATURAL<br />ARMOR</td> <td align="center"></td> + <td align="center" width="25" class="font4">DEFLECTION<br />BONUS</td> + <td align="center"></td> <td align="center" width="25" class="font4">MISC<br />BONUS</td> <td align="center"></td> <td align="center" width="25" class="font4">MISS<br />CHANCE</td> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -59,6 +59,8 @@ Branched from csheet_fantasy_combined.htm by: Mike Elliott (satinDOTknightsATyahooDOTcom) 14/7/09 +Revisions: Tir-Gwaith 10/11/09 Breaking out Deflection from Misc AC bonus (in this sheet, lining up Deflection from PCGen to sheet) + $Revision$ $Author$ $Date$ @@ -355,7 +357,7 @@ var HP = new HPObject( |HP| ); var Subdual = new SubdualObject( '0' ); // AC object -var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,0,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Misc|); +var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Misc|); // List of skills forbidden to a raging Barb var SkillsRedList = new Array("Alchemy","Appraise","Craft","Decipher Script","Diplomacy","Disable Device","Disguise","Escape Artist","Forgery","Gather Information","Handle Animal","Heal","Hide","Innuendo","Intuit Direction","Knowledge","Move Silently","Open Lock","Perform","Pick Pocket","Profession","Read Lips","Scry","Search","Sense Motive","Sleight of Hand","Spellcraft","Tumble","Use Magic Device"); // List of the supported states a char can be in. @@ -1024,7 +1026,7 @@ // *spellShieldMod int RW Current Shield modifier due spell (eg. Shield) // *spellDeflMod int RW Current Deflection modifier due spell (eg. Shield of Faith) // *spellNatMod int RW Current Natural Armor modifier due spell (eg. Barkskin) -function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nDeflection,nAbility,nSize,nNatural,nMisc) +function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nAbility,nSize,nNatural,nDeflection,nMisc) { this.spellACMod = 0; this.spellDeflMod = 0; Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -59,6 +59,8 @@ Branched from csheet_fantasy_combined.htm by: Mike Elliott (satinDOTknightsATyahooDOTcom) 14/7/09 +Revisions: Tir-Gwaith 10/11/09 Breaking out Deflection from Misc AC bonus (in this sheet, lining up Deflection from PCGen to sheet) + $Revision$ $Author$ $Date$ @@ -355,7 +357,7 @@ var HP = new HPObject( |HP| ); var Subdual = new SubdualObject( '0' ); // AC object -var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,0,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Misc|); +var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Misc|); // List of skills forbidden to a raging Barb var SkillsRedList = new Array("Alchemy","Appraise","Craft","Decipher Script","Diplomacy","Disable Device","Disguise","Escape Artist","Forgery","Gather Information","Handle Animal","Heal","Hide","Innuendo","Intuit Direction","Knowledge","Move Silently","Open Lock","Perform","Pick Pocket","Profession","Read Lips","Scry","Search","Sense Motive","Sleight of Hand","Spellcraft","Tumble","Use Magic Device"); // List of the supported states a char can be in. @@ -1024,7 +1026,7 @@ // *spellShieldMod int RW Current Shield modifier due spell (eg. Shield) // *spellDeflMod int RW Current Deflection modifier due spell (eg. Shield of Faith) // *spellNatMod int RW Current Natural Armor modifier due spell (eg. Barkskin) -function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nDeflection,nAbility,nSize,nNatural,nMisc) +function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nAbility,nSize,nNatural,nDeflection,nMisc) { this.spellACMod = 0; this.spellDeflMod = 0; Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_rpgwebprofiler.xml =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_rpgwebprofiler.xml 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_rpgwebprofiler.xml 2009-10-11 15:33:19 UTC (rev 10703) @@ -46,6 +46,7 @@ <node name="ACDex">|STAT.1.MOD|</node> <node name="ACSize">|AC.Size|</node> <node name="ACNat">|AC.NaturalArmor|</node> + <node name="ACDeflect">|AC.Deflection|</node> <node name="ACMisc">|AC.Misc|</node> <node name="TouchAC">|AC.Touch|</node> <node name="FFAC">|AC.Flatfooted|</node> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -482,15 +482,25 @@ |ENDIF| |ENDMANUALWHITESPACE|<font face="ScalaSans Caps">|MANUALWHITESPACE||AC.NaturalArmor.SIGN|</font> natural |ENDIF| -|IIF(AC.Misc:0)| +|IIF(AC.Deflection:0)| |ELSE| |IIF(AC.Size:0.AND.AC.Ability:0.AND.AC.NaturalArmor:0)|    ( |ELSE| ,  |ENDIF| +|ENDMANUALWHITESPACE|<font face="ScalaSans Caps">|MANUALWHITESPACE||AC.Deflection.SIGN|</font> deflection +|ENDIF| +|IIF(AC.Misc:0)| +|ELSE| +|IIF(AC.Size:0.AND.AC.Ability:0.AND.AC.NaturalArmor.AND.AC.Deflection:0)| +    ( +|ELSE| +,  +|ENDIF| |ENDMANUALWHITESPACE|<font face="ScalaSans Caps">|MANUALWHITESPACE||AC.Misc.SIGN|</font> misc |ENDIF| + |IIF(AC.Armor:0)| |ELSE| |IIF(AC.Size:0.AND.AC.Ability:0.AND.AC.NaturalArmor:0.AND.AC.Misc:0)| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -188,6 +188,10 @@ |ELSE| |AC.NaturalArmor.SIGN| natural, |ENDIF| +|IIF(AC.Deflection:0)| +|ELSE| +|AC.Deflection.SIGN| deflection, +|ENDIF| |IIF(AC.Misc:0)| |ELSE| |AC.Misc.SIGN| misc Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm 2009-10-11 13:47:17 UTC (rev 10702) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm 2009-10-11 15:33:19 UTC (rev 10703) @@ -121,6 +121,10 @@ |ELSE| |AC.NaturalArmor.SIGN| natural, |ENDIF| +|IIF(AC.Deflection:0)| +|ELSE| +|AC.Deflection.SIGN| deflection, +|ENDIF| |IIF(AC.Misc:0)| |ELSE| |AC.Misc.SIGN| misc @@ -576,7 +580,7 @@ |IIF(VAR.IF(var("SKILLPOINTS.UNUSED")==0;1;0):1)| |ELSE| - |
From: <sat...@us...> - 2009-12-12 18:09:29
|
Revision: 11181 http://pcgen.svn.sourceforge.net/pcgen/?rev=11181&view=rev Author: satinknights Date: 2009-12-12 18:09:17 +0000 (Sat, 12 Dec 2009) Log Message: ----------- Updates for CMB/CMD, a more compact stat block mode, and many little fixes. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-12-12 15:53:52 UTC (rev 11180) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-12-12 18:09:17 UTC (rev 11181) @@ -58,9 +58,11 @@ Bugs: Money in two containers is not merged. Branched from csheet_fantasy_combined.htm by: Mike Elliott (satinDOTknightsATyahooDOTcom) 14/7/09 - + Revisions: Tir-Gwaith 10/11/09 Breaking out Deflection from Misc AC bonus (in this sheet, lining up Deflection from PCGen to sheet) +Revisions: Mike Elliott 12/12/09 Updated to include CMB/CMD, added Compact Stats mode and many minor fixes. + $Revision$ $Author$ $Date$ @@ -108,13 +110,13 @@ a "U" on the end is for Underline fonts. --> <style type="text/css"> - body { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; margin: 0px; padding: 0px; } + body { font-family:arial; font-size:6pt; text-align:left; color:black; background:#F4EAA4; font-weight:normal; margin: 0px; padding: 0px; } td { font-family:arial; font-size:6pt; text-align:left; font-weight:normal; } - tr { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; } - table { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; } - div { font-family:arial; font-size:6pt; text-align:left; color:black; background:white; font-weight:normal; } + tr { font-family:arial; font-size:6pt; text-align:left; color:black; background:#F4EAA4; font-weight:normal; } + table { font-family:arial; font-size:6pt; text-align:left; color:black; background:#F4EAA4; font-weight:normal; } + div { font-family:arial; font-size:6pt; text-align:left; color:black; background:#F4EAA4; font-weight:normal; } span { font-family:arial; font-size:6pt; text-align:left; font-weight:normal; } - p { font-family:arial; font-size:8pt; text-align:left; color:black; background:white; font-weight:normal; } + p { font-family:arial; font-size:8pt; text-align:left; color:black; background:#F4EAA4; font-weight:normal; } .l2 { font-size:2pt; text-align:left; } @@ -171,7 +173,6 @@ .l7 { font-size:7pt; text-align:left; } .l7b { font-size:7pt; text-align:left; border-bottom-width:1px; border-bottom:1pt solid black; } .l7s { font-size:7pt; text-align:left; border:1px solid black; } - // The label size is not the same as the actual element that will be affected by the hover. Truely weird hover interactions. .l7s A:hover { font-size:9pt; text-align:left; color:red;} .lb7 { font-size:7pt; text-align:left; vertical-align:bottom; } .lt7 { font-size:7pt; text-align:left; vertical-align:top; } @@ -209,7 +210,6 @@ .l8w { font-size:8pt; text-align:left; color:white; background:black; } .lb8 { font-size:8pt; text-align:left; vertical-align:bottom; } .lt8 { font-size:8pt; text-align:left; vertical-align:top; } - // The label size is not the same as the actual element that will be affected by the hover. Truely weird hover interactions. .lt8 A:hover { font-size:9pt; text-align:left; color:red;} .lt8mB{ font-size:8pt; text-align:left; vertical-align:top; font-weight:bold; } .lt8s { font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; } @@ -226,7 +226,7 @@ .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } .c9w { font-size:9pt; text-align:center; color:white; background:black; } .c9s { font-size:9pt; text-align:center; border:1px solid black; } - .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; } + .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } .c9swB{ font-size:9pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } .c9wB { font-size:9pt; text-align:center; color:white; background:black; font-weight:bold; } .c9pB { font-size:9pt; text-align:center; color:#88DDFF; background:black; font-weight:bold; } @@ -242,8 +242,8 @@ .l9s { font-size:9pt; text-align:left; border:1px solid black; } .l9wB { font-size:9pt; text-align:left; color:white; background:black; font-weight:bold; } .lb9 { font-size:9pt; text-align:left; vertical-align:bottom; } - .lh9 { font-size:9pt; text-align:left; color:blue; border:1px solid white;} - .lh9 A:hover { font-size:9pt; text-align:left; color:red; } + .lh9 { font-size:9pt; text-align:left; color:green; font-weight:bold; } + .lh9 A:hover { font-size:9pt; text-align:left; color:red; font-weight:bold; } .lt9 { font-size:9pt; text-align:left; vertical-align:top; } .lt9b { font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } .lt9bw{ font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; color:white; background:black; } @@ -257,7 +257,7 @@ .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } .c10mB { font-size:10pt; text-align:center; color:white; background:black; font-weight:bold; } .c10s { font-size:10pt; text-align:center; border:1px solid black; } - .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } + .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } .c10sl { font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; } .c10slB{ font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; font-weight:bold; } .c10swB{ font-size:10pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } @@ -278,8 +278,10 @@ .l12mB { font-size:12pt; text-align:left; font-weight:bold; } .lb12mB { font-size:12pt; text-align:left; vertical-align:bottom; font-weight:bold; } .r12b { font-size:12pt; text-align:right; border-bottom-width:1px; border-bottom:1pt solid black; } + .r12mB { font-size:12pt; text-align:right; font-weight:bold; } .l14 { font-size:14pt; text-align:left; } + .l14B { font-size:14pt; text-align:left; font-weight:bold; } .l14b { font-size:14pt; text-align:left; border-bottom-width:1px; border-bottom:1pt solid black; } .extlink {font-size:11pt; text-align:left; border:1px solid black; color:white; background:black; font-weight:bold; } @@ -317,6 +319,7 @@ <script language="javascript" type="text/javascript"> // <!-- var charName = "|NAME|"; +var fileName = encodeURIComponent("|NAME|"); var RageStatus = "Normal"; var BarbLvl = 0; var MonkLvl = 0; @@ -329,6 +332,8 @@ var INTindex = 3; var WISindex = 4; var CHAindex = 5; +// A special case where both STR and DEX are checked. +var STRDEXindex = 6; var AbArr = new Array(); // Ability modifiers @@ -340,7 +345,7 @@ var StateArr = new Array(); // List of all weapons var WeapArr = new Array(); -// Hardcoded Global Debug variable for now:: Show Aspect information +// Hardcoded Global Debug variable for now: Show Aspect information var ShowAspects = 0; // List of checks var FORTindex = 0; @@ -374,11 +379,15 @@ spell_Shield_bonus = 0; // Set up the table of information about stats |FOR,%stat,0,COUNT[STATS]-1,1,1| -AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat.NOTEMP|",|STAT.%stat.MOD.NOTEMP|); -//Set up stat modifier array -ModToStat[%stat] = 0; -ModToStatMod[%stat] = 0; + AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat.NOTEMP|",|STAT.%stat.MOD.NOTEMP|,TRUE,%stat); + //Set up stat modifier array + ModToStat[%stat] = 0; + ModToStatMod[%stat] = 0; |ENDFOR| +// Some of these are bad values, but they are not going to be processed. This is a hidden STAT that will combine STR and DEX bonuses. +AbArr[STRDEXindex] = new Ability("STRDEX","STR and DEX combined","|STAT.0.NOTEMP.NOEQUIP|",|STAT.0.MOD.NOTEMP.NOEQUIP|,"|STAT.0.NOTEMP|",|STAT.0.MOD.NOTEMP|, FALSE,STRDEXindex); +ModToStat[STRDEXindex] = 0; +ModToStatMod[STRDEXindex] = 0; // Have to define this after AbArr is denfined. var CurHP = new CurHPObject( |HP| ); // A class to hold the number of spells that are memorized for each spell caster class and its levels @@ -417,7 +426,7 @@ // Set up Skill Mastery List // TODO When count("NAME.Name(sub name)) can be utilised then we can use that as the simple check |FOR,%ability,0,count("ABILITIES")-1,1,1| -PotentialSkillMasteryList[%ability] = new String("|ABILITY.Special Ability.%ability|"); + PotentialSkillMasteryList[%ability] = new String("|ABILITY.Special Ability.%ability|"); |ENDFOR| // *********************************** @@ -470,7 +479,14 @@ // Set up the attack information table ATKArr[0] = new ATK("Melee","|ATTACK.MELEE.TOTAL|","|ATTACK.MELEE|",STRindex,|ATTACK.MELEE.SIZE|,|ATTACK.MELEE.EPIC|,|ATTACK.MELEE.MISC|); ATKArr[1] = new ATK("Ranged","|ATTACK.RANGED.TOTAL|","|ATTACK.RANGED|",DEXindex,|ATTACK.RANGED.SIZE|,|ATTACK.RANGED.EPIC|,|ATTACK.RANGED.MISC|); +|IIF(VAR.UseCombatManueverBonus:1)| +CMB_Pos = 2; +ATKArr[2] = new ATK("CMB","|VAR.CMB.INTVAL.SIGN|","|ATTACK.MELEE.BASE|",STRindex,|VAR.CMB_SizeMod.INTVAL.SIGN|,|VAR.CMB_Epic.INTVAL.SIGN|,|VAR.CMB_Misc.INTVAL.SIGN|); +CMD_Pos = 3; +ATKArr[3] = new ATK("CMD","|VAR.CMD.INTVAL.SIGN|","|ATTACK.MELEE.BASE|",STRDEXindex,|VAR.CMD_SizeMod.INTVAL.SIGN|,|VAR.CMD_Epic.INTVAL.SIGN|,|VAR.CMD_Misc.INTVAL.SIGN|); +|ELSE| ATKArr[2] = new ATK("Grapple","|ATTACK.GRAPPLE.TOTAL|","|ATTACK.GRAPPLE|",STRindex,|ATTACK.GRAPPLE.SIZE|,|ATTACK.GRAPPLE.EPIC|,|ATTACK.GRAPPLE.MISC|); +|ENDIF| // Now, set up the list of skills |FOR,%skill,0,COUNT[SKILLS]-1,1,1| SkillArr[%skill] = new Skill("|SKILL.%skill|","|SKILL.%skill.ABILITY|",|SKILL.%skill.TOTAL|,|SKILL.%skill.ABMOD|,|SKILL.%skill.RANK|,|SKILL.%skill.MISC|,"|SKILL.%skill.UNTRAINED|"); @@ -488,35 +504,66 @@ // hasTempMod bool RO true if object is in a modified (non-default) state // curmodifier int RO gives the current modifier taking current state into account // curModifierDiff int RO gives the difference between tempmodifier and modifier -function Ability(nName,nLongName,nBase,nBaseMod,nValue,nMod){ +// visible bool RO is this stat visible in the statblock output +// indexNum int RO Which stat index is this? If STRDEX, we compute total from STR and DEX. +function Ability(nName,nLongName,nBase,nBaseMod,nValue,nMod,nVisible,nIndex){ this.name = nName; this.longname = nLongName; + this.indexNum = nIndex; this.Base = nBase; this.BaseMod = nBaseMod; + if ( nIndex == STRDEXindex) { + this.BaseMod = AbArr[STRindex].BaseMod + AbArr[DEXindex].BaseMod; + } + this.visible = nVisible; if ( nValue == "*" ) this.val = nValue; else this.val = Math.round(nValue); // Convert to numeric form this.modifier = nMod; + if ( nIndex == STRDEXindex) { + this.modifier = AbArr[STRindex].modifier + AbArr[DEXindex].modifier; + } if ( this.val == "*" ) this.tempvalue = 0; else this.tempvalue = Math.round(nValue); this.tempmodifier = nMod; + if ( nIndex == STRDEXindex) { + this.tempmodifier = AbArr[STRindex].tempmodifier + AbArr[DEXindex].tempmodifier; + } this.hasTempMod = AbFlag; this.curmodifier = AbCurMod; this.curModifierDiff = AbModDiff; } function AbModDiff(){ + if(this.indexNum == STRDEXindex) { + if (this.hasTempMod() == FALSE) + return 0; + rc = Math.round(AbArr[STRindex].tempmodifier) - Math.round(AbArr[STRindex].modifier) + Math.round(AbArr[DEXindex].tempmodifier) - Math.round(AbArr[DEXindex].modifier); + return rc; + } return ((this.hasTempMod())?this.tempmodifier-this.modifier:0) } function AbCurMod(){ + if(this.indexNum == STRDEXindex) { + if (this.hasTempMod() == FALSE) + rc = AbArr[STRindex].modifier + AbArr[DEXindex].modifier; + else + rc = AbArr[STRindex].tempmodifier + AbArr[DEXindex].tempmodifer; + return rc; + } return ((this.hasTempMod())?this.tempmodifier:this.modifier) } -function AbFlag() -{ +function AbFlag(){ if ( this.val == '*' ) return FALSE; + if ( this.indexNum == STRDEXindex ) { + if (AbArr[STRindex].val != AbArr[STRindex].tempval) + return TRUE; + if (AbArr[DEXindex].val != AbArr[DEXindex].tempval) + return TRUE; + } return !(this.val == this.tempvalue); } function StatNr(stat){ @@ -589,7 +636,7 @@ function CheckStatModFlag(){ return AbArr[this.statNr].hasTempMod(); } -function rollDice(numDice, dieSize) { +function rollDice(numDice, dieSize){ var result = 0; if(numDice == 0) return 0; @@ -600,9 +647,9 @@ } return result; } -// roll() is not actually used, as rollIntoDiv or RollAttack have cleaner displays. +// roll() is not actually used, as rollIntoDIV or RollAttack have cleaner displays. // It has been left in for incase someone needs a Roll into an Alert() popup. -function roll(numDice, dieSize, bonus, caption) { +function roll(numDice, dieSize, bonus, caption){ result = rollDice(numDice, dieSize); var totalResult = 0; totalResult += minOne(result + bonus); @@ -612,15 +659,15 @@ } // Global: newcolorcounter cycles through pastels and is used for the background in roll divs. newcolorcounter = 1; -function newcolor() -{ +function newcolor(){ newcolorcounter = newcolorcounter + 1; - if (newcolorcounter > 4) newcolorcounter = 0; + if (newcolorcounter > 5) newcolorcounter = 0; if (newcolorcounter == 0) colorDIV = "#FFCCFF"; if (newcolorcounter == 1) colorDIV = "#CCFFFF"; if (newcolorcounter == 2) colorDIV = "#FFFFCC"; if (newcolorcounter == 3) colorDIV = "#FFCCCC"; if (newcolorcounter == 4) colorDIV = "#CCCCFF"; + if (newcolorcounter == 5) colorDIV = "#CCFFCC"; return colorDIV; } // numDice = Number of Dice to roll @@ -649,8 +696,24 @@ document.getElementById(outerTD).bgColor = newcolor(); } } + } + // We need to write the results to two divs occasionally. The second has "C" appended to the name. + outerTD = theDIV + "_TD_SND"; + SndDIV = theDIV + "_SND"; + if (document.getElementById(SndDIV) != null) { + if(justResult == 1) { + document.getElementById(SndDIV).innerHTML = " " + totalResult; + if (document.getElementById(outerTD) != null) { + document.getElementById(outerTD).bgColor = newcolor(); + } + } else { + document.getElementById(SndDIV).innerHTML = msg; + if (document.getElementById(outerTD) != null) { + document.getElementById(outerTD).bgColor = newcolor(); + } + } + } RecordDiceRoll(msg); // record the fluffy version in the "Color Key" with a timestamp. - } } function RollAttack(numDice, dieSize, bonus, DAMnumDice, DAMdieSize, DAMbonus, critMin, caption, theDIV, justResult) { var msg = caption + '\n' + "Result"; @@ -754,28 +817,46 @@ } var SpecialAttacksList = new Array(); -function NewSpecialAttacks(sNum, sName, sDesc, sAspect) { +function NewSpecialAttacks(sNum, sName, sDesc, sAspect, sBenefit) { this.number = sNum; this.Name = sName; this.Description = sDesc; this.Aspect = sAspect; + this.showAspect = 0; + if (sAspect.length > 0) + this.showAspect = 1; + this.Benefit = sBenefit; + if(sBenefit.length > sDesc.length) { + this.Description = sBenefit; + } } <!-- Yes, the variables are assigned outside the function to make them global --> |IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialAttack")>0)| |FOR,%specialAttack,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SpecialAttack")-1,1,0| -SpecialAttacksList[%specialAttack] = new NewSpecialAttacks(%specialAttack, "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.DESC|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.ASPECT|"); +SpecialAttacksList[%specialAttack] = new NewSpecialAttacks(%specialAttack, "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.DESC|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.ASPECT|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.BENEFIT|"); |ENDFOR| |ENDIF| var SpecialQualitiesList = new Array(); -function NewSpecialQualities(sNum, sName, sDesc, sAspect) { +function NewSpecialQualities(sNum, sName, sDesc, sAspect, sBenefit) { this.number = sNum; this.Name = sName; this.Description = sDesc; this.Aspect = sAspect; + this.showAspect = 0; + if (sAspect.length > 0) + this.showAspect = 1; + this.Benefit = sBenefit; + if(sBenefit.length > sDesc.length) { + this.Description = sBenefit; + } } <!-- Yes, the variables are assigned outside the function to make them global --> -|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialQuality")>0)| -|FOR,%bar,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SpecialQuality")-1,1,0| -SpecialQualitiesList[%bar] = new NewSpecialQualities(%bar, "|ABILITYALL.Special Ability.%bar.TYPE=SpecialQuality|", "|ABILITYALL.Special Ability.%bar.TYPE=SpecialQuality.DESC|", "|ABILITYALL.Special Ability.%bar.TYPE=SpecialQuality.ASPECT|"); +SA_cnt = 0; +|IIF(count("ABILITIES";"CATEGORY=Special Ability")>0)| +|FOR,%bar,0,count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")-1,1,0| +|IIF(ABILITYALL.Special Ability.%bar.TYPE=SpecialAttack)| +|ELSE| +SpecialQualitiesList[%bar] = new NewSpecialQualities(%bar, "|ABILITYALL.Special Ability.VISIBLE.%bar|", "|ABILITYALL.Special Ability.VISIBLE.%bar.DESC|", "|ABILITYALL.Special Ability.VISIBLE.%bar.ASPECT|", "|ABILITYALL.Special Ability.VISIBLE.%bar.BENEFIT|"); +|ENDIF| |ENDFOR| |ENDIF| @@ -793,39 +874,16 @@ if(whichTable == 'SPECIAL_ATTACKS_Table') { then = SpecialAttacksListCurrent; SpecialAttacksListCurrent = whichText; - // It would be nice to have these special description areas actually notify the viewer - // that the mechanics have been applied in calculations, or they have not and need to - // be applied manually. This is one experimental way of notification by changing the - // background color of the div to signify that listed mechanics need to be applied - // manually, or in some cases looked up in the original books. - // Full implementation would require a large sweep through the DATA sets to mark each - // Feat/SA/SU with an appropriate marker. - // Why do this? It makes more clear if a "+5 resistance to fire" has been applied - // in the Elemental Resistances field. Or +1 CasterLevel, or +2 misc AC... - if(SpecialAttacksList[whichText].Aspect == 'UNCALC: description') { - now = "<div class='l9' style='margin:0px;padding:5px;background:#FFFF88;'><B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description + '</div>'; - } else if(SpecialAttacksList[whichText].Aspect == 'UNCALC: mechanics') { - now = "<div class='l9' style='margin:0px;padding:5px;background:#FFDDBB;'><B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description + '</div>'; - } else if(SpecialAttacksList[whichText].Aspect == 'UNCALC: both') { - now = "<div class='l9' style='margin:0px;padding:5px;background:#CCAA77;'><B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description + '</div>'; - } else { - now = "<B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description; - if(ShowAspects == 1) - now = now + "<br />" + SpecialAttacksList[whichText].Aspect ; + now = "<B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description; + if((ShowAspects == 1) && (SpecialAttacksList[whichText].showAspect == 1)) { + now = now + "<br />" + SpecialAttacksList[whichText].Aspect ; } } else if(whichTable == 'SPECIAL_QUALITIES_Table') { then = SpecialQualitiesListCurrent; SpecialQualitiesListCurrent = whichText; - if(SpecialQualitiesList[whichText].Aspect == 'UNCALC: description') { - now = "<div class='l9' style='margin:0px;padding:5px;background:#FFFF88;'><B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description + '</div>'; - } else if(SpecialQualitiesList[whichText].Aspect == 'UNCALC: mechanics') { - now = "<div class='l9' style='margin:0px;padding:5px;background:#FFDDBB;'><B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description + '</div>'; - } else if(SpecialQualitiesList[whichText].Aspect == 'UNCALC: both') { - now = "<div class='l9' style='margin:0px;padding:5px;background:#CCAA77;'><B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description + '</div>'; - } else { - now = "<B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description; - if(ShowAspects == 1) - now = now + "<br />" + SpecialQualitiesList[whichText].Aspect ; + now = "<B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description; + if((ShowAspects == 1) && (SpecialQualitiesList[whichText].showAspect == 1)) { + now = now + "<br />" + SpecialQualitiesList[whichText].Aspect ; } } if(then != whichText) { @@ -889,12 +947,23 @@ } function ATKStatMod() { + if(this.abilityNum == STRDEXindex) { + rc = AbArr[STRindex].curmodifier() + AbArr[DEXindex].curmodifier(); + return rc; + } return AbArr[this.abilityNum].curmodifier(); } function ATKFlag() { if ( this.miscTHMod != 0 ) return TRUE; + if(this.abilityNum == STRDEXindex) { + if(AbArr[STRindex].hasTempMod() == TRUE) + return TRUE; + if(AbArr[DEXindex].hasTempMod() == TRUE) + return TRUE; + return FALSE; + } return AbArr[this.abilityNum].hasTempMod(); } // A variable of type Skill supports the following @@ -1174,41 +1243,41 @@ // Ability = base (no change really for AC purposes) function ACObjAbility() { - tempAbil = this.abilityBase; - // Also need to take into account if max dex due to armor makes change moot? - if ( AbArr[DEXindex].hasTempMod() ) // Dex is modified? - { - // Will dex change affect AC? - // Case 1: - if ( this.maxdex==0 ) // These first two cases really should be ORed, but w/o a double pipe..sigh - tempAbil = tempAbil + AbArr[DEXindex].curModifierDiff(); - else if ( AbArr[DEXindex].modifier <= this.maxdex && AbArr[DEXindex].tempmodifier <= this.maxdex ) - tempAbil = tempAbil + AbArr[DEXindex].curModifierDiff(); - // Case 2: - else if ( this.maxdex>0 && AbArr[DEXindex].modifier > this.maxdex && AbArr[DEXindex].tempmodifier <= this.maxdex ) - tempAbil = tempAbil - this.maxdex + AbArr[DEXindex].tempmodifier; - // Case 3: - else if ( this.maxdex>0 && AbArr[DEXindex].modifier <= this.maxdex && AbArr[DEXindex].tempmodifier > this.maxdex ) - tempAbil = tempAbil - AbArr[DEXindex].modifier + this.maxdex; - // Case 4: - else if ( this.maxdex>0 && AbArr[DEXindex].modifier > this.maxdex && AbArr[DEXindex].tempmodifier > this.maxdex ) - tempAbil = tempAbil; - } - return tempAbil; + tempAbil = this.abilityBase; + // Also need to take into account if max dex due to armor makes change moot? + if ( AbArr[DEXindex].hasTempMod() ) // Dex is modified? + { + // Will dex change affect AC? + // Case 1: + if ( this.maxdex==0 ) // These first two cases really should be ORed, but w/o a double pipe..sigh + tempAbil = tempAbil + AbArr[DEXindex].curModifierDiff(); + else if ( AbArr[DEXindex].modifier <= this.maxdex && AbArr[DEXindex].tempmodifier <= this.maxdex ) + tempAbil = tempAbil + AbArr[DEXindex].curModifierDiff(); + // Case 2: + else if ( this.maxdex>0 && AbArr[DEXindex].modifier > this.maxdex && AbArr[DEXindex].tempmodifier <= this.maxdex ) + tempAbil = tempAbil - this.maxdex + AbArr[DEXindex].tempmodifier; + // Case 3: + else if ( this.maxdex>0 && AbArr[DEXindex].modifier <= this.maxdex && AbArr[DEXindex].tempmodifier > this.maxdex ) + tempAbil = tempAbil - AbArr[DEXindex].modifier + this.maxdex; + // Case 4: + else if ( this.maxdex>0 && AbArr[DEXindex].modifier > this.maxdex && AbArr[DEXindex].tempmodifier > this.maxdex ) + tempAbil = tempAbil; + } + return tempAbil; } function ACObjMisc() { var ACWisdom = 0; - // A change in AC due to Monk wisdom> - // is a monk? Not wearing armor? Wis is modified? - if ( MonkLvl > 0 && Math.round(|ACCHECK|) == 0 && AbArr[WISindex].hasTempMod()) - { + // A change in AC due to Monk wisdom> + // is a monk? Not wearing armor? Wis is modified? + if ( MonkLvl > 0 && Math.round(|ACCHECK|) == 0 && AbArr[WISindex].hasTempMod()) + { if (AbArr[WISindex].tempmodifier <= 0) ACWisdom = 0 - AbArr[WISindex].modifier; else ACWisdom = AbArr[WISindex].curModifierDiff(); - } - return this.miscBase+this.rageMod+this.defFightMod+ACWisdom; + } + return this.miscBase+this.rageMod+this.defFightMod+ACWisdom; } // A variable of type CharState supports the following @@ -1356,78 +1425,6 @@ document.getElementById('CurPowerPointsTD').bgColor = "white"; } } -// Pathfinder uses Rage Points instead of Rages/day. -|IIF(HASVAR:RagePoints)| -var CurRagePoints = new RagePointObject(|VAR.RagePoints.INTVAL|); -|ELSE| -var CurRagePoints = new RagePointObject(0); -|ENDIF| -function RagePointObject(Tot) -{ - this.TotalBase = Tot; - this.Damage = 0; -} -function RagePointsPlus() -{ - CurRagePoints.Damage = CurRagePoints.Damage - 1; - if(CurRagePoints.Damage < 0) - CurRagePoints.Damage = 0; - CurRagePointsPrint(); -} -function RagePointsMinus() -{ - if(CurRagePoints.Damage == CurRagePoints.TotalBase) - return; - CurRagePoints.Damage = CurRagePoints.Damage + 1; - CurFatigueRounds.Total = CurFatigueRounds.Total + 2; - if(CurRagePoints.Damage > CurRagePoints.TotalBase) - CurRagePoints.Damage = CurRagePoints.TotalBase; - CurRagePointsPrint(); -|IIF(HASVAR:TirelessRage)| -|ELSE| - FatigueRoundsPrint(); -|ENDIF| -} -function CurRagePointsPrint() -{ - if (CurRagePoints.Damage > 0 ) { - foo = CurRagePoints.TotalBase - CurRagePoints.Damage; - if(foo < 0) foo = 0; - if(foo > CurRagePoints.TotalBase) foo = CurRagePoints.TotalBase; - document.getElementById('RagePoints').innerHTML = foo; - document.getElementById('RagePoints_TD').bgColor = newcolor(); - } else { - document.getElementById('RagePoints').innerHTML = " " + CurRagePoints.TotalBase; - document.getElementById('RagePoints_TD').bgColor = "white"; - } -} -var CurFatigueRounds = new FatigueRoundsObject(0); -function FatigueRoundsObject(Tot) -{ - this.Total = Tot; -} -function FatigueRoundsPlus() -{ - CurFatigueRounds.Total = CurFatigueRounds.Total + 1; - FatigueRoundsPrint(); -} -function FatigueRoundsMinus() -{ - CurFatigueRounds.Total = CurFatigueRounds.Total - 1; - if(CurFatigueRounds.Total < 0) - CurFatigueRounds.Total = 0; - FatigueRoundsPrint(); -} -function FatigueRoundsPrint() -{ - if (CurFatigueRounds.Total > 0 ) { - document.getElementById('FatigueRds').innerHTML = CurFatigueRounds.Total; - document.getElementById('FatigueRds_TD').bgColor = newcolor(); - } else { - document.getElementById('FatigueRds').innerHTML = " "; - document.getElementById('FatigueRds_TD').bgColor = "white"; - } -} function SubdualPlus() { Subdual.Damage = Subdual.Damage - 1; @@ -1481,35 +1478,35 @@ function setSpellNatBonus() { - foo = 12; // out of range marker, selections are 0-10. - if (document.getElementById('spell_natural_bonus') != null) - foo = document.getElementById("spell_natural_bonus").value; - if ((foo > -1) && (foo < 11)) - spell_Nat_bonus = foo; + foo = 12; // out of range marker, selections are 0-10. + if (document.getElementById('spell_natural_bonus') != null) + foo = document.getElementById("spell_natural_bonus").value; + if ((foo > -1) && (foo < 11)) + spell_Nat_bonus = foo; } function setSpellACBonus() { - foo = 12; - if (document.getElementById('spell_AC_bonus') != null) - foo = document.getElementById("spell_AC_bonus").value; - if ((foo > -1) && (foo < 11)) - spell_AC_bonus = foo; + foo = 12; + if (document.getElementById('spell_AC_bonus') != null) + foo = document.getElementById("spell_AC_bonus").value; + if ((foo > -1) && (foo < 11)) + spell_AC_bonus = foo; } function setSpellDeflBonus() { - foo = 12; - if (document.getElementById('spell_deflection_bonus') != null) - foo = document.getElementById("spell_deflection_bonus").value; - if ((foo > -1) && (foo < 11)) - spell_Defl_bonus = foo; + foo = 12; + if (document.getElementById('spell_deflection_bonus') != null) + foo = document.getElementById("spell_deflection_bonus").value; + if ((foo > -1) && (foo < 11)) + spell_Defl_bonus = foo; } function setSpellShieldBonus() { - foo = 12; - if (document.getElementById('spell_shield_bonus') != null) - foo = document.getElementById("spell_shield_bonus").value; - if ((foo > -1) && (foo < 11)) - spell_Shield_bonus = foo; + foo = 12; + if (document.getElementById('spell_shield_bonus') != null) + foo = document.getElementById("spell_shield_bonus").value; + if ((foo > -1) && (foo < 11)) + spell_Shield_bonus = foo; } function ABPrint() @@ -1524,74 +1521,165 @@ tempHTML = tempHTML + '<td width="13%" class="c4">TEMP<br />MOD<\/td>'; tempHTML = tempHTML + '<\/tr>'; for (i=0; i<AbArr.length;i++){ - tempHTML = tempHTML+'<tr>'; - tempHTML = tempHTML+'<td id=removea'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><\/td>'; - tempHTML = tempHTML+'<td class="c10wB" rowspan=2>'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].Base+'<\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].BaseMod)+'<\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].val+'<\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; - if (AbArr[i].hasTempMod()) { - tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+AbArr[i].tempvalue+'<\/td>'; - tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + if(AbArr[i].visible == TRUE) { + tempHTML = tempHTML+'<tr>'; + tempHTML = tempHTML+'<td id=removea'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><\/td>'; + tempHTML = tempHTML+'<td class="c10wB" rowspan=2>'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; + tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].Base+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].BaseMod)+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].val+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + if (AbArr[i].hasTempMod()) { + tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+AbArr[i].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + } + else { + tempHTML = tempHTML+'<td class="c10sB" rowspan=2><br/><\/td>'; + tempHTML = tempHTML+'<td class="c10sB" rowspan=2><br/><\/td>\n'; + } + tempHTML = tempHTML+'<\/tr><tr><td id=removeb'+i+'><input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; } - else { - tempHTML = tempHTML+'<td class="c10sB" rowspan=2><br/><\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2><br/><\/td>\n'; + } + tempHTML = tempHTML+'<\/table>'; + document.getElementById('AbilityDiv').innerHTML = tempHTML; + + // Create a compact version of the Ability Scores and saves as well. + tempHTML = ''; + tempHTML ='<table border="0" cellpadding="1px" cellspacing="1px" width="320px">'; + for (i=0; i<AbArr.length;i++){ + if(AbArr[i].visible == TRUE) { + tempHTML = tempHTML+'<tr><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><br>'; + tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; + tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; + if (AbArr[i].hasTempMod()) { + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[i].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + } + else { + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[i].val+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + } + i++; + tempHTML = tempHTML+'</tr></table></td><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removek'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');">'; + tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; + tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; + if (AbArr[i].hasTempMod()) { + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[i].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + } + else { + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[i].val+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + } + tempHTML = tempHTML+'</tr></table></td></tr>\n'; } - tempHTML = tempHTML+'<\/tr><tr><td id=removeb'+i+'><input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; } + tempHTML = tempHTML+'<tr>'; + styleTag = ' style="background: LIGHTBLUE" '; + tempHTML = tempHTML+'<td><table width="100%"><tr><td class="cm9swB">AC<span class="c5wB"><br />Armour Class<\/span><\/td>'; + tempHTML = tempHTML+'<td '; + if ( AC.totalModified() ) + tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.total()+'<br><span class="c7mB">TOTAL</span><\/td>'; + tempHTML = tempHTML+'<td '; + if ( AC.flatModified() ) + tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.flat()+'<br><span class="c7mB">FLAT</span><\/td>'; + tempHTML = tempHTML+'<td '; + if ( AC.touchModified() ) + tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.touch()+'<br><span class="c7mB">TOUCH</span><\/td>'; + tempHTML = tempHTML+'</tr></table></td>'; + tempBG = "white"; + if ( CheckArr[1].hasTempMod() ) + tempBG = 'LIGHTBLUE'; + if ( CheckArr[1].statmodflag() ) + tempBG = 'LIGHTBLUE'; + tempHTML = tempHTML+'<td><table border=0><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[1].val()+',\''+CheckArr[1].name+'\',\''+CheckArr[1].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[1].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[1].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[1].name+'<span class="c5w"><br />'+CheckArr[1].ability+'<\/span></td></tr></table><\/td>'; + tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[1].val())+'<\/td></tr></table></td><tr>'; + tempBG = "white"; + if ( CheckArr[0].hasTempMod() ) + tempBG = 'LIGHTBLUE'; + if ( CheckArr[0].statmodflag() ) + tempBG = 'LIGHTBLUE'; + tempHTML = tempHTML+'<td><table border="0"><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[0].val()+',\''+CheckArr[0].name+'\',\''+CheckArr[0].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[0].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[0].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[0].name+'<span class="c5w"><br />'+CheckArr[0].ability+'<\/span></td></tr></table><\/td>'; + tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[0].val())+'<\/td></tr></table></td>'; + tempBG = "white"; + if ( CheckArr[2].hasTempMod() ) + tempBG = 'LIGHTBLUE'; + if ( CheckArr[2].statmodflag() ) + tempBG = 'LIGHTBLUE'; + tempHTML = tempHTML+'<td><table border="0"><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[2].val()+',\''+CheckArr[2].name+'\',\''+CheckArr[2].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[2].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[2].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[2].name+'<span class="c5w"><br />'+CheckArr[2].ability+'<\/span></td></tr></table><\/td>'; + tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[2].val())+'<\/td></tr></table></td>'; + tempHTML = tempHTML+'<\/tr>\n'; + tempHTML = tempHTML+'<tr><td colspan="2"><table border="0" cellspacing="1px" cellpadding="1px"><tr>'; + for (i=0;i<ATKArr.length;i++){ + if(ATKArr[i].name == "CMD") + tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />DEFENSE BONUS<\/span><\/td>\n'; + else + tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>\n'; + tempHTML = tempHTML+'<td width="35px" class="'+((ATKArr[i].isModified())?'c10slB':'c10sB')+'">'+ATKArr[i].modifyAttackBonus()+'<\/td>\n'; + if(i%2) + tempHTML = tempHTML+'</tr><tr>\n'; + } + tempHTML = tempHTML+'</tr></table></td></tr>\n'; tempHTML = tempHTML+'<\/table>'; - document.getElementById('AbilityDiv').innerHTML = tempHTML; + if (document.getElementById('CompactAbilityDiv') != null) { + document.getElementById('CompactAbilityDiv').innerHTML = tempHTML; + } } + function SavesPrint(){ tempHTML = '<table width="100%"><tr><td class="c4">SAVING THROWS<\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">TOTAL<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">BASE<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">STAT<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">MAGIC<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">EPIC<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">MISC<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c4">TOTAL<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c4">BASE<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c4">STAT<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c4">MAGIC<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c4">EPIC<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c4">MISC<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="1%" class="c4"><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">TEMPORARY<\/td><td width="63" rowspan="4" class="lt4s">CONDITIONAL<br />MODIFIERS<\/td><\/tr>\n'; + tempHTML = tempHTML+'<td width="25px" class="c4">TEMPORARY<\/td><td width="63" rowspan="4" class="lt4s">CONDITIONAL<br />MODIFIERS<\/td><\/tr>\n'; for (i=0; i<CheckArr.length;i++){ tempHTML = tempHTML+'<tr><td class="c10wB" width="145px"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[i].val()+',\''+CheckArr[i].name+'\',\''+CheckArr[i].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[i].name+'_TD" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[i].name+'" style="background-color:transparent;"> </div></td><td width="100px" class="c10wB">'+CheckArr[i].name+'<span class="c5w"><br />'+CheckArr[i].ability+'<\/span></td></tr></table><\/td>'; - tempBG = "white"; - if ( CheckArr[i].hasTempMod() ) - tempBG = 'LIGHTBLUE'; - if ( CheckArr[i].statmodflag() ) - tempBG = 'LIGHTBLUE'; + tempBG = ' style="background: white;"'; + if ( CheckArr[i].hasTempMod() ) + tempBG = ' style="background: LIGHTBLUE;"'; + if ( CheckArr[i].statmodflag() ) + tempBG = ' style="background: LIGHTBLUE;"'; // total - tempHTML = tempHTML+'<td class="c10sB" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[i].val())+'<\/td><td class="c7mB">=<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB"'+tempBG+'>'+modPlusMinus(CheckArr[i].val())+'<\/td><td class="c7mB">=<\/td>'; // base - tempHTML = tempHTML+'<td class="c10sB">'+modPlusMinus(CheckArr[i].base)+'<\/td><td class="c7mB">+<\/td>'; - tempBG = "white"; - if ( CheckArr[i].statmodflag() ) - tempBG = 'LIGHTBLUE'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(CheckArr[i].base)+'<\/td><td class="c7mB">+<\/td>'; + tempBG = ""; + if ( CheckArr[i].statmodflag() ) + tempBG = ' style="background: LIGHTBLUE;"'; // ability - tempHTML = tempHTML+'<td class="c10sB" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[i].statmodifier())+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB"'+tempBG+'>'+modPlusMinus(CheckArr[i].statmodifier())+'<\/td>'; tempHTML = tempHTML+'<td class="c7mB">+<\/td>'; // magic - tempHTML = tempHTML+'<td class="c10sB">'+modPlusMinus(CheckArr[i].magic)+'<br /><\/td><td class="c7mB">+<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(CheckArr[i].magic)+'<br /><\/td><td class="c7mB">+<\/td>'; // epic - tempHTML = tempHTML+'<td class="c10sB">'+modPlusMinus(CheckArr[i].epic)+'<br /><\/td><td class="c7mB">+<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(CheckArr[i].epic)+'<br /><\/td><td class="c7mB">+<\/td>'; // other - tempHTML = tempHTML+'<td class="c10sB">'+modPlusMinus(CheckArr[i].misc)+'<br /><\/td><td class="c7mB">+<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(CheckArr[i].misc)+'<br /><\/td><td class="c7mB">+<\/td>'; // temp that is viewer modifyable tempHTML = tempHTML+'<td width="1%" align="right"><input class="statmodbutton" type=button value="+" name=AddSaveButton onclick="SavePlus('+i+');"><br /><input class="statmodbutton" type=button value="-" name=SubSaveButton onclick="SaveMinus('+i+');"></td>'; - tempBG = "white"; + tempBG = ''; // prefer background over white if ( CheckArr[i].hasTempMod() ) - tempBG = 'LIGHTBLUE'; - tempHTML = tempHTML+'<td class="c10gB" style="background: '+tempBG+';">'; + tempBG = ' style="background: LIGHTBLUE;"'; + tempHTML = tempHTML+'<td width="25px" class="c10gB"'+tempBG+'>'; if ( CheckArr[i].hasTempMod() ) - tempHTML = tempHTML+modPlusMinus(CheckArr[i].tempmodifier); + tempHTML = tempHTML+modPlusMinus(CheckArr[i].tempmodifier); else - tempHTML = tempHTML+'<br />'; + tempHTML = tempHTML+'<br />'; tempHTML = tempHTML+'<\/td>'; tempHTML = tempHTML+'<\/tr>\n'; } tempHTML = tempHTML+'<\/table>'; document.getElementById('SavesDiv').innerHTML = tempHTML; + ABPrint(); // Refresh the compact version of the AB table } function ATKPrint(){ tempHTML = '<table width="100%"><tr><td><\/td>'; @@ -1602,11 +1690,14 @@ tempHTML = tempHTML+'<td width="25" class="c4">EPIC<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISC<\/td><td><\/td>'; tempHTML = tempHTML+'<td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">TEMPORARY<br />HIT<\/td>'; + tempHTML = tempHTML+'<td width="25" class="c4">TEMPORARY<br />TO HIT<\/td>'; tempHTML = tempHTML+'<td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">TEMPORARY<br />DAMAGE<\/td><\/tr>'; for (i=0;i<ATKArr.length;i++){ - tempHTML = tempHTML+'<tr><td class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>'; + if(ATKArr[i].name == "CMD") + tempHTML = tempHTML+'<tr><td class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />DEFENSE BONUS<\/span><\/td>'; + else + tempHTML = tempHTML+'<tr><td class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>'; tempHTML = tempHTML+'<td class="'+((ATKArr[i].isModified())?'c10slB':'c10sB')+'">'+ATKArr[i].modifyAttackBonus()+'<\/td><td class="c7mB">=<\/td>'; tempHTML = tempHTML+'<td class="c10sB">'; tempHTML = tempHTML+ATKArr[i].base; @@ -1616,40 +1707,94 @@ tempHTML = tempHTML+'<td class="c10sB">'+ATKArr[i].epicmodifier+'<br /><\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td class="c10sB">'+ATKArr[i].miscmodifier+'<br /><\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td width="1%" align="right"><input class="statmodbutton" type=button value="+" onclick="CombatPlus('+i+');"><br /><input class="statmodbutton" type=button value="-" onclick="CombatMinus('+i+');"></td>'; - tempBG = "white"; + tempBG = ''; if ( ATKArr[i].miscTHMod != 0 ) - tempBG = 'LIGHTBLUE'; - tempHTML = tempHTML+'<td class="c10gB" style="background:'+tempBG+';">'; + tempBG = ' style="background: LIGHTBLUE;"'; + tempHTML = tempHTML+'<td class="c10gB"'+tempBG+'>'; if ( ATKArr[i].miscTHMod != 0 ) - tempHTML = tempHTML + ATKArr[i].miscTHMod; + tempHTML = tempHTML + ATKArr[i].miscTHMod; tempHTML = tempHTML + '<br /><\/td>'; - tempHTML = tempHTML+'<td width="1%" align="right"><input class="statmodbutton" type=button value="+" onclick="CombatDamagePlus('+i+');"><br /><input class="statmodbutton" type=button value="-" onclick="CombatDamageMinus('+i+');"></td>'; - tempBG = "white"; - if ( ATKArr[i].miscDamageMod != 0 ) - tempBG = 'LIGHTBLUE'; - tempHTML = tempHTML+'<td class="c10gB" style="background:'+tempBG+';">'; - if ( ATKArr[i].miscDamageMod != 0 ) - tempHTML = tempHTML + ATKArr[i].miscDamageMod; - tempHTML = tempHTML + '<br /><\/td><\/tr>'; + if((ATKArr[i].name != "CMB") && (ATKArr[i].name != "CMD")) { + tempHTML = tempHTML+'<td width="1%" align="right"><input class="statmodbutton" type=button value="+" onclick="CombatDamagePlus('+i+');"><br /><input class="statmodbutton" type=button value="-" onclick="CombatDamageMinus('+i+');"></td>'; + tempBG = ''; + if ( ATKArr[i].miscDamageMod != 0 ) + tempBG = ' style="background: LIGHTBLUE;"'; + tempHTML = tempHTML+'<td class="c10gB"'+tempBG+'>'; + if ( ATKArr[i].miscDamageMod != 0 ) + tempHTML = tempHTML + ATKArr[i].miscDamageMod; + tempHTML = tempHTML + '<br /><\/td><\/tr>'; + } else if(ATKArr[i].name == "CMD") { + tempHTML = tempHTML+'<td class="c7mB">+</td>'; + tempHTML = tempHTML+'<td class="c10B">10</td></tr>'; + } else { + tempHTML = tempHTML+'<td> </td>'; + tempHTML = tempHTML+'<td> </td></tr>'; + } tempHTML = tempHTML + '<tr><td><\/td><\/tr>'; } + tempHTML = tempHTML + '<tr><td colspan=18><table width="100%" summary="CMB block"><tr>'; +|IIF(VAR.UseCombatManueverBonus:1)| + tempOffset = parseInt(ATKArr[CMB_Pos].modifyAttackBonus()) - parseInt(ATKArr[CMB_Pos].AttackBonusBase); + tempBG = ''; + if ( ATKArr[CMB_Pos].isModified() ) + tempBG = ' style="background: LIGHTBLUE;"'; + tempHTML = tempHTML + '<td align="center" class="c10wB"><b>CMB</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMB_Grapple.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMB_Trip.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMB_Disarm.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMB_Sunder.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMB_BullRush.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMB_Overrun.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempHTML = tempHTML + '</tr><tr>'; + tempOffset = parseInt(ATKArr[CMD_Pos].modifyAttackBonus()) - parseInt(ATKArr[CMD_Pos].AttackBonusBase); + if ( ATKArr[CMD_Pos].isModified() ) + tempBG = ' style="background: LIGHTBLUE;"'; + tempHTML = tempHTML + '<td align="center" class="c10wB"><b>CMD</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMD_Grapple.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMD_Trip.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMD_Disarm.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMD_Sunder.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMD_BullRush.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempVal = tempOffset + parseInt(|VAR.CMD_Overrun.INTVAL.SIGN|); + tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; + tempHTML = tempHTML + '<tr>'; + tempHTML = tempHTML + '<td align="center" width="10%"></td>'; + tempHTML = tempHTML + '<td align="center" width="15%" valign="bottom" class="c6">GRAPPLE</td>'; + tempHTML = tempHTML + '<td align="center" width="15%" valign="bottom" class="c6">TRIP</td>'; + tempHTML = tempHTML + '<td align="center" width="15%" valign="bottom" class="c6">DISARM</td>'; + tempHTML = tempHTML + '<td align="center" width="15%" valign="bottom" class="c6">SUNDER</td>'; + tempHTML = tempHTML + '<td align="center" width="15%" valign="bottom" class="c6">BULL RUSH</td>'; + tempHTML = tempHTML + '<td align="center" width="15%" valign="bottom" class="c6">OVERRUN</td>'; + tempHTML = tempHTML + '</tr></table></td></tr>'; +|ENDIF| document.getElementById('AttackDiv').innerHTML = tempHTML; + ABPrint(); // Refresh the compact version of the AB table } function ComprehensiveSkillPrint() { tempHTML = '<table cellpadding="0" cellspacing="0" border="0" width="100%">'; - tempHTML = tempHTML + '<tr><td height="30" class="c6w"><\/td>'; - tempHTML = tempHTML + '<td height="30" class="c10yB"><a name="#" onClick="CycleSkills();">SKILLS</a><\/td>'; - tempHTML = tempHTML + '<td colspan="4" height="30" class="c6w"><\/td>'; - tempHTML = tempHTML + '<td height="30" class="r6w"><\/td>'; - tempHTML = tempHTML + '<td height="30" class="c7w">MAX<br />RANKS<\/td>'; - tempHTML = tempHTML + '<td colspan="2" height="30" class="cm9dB"> |MAXSKILLLEVEL|/|MAXCCSKILLLEVEL| <\/td><\/tr>'; + tempHTML = tempHTML + '<tr bgcolor="black"><td bgcolor="black" height="30" class="c6w"><\/td>'; + tempHTML = tempHTML + '<td bgcolor="black" height="30" class="c10yB"><a name="#" onClick="CycleSkills();">SKILLS</a><\/td>'; + tempHTML = tempHTML + '<td bgcolor="black" colspan="4" height="30" class="c6w"><\/td>'; + tempHTML = tempHTML + '<td bgcolor="black" height="30" class="r6w"><\/td>'; + tempHTML = tempHTML + '<td bgcolor="black" height="30" class="c7w">MAX<br />RANKS<\/td>'; + tempHTML = tempHTML + '<td bgcolor="black" colspan="2" height="30" class="cm9dB"> |MAXSKILLLEVEL|/|MAXCCSKILLLEVEL| <\/td><\/tr>'; tempHTML = tempHTML + '<tr><td colspan="2" width="40%" class="c4s">SKILL NAME<\/td><td width="5%" class="c4s">ABILITY<\/td><td width="13%" colspan="1" class="c4s">SKILL<br />MODIFIER<\/td><td width="13%" colspan="2" class="c4s">ABILITY<br />MODIFIER<\/td><td width="13%" colspan="2" class="c4s">RANKS<\/td><td width="13%" colspan="2" class="c4s">MISC<br />MODIFIER<\/td><\/tr>'; - i = 0; + i = 0; for (i=0;i<SkillArr.length;i++){ notWhileRaging = 0; - for (j=0;j<SkillsRedList.length;j++) - { + for (j=0;j<SkillsRedList.length;j++) { if ((SkillArr[i].name.substr(0,SkillsRedList[j].length) == SkillsRedList[j])&&(RageStatus =="Raging")) {notWhileRaging = 1;} } styleTag = ""; @@ -1663,7 +1808,6 @@ tempHTML = tempHTML + '◆'; if ( SkillArr[i].bSkillMastery == TRUE ) tempHTML = tempHTML + '*'; - tempHTML = tempHTML + '<\/td>'; tempHTML = tempHTML + '<td class="l8">'+SkillArr[i].name+'<\/td><td class="c8">'+SkillArr[i].ability+'<\/td><td class="cb8b">'+SkillArr[i].total()+'<\/td><td class="cb8mB">=<\/td><td class="cb8bB">'+SkillArr[i].statmodifier()+'<br /><\/td><td class="cb8mB">+<\/td><td class="cb8bB">'+SkillArr[i].rank+'<br /><\/td><td class="cb8mB">+<\/td><td class="cb8bB">'+SkillArr[i].miscmodifier+'<br /><\/td><\/tr>'; } @@ -1697,22 +1841,21 @@ tempHTML = tempHTML + '<tr><td class="l5b"> Name<\/td><td class="l5b">Abb<\/td><td class="r5b">Rnk<\/td><td class="r5b"> </td><td class="r5b">Tot <\/td><td></td><td class="l5b"> Name<\/td><td class="l5b">Abb<\/td><td class="r5b">Rnk<\/td><td class="r5b"> </td><td class="r5b">Tot <\/td><td></td><td class="l5b"> Name<\/td><td class="l5b">Abb<\/td><td class="r5b">Rnk<\/td><td class="r5b"> </td><td class="r5b">Tot <\/td><td></td><\/tr>'; for (i=0;i<SkillArr.length;i++){ notWhileRaging = 0; - for (j=0;j<SkillsRedList.length;j++) - { + for (j=0;j<SkillsRedList.length;j++) { if ((SkillArr[i].name.substr(0,SkillsRedList[j].length) == SkillsRedList[j])&&(RageStatus =="Raging")) {notWhileRaging = 1;} } styleTag = ""; if (SkillArr[i].baseStatModified()) styleTag = ' style="background: LIGHTBLUE; color: red;"'; if (notWhileRaging ==1) styleTag = ' style="background: #cccccc; color: #666666;"'; - if ( (i % 3) == 0 ) - tempHTML = tempHTML + '<tr>'; + if ( (i % 3) == 0 ) + tempHTML = tempHTML + '<tr>'; tempHTML = tempHTML + '<td'+styleTag+' class="l8"> '+SkillArr[i].name+'<\/td><td'+styleTag+' class="l7">'+SkillArr[i].ability+'<\/td><td'+styleTag+' class="r7">'+SkillArr[i].rank+' <\/td><td><a name="#" onClick="rollIntoDIV(1,20,'+SkillArr[i].total()+',\''+SkillArr[i].name+'\',\'SkillRoll\',0);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td'+styleTag+' class="r8"> '+SkillArr[i].total()+' <\/td><td style="background:black;" width="3px"> </td>'; if ( (i % 3) == 2 ) - tempHTML = tempHTML + '<\/tr>'; + tempHTML = tempHTML + '<\/tr>'; } - // This is to take care of the case of a row started in the loop, but not enough skills to complete the whole row. + // This is to take care of the case of a row started in the loop, but not enough skills to complete the whole row. if ( i>0 && (i % 3)==0 ) - tempHTML = tempHTML + '<\/tr>'; + tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '<\/table>'; document.getElementById('SkillsCompactdiv').innerHTML = tempHTML; } @@ -1722,41 +1865,41 @@ tempHTML = '<table><tr><td class="cm9swB">AC<span class="c5wB"><br />Armour Class<\/span><\/td>'; tempHTML = tempHTML+'<td '; if ( AC.totalModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.total()+'<\/td><td class="c7mB">=<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.flatModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.flat()+'<\/td><td class="c7mB">:<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.touchModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.touch()+'<\/td><td class="c7mB">:<\/td>'; tempHTML = tempHTML+'<td class="c9sB">'+AC.base+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.armorModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.armor()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.shieldModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.shield()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.deflectionModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.deflection()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.abilityModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.ability()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td class="c9sB">'+AC.size+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.naturalarmorModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.naturalarmor()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; if ( AC.miscModified() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.misc()+'<\/td><td align="center" width="5"><\/td>'; tempHTML = tempHTML+'<td class="c9sB"><br /><\/td><td align="center"><\/td>'; tempHTML = tempHTML+'<td class="c9sB">|SPELLFAILURE|<\/td><td align="center"><\/td>'; @@ -1764,9 +1907,8 @@ tempHTML = tempHTML+'<td class="c9sB">'; // MAXDEX==0 means NO maxdex if ( AC.maxdex != 0 ) - tempHTML = tempHTML + AC.maxdex; + tempHTML = tempHTML + AC.maxdex; tempHTML = tempHTML+'<br /><\/td><td align="center"><\/td>'; - tempHTML = tempHTML+'<tr><td align="center" width="50"><\/td>'; tempHTML = tempHTML+'<td width="25" class="ct6mB">TOTAL<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="ct6mB">FLAT<\/td><td><\/td>'; @@ -1783,9 +1925,9 @@ tempHTML = tempHTML+'<td width="25" class="c4">ARCANE<br />FAILURE<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">ARMOR<br />CHECK<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MAX<br />DEX<\/td><td><\/td>'; - tempHTML = tempHTML+'<\/tr><\/table>'; document.getElementById('ACDiv').innerHTML = tempHTML; + ABPrint(); } function InitPrint() { @@ -1798,12 +1940,12 @@ tempHTML = tempHTML+'<td width="85" class="c9wB">INITIATIVE<span class="c5w"><br />Modifier<\/span><\/td>'; tempHTML = tempHTML+'<td '; if ( AbArr[DEXindex].hasTempMod() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c10sB" width="25">'+Init.initTotal()+'<br><span class="cb5">TOTAL</span><\/td>'; tempHTML = tempHTML+'<td class="cm7mB">=<\/td>'; tempHTML = tempHTML+'<td '; if ( AbArr[DEXindex].hasTempMod() ) - tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c10s... [truncated message content] |
From: <sat...@us...> - 2009-12-14 03:46:38
|
Revision: 11192 http://pcgen.svn.sourceforge.net/pcgen/?rev=11192&view=rev Author: satinknights Date: 2009-12-14 03:46:30 +0000 (Mon, 14 Dec 2009) Log Message: ----------- Changed compact weapon list from 3 to 100, fixed unloadable die.png blocking some scripting. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-12-14 03:40:55 UTC (rev 11191) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-12-14 03:46:30 UTC (rev 11192) @@ -2042,7 +2042,9 @@ // Global NumWeaponsFirstPage sets the max number of weapons to print in compact form, but is now // ineffective in Comprehensive mode now that we have moved away from page printing. -var NumWeaponsFirstPage = 3; +// This was 3 like the original combined.htm page, but that led to confusion for some. +// So, bumping to 100 to effectivly disable. +var NumWeaponsFirstPage = 100; function WeaponPrint() { var i = 0; @@ -2091,7 +2093,6 @@ tempHTML = tempHTML+'<td class="c8mB">' + WeapArr[i].range + '<br /><\/td>'; tempHTML = tempHTML+'<td class="c8mB">' + WeapArr[i].type + '<br /><\/td>'; tempHTML = tempHTML+'<td class="c8mB">' + WeapArr[i].size + '<br /><\/td><\/tr>'; - tempHTML = tempHTML+'<tr><td colspan="8" class="c7">' + WeapArr[i].sprop + '<\/td><\/tr>'; } } tempHTML = tempHTML + '<\/table>'; @@ -4767,10 +4768,11 @@ <tr valign="top"> <td class="l9"><b>Description:</b></td> <td class="l8">This output sheet is designed for people who game with their laptops open. - csheet_fantasy_laptop.htm is for small laptops and netbooks with a 600 to 800 pixel - wide display. csheet_fantasy_laptop_ws.htm is for wide screen laptops, as it uses - two columns for the layout. - Most optional sections that takes up more than a couple of lines has a way to collapse the output, + <b>csheet_fantasy_laptop.htm</b> is for small laptops and netbooks with a 600 to 800 pixel + wide display. <b>csheet_fantasy_laptop_ws.htm</b> is for wide screen laptops, as it uses + two columns for the layout.<br> + <br> + Most optional sections that takes up more than a couple of lines have a way to collapse the output, so as to fit something else on the screen. A person does not need to see the whole spell list or inventory all the time, so they have been stuffed into collapsable sections. Since this sheet is more interactive, one could open the seven spells they have memorized, @@ -4782,28 +4784,62 @@ clicking on the [cfg] button, and then activated by clicking on the AC bonus type. An example is Mage Armor would be configured as Spell Armor, 4. If clicking an AC type gives you a grey button, it has not been configured yet. + <br> + <br> + The spell blocks display statistics as if they were cast at your current base level with only + "all the time" variables from feats/traits/special abilities accounted for like "+1 Caster Level + for fire spells". There is no current mechanism to apply metamagic feats or recalculate stats + based upon temporary ability score changes from the plus/minus buttons on the sheet. + </td> + </tr> + <tr valign="top"> + <td class="l9"><b>Setup:</b></td> + <td class="l8">If you place a <b>|NAME|.jpg</b> small portrait, and a <b>|NAME|_Full.jpg</b> picture of + your charcter in the same directory as the .htm file, the portrait will show on the main page, and the _Full + picture will show on when the Full Header button is clicked to display the charcter's bio and background.<br /> + Large Die Icon: <img src="die.png" onerror="ToggleDIV('large_die_available');"> + <div id="large_die_available" style="display:none; color:red;" class="l8">The large die image is missing. + Copy ...\pcgen\preview\d20\fantasy\images\gold\die.png to your character directory where this page + is to activate a dice rolling icon in the Saves and Initiative sections. + </div> <br /> + Small Die Icon: <img src="die_small.png" onerror="ToggleDIV('small_die_available');"> + <div id="small_die_available" style="display:none; color:red;" class="l8">The small die image is missing. + Copy ...\pcgen\preview\d20\fantasy\images\gold\die_small.png to your character directory where this page + is to activate a dice rolling icon in the Skills section. + </div> <br /> - If you place a |NAME|.jpg small portrait, and a |NAME|_Full.jpg picture of your charcter in - the same directory as the .htm file, the portrait will show on the main page, and the _Full - picture will show on when the Full Header button is clicked to display the charcter's background. - The die.png and die_small.png files from the \pcgen\outputsheets\d20\fantasy\htmlxml directory - need to be copied into the same directory for the dice to show up properly on this character sheet. + <br /> </td> </tr> <tr valign="top"> + <td class="l9"><b>Transfer to another location:</b></td> + <td class="l8">To carry the character sheet to any web host or file directory, the following files are needed:<br /> + <b>|NAME|.htm</b> ~ This web page.<br /> + <b>die.png</b> ~ The large die graphic used in the attack and initiative areas.<br /> + <b>die_small.png</b> ~ The small die graphic used in the skills area.<br /> + <b>|NAME|.jpg</b> ~ an optional small portrait of the character 100 pixels high.<br /> + <b>|NAME|_full.jpg</b> ~ an optional large portrait of the character in the 400 pixels size range.<br /> + </td> + </tr> + <tr valign="top"> <td class="l9"><b>Color Keys:</b></td> <td class="l8"> + <span class="l8"><input class="statmodbutton" type=button value="+" name="DummyPlusButton"> + <input class="statmodbutton" type=button value="-" name="DummyMinusButton"> are buttons to add to or subtract from + the value in their neighboring box and recompute many of the stats. Temporary changes to stats or short term + bonuses to saves can be tracked and recomputed this way.<br /> <span class="l8" style="background:#FFCCCC;">Red</span> in the Current HP box is damaged, - <span class="l8" style="background:#FFFF88">Yellow</span> is for manual tracking of temporary HP bonuses like Aid. + <span class="l10" style="background:#FFFF88">Yellow</span> is for manual tracking of temporary HP bonuses like Aid. <br /><span class="l8" style="background:LIGHTBLUE">LightBlue</span> tracks values that have changed due to temporary ability changes including Barbarian Rages. <br /><span class="l8" style="background:#CCCCFF">Purple</span> Ability values and modifiers that have changed due to temporary changes. - <br /><span class="l8" style="color:#FFFF20; background:black">Yellow</span>/<span class="l10" style="color:#20FFFF; background:black">Cyan</span> + <br /><span class="l10" style="color:#FFFF20; background:black">Yellow</span>/<span class="l10" style="color:#20FFFF; background:black">Cyan</span> hovers are section markers that expand/collapse sections when clicked. - <br /><span class="l8" style="color:green;">Green</span> links are spells/feats/special abilities that expand with a larger description block. + <br /><span class="lh9"><a href="#" onclick="return(false);" class="lh9">Green</a></span> links are spells/feats/special abilities that expand with a larger description block. + <br /><span class="l8" >Clicking on an expanded spell box's "Spell Name" will close the expanded box. <br /> <br /><span class="extlink"><a href="#">External HTML</a></span> links are decorated a little more than ususal so they stand out as leaving the page. The only current usage is for linking to the output sheet for a Familiar/Mount/Follower. - <br />The <img src="die.png" Alt="Roll" width="24px" height="26px" border="0"> and <img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"> roll results cycle through a rainbow of pastel colors. It makes them stand out a bit, and since it is possible to roll the same results twice in a row, the color is changed to indicate the new roll. The roll results and timestamps are recorded below in this section as a temporary record. They are not saved to a file, and clear if the page is reloaded. + <br />The <img src="die.png" Alt="[Die Image]" width="24px" height="26px" border="0"> and <img src="die_small.png" Alt="[Die Image]" width="15px" height="16px" border="0"> roll results cycle through a rainbow of pastel colors. It makes them stand out a bit, and since it is possible to roll the same results twice in a row, the color is changed to indicate the new roll. The roll results and timestamps are recorded below in this section as a temporary record. They are not saved to a file, and clear if the page is reloaded. </td> </tr> <tr valign="top"> @@ -6257,5 +6293,7 @@ </td> </tr> </table> <!-- End the whole table (finally!) --> +<!-- Hack to get Firefox to run the body.onload script if some images were unavailable an unloadable like die.png --> +<script language="javascript" type="text/javascript">Compact();</script> </body> </html> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2009-12-14 03:40:55 UTC (rev 11191) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2009-12-14 03:46:30 UTC (rev 11192) @@ -2042,7 +2042,9 @@ // Global NumWeaponsFirstPage sets the max number of weapons to print in compact form, but is now // ineffective in Comprehensive mode now that we have moved away from page printing. -var NumWeaponsFirstPage = 3; +// This was 3 like the original combined.htm page, but that led to confusion for some. +// So, bumping to 100 to effectively disable the limit. +var NumWeaponsFirstPage = 100; function WeaponPrint() { var i = 0; @@ -2091,7 +2093,6 @@ tempHTML = tempHTML+'<td class="c8mB">' + WeapArr[i].range + '<br /><\/td>'; tempHTML = tempHTML+'<td class="c8mB">' + WeapArr[i].type + '<br /><\/td>'; tempHTML = tempHTML+'<td class="c8mB">' + WeapArr[i].size + '<br /><\/td><\/tr>'; - tempHTML = tempHTML+'<tr><td colspan="8" class="c7">' + WeapArr[i].sprop + '<\/td><\/tr>'; } } tempHTML = tempHTML + '<\/table>'; @@ -4686,10 +4687,11 @@ <tr valign="top"> <td class="l9"><b>Description:</b></td> <td class="l8">This output sheet is designed for people who game with their laptops open. - csheet_fantasy_laptop.htm is for small laptops and netbooks with a 600 to 800 pixel - wide display. csheet_fantasy_laptop_ws.htm is for wide screen laptops, as it uses - two columns for the layout. - Most optional sections that takes up more than a couple of lines has a way to collapse the output, + <b>csheet_fantasy_laptop.htm</b> is for small laptops and netbooks with a 600 to 800 pixel + wide display. <b>csheet_fantasy_laptop_ws.htm</b> is for wide screen laptops, as it uses + two columns for the layout.<br> + <br> + Most optional sections that takes up more than a couple of lines have a way to collapse the output, so as to fit something else on the screen. A person does not need to see the whole spell list or inventory all the time, so they have been stuffed into collapsable sections. Since this sheet is more interactive, one could open the seven spells they have memorized, @@ -4701,28 +4703,62 @@ clicking on the [cfg] button, and then activated by clicking on the AC bonus type. An example is Mage Armor would be configured as Spell Armor, 4. If clicking an AC type gives you a grey button, it has not been configured yet. + <br> + <br> + The spell blocks display statistics as if they were cast at your current base level with only + "all the time" variables from feats/traits/special abilities accounted for like "+1 Caster Level + for fire spells". There is no current mechanism to apply metamagic feats or recalculate stats + based upon temporary ability score changes from the plus/minus buttons on the sheet. + </td> + </tr> + <tr valign="top"> + <td class="l9"><b>Setup:</b></td> + <td class="l8">If you place a <b>|NAME|.jpg</b> small portrait, and a <b>|NAME|_Full.jpg</b> picture of + your charcter in the same directory as the .htm file, the portrait will show on the main page, and the _Full + picture will show on when the Full Header button is clicked to display the charcter's bio and background.<br /> + Large Die Icon: <img src="die.png" onerror="ToggleDIV('large_die_available');"> + <div id="large_die_available" style="display:none; color:red;" class="l8">The large die image is missing. + Copy ...\pcgen\preview\d20\fantasy\images\gold\die.png to your character directory where this page + is to activate a dice rolling icon in the Saves and Initiative sections. + </div> <br /> + Small Die Icon: <img src="die_small.png" onerror="ToggleDIV('small_die_available');"> + <div id="small_die_available" style="display:none; color:red;" class="l8">The small die image is missing. + Copy ...\pcgen\preview\d20\fantasy\images\gold\die_small.png to your character directory where this page + is to activate a dice rolling icon in the Skills section. + </div> <br /> - If you place a |NAME|.jpg small portrait, and a |NAME|_Full.jpg picture of your charcter in - the same directory as the .htm file, the portrait will show on the main page, and the _Full - picture will show on when the Full Header button is clicked to display the charcter's background. - The die.png and die_small.png files from the \pcgen\outputsheets\d20\fantasy\htmlxml directory - need to be copied into the same directory for the dice to show up properly on this character sheet. </td> </tr> <tr valign="top"> + <td class="l9"><b>Transfer to another location:</b></td> + <td class="l8">To carry the character sheet to any web host or file directory, the following files are needed:<br /> + <b>|NAME|.htm</b> ~ This web page.<br /> + <b>die.png</b> ~ The large die graphic used in the attack and initiative areas.<br /> + <b>die_small.png</b> ~ The small die graphic used in the skills area.<br /> + <b>|NAME|.jpg</b> ~ an optional small portrait of the character 100 pixels high.<br /> + <b>|NAME|_full.jpg</b> ~ an optional large portrait of the character in the 400 pixels size range.<br /> + </td> + </tr> + <tr valign="top"> <td class="l9"><b>Color Keys:</b></td> <td class="l8"> + <span class="l8"><input class="statmodbutton" type=button value="+" name="DummyPlusButton"> + <input class="statmodbutton" type=button value="-" name="DummyMinusButton"> are buttons to add to or subtract from + the value in their neighboring box and recompute many of the stats. Temporary changes to stats or short term + bonuses to saves can be tracked and recomputed this way.<br /> <span class="l8" style="background:#FFCCCC;">Red</span> in the Current HP box is damaged, <span class="l8" style="background:#FFFF88">Yellow</span> is for manual tracking of temporary HP bonuses like Aid. <br /><span class="l8" style="background:LIGHTBLUE">LightBlue</span> tracks values that have changed due to temporary ability changes including Barbarian Rages. <br /><span class="l8" style="background:#CCCCFF">Purple</span> Ability values and modifiers that have changed due to temporary changes. - <br /><span class="l8" style="color:#FFFF20; background:black">Yellow</span>/<span class="l10" style="color:#20FFFF; background:black">Cyan</span> + <br /><span class="l10" style="color:#FFFF20; background:black">Yellow</span>/<span class="l10" style="color:#20FFFF; background:black">Cyan</span> hovers are section markers that expand/collapse sections when clicked. - <br /><span class="l8" style="color:green;">Green</span> links are spells/feats/special abilities that expand with a larger description block. + <br /><span class="lh9"><a href="#" onclick="return(false);" class="lh9">Green</a></span> links are spells/feats/special abilities + that expand with a larger description block. + <br /><span class="l8" >Clicking on an expanded spell box's "Spell Name" will close the expanded box. <br /> <br /><span class="extlink"><a href="#">External HTML</a></span> links are decorated a little more than ususal so they stand out as leaving the page. The only current usage is for linking to the output sheet for a Familiar/Mount/Follower. - <br />The <img src="die.png" Alt="Roll" width="24px" height="26px" border="0"> and <img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"> roll results cycle through a rainbow of pastel colors. It makes them stand out a bit, and since it is possible to roll the same results twice in a row, the color is changed to indicate the new roll. The roll results and timestamps are recorded below in this section as a temporary record. They are not saved to a file, and clear if the page is reloaded. + <br />The <img src="die.png" Alt="[Die Image]" width="24px" height="26px" border="0"> and <img src="die_small.png" Alt="[Die Image]" width="15px" height="16px" border="0"> roll results cycle through a rainbow of pastel colors. It makes them stand out a bit, and since it is possible to roll the same results twice in a row, the color is changed to indicate the new roll. The roll results and timestamps are recorded below in this section as a temporary record. They are not saved to a file, and clear if the page is reloaded. </td> </tr> <tr valign="top"> @@ -6252,5 +6288,7 @@ </td> </tr> </table> <!-- End the whole table (finally!) --> +<!-- Hack to get Firefox to run the body.onload script if some images were unavailable an unloadable like die.png --> +<script language="javascript" type="text/javascript">Compact();</script> </body> </html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sat...@us...> - 2009-12-30 15:22:24
|
Revision: 11263 http://pcgen.svn.sourceforge.net/pcgen/?rev=11263&view=rev Author: satinknights Date: 2009-12-30 15:22:15 +0000 (Wed, 30 Dec 2009) Log Message: ----------- Added Show Sources to Feats, Special Attacks and Qualities, and Equipment. Returned EQ...MAGIC~ to using html bold now. Removed repeats of Special Attacks in the Special Qualities section. 2917186 TIMEUNIT processing. 2923219 seperated out AC.Dodge into it's own box and spell AC button. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-12-30 15:18:21 UTC (rev 11262) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2009-12-30 15:22:15 UTC (rev 11263) @@ -63,6 +63,10 @@ Revisions: Mike Elliott 12/12/09 Updated to include CMB/CMD, added Compact Stats mode and many minor fixes. +Revisions: Mike Elliott 12/30/09 Added Show Sources to Feats, Special Attacks and Qualities, and Equipment, + 2917186 TIMEUNIT processing, .MAGIC~ to bold now, removed repeats of Special Attacks + in the Special Qualities section, 2923219 seperated out AC.Dodge into it's own box. + $Revision$ $Author$ $Date$ @@ -227,6 +231,7 @@ .c9w { font-size:9pt; text-align:center; color:white; background:black; } .c9s { font-size:9pt; text-align:center; border:1px solid black; } .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } + .c9sBx{ font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; } .c9swB{ font-size:9pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } .c9wB { font-size:9pt; text-align:center; color:white; background:black; font-weight:bold; } .c9pB { font-size:9pt; text-align:center; color:#88DDFF; background:black; font-weight:bold; } @@ -248,6 +253,8 @@ .lt9b { font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } .lt9bw{ font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; color:white; background:black; } .lt9mB{ font-size:9pt; text-align:left; vertical-align:top; font-weight:bold; } + .lt9s { font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; } + .lt9sB{ font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } .r9 { font-size:9pt; text-align:right; } .r9w { font-size:9pt; text-align:center; color:white; background:black; } .r9wB { font-size:9pt; text-align:right; color:white; background:black; font-weight:bold; } @@ -258,6 +265,7 @@ .c10mB { font-size:10pt; text-align:center; color:white; background:black; font-weight:bold; } .c10s { font-size:10pt; text-align:center; border:1px solid black; } .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } + .c10sBx{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } .c10sl { font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; } .c10slB{ font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; font-weight:bold; } .c10swB{ font-size:10pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } @@ -347,6 +355,7 @@ var WeapArr = new Array(); // Hardcoded Global Debug variable for now: Show Aspect information var ShowAspects = 0; +var ShowSources = 0; // List of checks var FORTindex = 0; var REFindex = 1; @@ -362,7 +371,7 @@ var HP = new HPObject( |HP| ); var Subdual = new SubdualObject( '0' ); // AC object -var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Misc|); +var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Dodge|,|AC.Misc|); // List of skills forbidden to a raging Barb var SkillsRedList = new Array("Alchemy","Appraise","Craft","Decipher Script","Diplomacy","Disable Device","Disguise","Escape Artist","Forgery","Gather Information","Handle Animal","Heal","Hide","Innuendo","Intuit Direction","Knowledge","Move Silently","Open Lock","Perform","Pick Pocket","Profession","Read Lips","Scry","Search","Sense Motive","Sleight of Hand","Spellcraft","Tumble","Use Magic Device"); // List of the supported states a char can be in. @@ -372,10 +381,12 @@ StateArr[3] = new CharState( "SpellArmor2", SpellCombatMods, SpellCombatMods ); StateArr[4] = new CharState( "SpellArmor3", SpellCombatMods, SpellCombatMods ); StateArr[5] = new CharState( "SpellArmor4", SpellCombatMods, SpellCombatMods ); +StateArr[6] = new CharState( "SpellArmor5", SpellCombatMods, SpellCombatMods ); // And the globals to hold the current values... spell_AC_bonus = 0; spell_Defl_bonus = 0; spell_Nat_bonus = 0; +spell_Dodge_bonus = 0; spell_Shield_bonus = 0; // Set up the table of information about stats |FOR,%stat,0,COUNT[STATS]-1,1,1| @@ -394,13 +405,13 @@ var Memorized = new Array(); function MemSpellsLevel(nMax, nName, nLevel) { - this.Name = nName; // Cleric - this.Level = nLevel; // 1 (1st level) - this.Max = nMax; // 2 (spells) + this.Name = nName; // Cleric + this.Level = nLevel; // 1 (1st level) + this.Max = nMax; // 2 (spells) this.mem = MemSpellMem; // Mark another as prepared this.cast = MemSpellCast; // Clear mark because it was cast - this.error = 0; // Did *Mem or *Cast fail? - this.Cur = 0; // The number of spells at this level currently prepared. + this.error = 0; // Did *Mem or *Cast fail? + this.Cur = 0; // The number of spells at this level currently prepared. } function MemSpellMem() { @@ -481,9 +492,9 @@ ATKArr[1] = new ATK("Ranged","|ATTACK.RANGED.TOTAL|","|ATTACK.RANGED|",DEXindex,|ATTACK.RANGED.SIZE|,|ATTACK.RANGED.EPIC|,|ATTACK.RANGED.MISC|); |IIF(VAR.UseCombatManueverBonus:1)| CMB_Pos = 2; -ATKArr[2] = new ATK("CMB","|VAR.CMB.INTVAL.SIGN|","|ATTACK.MELEE.BASE|",STRindex,|VAR.CMB_SizeMod.INTVAL.SIGN|,|VAR.CMB_Epic.INTVAL.SIGN|,|VAR.CMB_Misc.INTVAL.SIGN|); +ATKArr[2] = new ATK("CMB","|VAR.CMB.INTVAL.SIGN|","|ATTACK.MELEE.BASE|",STRindex,|VAR.CM_SizeMod.INTVAL.SIGN|,|VAR.CMB_Epic.INTVAL.SIGN|,|VAR.CMB_Misc.INTVAL.SIGN|); CMD_Pos = 3; -ATKArr[3] = new ATK("CMD","|VAR.CMD.INTVAL.SIGN|","|ATTACK.MELEE.BASE|",STRDEXindex,|VAR.CMD_SizeMod.INTVAL.SIGN|,|VAR.CMD_Epic.INTVAL.SIGN|,|VAR.CMD_Misc.INTVAL.SIGN|); +ATKArr[3] = new ATK("CMD","|VAR.CMD.INTVAL.SIGN|","|ATTACK.MELEE.BASE|",STRDEXindex,|VAR.CM_SizeMod.INTVAL.SIGN|,|VAR.CMD_Epic.INTVAL.SIGN|,|VAR.CMD_Misc.INTVAL.SIGN|); |ELSE| ATKArr[2] = new ATK("Grapple","|ATTACK.GRAPPLE.TOTAL|","|ATTACK.GRAPPLE|",STRindex,|ATTACK.GRAPPLE.SIZE|,|ATTACK.GRAPPLE.EPIC|,|ATTACK.GRAPPLE.MISC|); |ENDIF| @@ -697,7 +708,7 @@ } } } - // We need to write the results to two divs occasionally. The second has "C" appended to the name. + // We need to write the results to two divs occasionally. The second has "_SND" appended to the name. outerTD = theDIV + "_TD_SND"; SndDIV = theDIV + "_SND"; if (document.getElementById(SndDIV) != null) { @@ -817,10 +828,11 @@ } var SpecialAttacksList = new Array(); -function NewSpecialAttacks(sNum, sName, sDesc, sAspect, sBenefit) { +function NewSpecialAttacks(sNum, sName, sDesc, sAspect, sBenefit, sSource) { this.number = sNum; this.Name = sName; this.Description = sDesc; + this.Source = sSource; this.Aspect = sAspect; this.showAspect = 0; if (sAspect.length > 0) @@ -832,15 +844,16 @@ } <!-- Yes, the variables are assigned outside the function to make them global --> |IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialAttack")>0)| |FOR,%specialAttack,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SpecialAttack")-1,1,0| -SpecialAttacksList[%specialAttack] = new NewSpecialAttacks(%specialAttack, "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.DESC|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.ASPECT|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.BENEFIT|"); +SpecialAttacksList[%specialAttack] = new NewSpecialAttacks(%specialAttack, "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.DESC|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.ASPECT|", "|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.BENEFIT|","|ABILITYALL.Special Ability.%specialAttack.TYPE=SpecialAttack.SOURCE|"); |ENDFOR| |ENDIF| var SpecialQualitiesList = new Array(); -function NewSpecialQualities(sNum, sName, sDesc, sAspect, sBenefit) { +function NewSpecialQualities(sNum, sName, sDesc, sAspect, sBenefit, sSource) { this.number = sNum; this.Name = sName; this.Description = sDesc; + this.Source = sSource; this.Aspect = sAspect; this.showAspect = 0; if (sAspect.length > 0) @@ -855,7 +868,7 @@ |FOR,%bar,0,count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")-1,1,0| |IIF(ABILITYALL.Special Ability.%bar.TYPE=SpecialAttack)| |ELSE| -SpecialQualitiesList[%bar] = new NewSpecialQualities(%bar, "|ABILITYALL.Special Ability.VISIBLE.%bar|", "|ABILITYALL.Special Ability.VISIBLE.%bar.DESC|", "|ABILITYALL.Special Ability.VISIBLE.%bar.ASPECT|", "|ABILITYALL.Special Ability.VISIBLE.%bar.BENEFIT|"); +SpecialQualitiesList[%bar] = new NewSpecialQualities(%bar, "|ABILITYALL.Special Ability.VISIBLE.%bar.!TYPE=SpecialAttack|", "|ABILITYALL.Special Ability.VISIBLE.%bar.!TYPE=SpecialAttack.DESC|", "|ABILITYALL.Special Ability.VISIBLE.%bar.!TYPE=SpecialAttack.ASPECT|", "|ABILITYALL.Special Ability.VISIBLE.%bar.!TYPE=SpecialAttack.BENEFIT|", "|ABILITYALL.Special Ability.VISIBLE.%bar.!TYPE=SpecialAttack.SOURCE|"); |ENDIF| |ENDFOR| |ENDIF| @@ -871,6 +884,10 @@ // if the style.display value is blank we try to figure it out here if(Tvis.display==''&&Telem.offsetWidth!=undefined&&Telem.offsetHeight!=undefined) Tvis.display = (Telem.offsetWidth!=0&&Telem.offsetHeight !=0)?'block':'none'; + if(whichText == -1) { // Clear the block + Tvis.display = 'none'; + return; + } if(whichTable == 'SPECIAL_ATTACKS_Table') { then = SpecialAttacksListCurrent; SpecialAttacksListCurrent = whichText; @@ -878,6 +895,8 @@ if((ShowAspects == 1) && (SpecialAttacksList[whichText].showAspect == 1)) { now = now + "<br />" + SpecialAttacksList[whichText].Aspect ; } + if(ShowSources == 1) + now = now + "<br />" + SpecialAttacksList[whichText].Source ; } else if(whichTable == 'SPECIAL_QUALITIES_Table') { then = SpecialQualitiesListCurrent; SpecialQualitiesListCurrent = whichText; @@ -885,6 +904,8 @@ if((ShowAspects == 1) && (SpecialQualitiesList[whichText].showAspect == 1)) { now = now + "<br />" + SpecialQualitiesList[whichText].Aspect ; } + if(ShowSources == 1) + now = now + "<br />" + SpecialQualitiesList[whichText].Source ; } if(then != whichText) { Tvis.display = 'block'; @@ -913,6 +934,210 @@ vis.display = 'none'; } } +function ToggleSources() { + if(ShowSources == 0) { + ShowSources = 1; + document.getElementById('ShowSources').innerHTML = "Show Sources: <a class=\"c10yB\" name=\"#\" onclick=\"ToggleSources();\">On</a>"; + } else { + ShowSources = 0; + document.getElementById('ShowSources').innerHTML = "Show Sources: <a class=\"c10yB\" name=\"#\" onclick=\"ToggleSources();\">Off</a>"; + } + BuildFeatsCompTable(); + BuildEqCompTable(); + ToggleLayer('SPECIAL_ATTACKS_Table','SPECIAL_ATTACKS_Details','-1'); + ToggleLayer('SPECIAL_QUALITIES_Table','SPECIAL_QUALITIES_Details','-1'); +} +function BuildFeatsCompTable() { + newHTML = ""; + newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="2">\n'; + newHTML = newHTML + '<tr><td class="c10yB" colspan="2"><a name="#" onClick="CycleFeats();">FEATS</a></td></tr>\n'; + newHTML = newHTML + '<tr><td class="lt8sB" width="40%">NAME</td><td class="lt8sB" width="60%">DESCRIPTION</td></tr>\n'; +|FOR,%feat,0,COUNT[FEATSALL.VISIBLE]-1,1,0| +|OIF(EVEN:%feat,newHTML = newHTML + '<tr bgcolor="#DDDDDD">';,newHTML = newHTML + '<tr bgcolor="white">';)| + newHTML = newHTML + '<td valign="top" class="l8s">|FEATALL.VISIBLE.%feat|</td>\n'; + newHTML = newHTML + '<td valign="top" align="left" class="l8s">|FEATALL.VISIBLE.%feat.DESC|\n'; + if (ShowSources == 1) + newHTML = newHTML + '<br>|FEATALL.VISIBLE.%feat.SOURCE|\n'; + newHTML = newHTML + '</td></tr>\n'; +|ENDFOR| + newHTML = newHTML + '</table>\n'; + document.getElementById('FeatsComprehensive').innerHTML = newHTML; +} +function BuildEqCompTable() { + newHTML = ""; + newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="0" border="0">\n<tr>\n'; + newHTML = newHTML + '<td class="c10yB"><a name="#" onclick="CycleEquipment()">EQUIPMENT</a> ('; + newHTML = newHTML + StripZero("|TOTAL.WEIGHT|") + ' - ' + StripZero("|WEIGHT.LIGHT|") + '/' + StripZero("|WEIGHT.MEDIUM|") + '/' + StripZero("|WEIGHT.HEAVY|") + ' \n'; +|IIF(TOTAL.LOAD:Light)| + newHTML = newHTML + '<span style="font-size:10pt; font-weight:bold; color:green;">|TOTAL.LOAD| Load</span>\n'; +|ENDIF| +|IIF(TOTAL.LOAD:Medium)| + newHTML = newHTML + '<span style="font-size:10pt; font-weight:bold; color:yellow;">|TOTAL.LOAD| Load</span>\n'; +|ENDIF| +|IIF(TOTAL.LOAD:Heavy)| + newHTML = newHTML + '<span style="font-size:10pt; font-weight:bold; color:orange;">|TOTAL.LOAD| Load</span>\n'; +|ENDIF| +|IIF(TOTAL.LOAD:Overload)| + newHTML = newHTML + '<span style="font-size:10pt; font-weight:bold; color:red;">|TOTAL.LOAD|</span>\n'; +|ENDIF| + newHTML = newHTML + '</td></tr><tr><td width="100%" class="lt6">\n'; + newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="0" border="0">\n'; + newHTML = newHTML + '<tr><td width="70%" class="lt8sB">ITEM</td><td width="12%" class="ct8sB">LOCATION</td>\n'; + newHTML = newHTML + ' <td width="6%" class="ct8sB">QTY</td><td width="6%" class="ct8sB">WT.</td>\n'; + newHTML = newHTML + ' <td width="6%" class="ct8sB">GP COST</td></tr>\n'; +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGENONE.%equip1.LOCATION:Equipped)| + newHTML = newHTML + EvenOddLine(); + newHTML = newHTML + '<td class="lt9s"> |EQ.MERGENONE.%equip1.NAME.MAGIC~<b>~</b>|\n'; +|IIF(EQ.MERGENONE.%equip1.SPROP: )| + newHTML = newHTML + '<br /><span class="lt7">(|EQ.MERGENONE.%equip1.SPROP|)</span>\n'; +|ENDIF| +|IIF(EQ.MERGENONE.%equip1.NOTE: )| + newHTML = newHTML + '<br /><span class="lt7">(|EQ.MERGENONE.%equip1.NOTE|)</span>\n'; +|ENDIF| +|FOR,%charges,1,EQ.MERGENONE.%equip1.CHARGES,1,0| +|IIF(%charges:1)| + newHTML = newHTML + '<br /> |EQ.MERGENONE.%equip1.CHARGES| Charges\n'; +|ENDIF| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|IIF(EQ.MERGENONE.%equip1.TYPE:Consumable)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|IIF(EQ.MERGENONE.%equip1.TYPE:Potion)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|IIF(EQ.MERGENONE.%equip1.TYPE:Ammunition)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|ENDIF| +|ENDIF| +|ENDIF| + if(ShowSources == 1) + newHTML = newHTML + '<br /><span class="lt7">|EQ.MERGENONE.%equip1.SOURCE|</span>\n'; + newHTML = newHTML + '</td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.WT|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.COST|<br /></td>\n'; + newHTML = newHTML + '</tr>\n'; +|ENDIF| +|ENDFOR| +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGENONE.%equip1.LOCATION:Carried)| + newHTML = newHTML + EvenOddLine(); + newHTML = newHTML + '<td class="lt9s"> |EQ.MERGENONE.%equip1.NAME.MAGIC~<b>~</b>|\n'; +|IIF(EQ.MERGENONE.%equip1.SPROP: )| + newHTML = newHTML + '<br /><span class="lt7">(|EQ.MERGENONE.%equip1.SPROP|)</span>\n'; +|ENDIF| +|IIF(EQ.MERGENONE.%equip1.NOTE: )| + newHTML = newHTML + '<br /><span class="lt7">(|EQ.MERGENONE.%equip1.NOTE|)</span>\n'; +|ENDIF| +|FOR,%charges,1,EQ.MERGENONE.%equip1.CHARGES,1,0| +|IIF(%charges:1)| + newHTML = newHTML + '<br /> |EQ.MERGENONE.%equip1.CHARGES| Charges\n'; +|ENDIF| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|IIF(EQ.MERGENONE.%equip1.TYPE:Consumable)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|IIF(EQ.MERGENONE.%equip1.TYPE:Potion)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|IIF(EQ.MERGENONE.%equip1.TYPE:Ammunition)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|ENDIF| +|ENDIF| +|ENDIF| + if(ShowSources == 1) + newHTML = newHTML + '<br /><span class="lt7">|EQ.MERGENONE.%equip1.SOURCE|</span>\n'; + newHTML = newHTML + '</td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.WT|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.COST|<br /></td>\n'; + newHTML = newHTML + '</tr>\n'; +|ENDIF| +|ENDFOR| +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGENONE.%equip1.LOCATION:Equipped.OR.EQ.MERGENONE.%equip1.LOCATION:Carried)| +|ELSE| + newHTML = newHTML + EvenOddLine(); + newHTML = newHTML + '<td class="lt9s"> |EQ.MERGENONE.%equip1.NAME.MAGIC~<b>~</b>|\n'; +|IIF(EQ.MERGENONE.%equip1.SPROP: )| + newHTML = newHTML + '<br /><span class="lt7">(|EQ.MERGENONE.%equip1.SPROP|)</span>\n'; +|ENDIF| +|IIF(EQ.MERGENONE.%equip1.NOTE: )| + newHTML = newHTML + '<br /><span class="lt7">(|EQ.MERGENONE.%equip1.NOTE|)</span>\n'; +|ENDIF| +|FOR,%charges,1,EQ.MERGENONE.%equip1.CHARGES,1,0| +|IIF(%charges:1)| + newHTML = newHTML + '<br /> |EQ.MERGENONE.%equip1.CHARGES| Charges\n'; +|ENDIF| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|IIF(EQ.MERGENONE.%equip1.TYPE:Consumable)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|IIF(EQ.MERGENONE.%equip1.TYPE:Potion)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|IIF(EQ.MERGENONE.%equip1.TYPE:Ammunition)| + newHTML = newHTML + '<br />'; +|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| + newHTML = newHTML + '<font style="font-size: 7pt">☐</font>\n'; +|ENDFOR| +|ELSE| +|ENDIF| +|ENDIF| +|ENDIF| + if(ShowSources == 1) + newHTML = newHTML + '<br /><span class="lt7">|EQ.MERGENONE.%equip1.SOURCE|</span>\n'; + newHTML = newHTML + '</td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.WT|<br /></td>\n'; + newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.COST|<br /></td>\n'; + newHTML = newHTML + '</tr>\n'; +|ENDIF| +|ENDFOR| + newHTML = newHTML + '<tr>\n'; + newHTML = newHTML + '<td width="41%" class="rt8s">TOTAL WEIGHT CARRIED/VALUE </td>\n'; + newHTML = newHTML + '<td width="3%" class="ct8s" colspan="2" nowrap="nowrap">|TOTAL.WEIGHT|</td>\n'; + newHTML = newHTML + '<td width="3%" class="ct8s" colspan="2" nowrap="nowrap">|TOTAL.VALUE|</td>\n'; + newHTML = newHTML + '</tr>\n'; + newHTML = newHTML + '</table>\n'; + newHTML = newHTML + '</td>\n'; + newHTML = newHTML + '</tr>\n'; + newHTML = newHTML + '</table>\n'; + document.getElementById('EquipmentComprehensive').innerHTML = newHTML; +} // A variable of type ATK ("attack") supports the following // Only those marked with * should be modified after creation // name string RW "Melee" or "Ranged" @@ -1085,6 +1310,7 @@ // abilityModified bool RO TRUE if ability != abilityBase // size int RW Current AC modifier due to size // naturalarmor int RW Current AC modifier due to natural armor +// dodge int RW Current AC modifier due to dodge // miscBase int RW Unmodified AC modifier due to other affects // misc int RO Current AC modifier due to other affects // miscModified bool RO TRUE if misc != miscBase @@ -1095,11 +1321,13 @@ // *spellShieldMod int RW Current Shield modifier due spell (eg. Shield) // *spellDeflMod int RW Current Deflection modifier due spell (eg. Shield of Faith) // *spellNatMod int RW Current Natural Armor modifier due spell (eg. Barkskin) -function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nAbility,nSize,nNatural,nDeflection,nMisc) +// *spellDodgeMod int RW Current Dodge modifier due spell (eg. Haste) +function ACObject(nFlat,nTouch,nTotal,nBase,nArmor,nShield,nAbility,nSize,nNatural,nDeflection,nDodge,nMisc) { this.spellACMod = 0; this.spellDeflMod = 0; this.spellNatMod = 0; + this.spellDodgeMod = 0; this.spellShieldMod = 0; this.flatBase = nFlat; this.flat = ACObjFlat; @@ -1124,6 +1352,9 @@ this.ability = ACObjAbility; this.abilityModified = ACObjAbilityModified; this.size = nSize; + this.dodgeBase = nDodge; + this.dodge = ACObjDodge; + this.dodgeModified = ACObjDodgeModified; this.naturalarmorBase = nNatural; this.naturalarmor = ACObjNaturalArmor; this.naturalarmorModified = ACObjNaturalArmorModified; @@ -1147,7 +1378,7 @@ } function ACObjTouch() { - return this.touchBase-this.deflectionBase+this.deflection()-this.abilityBase+this.ability()-this.miscBase+this.misc(); + return this.touchBase-this.deflectionBase+this.deflection()-this.dodgeBase+this.dodge()-this.abilityBase+this.ability()-this.miscBase+this.misc(); } function ACObjTouchModified() { @@ -1180,6 +1411,18 @@ else return TRUE; } +function ACObjDodge() +{ + out = Math.max(this.dodgeBase, this.spellDodgeMod); + return out; +} +function ACObjDodgeModified() +{ + if ( this.dodgeBase == this.dodge() ) + return FALSE; + else + return TRUE; +} function ACObjDeflection() { out = Math.max(this.deflectionBase, this.spellDeflMod); @@ -1206,7 +1449,7 @@ } function ACObjTotal() { - return this.totalBase-this.armorBase+this.armor()-this.shieldBase+this.shield()-this.deflectionBase+this.deflection()-this.naturalarmorBase+this.naturalarmor()-this.abilityBase+this.ability()-this.miscBase+this.misc(); + return this.totalBase-this.armorBase+this.armor()-this.shieldBase+this.shield()-this.deflectionBase+this.deflection()-this.naturalarmorBase+this.naturalarmor()-this.dodgeBase+this.dodge()-this.abilityBase+this.ability()-this.miscBase+this.misc(); } function ACObjTotalModified() { @@ -1484,6 +1727,14 @@ if ((foo > -1) && (foo < 11)) spell_Nat_bonus = foo; } +function setSpellDodgeBonus() +{ + foo = 12; // out of range marker, selections are 0-10. + if (document.getElementById('spell_dodge_bonus') != null) + foo = document.getElementById("spell_dodge_bonus").value; + if ((foo > -1) && (foo < 11)) + spell_Dodge_bonus = foo; +} function setSpellACBonus() { foo = 12; @@ -1898,6 +2149,10 @@ tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.naturalarmor()+'<\/td><td class="c7mB">+<\/td>'; tempHTML = tempHTML+'<td '; + if ( AC.dodgeModified() ) + tempHTML = tempHTML+styleTag; + tempHTML = tempHTML+'class="c9sB">'+AC.dodge()+'<\/td><td class="c7mB">+<\/td>'; + tempHTML = tempHTML+'<td '; if ( AC.miscModified() ) tempHTML = tempHTML+styleTag; tempHTML = tempHTML+'class="c9sB">'+AC.misc()+'<\/td><td align="center" width="5"><\/td>'; @@ -1908,7 +2163,7 @@ // MAXDEX==0 means NO maxdex if ( AC.maxdex != 0 ) tempHTML = tempHTML + AC.maxdex; - tempHTML = tempHTML+'<br /><\/td><td align="center"><\/td>'; + tempHTML = tempHTML+'<br /><\/td>'; tempHTML = tempHTML+'<tr><td align="center" width="50"><\/td>'; tempHTML = tempHTML+'<td width="25" class="ct6mB">TOTAL<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="ct6mB">FLAT<\/td><td><\/td>'; @@ -1919,12 +2174,13 @@ tempHTML = tempHTML+'<td width="25" class="c4">DEFLECTION<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">STAT<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">SIZE<br />BONUS<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25" class="c4">DODGE<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">NATURAL<br />ARMOR<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISC<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISS<br />CHANCE<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">ARCANE<br />FAILURE<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">ARMOR<br />CHECK<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">MAX<br />DEX<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25" class="c4"> MAX <br /> DEX <\/td>'; tempHTML = tempHTML+'<\/tr><\/table>'; document.getElementById('ACDiv').innerHTML = tempHTML; ABPrint(); @@ -1935,7 +2191,7 @@ wascurrent = document.getElementById('InitRoll').innerHTML; else wascurrent = " "; - styleTag = ' style="background: LIGHTBLUE" '; + styleTag = ' style="background:LIGHTBLUE;" '; tempHTML = '<table><tr>'; tempHTML = tempHTML+'<td width="85" class="c9wB">INITIATIVE<span class="c5w"><br />Modifier<\/span><\/td>'; tempHTML = tempHTML+'<td '; @@ -1951,7 +2207,7 @@ tempHTML = tempHTML+'<td class="c10sB" width="25">'+Init.initBonus+'<br><span class="cb5">MISC</span><\/td>'; tempHTML = tempHTML+'<td class="cm7mB"><\/td>'; tempHTML = tempHTML+'<td class="c8" width="25"><a name="#" onClick="rollIntoDIV(1,20,'+Init.initTotal()+',\'Initiative Roll\',\'InitRoll\',1);"><img src="die.png" Alt="Roll" width="24px" height="26px" border="0"></a><\/td>'; - tempHTML = tempHTML+'<td id="InitRoll_TD" class="c10sB" width="25"><div id="InitRoll" class="c10B" style="background-color:transparent;display:inline;">'+wascurrent+'</div><br><span class="cb5">CURRENT</span><\/td>'; + tempHTML = tempHTML+'<td id="InitRoll_TD" class="c10sBx" width="25"><div id="InitRoll" class="c10B" style="background-color:transparent;display:inline;">'+wascurrent+'</div><br><span class="cb5">CURRENT</span><\/td>'; tempHTML = tempHTML+'<\/tr><\/table>'; document.getElementById("Initdiv").innerHTML = tempHTML; } @@ -2527,7 +2783,7 @@ tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '<tr>'; tempHTML = tempHTML + ' <td width="1%" class="r7w">Roll <a name="#" onClick="rollTurning('+turnCheck+','+numDice+','+sizeDie+','+turnDamage+','+turnLevel+',\''+title+'_roll\',\'\');"><img src="die.png" Alt="Roll" width="24px" height="26px" border="0"></a><\/td>'; - tempHTML = tempHTML + ' <td id="' + title + '_roll" colspan="3" class="c9sB"> <\/td>'; + tempHTML = tempHTML + ' <td id="' + title + '_roll" colspan="3" class="c9sBx"> <\/td>'; tempHTML = tempHTML + ' <td class="r7w">TURNS/DAY<\/td>'; tempHTML = tempHTML + ' <td style="background:'+tempBG+'" class="c9sB">'+turnsPerDay+'<\/td>'; tempHTML = tempHTML + ' <td style="background:'+tempBG+'" colspan="2" class="c9s">'; @@ -2703,6 +2959,7 @@ document.getElementById('SpellBookComprehensive').style.display = 'inline'; CreateClassInnateSpellsCompact(); CreateMainSpellCompact(); + BuildEqCompTable(); writeMiscNotes(); CurHPPrint(); }; @@ -3125,17 +3382,23 @@ |FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| |IIF(%spellbook:1)| racialHTML = racialHTML + '<a class="lh9" name="#" onclick="ToggleDIV(\'' + 'Racial.Innate.' + '|%spell|' + '\');">' +"|SPELLMEM.%class.%spellbook.%level.%spell.NAME|</a>"; - perday = "|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|"; -|OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES>0), racialHTML = racialHTML + ' (' + perday + '/day)';,)| + units = "|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|"; + perunit = "/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|"; + if( perunit == "/") + perunit = "/day"; +|OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES>0), racialHTML = racialHTML + ' (' + units + perunit + ')';,)| |OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES:ATWILL), racialHTML = racialHTML + ' (at will)';,)| -|OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES:0), racialHTML = racialHTML + ' (?/day)';,)| +|OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES:0), racialHTML = racialHTML + ' (?' + perunit +')';,)| racialHTML = racialHTML + ', '; |ELSE| innateHTML = innateHTML + '<a class="lh9" name="#" onclick="ToggleDIV(\'' + 'Class.Innate.' + '|%spellbook|' + '.' + '|%spell|' + '\');">' +"|SPELLMEM.%class.%spellbook.%level.%spell.NAME|</a>"; - perday = "|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|"; -|OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES>0), innateHTML = innateHTML + ' (' + perday + '/day)';,)| + units = "|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|"; + perunit = "/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|"; + if( perunit == "/") + perunit = "/day"; +|OIF((SPELLMEM.%class.%spellbook.%level.%spell.TIMES>0), innateHTML = innateHTML + ' (' + units + perunit + ')';,)| |OIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:ATWILL, innateHTML = innateHTML + ' (at will)';,)| -|OIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:0, innateHTML = innateHTML + ' (?/day)';,)| +|OIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:0, innateHTML = innateHTML + ' (?' + perunit +')';,)| innateHTML = innateHTML + ', '; |ENDIF| |ENDFOR| @@ -4342,6 +4605,10 @@ this.shield = Math.max(this.shieldBase, this.spellShieldMod); this.shieldModified = ACObjShieldModified; } + if(this.name == "SpellArmor5") { + this.dodge = Math.max(this.dodgeBase, this.spellDodgeMod); + this.dodgeModified = ACObjDodgeModified; + } ABPrint(); ACPrint(); ComprehensiveSkillPrint(); @@ -4369,31 +4636,37 @@ { document.write( '<tr id="config4" class="c6"><td class="c6"><center>'); document.write( '<table border="0" cellpadding="0"><tr valign="top"><td>'); - document.write( '<input id=configSpells type=button value="cfg" name=configSpells onclick="ToggleDIV(\'cfgA\');ToggleDIV(\'cfgB\');ToggleDIV(\'cfgC\');ToggleDIV(\'cfgD\');"></td><td class="l8">'); + document.write( '<input id=configSpells type=button value="cfg" name=configSpells onclick="ToggleDIV(\'cfgA\');ToggleDIV(\'cfgB\');ToggleDIV(\'cfgC\');ToggleDIV(\'cfgD\');ToggleDIV(\'cfgE\');"></td><td class="l8">'); // document.write( '<input id=SpellArmorButton1 type=button value="No Spells" name=SpellArmorButton1 onclick="SetArmorSpell(0);"> '); - document.write( '<div style="display:inline;"><input id=SpellArmorButton2 type=button style="width:100px;" value="Spell Armor" name=SpellArmorButton2 onclick="SetArmorSpell(1);">'); + document.write( '<div style="display:inline;"><input id="SpellArmorButton2" type=button style="width:100px;" value="Spell Armor" name="SpellArmorButton2" onclick="SetArmorSpell(1);"> '); document.write( '<div id="cfgA" style="display:none;"><select id="spell_AC_bonus" autocomplete="off" onchange="setSpellACBonus();">'); document.write( '<option value="0" selected>0</option><option value="1">1</option><option value="2">2</option>'); document.write( '<option value="3">3</option><option value="4">4</option><option value="5">5</option>'); document.write( '<option value="6">6</option><option value="7">7</option><option value="8">8</option>'); - document.write( '<option value="9">9</option><option value="10">10</option></select> <span class="l8">Bonus AC due to spells</span><br></div></div>'); - document.write( '<div style="display:inline;"><input id=SpellArmorButton3 type=button style="width:100px;" value="Deflection" name=SpellArmorButton3 onclick="SetArmorSpell(2);"> '); + document.write( '<option value="9">9</option><option value="10">10</option></select> <span class="l8">Temp bonus AC due to spells</span><br></div></div>'); + document.write( '<div style="display:inline;"><input id="SpellArmorButton3" type=button style="width:100px;" value="Deflection" name="SpellArmorButton3" onclick="SetArmorSpell(2);"> '); document.write( '<div id="cfgB" style="display:none;"><select id="spell_deflection_bonus" autocomplete="off" onchange="setSpellDeflBonus();">'); document.write( '<option value="0" selected>0</option><option value="1">1</option><option value="2">2</option>'); document.write( '<option value="3">3</option><option value="4">4</option><option value="5">5</option>'); document.write( '<option value="6">6</option><option value="7">7</option><option value="8">8</option>'); - document.write( '<option value="9">9</option><option value="10">10</option></select><br></div></div>'); - document.write( '<div style="display:inline;"><input id=SpellArmorButton4 type=button style="width:100px;" value="Natural Armor" name=SpellArmorButton4 onclick="SetArmorSpell(3);"> '); + document.write( '<option value="9">9</option><option value="10">10</option></select> <span class="l8">Select as the total type bonus</span><br></div></div>'); + document.write( '<div style="display:inline;"><input id="SpellArmorButton4" type=button style="width:100px;" value="Natural Armor" name="SpellArmorButton4" onclick="SetArmorSpell(3);"> '); document.write( '<div id="cfgC" style="display:none;"><select id="spell_natural_bonus" autocomplete="off" onchange="setSpellNatBonus();">'); document.write( '<option value="0" selected>0</option><option value="1">1</option><option value="2">2</option>'); document.write( '<option value="3">3</option><option value="4">4</option><option value="5">5</option>'); document.write( '<option value="6">6</option><option value="7">7</option><option value="8">8</option>'); document.write( '<option value="9">9</option><option value="10">10</option></select><br></div></div>'); - document.write( '<div style="display:inline;"><input id=SpellArmorButton5 type=button style="width:100px;" value="Shield" name=SpellArmorButton4 onclick="SetArmorSpell(4);">' ); + document.write( '<div style="display:inline;"><input id="SpellArmorButton5" type=button style="width:100px;" value="Shield" name="SpellArmorButton5" onclick="SetArmorSpell(4);"> '); document.write( '<div id="cfgD" style="display:none;"><select id="spell_shield_bonus" autocomplete="off" onchange="setSpellShieldBonus();">'); document.write( '<option value="0" selected>0</option><option value="1">1</option><option value="2">2</option>'); document.write( '<option value="3">3</option><option value="4">4</option><option value="5">5</option>'); document.write( '<option value="6">6</option><option value="7">7</option><option value="8">8</option>'); + document.write( '<option value="9">9</option><option value="10">10</option></select><br></div></div>'); + document.write( '<div style="display:inline;"><input id="SpellArmorButton6" type=button style="width:100px;" value="Dodge" name="SpellArmorButton6" onclick="SetArmorSpell(5);"> '); + document.write( '<div id="cfgE" style="display:none;"><select id="spell_dodge_bonus" autocomplete="off" onchange="setSpellDodgeBonus();">'); + document.write( '<option value="0" selected>0</option><option value="1">1</option><option value="2">2</option>'); + document.write( '<option value="3">3</option><option value="4">4</option><option value="5">5</option>'); + document.write( '<option value="6">6</option><option value="7">7</option><option value="8">8</option>'); document.write( '<option value="9">9</option><option value="10">10</option></select></div></div>'); document.write( '<\/td><\/tr></table>' ); document.write( '<\/td><\/tr>' ); @@ -4431,15 +4704,19 @@ document.getElementById('SpellArmorButton3').className = ''; document.getElementById('SpellArmorButton4').className = ''; document.getElementById('SpellArmorButton5').className = ''; + document.getElementById('SpellArmorButton6').className = ''; AC.spellACMod = 0; AC.spellDeflMod = 0; AC.spellNatMod = 0; + AC.spellDodgeMod = 0; AC.spellShieldMod = 0; for ( i=0; i<StateArr.length; ++i ) { if ( StateArr[i].name == "SpellArmor1" ) StateArr[i].activate( 0 ); if ( StateArr[i].name == "SpellArmor2" ) StateArr[i].activate( 0 ); if ( StateArr[i].name == "SpellArmor3" ) StateArr[i].activate( 0 ); if ( StateArr[i].name == "SpellArmor4" ) StateArr[i].activate( 0 ); + if ( StateArr[i].name == "SpellArmor5" ) StateArr[i].activate( 0 ); + if ( StateArr[i].name == "SpellArmor6" ) StateArr[i].activate( 0 ); } } else { // In this version, we can have multiple active, so we do not shut off except on 0. @@ -4487,6 +4764,17 @@ AC.spellShieldMod = 0; } } + if(level == 5) { + if(document.getElementById('SpellArmorButton6').className == '') { + document.getElementById('SpellArmorButton6').className = 'activeButton'; + AC.spellDodgeMod = spell_Dodge_bonus; + if(spell_Dodge_bonus == 0) + document.getElementById('SpellArmorButton6').className = 'greyButton'; + } else { + document.getElementById('SpellArmorButton6').className = ''; + AC.spellDodgeMod = 0; + } + } // Now that we have set the variables, go execute the changes. for ( i=0; i<StateArr.length; ++i ) if ( StateArr[i].name == "SpellArmor" + level ) @@ -4559,6 +4847,7 @@ </script> </head> <body onload="Compact();"> +<table border="0px" width="600px"><tr><td><!-- force narrow design--> <script language="javascript" type="text/javascript">OneTimeBbnLevelParse();</script> <script language="javascript" type="text/javascript">CheckForMonk();</script> @@ -4799,14 +5088,13 @@ picture will show on when the Full Header button is clicked to display the charcter's bio and background.<br /> Large Die Icon: <img src="die.png" onerror="ToggleDIV('large_die_available');"> <div id="large_die_available" style="display:none; color:red;" class="l8">The large die image is missing. - Copy ...\pcgen\preview\d20\fantasy\images\gold\die.png to your character directory where this page - is to activate a dice rolling icon in the Saves and Initiative sections. + Copy ...\pcgen\preview\d20\fantasy\images\gold\die.png to your character directory, + usually |DIR.PCG|, where this page is, to activate a dice rolling icon in the Saves and Initiative sections. </div> - <br /> Small Die Icon: <img src="die_small.png" onerror="ToggleDIV('small_die_available');"> <div id="small_die_available" style="display:none; color:red;" class="l8">The small die image is missing. - Copy ...\pcgen\preview\d20\fantasy\images\gold\die_small.png to your character directory where this page - is to activate a dice rolling icon in the Skills section. + Copy ...\pcgen\preview\d20\fantasy\images\gold\die_small.png to your character directory, + usually |DIR.PCG|, where this page is, to activate a dice rolling icon in the Saves and Initiative sections. </div> <br /> <br /> @@ -5200,7 +5488,7 @@ |FOR,%equip1,0,(COUNT[EQUIPMENT.MERGELOC.Not.Coin.NOT.Gem]-1),1,0| |OIF(EVEN:%equip1,<tr style="background:#DDDDDD">,<td width="3%"> </td>)| <td class="rt8" width="5%"> <b>|EQ.MERGELOC.Not.Coin.NOT.Gem.%equip1.QTY.INTVAL|</b> </td> - <td class="lt8"> |EQ.MERGELOC.Not.Coin.NOT.Gem.%equip1.NAME.MAGIC~ * ~ * |</td> + <td class="lt8"> |EQ.MERGELOC.Not.Coin.NOT.Gem.%equip1.NAME.MAGIC~<b>~</b> |</td> <td class="ct8"><script language="javascript" type="text/javascript">document.write(StripZero('|EQ.MERGELOC.Not.Coin.NOT.Gem.%equip1.WT|'));</script></td> |OIF(EVEN:%equip1,<td></td>,</tr>)| |ENDFOR| @@ -5213,181 +5501,6 @@ <!-- END Compact Equipment (main table row 3) --> <!-- START of Comprehensive Equipment Table --> <div id="EquipmentComprehensive" style="display:none"> - <table width="100%" cellspacing="0" cellpadding="0" border="0"> <!-- Master Equipment Table --> - <tr> - <td class="c10yB"><a name="#" onclick="CycleEquipment()">EQUIPMENT</a> (<script language="javascript" type="text/javascript">document.write(StripZero('|TOTAL.WEIGHT|'));</script> - <script language="javascript" type="text/javascript">document.write(StripZero('|WEIGHT.LIGHT|'));</script>/<script language="javascript" type="text/javascript">document.write(StripZero('|WEIGHT.MEDIUM|'));</script>/<script language="javascript" type="text/javascript">document.write(StripZero('|WEIGHT.HEAVY|'));</script>) -|IIF(TOTAL.LOAD:Light)| - <span style="font-size:10pt; font-weight:bold; color:green;">|TOTAL.LOAD| Load</span> -|ENDIF| -|IIF(TOTAL.LOAD:Medium)| - <span style="font-size:10pt; font-weight:bold; color:yellow;">|TOTAL.LOAD| Load</span> -|ENDIF| -|IIF(TOTAL.LOAD:Heavy)| - <span style="font-size:10pt; font-weight:bold; color:orange;">|TOTAL.LOAD| Load</span> -|ENDIF| -|IIF(TOTAL.LOAD:Overload)| - <span style="font-size:10pt; font-weight:bold; color:red;">|TOTAL.LOAD|</span> -|ENDIF| - </td> - </tr> - <tr> - <td width="100%" class="lt6"> - <table width="100%" cellspacing="0" cellpadding="0" border="0"> <!-- Equipment Table left pane --> - <tr> - <td width="70%" class="lt8sB">ITEM</td> - <td width="12%" class="ct8sB">LOCATION</td> - <td width="6%" class="ct8sB">QTY</td> - <td width="6%" class="ct8sB">WT.</td> - <td width="6%" class="ct8sB">GP COST</td> - </tr> -|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| -|IIF(EQ.MERGENONE.%equip1.LOCATION:Equipped)| - <script language="javascript" type="text/javascript">document.write(EvenOddLine());</script> -|IIF(EQ.MERGENONE.%equip1.NAME.MAGIC: )| - <td class="lt8sB"> |EQ.MERGENONE.%equip1.NAME.MAGIC|<br /> -|ELSE| - <td class="lt8s"> |EQ.MERGENONE.%equip1.NAME.MAGIC|<br /> -|ENDIF| -|IIF(EQ.MERGENONE.%equip1.SPROP: )| - <span class="lt7">(|EQ.MERGENONE.%equip1.SPROP|)</span><br /> -|ENDIF| -|IIF(EQ.MERGENONE.%equip1.NOTE: )| - <span class="lt7">(|EQ.MERGENONE.%equip1.NOTE|)</span><br /> -|ENDIF| -|FOR,%charges,1,EQ.MERGENONE.%equip1.CHARGES,1,0| -|IIF(%charges:1)| - |EQ.MERGENONE.%equip1.CHARGES| Charges -|ENDIF| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|IIF(EQ.MERGENONE.%equip1.TYPE:Consumable)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|IIF(EQ.MERGENONE.%equip1.TYPE:Potion)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|IIF(EQ.MERGENONE.%equip1.TYPE:Ammunition)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|ENDIF| -|ENDIF| -|ENDIF| - </td> - <td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.WT|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.COST|<br /></td> - </tr> -|ENDIF| -|ENDFOR| -|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| -|IIF(EQ.MERGENONE.%equip1.LOCATION:Carried)| - <script language="javascript" type="text/javascript">document.write(EvenOddLine());</script> -|IIF(EQ.MERGENONE.%equip1.NAME.MAGIC: )| - <td class="lt8sB"> |EQ.MERGENONE.%equip1.NAME.MAGIC|<br /> -|ELSE| - <td class="lt8s"> |EQ.MERGENONE.%equip1.NAME.MAGIC|<br /> -|ENDIF| -|IIF(EQ.MERGENONE.%equip1.SPROP: )| - <span class="lt7">(|EQ.MERGENONE.%equip1.SPROP|)</span><br /> -|ENDIF| -|IIF(EQ.MERGENONE.%equip1.NOTE: )| - <span class="lt7">(|EQ.MERGENONE.%equip1.NOTE|)</span><br /> -|ENDIF| -|FOR,%charges,1,EQ.MERGENONE.%equip1.CHARGES,1,0| -|IIF(%charges:1)| - |EQ.MERGENONE.%equip1.CHARGES| Charges -|ENDIF| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|IIF(EQ.MERGENONE.%equip1.TYPE:Consumable)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|IIF(EQ.MERGENONE.%equip1.TYPE:Potion)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|IIF(EQ.MERGENONE.%equip1.TYPE:Ammunition)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|ENDIF| -|ENDIF| -|ENDIF| - </td> - <td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.WT|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.COST|<br /></td> - </tr> -|ENDIF| -|ENDFOR| -|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| -|IIF(EQ.MERGENONE.%equip1.LOCATION:Equipped.OR.EQ.MERGENONE.%equip1.LOCATION:Carried)| -|ELSE| - <script language="javascript" type="text/javascript">document.write(EvenOddLine());</script> -|IIF(EQ.MERGENONE.%equip1.NAME.MAGIC: )| - <td class="lt8sB"> |EQ.MERGENONE.%equip1.NAME.MAGIC|<br /> -|ELSE| - <td class="lt8s"> |EQ.MERGENONE.%equip1.NAME.MAGIC|<br /> -|ENDIF| -|IIF(EQ.MERGENONE.%equip1.SPROP: )| - <span class="lt7">(|EQ.MERGENONE.%equip1.SPROP|)</span><br /> -|ENDIF| -|IIF(EQ.MERGENONE.%equip1.NOTE: )| - <span class="lt7">(|EQ.MERGENONE.%equip1.NOTE|)</span><br /> -|ENDIF| -|FOR,%charges,1,EQ.MERGENONE.%equip1.CHARGES,1,0| -|IIF(%charges:1)| - |EQ.MERGENONE.%equip1.CHARGES| Charges -|ENDIF| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|IIF(EQ.MERGENONE.%equip1.TYPE:Consumable)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|IIF(EQ.MERGENONE.%equip1.TYPE:Potion)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|IIF(EQ.MERGENONE.%equip1.TYPE:Ammunition)| -|FOR,%consumable,1,EQ.MERGENONE.%equip1.CHECKBOXES,1,0| - <font style="font-size: 7pt">☐</font> -|ENDFOR| -|ELSE| -|ENDIF| -|ENDIF| -|ENDIF| - </td> - <td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.WT|<br /></td> - <td class="ct8s">|EQ.MERGENONE.%equip1.COST|<br /></td> - </tr> -|ENDIF| -|ENDFOR| - <tr> - <td width="41%" class="rt8s">TOTAL WEIGHT CARRIED/VALUE </td> - <td width="3%" class="ct8s" colspan="2" nowrap="nowrap">|TOTAL.WEIGHT|</td> - <td width="3%" class="ct8s" colspan="2" nowrap="nowrap">|TOTAL.VALUE|</td> - </tr> - </table> - </td> - </tr> - </table> </div> <!-- STOP Equipment Table --> <!-- MONEY table --> @@ -5406,11 +5519,6 @@ <tr> <td class="lt8s"> <table width="100%" cellspacing="0" cellpadding="0"> -<!-- FIX: not displaying --> -|IIF(COUNT[EQTYPE.Coin]<1)| - <tr><td>No coins</td></tr> -|ENDIF| -<!-- END FIX: not displaying --> |FOR.0,COUNT[EQTYPE.Coin],1,<script language="javascript" type="text/javascript">document.write(StripZero('\EQTYPE.Coin.%.QTY\'));</script></td><td width="2%"> </td><td class="l8"> \EQTYPE.Coin.%.NAME\,<tr><td width="5%" class="r8">,</td></tr>,1| |FOR.0,COUNT[EQTYPE.Gem],1,<script language="javascript" type="text/javascript">document.write(StripZero('\EQTYPE.Gem.%.QTY\'));</script></td><td width="2%"> </td><td class="l8">\EQTYPE.Gem.%.NAME\ (Value: <script language="javascript" type="text/javascript">document.write(StripZero('\EQTYPE.Gem.%.COST\'));</script>) ,<tr><td width="5%" class="r8">,</td></tr>,1| |%VAR.GOLD| @@ -5971,20 +6079,20 @@ <tr><td> <table width="100%" cellspacing="0" cellpadding="2"> <tr> - <td class="c9wB">SPECIAL QUALITIES</td> + <td width="20%" class="c9wB"> </td> + <td width="60%" class="c9wB">SPECIAL QUALITIES</td> + <td width="20%" class="c9wB"><div class="c9wB" id="ShowSources">Show Sources: <a name="#" class="c10yB" onclick="ToggleSources();return('false');">Off</a></div></td> </tr> <tr> - <td width="100%" class="l7s"> -|FOR,%bar,0,count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")-1,1,0| -|IIF(ABILITYALL.Special Ability.%bar.TYPE=SpecialAttack)| -<!-- FIX: This check is not coded right to exclude Special Attacks from the Special Qualities section --> -|ELSE| + <td width="100%" class="l7s" colspan="3"> +|FOR,%bar,0,(count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")-1),1,0| |IIF(%bar:0)| |ELSE| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")-count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialAttack")>%bar)| • |ENDIF| - <a class="lh9" name="#" onclick="ToggleLayer('SPECIAL_QUALITIES_Table','SPECIAL_QUALITIES_Details','%bar');">|ABILITYALL.Special Ability.VISIBLE.%bar|</a> |ENDIF| + <a class="lh9" name="#" onclick="ToggleLayer('SPECIAL_QUALITIES_Table','SPECIAL_QUALITIES_Details','%bar');">|ABILITYALL.Special Ability.VISIBLE.%bar.!TYPE=SpecialAttack|</a> |ENDFOR| </td> </tr> @@ -6128,7 +6236,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> @@ -6179,7 +6287,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> @@ -6229,9 +6337,9 @@ <div id="Class.Regular.|%class|.|%spellbook|.|%spell|.|%level|" style="display:none;" width="100%"> <table width="100%" cellspacing="0" cellpadding="2" border=3 bordercolor="#8888CC"> <tr> - <td class="lt9mB" width="30%">|SPELLMEM.%class.%spellbook.%level.%spell.BONUSSPELL| + <td class="lt9mB" width="25%">|SPELLMEM.%class.%spellbook.%level.%spell.BONUSSPELL| <a name="#" onclick="ToggleDIV('Class.Regular.|%class|.|%spellbook|.|%spell|.|%level|');">|SPELLMEM.%class.%spellbook.%level.%spell.NAME|</a></td> - <td class="ct8" width="5%"><i>Level:</i><br />|%level|</td> + <td class="ct8" width="5%"><i>Lvl:</i><br />|%level|</td> <td class="ct8" width="5%"><i>DC:</i><br/>|SPELLMEM.%class.%spellbook.%level.%spell.DC|</td> <td class="ct8" width="5%"><i>Save:</i><br />|SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO|</td> |IIF(SPELLMEM.%class.%spellbook.%level.%spell.CASTINGTIME:1 standard action)| @@ -6240,9 +6348,9 @@ <td class="ct8" width="5%"><i>Time:</i> |SPELLMEM.%class.%spellbook.%level.%spell.CASTINGTIME|<br /></td> |ENDIF| <td class="ct8" width="10%"><i>Duration:</i><br />|SPELLMEM.%class.%spellbook.%level.%spell.DURATION|</td> - <td class="ct8" width="5%"><i>Comp:</i><br />|SPELLMEM.%class.%spellbook.%level.%spell.COMPONENTS|</td> + <td class="ct8" width="5%"><i>Comp: </i><br />|SPELLMEM.%class.%spellbook.%level.%spell.COMPONENTS|</td> <td class="ct8" width="5%"><i>SR:</i><br />|SPELLMEM.%class.%spellbook.%level.%spell.SR|</td> - <td class="ct8" width="5%"><i>School:</i><br />|SPELLMEM.%class.%spellbook.%level.%spell.SCHOOL|</td> + <td class="ct8" width="10%"><i>School:</i><br />|SPELLMEM.%class.%spellbook.%level.%spell.SCHOOL|</td> </tr> <tr> <td colspan="5" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> @@ -6261,7 +6369,7 @@ <td colspan="2" class="ct8"> |ENDIF| <i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> |IIF(SPELLMEM.%class.%spellbook.%level.%spell.COST:0)| @@ -6293,7 +6401,8 @@ </td> </tr> </table> <!-- End the whole table (finally!) --> -<!-- Hack to get Firefox to run the body.onload script if some images were unavailable an unloadable like die.png --> +<!-- Hack to get Firefox to run the body.onload script if some images were unavailable and unloadable like die.png --> <script language="javascript" type="text/javascript">Compact();</script> +</td></tr></table> </body> </html> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2009-12-30 15:18:21 UTC (rev 11262) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2009-12-30 15:22:15 UTC (rev 11263) @@ -63,6 +63,11 @@ Revisions: Mike Elliott 12/12/09 Updated to include CMB/CMD, added Compact Stats mode and many minor fixes. +Revisions: Mike Elliott 12/30/09 Added Show Sources to Feats, Special Attacks and Qualities, and Equipment, + 2917186 TIMEUNIT processing, .MAGIC~ to bold now, removed repeats of Special Attacks + in the Special Qualities section, 2923219 seperated out AC.Dodge into it's own box. + + $Revision$ $Author$ $Date$ @@ -227,6 +232,7 @@ .c9w { font-size:9pt; text-align:center; color:white; background:black; } .c9s { font-size:9pt; text-align:center; border:1px solid black; } .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } + .c9sBx{ font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; } .c9swB{ font-size:9pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } .c9wB { font-size:9pt; text-align:center; color:white; background:black; font-weight:bold; } .c9pB { font-size:9pt; text-align:center; color:#88DDFF; background:black; font-weight:bold; } @@ -248,6 +254,8 @@ .lt9b { font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } .lt9bw{ font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; color:white; background:black; } .lt9mB{ font-size:9pt; text-align:left; vertical-align:top; font-weight:bold; } + .lt9s { font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; } + .lt9sB{ font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } .r9 { font-size:9pt; text-align:right; } .r9w { font-size:9pt; text-align:center; color:white; background:black; } .r9wB { font-size:9pt; text-align:right; color:white; background:black; font-weight:bold; } @@ -257,6 +265,7 @@ .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } .c10mB { font-size:10pt; text-align:center; color:white; background:black; font-weight:bold; } .c10s { font-size:10pt; text-align:center; border:1px solid black; } + .c10sBx{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } .c10sl { font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; } .c10slB{ font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; font-weight:bold; } @@ -347,6 +356,7 @@ var WeapArr = new Array(); // Hardcoded Global Debug variable for now: Show Aspect information var ShowAspects = 0; +var ShowSources = 0; // List of checks var FORTindex = 0; var REFindex = 1; @@ -362,7 +372,7 @@ var HP = new HPObject( |HP| ); var Subdual = new SubdualObject( '0' ); // AC object -var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Misc|); +var AC = new ACObject(|AC.Flatfooted|,|AC.Touch|,|AC.Total|,|AC.Base|,|AC.Armor|,|AC.Shield|,|AC.Ability|,|AC.Size|,|AC.NaturalArmor|,|AC.Deflection|,|AC.Dodge|,|AC.Misc|); // List of skills forbidden to a raging Barb var SkillsRedList = new Array("Alchemy","Appraise","Craft","Decipher Script","Diplomacy","Disable Device","Disguise","Escape Artist","Forgery","Gather Information","Handle Animal","Heal","Hide","Innuendo","Intuit Direction","Knowledge","Move Silently","Open Lock","Perform","Pick Pocket","Profession","Read Lips","Scry","Search","Sense Motive","Sleight of Hand","Spellcraft","Tumble","Use Magic Device"); // List of the supported states a char can be in. @@ -372,10 +382,12 @@ StateArr[3] = new CharState( "SpellArmor2", SpellCombatMods, SpellCombatMods ); StateArr[4] = new CharState( "SpellArmor3", SpellCombatMods, SpellCombatMods ); StateArr[5] = new CharState( "SpellArmor4", SpellCombatMods, SpellCombatMods ); +StateArr[6] = new CharState( "SpellArmor5", SpellCombatMods, SpellCombatMods ); // And the globals to hold the current values... spell_AC_bonus = 0; spell_Defl_bonus = 0; spell_Nat_bonus = 0; +spell_Dodge_bonus = 0; spell_Shield_bonus = 0; // Set up the table of information about stats |FOR,%stat,0,COUNT[STATS]-1,1,1| @@ -394,13 +406,13 @@ var Memorized = new Array(); function MemSpellsLevel(nMax, nName, nLevel) { - this.Name = nName; // Cleric - this.Level = nLevel; // 1 (1st level) - this.Max = nMax; // 2 (spells) + this.Name = nName; // Cleric + this.Level = nLevel; // 1 (1st level) + this.Max = nMax; // 2 (spells) this.mem = MemSpellMem; // Mark another as prepared this.cast = MemSpellCast; // Clear mark because it was cast - this.error = 0; // Did *Mem or *Cast fail? - this.Cur = 0; // The number of spells at t... [truncated message content] |
From: <sat...@us...> - 2010-02-17 02:20:49
|
Revision: 11460 http://pcgen.svn.sourceforge.net/pcgen/?rev=11460&view=rev Author: satinknights Date: 2010-02-17 02:20:40 +0000 (Wed, 17 Feb 2010) Log Message: ----------- Fixed stat block regarding item and level bonuses. Changed stat block order to hilite current and grey out base. Weapon sort as primary/secondary/both/ rest. More compact stat block condensing and cleaning. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2010-02-17 02:06:52 UTC (rev 11459) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2010-02-17 02:20:40 UTC (rev 11460) @@ -67,6 +67,13 @@ 2917186 TIMEUNIT processing, .MAGIC~ to bold now, removed repeats of Special Attacks in the Special Qualities section, 2923219 seperated out AC.Dodge into it's own box. +Revisions: Mike Elliott 02/16/10 Sort weapons as primary/secondary/both/unequipped as presented. More condensing of + the compact abilities section. Tweaked ranged weapons with ammo contained in weapon. + FIX: To really show multiple ammo types, currently the .LST entry for a bow or + crossbow needs to have the container quantity set higher than one. + Fixed stats block with respect to item bonuses and animal companion level bonuses. + Greyed out base stats and moved column in order to make current values more visible. + $Revision$ $Author$ $Date$ @@ -227,7 +234,7 @@ .c9 { font-size:9pt; text-align:center; } .c9g { font-size:9pt; text-align:center; background:#DDDDDD; } - .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } + .c10sgB{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; color:#A0A0A0; } .c9w { font-size:9pt; text-align:center; color:white; background:black; } .c9s { font-size:9pt; text-align:center; border:1px solid black; } .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } @@ -390,13 +397,13 @@ spell_Shield_bonus = 0; // Set up the table of information about stats |FOR,%stat,0,COUNT[STATS]-1,1,1| - AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat.NOTEMP|",|STAT.%stat.MOD.NOTEMP|,TRUE,%stat); + AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat|",|STAT.%stat.MOD|,TRUE,%stat); //Set up stat modifier array ModToStat[%stat] = 0; ModToStatMod[%stat] = 0; |ENDFOR| // Some of these are bad values, but they are not going to be processed. This is a hidden STAT that will combine STR and DEX bonuses. -AbArr[STRDEXindex] = new Ability("STRDEX","STR and DEX combined","|STAT.0.NOTEMP.NOEQUIP|",|STAT.0.MOD.NOTEMP.NOEQUIP|,"|STAT.0.NOTEMP|",|STAT.0.MOD.NOTEMP|, FALSE,STRDEXindex); +AbArr[STRDEXindex] = new Ability("STRDEX","STR and DEX combined","|STAT.0.NOPOST.NOEQUIP|",|STAT.0.MOD.NOPOST.NOEQUIP|,"|STAT.0|",|STAT.0.MOD|, FALSE,STRDEXindex); ModToStat[STRDEXindex] = 0; ModToStatMod[STRDEXindex] = 0; // Have to define this after AbArr is denfined. @@ -452,36 +459,112 @@ // Deal with Unarmed WeapArr[0] = new Weapon( -1, "UNARMED", "Melee", "|WEAPONH.TOTALHIT|", "|WEAPONH.DAMAGE|", "T", "0'", "|WEAPONH.CRIT|", "|WEAPONH.MULT|", "B", "T", "" ); WeapArr[0].setOutputFormat(2); - -// Loop through the weapons -|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,1| - WeapArr[%weap+1] = new Weapon(|%weap|,"|WEAPON.%weap.NAME|","|WEAPON.%weap.CATEGORY|","|WEAPON.%weap.TOTALHIT|","|WEAPON.%weap.DAMAGE|", FirstChar("|WEAPON.%weap.HAND|"), "|WEAPON.%weap.RANGE|", "|WEAPON.%weap.CRIT|", "|WEAPON.%weap.MULT|", "|WEAPON.%weap.TYPE|", "|WEAPON.%weap.SIZE|", "|WEAPON.%weap.SPROP|" ); -|IIF(WEAPON.%weap.CATEGORY:Ranged)| - WeapArr[%weap+1].setOutputFormat(1); -|IIF(WEAPON.%weap.CONTENTS:0)| - RangedStuff = new WeaponRangedAmmoData( "", "" ); +WeapPos = 1; +// Loop through the weapons list three times. First adding primary, then equipped weapons, then non-equipped. +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| + if('x|WEAPON.EQUIPPED.%weap.HAND|' == 'xPrimary') { + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.EQUIPPED.%weap.NAME| (equipped)","|WEAPON.EQUIPPED.%weap.CATEGORY|","|WEAPON.EQUIPPED.%weap.TOTALHIT|","|WEAPON.EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.EQUIPPED.%weap.HAND|"), "|WEAPON.EQUIPPED.%weap.RANGE|", "|WEAPON.EQUIPPED.%weap.CRIT|", "|WEAPON.EQUIPPED.%weap.MULT|", "|WEAPON.EQUIPPED.%weap.TYPE|", "|WEAPON.EQUIPPED.%weap.SIZE|", "|WEAPON.EQUIPPED.%weap.SPROP|" ); +|IIF(WEAPON.EQUIPPED.%weap.CATEGORY:Ranged)| + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.EQUIPPED.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); |FOR,%range,0,4,1,0| - RangedStuff.addRangeIncrement( "|WEAPON.%weap.RANGELIST.%range|'", "|WEAPON.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.%weap.RANGELIST.%range.DAMAGE|" ); + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); |ENDFOR| - WeapArr[%weap+1].addRangedData( RangedStuff ); + WeapArr[WeapPos].addRangedData( RangedStuff ); |ELSE| -|FOR,%ammo,0,WEAPON.%weap.CONTENTS-1,1,0| - RangedStuff = new WeaponRangedAmmoData( "|WEAPON.%weap.CONTENTS.%ammo|", "|WEAPON.%weap.CONTENTS.%ammo.SPROP|" ); +|FOR,%ammo,0,WEAPON.EQUIPPED.%weap.CONTENTS,1,0| + fooA = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo|"; + fooB = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); |FOR,%range,0,4,1,0| - RangedStuff.addRangeIncrement( "|WEAPON.%weap.RANGELIST.%range|'", "|WEAPON.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); |ENDFOR| - WeapArr[%weap+1].addRangedData( RangedStuff ); + WeapArr[WeapPos].addRangedData( RangedStuff ); |ENDFOR| |ENDIF| |ELSE| -|IIF(WEAPON.%weap.ISTYPE.Double.OR.WEAPON.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.%weap.CATEGORY:NATURAL)| - WeapArr[%weap+1].setOutputFormat(2); +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| + WeapArr[WeapPos].setOutputFormat(2); |ELSE| - WeapArr[%weap+1].setOutputFormat(3); - WeapArr[%weap+1].addMeleeVector("|WEAPON.%weap.BASEHIT|", "|WEAPON.%weap.OHHIT|", "|WEAPON.%weap.THHIT|", "|WEAPON.%weap.TWPHITH|", "|WEAPON.%weap.TWPHITL|", "|WEAPON.%weap.TWOHIT|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.OHDAMAGE|", "|WEAPON.%weap.THDAMAGE|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.OHDAMAGE|" ); + WeapArr[WeapPos].setOutputFormat(3); + WeapArr[WeapPos].addMeleeVector("|WEAPON.EQUIPPED.%weap.BASEHIT|", "|WEAPON.EQUIPPED.%weap.OHHIT|", "|WEAPON.EQUIPPED.%weap.THHIT|", "|WEAPON.EQUIPPED.%weap.TWPHITH|", "|WEAPON.EQUIPPED.%weap.TWPHITL|", "|WEAPON.EQUIPPED.%weap.TWOHIT|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.EQUIPPED.%weap.THDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|" ); |ENDIF| |ENDIF| + WeapPos = WeapPos + 1; + } |ENDFOR| +// Second loop through the weapons. Now effectively adding hand = off, or hand = both. +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| + if(('|WEAPON.EQUIPPED.%weap.NAME|x' != 'x') && ('x|WEAPON.EQUIPPED.%weap.HAND|' != 'xPrimary')) { + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.EQUIPPED.%weap.NAME| (equipped)","|WEAPON.EQUIPPED.%weap.CATEGORY|","|WEAPON.EQUIPPED.%weap.TOTALHIT|","|WEAPON.EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.EQUIPPED.%weap.HAND|"), "|WEAPON.EQUIPPED.%weap.RANGE|", "|WEAPON.EQUIPPED.%weap.CRIT|", "|WEAPON.EQUIPPED.%weap.MULT|", "|WEAPON.EQUIPPED.%weap.TYPE|", "|WEAPON.EQUIPPED.%weap.SIZE|", "|WEAPON.EQUIPPED.%weap.SPROP|" ); +|IIF(WEAPON.EQUIPPED.%weap.CATEGORY:Ranged)| + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.EQUIPPED.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ELSE| +|FOR,%ammo,0,WEAPON.EQUIPPED.%weap.CONTENTS,1,0| + fooA = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo|"; + fooB = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDFOR| +|ENDIF| +|ELSE| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| + WeapArr[WeapPos].setOutputFormat(2); +|ELSE| + WeapArr[WeapPos].setOutputFormat(3); + WeapArr[WeapPos].addMeleeVector("|WEAPON.EQUIPPED.%weap.BASEHIT|", "|WEAPON.EQUIPPED.%weap.OHHIT|", "|WEAPON.EQUIPPED.%weap.THHIT|", "|WEAPON.EQUIPPED.%weap.TWPHITH|", "|WEAPON.EQUIPPED.%weap.TWPHITL|", "|WEAPON.EQUIPPED.%weap.TWOHIT|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.EQUIPPED.%weap.THDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|" ); +|ENDIF| +|ENDIF| + WeapPos = WeapPos + 1; + } +|ENDFOR| +// And finally go through the non-equipped weapons in alphabetical order +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| + if('|WEAPON.NOT_EQUIPPED.%weap.NAME|x' != 'x') { + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.NOT_EQUIPPED.%weap.NAME|","|WEAPON.NOT_EQUIPPED.%weap.CATEGORY|","|WEAPON.NOT_EQUIPPED.%weap.TOTALHIT|","|WEAPON.NOT_EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.NOT_EQUIPPED.%weap.HAND|"), "|WEAPON.NOT_EQUIPPED.%weap.RANGE|", "|WEAPON.NOT_EQUIPPED.%weap.CRIT|", "|WEAPON.NOT_EQUIPPED.%weap.MULT|", "|WEAPON.NOT_EQUIPPED.%weap.TYPE|", "|WEAPON.NOT_EQUIPPED.%weap.SIZE|", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|" ); +|IIF(WEAPON.NOT_EQUIPPED.%weap.CATEGORY:Ranged)| + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.NOT_EQUIPPED.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ELSE| +|FOR,%ammo,0,WEAPON.NOT_EQUIPPED.%weap.CONTENTS,1,0| + fooA = "|WEAPON.NOT_EQUIPPED.%weap.CONTENTS.%ammo|"; + fooB = "|WEAPON.NOT_EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDFOR| +|ENDIF| +|ELSE| +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.NOT_EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.NOT_EQUIPPED.%weap.CATEGORY:NATURAL)| + WeapArr[WeapPos].setOutputFormat(2); +|ELSE| + WeapArr[WeapPos].setOutputFormat(3); + WeapArr[WeapPos].addMeleeVector("|WEAPON.NOT_EQUIPPED.%weap.BASEHIT|", "|WEAPON.NOT_EQUIPPED.%weap.OHHIT|", "|WEAPON.NOT_EQUIPPED.%weap.THHIT|", "|WEAPON.NOT_EQUIPPED.%weap.TWPHITH|", "|WEAPON.NOT_EQUIPPED.%weap.TWPHITL|", "|WEAPON.NOT_EQUIPPED.%weap.TWOHIT|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.THDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.OHDAMAGE|" ); +|ENDIF| +|ENDIF| + WeapPos = WeapPos + 1; + } +|ENDFOR| // Set up the table of information about the checks CheckArr[FORTindex] = new Check("Fortitude", "Constitution", |CHECK.FORTITUDE.TOTAL|, |CHECK.FORTITUDE.BASE|,2,|CHECK.FORTITUDE.MAGIC|,|CHECK.FORTITUDE.EPIC|,|CHECK.FORTITUDE.MISC.NOMAGIC.NOSTAT|); @@ -1764,10 +1847,10 @@ { tempHTML ='<table border="0" cellpadding="1" cellspacing="1" width="320px"><tr>'; tempHTML = tempHTML + '<td id=removeh><\/td><td width="15%" class="c4">ABILITY<br />NAME<\/td>'; + tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />SCORE<\/td>'; + tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />MOD<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">BASE<br />SCORE<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">BASE<br />MOD<\/td>'; - tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />SCORE<\/td>'; - tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />MOD<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">TEMP<br />SCORE<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">TEMP<br />MOD<\/td>'; tempHTML = tempHTML + '<\/tr>'; @@ -1776,10 +1859,10 @@ tempHTML = tempHTML+'<tr>'; tempHTML = tempHTML+'<td id=removea'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><\/td>'; tempHTML = tempHTML+'<td class="c10wB" rowspan=2>'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].Base+'<\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].BaseMod)+'<\/td>'; tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].val+'<\/td>'; tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sgB" rowspan=2>'+AbArr[i].Base+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sgB" rowspan=2>'+modPlusMinus(AbArr[i].BaseMod)+'<\/td>'; if (AbArr[i].hasTempMod()) { tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+AbArr[i].tempvalue+'<\/td>'; tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; @@ -1796,60 +1879,86 @@ // Create a compact version of the Ability Scores and saves as well. tempHTML = ''; - tempHTML ='<table border="0" cellpadding="1px" cellspacing="1px" width="320px">'; + // Reorder the printout to physical and mental stats + var CompArr = new Array('0','3','1','4','2','5'); + // Grab unconventional stats and add them at the end of the list. + if(AbArr.length > 6) + for(i=6;i<AbArr.length;i++) + CompArr[i] = i; + tempHTML ='<table border="0" cellpadding="1px" cellspacing="1px" width="300px">'; for (i=0; i<AbArr.length;i++){ - if(AbArr[i].visible == TRUE) { + if(AbArr[CompArr[i]].visible == TRUE) { tempHTML = tempHTML+'<tr><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; - tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><br>'; - tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; - tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - if (AbArr[i].hasTempMod()) { - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[i].tempvalue+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+CompArr[i]+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+CompArr[i]+');"><br>'; + tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+CompArr[i]+');"><\/td>'; + tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[CompArr[i]].name+'<span class="c4w"><br />'+AbArr[CompArr[i]].longname+'<\/span><\/td>'; + if (AbArr[CompArr[i]].hasTempMod()) { + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[CompArr[i]].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[CompArr[i]].tempmodifier)+'<\/td>\n'; } else { - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[i].val+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[CompArr[i]].val+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[CompArr[i]].modifier)+'<\/td>'; } i++; tempHTML = tempHTML+'</tr></table></td><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; - tempHTML = tempHTML+'<td width="1px" align="right" id=removek'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');">'; - tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; - tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - if (AbArr[i].hasTempMod()) { - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[i].tempvalue+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removek'+CompArr[i]+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+CompArr[i]+');">'; + tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+CompArr[i]+');"><\/td>'; + tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[CompArr[i]].name+'<span class="c4w"><br />'+AbArr[CompArr[i]].longname+'<\/span><\/td>'; + if (AbArr[CompArr[i]].hasTempMod()) { + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[CompArr[i]].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[CompArr[i]].tempmodifier)+'<\/td>\n'; } else { - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[i].val+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[CompArr[i]].val+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[CompArr[i]].modifier)+'<\/td>'; } tempHTML = tempHTML+'</tr></table></td></tr>\n'; } } tempHTML = tempHTML+'<tr>'; styleTag = ' style="background: LIGHTBLUE" '; - tempHTML = tempHTML+'<td><table width="100%"><tr><td class="cm9swB">AC<span class="c5wB"><br />Armour Class<\/span><\/td>'; + tempHTML = tempHTML+'<td colspan="2"><table width="100%"><tr><td class="cm9swB" width="80px">AC<span class="c5wB"><br />Armour Class<\/span><\/td>'; tempHTML = tempHTML+'<td '; if ( AC.totalModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.total()+'<br><span class="c7mB">TOTAL</span><\/td>'; - tempHTML = tempHTML+'<td '; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.total()+'<br><span class="c6">TOTAL</span><\/td>'; + tempHTML = tempHTML+'<td class="c7mB">:</td><td '; if ( AC.flatModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.flat()+'<br><span class="c7mB">FLAT</span><\/td>'; - tempHTML = tempHTML+'<td '; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.flat()+'<br><span class="c6">FLAT</span><\/td>'; + tempHTML = tempHTML+'<td class="c7mB">:</td><td '; if ( AC.touchModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.touch()+'<br><span class="c7mB">TOUCH</span><\/td>'; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.touch()+'<br><span class="c6">TOUCH</span><\/td>'; + tempHTML = tempHTML+'<td width="30%"> </td></tr></table></td>'; tempHTML = tempHTML+'</tr></table></td>'; + tempHTML = tempHTML+'<tr><td colspan="2"><table border="0" cellspacing="1px" cellpadding="1px"><tr>'; + for (i=0;i<ATKArr.length;i++){ + if(ATKArr[i].name == "CMD") + tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />DEFENSE BONUS<\/span><\/td>\n'; + else + tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>\n'; + tempHTML = tempHTML+'<td width="35px" class="'+((ATKArr[i].isModified())?'c10slB':'c10sB')+'">'+ATKArr[i].modifyAttackBonus()+'<\/td>\n'; + if(i%2) + tempHTML = tempHTML+'</tr><tr>\n'; + } + tempHTML = tempHTML+'</tr></table></td></tr>\n'; + tempHTML = tempHTML+'<\/table>'; + if (document.getElementById('CompactAbilityDiv') != null) { + document.getElementById('CompactAbilityDiv').innerHTML = tempHTML; + } +} + +function CompactSavesPrint(){ + tempHTML ='<table border="0" cellpadding="1" cellspacing="1" width="100%"><tr>'; tempBG = "white"; if ( CheckArr[1].hasTempMod() ) tempBG = 'LIGHTBLUE'; if ( CheckArr[1].statmodflag() ) tempBG = 'LIGHTBLUE'; tempHTML = tempHTML+'<td><table border=0><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[1].val()+',\''+CheckArr[1].name+'\',\''+CheckArr[1].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[1].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[1].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[1].name+'<span class="c5w"><br />'+CheckArr[1].ability+'<\/span></td></tr></table><\/td>'; - tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[1].val())+'<\/td></tr></table></td><tr>'; + tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[1].val())+'<\/td></tr></table></td>'; tempBG = "white"; if ( CheckArr[0].hasTempMod() ) tempBG = 'LIGHTBLUE'; @@ -1865,20 +1974,10 @@ tempHTML = tempHTML+'<td><table border="0"><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[2].val()+',\''+CheckArr[2].name+'\',\''+CheckArr[2].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[2].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[2].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[2].name+'<span class="c5w"><br />'+CheckArr[2].ability+'<\/span></td></tr></table><\/td>'; tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[2].val())+'<\/td></tr></table></td>'; tempHTML = tempHTML+'<\/tr>\n'; - tempHTML = tempHTML+'<tr><td colspan="2"><table border="0" cellspacing="1px" cellpadding="1px"><tr>'; - for (i=0;i<ATKArr.length;i++){ - if(ATKArr[i].name == "CMD") - tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />DEFENSE BONUS<\/span><\/td>\n'; - else - tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>\n'; - tempHTML = tempHTML+'<td width="35px" class="'+((ATKArr[i].isModified())?'c10slB':'c10sB')+'">'+ATKArr[i].modifyAttackBonus()+'<\/td>\n'; - if(i%2) - tempHTML = tempHTML+'</tr><tr>\n'; - } - tempHTML = tempHTML+'</tr></table></td></tr>\n'; + tempHTML = tempHTML+'</table></td></tr>\n'; tempHTML = tempHTML+'<\/table>'; - if (document.getElementById('CompactAbilityDiv') != null) { - document.getElementById('CompactAbilityDiv').innerHTML = tempHTML; + if (document.getElementById('CompactSavesDiv') != null) { + document.getElementById('CompactSavesDiv').innerHTML = tempHTML; } } @@ -2010,6 +2109,9 @@ tempVal = tempOffset + parseInt(|VAR.CMD_Grapple.INTVAL.SIGN|); tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; tempVal = tempOffset + parseInt(|VAR.CMD_Trip.INTVAL.SIGN|); +|IIF(VAR.IF(var("CantBeTripped")!=0;1;0):1)| + tempVal = 'Can\'t be tripped'; +|ENDIF| tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; tempVal = tempOffset + parseInt(|VAR.CMD_Disarm.INTVAL.SIGN|); tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; @@ -2184,6 +2286,7 @@ tempHTML = tempHTML+'<\/tr><\/table>'; document.getElementById('ACDiv').innerHTML = tempHTML; ABPrint(); + CompactSavesPrint(); } function InitPrint() { @@ -2385,9 +2488,7 @@ if ( WeapArr[i].rangedData[j].ammoName != "" ) { tempHTML = tempHTML + '<tr>'; - tempHTML = tempHTML + '<td colspan="6" class="l8wB" height="15" width="8%"> AMMUNITION: '+WeapArr[i].rangedData[j].ammoName; - if ( WeapArr[i].rangedData[j].ammoSprop != "" ) - tempHTML = tempHTML + WeapArr[i].rangedData[j].ammoSprop; + tempHTML = tempHTML + '<td colspan="6" class="l8wB" height="25" valign="bottom"> AMMUNITION: '+WeapArr[i].rangedData[j].ammoName; tempHTML = tempHTML + '<\/td>'; tempHTML = tempHTML + '<\/tr>'; } @@ -2460,14 +2561,25 @@ tempHTML = tempHTML + '<td style="background:'+tempColor+'" class="c9sB">'+WeapArr[i].modifyRangedDamage(j,k)+'<\/td>'; } tempHTML = tempHTML + '<\/tr>'; - tempHTML = tempHTML + '<tr>'; - tempHTML = tempHTML + '<td class="l8swB" colspan="2"> Ammunition Used<br /><\/td>'; - tempHTML = tempHTML + '<td class="cb9s" colspan="5">☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐<\/td>'; + if ( WeapArr[i].rangedData[j].ammoSprop != "" ) + { + tempHTML = tempHTML + '<tr>'; + tempHTML = tempHTML + '<td class="l8wB"> Ammo</td>'; + tempHTML = tempHTML + '<td colspan="5" style="background:'+tempColor+'" class="l8sB"> ' + WeapArr[i].rangedData[j].ammoSprop; + tempHTML = tempHTML + '<\/td>'; + tempHTML = tempHTML + '<\/tr>'; + } +// tempHTML = tempHTML + '<tr>'; +// tempHTML = tempHTML + '<td class="l8swB" colspan="2"> Ammunition Used<br /><\/td>'; +// tempHTML = tempHTML + '<td class="cb9s" colspan="5">☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐<\/td>'; } tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '<tr>'; tempHTML = tempHTML + '<td class="l8swB" colspan="2"> Special Properties<br /><\/td>'; - tempHTML = tempHTML + '<td class="l8sB" colspan="5"> '+WeapArr[i].sprop+'<br /><\/td>'; + if (WeapArr[i].sprop == "") + tempHTML = tempHTML + '<td class="l8swB" colspan="5"> <br /><\/td>'; + else + tempHTML = tempHTML + '<td class="l8sB" style="background:'+tempColor+'" colspan="5"> '+WeapArr[i].sprop+'<br /><\/td>'; tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '<\/table>'; tempHTML = tempHTML + '<span class="l2"><br /><\/span>'; @@ -2646,7 +2758,10 @@ tempHTML = tempHTML + ' <\/tr>'; tempHTML = tempHTML + ' <tr>'; tempHTML = tempHTML + ' <td class="l8swB" colspan="2"> Special Properties<\/td>'; - tempHTML = tempHTML + ' <td class="l8sB" colspan="5"> '+WeapArr[i].sprop+'<br /><\/td>'; + if (WeapArr[i].sprop == "") + tempHTML = tempHTML + ' <td class="l8swB" colspan="5"> <br /><\/td>'; + else + tempHTML = tempHTML + ' <td class="l8sB" style="background:'+tempColor+'" colspan="5"> '+WeapArr[i].sprop+'<br /><\/td>'; tempHTML = tempHTML + ' <\/tr>'; tempHTML = tempHTML + ' <\/table>'; } @@ -2960,17 +3075,20 @@ CreateClassInnateSpellsCompact(); CreateMainSpellCompact(); BuildEqCompTable(); - writeMiscNotes(); +// writeMiscNotes(); CurHPPrint(); }; function writeMiscNotes() { - before = '|NOTE.ALL.<b>.</b>.<br>|'; - temp1 = before.replace(/<b>/g, "<b>"); - temp2 = temp1.replace(/<\/b>/g, "</b>"); - after = temp2.replace(/<br\/>/g, "<br>"); - if (document.getElementById('MagicNotes') != null) - document.getElementById('MagicNotes').innerHTML = after; +//FIXME: The html fomatting is being converted to non-html and causing code to appear +// on the page. Requires adjustment in the core program. This attempt to undo +// such non-html cannot handle multiline strings. +// before = ' bar NOTE.ALL.<b>.</b>.<br> bar '; +// temp1 = before.replace(/<b>/g, "<b>"); +// temp2 = temp1.replace(/<\/b>/g, "</b>"); +// after = temp2.replace(/<br\/>/g, "<br>"); +// if (document.getElementById('MagicNotes') != null) +// document.getElementById('MagicNotes').innerHTML = after; } function RecordDiceRoll( foobar ) { @@ -5039,7 +5157,7 @@ <input id="button4" type="button" value="Full Bio Header" name="button4" onclick="ToggleDIV('FullWideHeader');ToggleDIV('NarrowLeftHeader');" /> <input id="button1" type="button" value="Color Key" name="button1" onclick="ToggleDIV('ColorKey');" /> <input id="button0" type="button" value="Print" name="button0" onclick="window.print();" /> - <input id="button9" type="button" value="Compact Stats" name="button9" onclick="ToggleDIV('AbilityDiv');ToggleDIV('CompactAbilityDivName');ToggleDIV('CompactAbilityDiv');ToggleDIV('ACDiv');ToggleDIV('SavesDiv');ToggleDIV('AttackDiv');ToggleDIV('NarrowLeftHeader');" /> + <input id="button9" type="button" value="Compact Stats" name="button9" onclick="ToggleDIV('AbilityDiv');ToggleDIV('CompactAbilityDivName');ToggleDIV('CompactAbilityDiv');ToggleDIV('ACDiv');ToggleDIV('SavesDiv');ToggleDIV('AttackDiv');ToggleDIV('CompactSavesDiv');ToggleDIV('NarrowLeftHeader');" /> </td> </tr> |IIF(HASVAR:RageLVL)| @@ -5148,11 +5266,11 @@ <!-- Left sheet layout --> <table border="0" cellpadding="0" cellspacing="0" width="100%"> - <tr valign="top" id="CompactAbilityDivName" style="display:none;" colspan="2"> - <td class="lb12mB"> |NAME| ~•~ |CLASSLIST|</td> + <tr valign="top"> + <td colspan="2" class="lb12mB"><span id="CompactAbilityDivName" class="lb12mB" style="display:none;"> |NAME| ~•~ |CLASSLIST|</span></td> </tr> <tr valign="top"> - <td class="lt6" width="100" height="100"> + <td class="lt6"> <!-- Ability table (first row of main table) --> <div id="AbilityDiv" style="display:block"> <script language="javascript" type="text/javascript">ABPrint();</script> @@ -5161,7 +5279,7 @@ <script language="javascript" type="text/javascript">ABPrint();</script> </div> </td> - <td class="lt6" width="75%"> + <td class="lt6"> <!-- HP Table (first row of main table) --> <!-- This row will contain initiative. base attack, skills --> |IIF(VAR.IF(var("UseAlternateDamage")==0;1;0):1)| @@ -5237,19 +5355,17 @@ <tr> <td width="85" class="c9wB">BASE ATTACK<span class="c5w"><br />Bonus</span></td> <td class="c10sB">|ATTACK.MELEE|<br /></td> + <td width="85px" class="c9wB">Spell<BR>Resistance</span></td> + <td class="c10sB">|SR|</td> </tr> <!-- START Movement Table (second row of main table) --> <tr> <td width="85" class="c9wB">SPEED</span></td> - <td class="c10sB">|MOVEMENT|</td> + <td class="c10sB" colspan="3">|MOVEMENT|</td> </tr> <tr> - <td width="85" class="c9wB">Spell<BR>Resistance</span></td> - <td class="c10sB">|SR|</td> - </tr> - <tr> <td width="85" class="c9wB">Elemental<BR>Resistance</span></td> - <td class="c10sB"> + <td class="c10sB" colspan="3"> |%VAR.AcidResistanceBonus.GTEQ.1| |VAR.AcidResistanceBonus.INTVAL| Acid |%| @@ -5277,6 +5393,11 @@ <!-- END Movement Table (second row of main table) --> </td> </tr> + <tr valign="top"> + <td colspan="2" class="lt6" valign="top"> <!-- Left table bottom --> + <div id="CompactSavesDiv" style="display:none;"> + </td> + </tr> <!--============================================================== end of top left table --> <tr valign="top"> <td colspan="2" class="lt6" valign="top"> <!-- Left table bottom --> @@ -5820,7 +5941,7 @@ <td class="l8"> <div id="misc.magic" style="display:none;"> <span class="notes">|MISC.MAGIC|</span> - <div id="MagicNotes" class="l8" style="display:inline;"></div> + <div id="MagicNotes" class="l8" style="display:inline;">|NOTE.ALL.<b>.</b>.<br>|</div> </div> </td> </tr> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2010-02-17 02:06:52 UTC (rev 11459) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2010-02-17 02:20:40 UTC (rev 11460) @@ -67,6 +67,12 @@ 2917186 TIMEUNIT processing, .MAGIC~ to bold now, removed repeats of Special Attacks in the Special Qualities section, 2923219 seperated out AC.Dodge into it's own box. +Revisions: Mike Elliott 02/16/10 Sort weapons as primary/secondary/both/unequipped as presented. More condensing of + the compact abilities section. Tweaked ranged weapons with ammo contained in weapon. + FIX: To really show multiple ammo types, currently the .LST entry for a bow or + crossbow needs to have the container quantity set higher than one. + Fixed stats block with respect to item bonuses and animal companion level bonuses. + Greyed out base stats and moved column in order to make current values more visible. $Revision$ $Author$ @@ -228,7 +234,6 @@ .c9 { font-size:9pt; text-align:center; } .c9g { font-size:9pt; text-align:center; background:#DDDDDD; } - .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } .c9w { font-size:9pt; text-align:center; color:white; background:black; } .c9s { font-size:9pt; text-align:center; border:1px solid black; } .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } @@ -267,6 +272,7 @@ .c10s { font-size:10pt; text-align:center; border:1px solid black; } .c10sBx{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } + .c10sgB{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; color:#A0A0A0; } .c10sl { font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; } .c10slB{ font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; font-weight:bold; } .c10swB{ font-size:10pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } @@ -391,13 +397,13 @@ spell_Shield_bonus = 0; // Set up the table of information about stats |FOR,%stat,0,COUNT[STATS]-1,1,1| - AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat.NOTEMP|",|STAT.%stat.MOD.NOTEMP|,TRUE,%stat); + AbArr[%stat] = new Ability("|STAT.%stat.NAME|","|STAT.%stat.LONGNAME|","|STAT.%stat.NOTEMP.NOEQUIP|",|STAT.%stat.MOD.NOTEMP.NOEQUIP|,"|STAT.%stat|",|STAT.%stat.MOD|,TRUE,%stat); //Set up stat modifier array ModToStat[%stat] = 0; ModToStatMod[%stat] = 0; |ENDFOR| // Some of these are bad values, but they are not going to be processed. This is a hidden STAT that will combine STR and DEX bonuses. -AbArr[STRDEXindex] = new Ability("STRDEX","STR and DEX combined","|STAT.0.NOTEMP.NOEQUIP|",|STAT.0.MOD.NOTEMP.NOEQUIP|,"|STAT.0.NOTEMP|",|STAT.0.MOD.NOTEMP|, FALSE,STRDEXindex); +AbArr[STRDEXindex] = new Ability("STRDEX","STR and DEX combined","|STAT.0.NOPOST.NOEQUIP|",|STAT.0.MOD.NOPOST.NOEQUIP|,"|STAT.0|",|STAT.0.MOD|, FALSE,STRDEXindex); ModToStat[STRDEXindex] = 0; ModToStatMod[STRDEXindex] = 0; // Have to define this after AbArr is denfined. @@ -453,36 +459,113 @@ // Deal with Unarmed WeapArr[0] = new Weapon( -1, "UNARMED", "Melee", "|WEAPONH.TOTALHIT|", "|WEAPONH.DAMAGE|", "T", "0'", "|WEAPONH.CRIT|", "|WEAPONH.MULT|", "B", "T", "" ); WeapArr[0].setOutputFormat(2); +WeapPos = 1; +// Loop through the weapons list three times. First adding primary, then equipped weapons, then non-equipped. +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| + if('x|WEAPON.EQUIPPED.%weap.HAND|' == 'xPrimary') { + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.EQUIPPED.%weap.NAME| (equipped)","|WEAPON.EQUIPPED.%weap.CATEGORY|","|WEAPON.EQUIPPED.%weap.TOTALHIT|","|WEAPON.EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.EQUIPPED.%weap.HAND|"), "|WEAPON.EQUIPPED.%weap.RANGE|", "|WEAPON.EQUIPPED.%weap.CRIT|", "|WEAPON.EQUIPPED.%weap.MULT|", "|WEAPON.EQUIPPED.%weap.TYPE|", "|WEAPON.EQUIPPED.%weap.SIZE|", "|WEAPON.EQUIPPED.%weap.SPROP|" ); +|IIF(WEAPON.EQUIPPED.%weap.CATEGORY:Ranged)| + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.EQUIPPED.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ELSE| +|FOR,%ammo,0,WEAPON.EQUIPPED.%weap.CONTENTS,1,0| + fooA = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo|"; + fooB = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDFOR| +|ENDIF| +|ELSE| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| + WeapArr[WeapPos].setOutputFormat(2); +|ELSE| + WeapArr[WeapPos].setOutputFormat(3); + WeapArr[WeapPos].addMeleeVector("|WEAPON.EQUIPPED.%weap.BASEHIT|", "|WEAPON.EQUIPPED.%weap.OHHIT|", "|WEAPON.EQUIPPED.%weap.THHIT|", "|WEAPON.EQUIPPED.%weap.TWPHITH|", "|WEAPON.EQUIPPED.%weap.TWPHITL|", "|WEAPON.EQUIPPED.%weap.TWOHIT|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.EQUIPPED.%weap.THDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|" ); +|ENDIF| +|ENDIF| + WeapPos = WeapPos + 1; + } +|ENDFOR| -// Loop through the weapons -|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,1| - WeapArr[%weap+1] = new Weapon(|%weap|,"|WEAPON.%weap.NAME|","|WEAPON.%weap.CATEGORY|","|WEAPON.%weap.TOTALHIT|","|WEAPON.%weap.DAMAGE|", FirstChar("|WEAPON.%weap.HAND|"), "|WEAPON.%weap.RANGE|", "|WEAPON.%weap.CRIT|", "|WEAPON.%weap.MULT|", "|WEAPON.%weap.TYPE|", "|WEAPON.%weap.SIZE|", "|WEAPON.%weap.SPROP|" ); -|IIF(WEAPON.%weap.CATEGORY:Ranged)| - WeapArr[%weap+1].setOutputFormat(1); -|IIF(WEAPON.%weap.CONTENTS:0)| - RangedStuff = new WeaponRangedAmmoData( "", "" ); +// Second loop through the weapons. Now effectively adding hand = off, or hand = both. +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| + if(('|WEAPON.EQUIPPED.%weap.NAME|x' != 'x') && ('x|WEAPON.EQUIPPED.%weap.HAND|' != 'xPrimary')) { + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.EQUIPPED.%weap.NAME| (equipped)","|WEAPON.EQUIPPED.%weap.CATEGORY|","|WEAPON.EQUIPPED.%weap.TOTALHIT|","|WEAPON.EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.EQUIPPED.%weap.HAND|"), "|WEAPON.EQUIPPED.%weap.RANGE|", "|WEAPON.EQUIPPED.%weap.CRIT|", "|WEAPON.EQUIPPED.%weap.MULT|", "|WEAPON.EQUIPPED.%weap.TYPE|", "|WEAPON.EQUIPPED.%weap.SIZE|", "|WEAPON.EQUIPPED.%weap.SPROP|" ); +|IIF(WEAPON.EQUIPPED.%weap.CATEGORY:Ranged)| + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.EQUIPPED.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); |FOR,%range,0,4,1,0| - RangedStuff.addRangeIncrement( "|WEAPON.%weap.RANGELIST.%range|'", "|WEAPON.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.%weap.RANGELIST.%range.DAMAGE|" ); + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); |ENDFOR| - WeapArr[%weap+1].addRangedData( RangedStuff ); + WeapArr[WeapPos].addRangedData( RangedStuff ); |ELSE| -|FOR,%ammo,0,WEAPON.%weap.CONTENTS-1,1,0| - RangedStuff = new WeaponRangedAmmoData( "|WEAPON.%weap.CONTENTS.%ammo|", "|WEAPON.%weap.CONTENTS.%ammo.SPROP|" ); +|FOR,%ammo,0,WEAPON.EQUIPPED.%weap.CONTENTS,1,0| + fooA = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo|"; + fooB = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); |FOR,%range,0,4,1,0| - RangedStuff.addRangeIncrement( "|WEAPON.%weap.RANGELIST.%range|'", "|WEAPON.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); |ENDFOR| - WeapArr[%weap+1].addRangedData( RangedStuff ); + WeapArr[WeapPos].addRangedData( RangedStuff ); |ENDFOR| |ENDIF| |ELSE| -|IIF(WEAPON.%weap.ISTYPE.Double.OR.WEAPON.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.%weap.CATEGORY:NATURAL)| - WeapArr[%weap+1].setOutputFormat(2); +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| + WeapArr[WeapPos].setOutputFormat(2); |ELSE| - WeapArr[%weap+1].setOutputFormat(3); - WeapArr[%weap+1].addMeleeVector("|WEAPON.%weap.BASEHIT|", "|WEAPON.%weap.OHHIT|", "|WEAPON.%weap.THHIT|", "|WEAPON.%weap.TWPHITH|", "|WEAPON.%weap.TWPHITL|", "|WEAPON.%weap.TWOHIT|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.OHDAMAGE|", "|WEAPON.%weap.THDAMAGE|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.BASICDAMAGE|", "|WEAPON.%weap.OHDAMAGE|" ); + WeapArr[WeapPos].setOutputFormat(3); + WeapArr[WeapPos].addMeleeVector("|WEAPON.EQUIPPED.%weap.BASEHIT|", "|WEAPON.EQUIPPED.%weap.OHHIT|", "|WEAPON.EQUIPPED.%weap.THHIT|", "|WEAPON.EQUIPPED.%weap.TWPHITH|", "|WEAPON.EQUIPPED.%weap.TWPHITL|", "|WEAPON.EQUIPPED.%weap.TWOHIT|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.EQUIPPED.%weap.THDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|" ); |ENDIF| |ENDIF| + WeapPos = WeapPos + 1; + } |ENDFOR| +// And finally go through the non-equipped weapons in alphabetical order +|FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| + if('|WEAPON.NOT_EQUIPPED.%weap.NAME|x' != 'x') { + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.NOT_EQUIPPED.%weap.NAME|","|WEAPON.NOT_EQUIPPED.%weap.CATEGORY|","|WEAPON.NOT_EQUIPPED.%weap.TOTALHIT|","|WEAPON.NOT_EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.NOT_EQUIPPED.%weap.HAND|"), "|WEAPON.NOT_EQUIPPED.%weap.RANGE|", "|WEAPON.NOT_EQUIPPED.%weap.CRIT|", "|WEAPON.NOT_EQUIPPED.%weap.MULT|", "|WEAPON.NOT_EQUIPPED.%weap.TYPE|", "|WEAPON.NOT_EQUIPPED.%weap.SIZE|", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|" ); +|IIF(WEAPON.NOT_EQUIPPED.%weap.CATEGORY:Ranged)| + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.NOT_EQUIPPED.%weap.CONTENTS:0)| + RangedStuff = new WeaponRangedAmmoData( "", "" ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ELSE| +|FOR,%ammo,0,WEAPON.NOT_EQUIPPED.%weap.CONTENTS,1,0| + fooA = "|WEAPON.NOT_EQUIPPED.%weap.CONTENTS.%ammo|"; + fooB = "|WEAPON.NOT_EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDFOR| +|ENDIF| +|ELSE| +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.NOT_EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.NOT_EQUIPPED.%weap.CATEGORY:NATURAL)| + WeapArr[WeapPos].setOutputFormat(2); +|ELSE| + WeapArr[WeapPos].setOutputFormat(3); + WeapArr[WeapPos].addMeleeVector("|WEAPON.NOT_EQUIPPED.%weap.BASEHIT|", "|WEAPON.NOT_EQUIPPED.%weap.OHHIT|", "|WEAPON.NOT_EQUIPPED.%weap.THHIT|", "|WEAPON.NOT_EQUIPPED.%weap.TWPHITH|", "|WEAPON.NOT_EQUIPPED.%weap.TWPHITL|", "|WEAPON.NOT_EQUIPPED.%weap.TWOHIT|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.THDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.OHDAMAGE|" ); +|ENDIF| +|ENDIF| + WeapPos = WeapPos + 1; + } +|ENDFOR| // Set up the table of information about the checks CheckArr[FORTindex] = new Check("Fortitude", "Constitution", |CHECK.FORTITUDE.TOTAL|, |CHECK.FORTITUDE.BASE|,2,|CHECK.FORTITUDE.MAGIC|,|CHECK.FORTITUDE.EPIC|,|CHECK.FORTITUDE.MISC.NOMAGIC.NOSTAT|); @@ -1768,10 +1851,10 @@ { tempHTML ='<table border="0" cellpadding="1" cellspacing="1" width="320px"><tr>'; tempHTML = tempHTML + '<td id=removeh><\/td><td width="15%" class="c4">ABILITY<br />NAME<\/td>'; + tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />SCORE<\/td>'; + tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />MOD<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">BASE<br />SCORE<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">BASE<br />MOD<\/td>'; - tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />SCORE<\/td>'; - tempHTML = tempHTML + '<td width="13%" class="c4">ABILITY<br />MOD<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">TEMP<br />SCORE<\/td>'; tempHTML = tempHTML + '<td width="13%" class="c4">TEMP<br />MOD<\/td>'; tempHTML = tempHTML + '<\/tr>'; @@ -1780,10 +1863,10 @@ tempHTML = tempHTML+'<tr>'; tempHTML = tempHTML+'<td id=removea'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><\/td>'; tempHTML = tempHTML+'<td class="c10wB" rowspan=2>'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].Base+'<\/td>'; - tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].BaseMod)+'<\/td>'; tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+AbArr[i].val+'<\/td>'; tempHTML = tempHTML+'<td class="c10sB" rowspan=2>'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sgB" rowspan=2>'+AbArr[i].Base+'<\/td>'; + tempHTML = tempHTML+'<td class="c10sgB" rowspan=2>'+modPlusMinus(AbArr[i].BaseMod)+'<\/td>'; if (AbArr[i].hasTempMod()) { tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+AbArr[i].tempvalue+'<\/td>'; tempHTML = tempHTML+'<td class="c10slB" rowspan=2>'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; @@ -1800,60 +1883,86 @@ // Create a compact version of the Ability Scores and saves as well. tempHTML = ''; - tempHTML ='<table border="0" cellpadding="1px" cellspacing="1px" width="320px">'; + // Reorder the printout to physical and mental stats + var CompArr = new Array('0','3','1','4','2','5'); + // Grab unconventional stats and add them at the end of the list. + if(AbArr.length > 6) + for(i=6;i<AbArr.length;i++) + CompArr[i] = i; + tempHTML ='<table border="0" cellpadding="1px" cellspacing="1px" width="300px">'; for (i=0; i<AbArr.length;i++){ - if(AbArr[i].visible == TRUE) { + if(AbArr[CompArr[i]].visible == TRUE) { tempHTML = tempHTML+'<tr><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; - tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');"><br>'; - tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; - tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - if (AbArr[i].hasTempMod()) { - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[i].tempvalue+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+CompArr[i]+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+CompArr[i]+');"><br>'; + tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+CompArr[i]+');"><\/td>'; + tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[CompArr[i]].name+'<span class="c4w"><br />'+AbArr[CompArr[i]].longname+'<\/span><\/td>'; + if (AbArr[CompArr[i]].hasTempMod()) { + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[CompArr[i]].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[CompArr[i]].tempmodifier)+'<\/td>\n'; } else { - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[i].val+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[CompArr[i]].val+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[CompArr[i]].modifier)+'<\/td>'; } i++; tempHTML = tempHTML+'</tr></table></td><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; - tempHTML = tempHTML+'<td width="1px" align="right" id=removek'+i+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+i+');">'; - tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+i+');"><\/td>'; - tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[i].name+'<span class="c4w"><br />'+AbArr[i].longname+'<\/span><\/td>'; - if (AbArr[i].hasTempMod()) { - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[i].tempvalue+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[i].tempmodifier)+'<\/td>\n'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removek'+CompArr[i]+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+CompArr[i]+');">'; + tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+CompArr[i]+');"><\/td>'; + tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[CompArr[i]].name+'<span class="c4w"><br />'+AbArr[CompArr[i]].longname+'<\/span><\/td>'; + if (AbArr[CompArr[i]].hasTempMod()) { + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+AbArr[CompArr[i]].tempvalue+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10slB">'+modPlusMinus(AbArr[CompArr[i]].tempmodifier)+'<\/td>\n'; } else { - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[i].val+'<\/td>'; - tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[i].modifier)+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+AbArr[CompArr[i]].val+'<\/td>'; + tempHTML = tempHTML+'<td width="25px" class="c10sB">'+modPlusMinus(AbArr[CompArr[i]].modifier)+'<\/td>'; } tempHTML = tempHTML+'</tr></table></td></tr>\n'; } } tempHTML = tempHTML+'<tr>'; styleTag = ' style="background: LIGHTBLUE" '; - tempHTML = tempHTML+'<td><table width="100%"><tr><td class="cm9swB">AC<span class="c5wB"><br />Armour Class<\/span><\/td>'; + tempHTML = tempHTML+'<td colspan="2"><table width="100%"><tr><td class="cm9swB" width="80px">AC<span class="c5wB"><br />Armour Class<\/span><\/td>'; tempHTML = tempHTML+'<td '; if ( AC.totalModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.total()+'<br><span class="c7mB">TOTAL</span><\/td>'; - tempHTML = tempHTML+'<td '; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.total()+'<br><span class="c6">TOTAL</span><\/td>'; + tempHTML = tempHTML+'<td class="c7mB">:</td><td '; if ( AC.flatModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.flat()+'<br><span class="c7mB">FLAT</span><\/td>'; - tempHTML = tempHTML+'<td '; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.flat()+'<br><span class="c6">FLAT</span><\/td>'; + tempHTML = tempHTML+'<td class="c7mB">:</td><td '; if ( AC.touchModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25px">'+AC.touch()+'<br><span class="c7mB">TOUCH</span><\/td>'; - tempHTML = tempHTML+'</tr></table></td>'; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.touch()+'<br><span class="c6">TOUCH</span><\/td>'; + tempHTML = tempHTML+'<td width="30%"> </td></tr></table></td>'; + + tempHTML = tempHTML+'<tr><td colspan="2"><table border="0" cellspacing="1px" cellpadding="1px"><tr>'; + for (i=0;i<ATKArr.length;i++){ + if(ATKArr[i].name == "CMD") + tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />DEFENSE BONUS<\/span><\/td>\n'; + else + tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>\n'; + tempHTML = tempHTML+'<td width="35px" class="'+((ATKArr[i].isModified())?'c10slB':'c10sB')+'">'+ATKArr[i].modifyAttackBonus()+'<\/td>\n'; + if(i%2) + tempHTML = tempHTML+'</tr><tr>\n'; + } + tempHTML = tempHTML+'</tr></table></td></tr>\n'; + tempHTML = tempHTML+'<\/table>'; + if (document.getElementById('CompactAbilityDiv') != null) { + document.getElementById('CompactAbilityDiv').innerHTML = tempHTML; + } +} + +function CompactSavesPrint(){ + tempHTML ='<table border="0" cellpadding="1" cellspacing="1" width="100%"><tr>'; tempBG = "white"; if ( CheckArr[1].hasTempMod() ) tempBG = 'LIGHTBLUE'; if ( CheckArr[1].statmodflag() ) tempBG = 'LIGHTBLUE'; tempHTML = tempHTML+'<td><table border=0><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[1].val()+',\''+CheckArr[1].name+'\',\''+CheckArr[1].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[1].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[1].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[1].name+'<span class="c5w"><br />'+CheckArr[1].ability+'<\/span></td></tr></table><\/td>'; - tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[1].val())+'<\/td></tr></table></td><tr>'; + tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[1].val())+'<\/td></tr></table></td>'; tempBG = "white"; if ( CheckArr[0].hasTempMod() ) tempBG = 'LIGHTBLUE'; @@ -1869,20 +1978,10 @@ tempHTML = tempHTML+'<td><table border="0"><tr><td class="c10wB"><table class="c10wB" border="0" cellpadding="0"><tr><td class="c10wB" width="20px"><a name="#" onClick="rollIntoDIV(1,20,'+CheckArr[2].val()+',\''+CheckArr[2].name+'\',\''+CheckArr[2].name+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" height="16px" border="0"></a></td><td id="'+CheckArr[2].name+'_TD_SND" width="22px" class="c10B" bgcolor="black"><div class="c10B" id="'+CheckArr[2].name+'_SND" style="background-color:transparent;"> </div></td><td width="80px" class="c10wB">'+CheckArr[2].name+'<span class="c5w"><br />'+CheckArr[2].ability+'<\/span></td></tr></table><\/td>'; tempHTML = tempHTML+'<td class="c10sB" width="25px" style="background:'+tempBG+';">'+modPlusMinus(CheckArr[2].val())+'<\/td></tr></table></td>'; tempHTML = tempHTML+'<\/tr>\n'; - tempHTML = tempHTML+'<tr><td colspan="2"><table border="0" cellspacing="1px" cellpadding="1px"><tr>'; - for (i=0;i<ATKArr.length;i++){ - if(ATKArr[i].name == "CMD") - tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />DEFENSE BONUS<\/span><\/td>\n'; - else - tempHTML = tempHTML+'<td width="40%" class="c10wB">'+ATKArr[i].name+'<span class="c5w"><br />ATTACK BONUS<\/span><\/td>\n'; - tempHTML = tempHTML+'<td width="35px" class="'+((ATKArr[i].isModified())?'c10slB':'c10sB')+'">'+ATKArr[i].modifyAttackBonus()+'<\/td>\n'; - if(i%2) - tempHTML = tempHTML+'</tr><tr>\n'; - } - tempHTML = tempHTML+'</tr></table></td></tr>\n'; + tempHTML = tempHTML+'</table></td></tr>\n'; tempHTML = tempHTML+'<\/table>'; - if (document.getElementById('CompactAbilityDiv') != null) { - document.getElementById('CompactAbilityDiv').innerHTML = tempHTML; + if (document.getElementById('CompactSavesDiv') != null) { + document.getElementById('CompactSavesDiv').innerHTML = tempHTML; } } @@ -2014,6 +2113,9 @@ tempVal = tempOffset + parseInt(|VAR.CMD_Grapple.INTVAL.SIGN|); tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; tempVal = tempOffset + parseInt(|VAR.CMD_Trip.INTVAL.SIGN|); +|IIF(VAR.IF(var("CantBeTripped")!=0;1;0):1)| + tempVal = 'Can\'t be tripped'; +|ENDIF| tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; tempVal = tempOffset + parseInt(|VAR.CMD_Disarm.INTVAL.SIGN|); tempHTML = tempHTML + '<td align="center" class="c10sB"'+tempBG+'><b>' + tempVal + '</b></td>'; @@ -2188,6 +2290,7 @@ tempHTML = tempHTML+'<\/tr><\/table>'; document.getElementById('ACDiv').innerHTML = temp... [truncated message content] |
From: <chu...@us...> - 2010-11-04 18:06:31
|
Revision: 13721 http://pcgen.svn.sourceforge.net/pcgen/?rev=13721&view=rev Author: chuckpint Date: 2010-11-04 18:06:24 +0000 (Thu, 04 Nov 2010) Log Message: ----------- Added Animal Tricks block to all html output sheets that already had Special Qualities. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -3566,6 +3566,16 @@ </tr> </table> |ENDIF| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick")==0)| +|ELSE| + <table width="100%" cellspacing="0" cellpadding="2"> + <tr> + <td class="c9wB">ANIMAL TRICKS</td> + </tr> + <td class="lt8s" width="100%">|ABILITYLIST.Special Ability.TYPE=AnimalTrick|</td> + </tr> + </table> +|ENDIF| |IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialQuality")>0)| <table width="100%" cellspacing="0" cellpadding="2"> <tr> @@ -3587,6 +3597,8 @@ </table> |%| <!-- END Special Abilities Table --> + + <!-- TEMPLATE table --> |%TEMPLATE.0| <table width="100%" cellspacing="0" cellpadding="3"> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -409,9 +409,20 @@ </table> |ENDIF| <!-- STOP Special Attacks Table --> +<!-- START Animal Tricks Table --> +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick")>0)| + <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Animal Tricks Table"> + <tr> + <td colspan="1" bgcolor="black" align="center"><font style="font-size: 9pt" color="white"><b>ANIMAL TRICKS</b></font></td> + </tr> + <td align="left" width="100%" class="border7">|ABILITYALLLIST.Special Ability.TYPE=AnimalTrick|</td> + </tr> + </table> +|ENDIF| +<!-- STOP Animal Tricks Table --> <!-- START Special Quality Table --> |IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialQuality";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| - <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Feats Table"> + <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Special Qualities Table"> <tr> <td colspan="1" bgcolor="black" align="center"><font style="font-size: 9pt" color="white"><b>SPECIAL QUALITIES</b></font></td> </tr> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -117,6 +117,12 @@ <td width="75%">|ABILITYALLLIST.Special Ability.VISIBLE.TYPE=SpecialAttack|</td> </tr> |ENDIF| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| + <tr valign="top"> + <td width="25%"><b>Animal Tricks:</b></td> + <td width="75%">|ABILITYALLLIST.Special Ability.VISIBLE.TYPE=AnimalTrick|</td> + </tr> +|ENDIF| <tr valign="top"> <td width="25%"><b>Special Qualities:</b></td> <td width="75%"> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -105,6 +105,9 @@ |ENDIF| |ENDFOR| |ENDIF| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| +TRICKS:|ABILITYALLLIST.Special Ability.VISIBLE.TYPE=AnimalTrick| +|ENDIF| |FOR,%DRtest,STRLEN[DR],STRLEN[DR],1,0| |IIF(%DRtest:0)| |ELSE| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -130,6 +130,9 @@ |ENDIF| |ENDFOR| |ENDIF| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| +TRICKS:|ABILITYALLLIST.Special Ability.VISIBLE.TYPE=AnimalTrick| +|ENDIF| |FOR,%DRtest,STRLEN[DR],STRLEN[DR],1,0| |IIF(%DRtest:0)| |ELSE| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -780,6 +780,14 @@ |ENDMANUALWHITESPACE| <!-- End SpecialQuality TYPE Abilities --> +<!-- Animal Tricks TYPE Abilities --> +|MANUALWHITESPACE| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| +<b>Animal Tricks</b>|SPACE||ABILITYALLLIST.Special Ability.VISIBLE.TYPE=AnimalTrick|<br> +|ENDIF| +|ENDMANUALWHITESPACE| +<!-- End Animal Tricks TYPE Abilities --> + |%COUNT[SA]| <b>Special Abilities </b> |SPECIALLIST|<br> |%| @@ -890,6 +898,9 @@ </b> |ABILITYALL.Special Ability.VISIBLE.%allAbilities.DESC|</p> |ENDFOR| +|FOR,%animalTrick,0,count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY","TYPE=AnimalTrick")-1,1,0| +<p><b>|ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick|</b> |ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick.DESC|</p> +|ENDFOR| <br><span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <!-- ================================================================= --> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -845,6 +845,14 @@ |ENDMANUALWHITESPACE| <!-- End SpecialQuality TYPE Abilities --> +<!-- Animal Tricks TYPE Abilities --> +|MANUALWHITESPACE| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| +<b>Animal Tricks</b>|SPACE||ABILITYALLLIST.Special Ability.VISIBLE.TYPE=AnimalTrick|<br> +|ENDIF| +|ENDMANUALWHITESPACE| +<!-- End Animal Tricks TYPE Abilities --> + |%COUNT[SA]| <b>Special Abilities </b> |SPECIALLIST|<br> |%| @@ -949,5 +957,9 @@ </b> |ABILITYALL.Special Ability.VISIBLE.%allAbilities.DESC|</p> |ENDFOR| +|FOR,%animalTrick,0,count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY","TYPE=AnimalTrick")-1,1,0| +<p><b>|ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick|</b> |ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick.DESC|</p> +|ENDFOR| + </body> </html> \ No newline at end of file Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -312,6 +312,12 @@ |ENDIF| |ENDFOR| |ENDIF| +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=AnimalTrick";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| + <tr valign="top"> + <td width="25%"><b>Animal Tricks:</b></td> + <td width="75%">|ABILITYALLLIST.Special Ability.VISIBLE.TYPE=AnimalTrick|</td> + </tr> +|ENDIF| |FOR,%DRtest,STRLEN[DR],STRLEN[DR],1,0| |IIF(%DRtest:0)| |ELSE| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2010-11-04 18:06:08 UTC (rev 13720) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2010-11-04 18:06:24 UTC (rev 13721) @@ -1788,6 +1788,22 @@ </table> |ENDIF| <!-- STOP Special Attacks Table --> +<!-- Start Animal Tricks --> +|IIF(count("ABILITIES";"CATEGORY=Special Ability";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY";"TYPE=AnimalTrick")==0)| +|ELSE| + <table width="100%" cellspacing="0" cellpadding="2" summary="Animal Tricks Table"> + <tr> + <td bgcolor="black" align="center"><font color="white" style="font-size: 9pt"><b>ANIMAL TRICKS</b></font></td> + </tr> +|FOR,%animalTrick,0,count("ABILITIES","CATEGORY=Special Ability","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY","TYPE=AnimalTrick")-1,1,0| +|OIF(EVEN:%animalTrick,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| + <td valign="top" class="font8"><b>|ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick|</b> + |ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick.DESC|</td> + </tr> +|ENDFOR| + </table> +|ENDIF| +<!-- Stop Animal Tricks --> <!-- START Special Qualities Table --> |IIF(count("ABILITIES";"CATEGORY=Special Ability";"TYPE=SpecialQuality";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| <table width="100%" cellspacing="0" cellpadding="2" summary="Feat Table"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sat...@us...> - 2010-11-25 00:32:58
|
Revision: 13971 http://pcgen.svn.sourceforge.net/pcgen/?rev=13971&view=rev Author: satinknights Date: 2010-11-25 00:32:47 +0000 (Thu, 25 Nov 2010) Log Message: ----------- Updated barbarian variables, added Archetypes, Afflictions, Temp Bonuses, Animal Tricks, barding filters and ammunition auto displayed with weapons. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2010-11-24 17:26:26 UTC (rev 13970) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2010-11-25 00:32:47 UTC (rev 13971) @@ -67,13 +67,15 @@ 2917186 TIMEUNIT processing, .MAGIC~ to bold now, removed repeats of Special Attacks in the Special Qualities section, 2923219 seperated out AC.Dodge into it's own box. -Revisions: Mike Elliott 02/16/10 Sort weapons as primary/secondary/both/unequipped as presented. More condensing of - the compact abilities section. Tweaked ranged weapons with ammo contained in weapon. - FIX: To really show multiple ammo types, currently the .LST entry for a bow or - crossbow needs to have the container quantity set higher than one. - Fixed stats block with respect to item bonuses and animal companion level bonuses. - Greyed out base stats and moved column in order to make current values more visible. +Revisions: Mike Elliott 11/24/10 Added Temporary Bonuses Applied, Animal Tricks, Afflictions and Archetypes. + Changed Pathfinder Barbarian to match new variables. Feats now show seperate DESC and + BENEFIT views. Deity/Domains now show DomainPowers abilities in its section. Armor + block only shows barding for probably mount racetypes, animals and companions. + Ranged weapons have associated ammo automatically bunched and added to damage roll. + Extra energy damage on weapons is shown but not automatically rolled (yet). + Comprehensive skills shows breakdown. + $Revision$ $Author$ $Date$ @@ -212,6 +214,7 @@ .ct8sB{ font-size:8pt; text-align:center; vertical-align:top; border:1px solid black; font-weight:bold; } .ct8swB{ font-size:8pt; text-align:center; vertical-align:top; border:1px solid black; color:white; background:black; font-weight:bold; } .l8 { font-size:8pt; text-align:left; } + .l8g { font-size:8pt; text-align:left; background:#F0E0B9; } .l8mB { font-size:8pt; text-align:left; font-weight:bold; } .l8s { font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; } .l8sB { font-size:8pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } @@ -234,11 +237,11 @@ .c9 { font-size:9pt; text-align:center; } .c9g { font-size:9pt; text-align:center; background:#DDDDDD; } - .c10sgB{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; color:#A0A0A0; } .c9w { font-size:9pt; text-align:center; color:white; background:black; } + .c9B { font-size:9pt; text-align:center; font-weight:bold; } .c9s { font-size:9pt; text-align:center; border:1px solid black; } .c9sB { font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } - .c9sBx{ font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; } + .c9sBx{ font-size:9pt; text-align:center; border:1px solid black; font-weight:bold; } .c9swB{ font-size:9pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } .c9wB { font-size:9pt; text-align:center; color:white; background:black; font-weight:bold; } .c9pB { font-size:9pt; text-align:center; color:#88DDFF; background:black; font-weight:bold; } @@ -260,8 +263,8 @@ .lt9b { font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; } .lt9bw{ font-size:9pt; text-align:left; vertical-align:top; border-bottom-width:1px; border-bottom:1pt solid black; color:white; background:black; } .lt9mB{ font-size:9pt; text-align:left; vertical-align:top; font-weight:bold; } - .lt9s { font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; } - .lt9sB{ font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } + .lt9s { font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; } + .lt9sB{ font-size:9pt; text-align:left; vertical-align:top; border:1px solid black; font-weight:bold; } .r9 { font-size:9pt; text-align:right; } .r9w { font-size:9pt; text-align:center; color:white; background:black; } .r9wB { font-size:9pt; text-align:right; color:white; background:black; font-weight:bold; } @@ -271,8 +274,9 @@ .c10glB{ font-size:10pt; text-align:center; border:5px solid #DDDDDD; background:#CCCCFF; font-weight:bold; } .c10mB { font-size:10pt; text-align:center; color:white; background:black; font-weight:bold; } .c10s { font-size:10pt; text-align:center; border:1px solid black; } + .c10sBx{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } .c10sB { font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; background:#F0E0B9; } - .c10sBx{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; } + .c10sgB{ font-size:10pt; text-align:center; border:1px solid black; font-weight:bold; color:#A0A0A0; } .c10sl { font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; } .c10slB{ font-size:10pt; text-align:center; border:1px solid black; background:#CCCCFF; font-weight:bold; } .c10swB{ font-size:10pt; text-align:center; border:1px solid black; color:white; background:black; font-weight:bold; } @@ -280,6 +284,8 @@ .c10B { font-size:10pt; text-align:center; font-weight:bold; } .c10yB { font-size:10pt; text-align:center; color:#FFFF20; background:black; font-weight:bold; } .c10yB A:hover { font-size:10pt; text-align:center; color:#20FFFF; background:black; font-weight:bold; } + .c10oB { font-size:10pt; text-align:center; color:#FFCC20; background:black; font-weight:bold; } + .c10oB A:hover { font-size:10pt; text-align:center; color:#20CCFF; background:black; font-weight:bold; } .l10 { font-size:10pt; text-align:left; } .l10wB { font-size:10pt; text-align:left; color:white; background:black; font-weight:bold; } .l10wB A:hover { font-size:10pt; text-align:center; color:#20FFFF; background:black; font-weight:bold; } @@ -360,8 +366,10 @@ var StateArr = new Array(); // List of all weapons var WeapArr = new Array(); -// Hardcoded Global Debug variable for now: Show Aspect information -var ShowAspects = 0; +// Hardcoded Global Debug variable for now: +// Show Aspect information will show Aspect values if Sources are also shown +var ShowAspects = 1; +// Now a user toggle var ShowSources = 0; // List of checks var FORTindex = 0; @@ -440,6 +448,47 @@ this.error = 1; } } +function ParseEnergy(fooA, fooB) +{ + fooF = ""; + fooC = fooA + ", " + fooB; + var fooEnergy = new Array(); + fooEnergy = fooC.split(","); + for (x=0; x<fooEnergy.length; x++) { + if(fooEnergy[x] != "") { + fooC = fooEnergy[x]; + if(fooC.indexOf("critical") != -1) fooC = ""; + if(fooC.indexOf("\+") == -1) fooC = ""; + // TODO: Weak attempt at stripping Bane, will fail if the Bane string is modifed + if(fooC.indexOf("enhancement bonus and does +2d6 bonus") != -1) fooC = ""; + if(fooC.indexOf(" damage") == -1) { + fooC = ""; + } else { + fooD = fooC.replace(/.*\+/, '+'); + fooG = fooD.replace(/damage against evil targets/, "holy damage"); + fooD = fooG.replace(/damage against good targets/, "unholy damage"); + fooG = fooD.replace(/damage against chaotic targets/, "axiomatic damage"); + fooD = fooG.replace(/damage against lawful targets/, "anarchic damage"); + fooC = fooD.replace(/damage.*/, "damage"); + } + if(fooC != "") { + if(fooF != "") fooF = fooF + ", "; + fooF = fooF + fooC; + } + } + } + return(fooF); +} +function ParseEnchantment(haystack) +{ + retval = "0"; + searchstr = "PLUS"; + there = haystack.indexOf(searchstr); + if(there != -1) { + retval = String(parseInt(haystack.substr(there+4,2))); + } + return(retval); +} // Set up Skill Mastery List // TODO When count("NAME.Name(sub name)) can be utilised then we can use that as the simple check @@ -459,6 +508,10 @@ // Deal with Unarmed WeapArr[0] = new Weapon( -1, "UNARMED", "Melee", "|WEAPONH.TOTALHIT|", "|WEAPONH.DAMAGE|", "T", "0'", "|WEAPONH.CRIT|", "|WEAPONH.MULT|", "B", "T", "" ); WeapArr[0].setOutputFormat(2); +|IIF(EQ.MERGEALL.IS.AmuletOfMightyFists.0.EQUIPPED:Y)| + WeapArr[0].energy = ParseEnergy("", "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"); + WeapArr[0].sprop = "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"; +|ENDIF| WeapPos = 1; // Loop through the weapons list three times. First adding primary, then equipped weapons, then non-equipped. |FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| @@ -466,8 +519,10 @@ WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.EQUIPPED.%weap.NAME| (equipped)","|WEAPON.EQUIPPED.%weap.CATEGORY|","|WEAPON.EQUIPPED.%weap.TOTALHIT|","|WEAPON.EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.EQUIPPED.%weap.HAND|"), "|WEAPON.EQUIPPED.%weap.RANGE|", "|WEAPON.EQUIPPED.%weap.CRIT|", "|WEAPON.EQUIPPED.%weap.MULT|", "|WEAPON.EQUIPPED.%weap.TYPE|", "|WEAPON.EQUIPPED.%weap.SIZE|", "|WEAPON.EQUIPPED.%weap.SPROP|" ); |IIF(WEAPON.EQUIPPED.%weap.CATEGORY:Ranged)| WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Bow:FALSE.AND.WEAPON.EQUIPPED.%weap.ISTYPE.Crossbow:FALSE.AND.WEAPON.EQUIPPED.%weap.ISTYPE.Blowgun:FALSE.AND.WEAPON.EQUIPPED.%weap.ISTYPE.Sling:FALSE)| |IIF(WEAPON.EQUIPPED.%weap.CONTENTS:0)| - RangedStuff = new WeaponRangedAmmoData( "", "" ); + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); |FOR,%range,0,4,1,0| RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); |ENDFOR| @@ -476,33 +531,134 @@ |FOR,%ammo,0,WEAPON.EQUIPPED.%weap.CONTENTS,1,0| fooA = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo|"; fooB = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); if( fooA == "") fooA = "normal"; - RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); |FOR,%range,0,4,1,0| RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); |ENDFOR| WeapArr[WeapPos].addRangedData( RangedStuff ); |ENDFOR| |ENDIF| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Bow:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Arrow)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Crossbow:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Bolt)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Blowgun:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Dart)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Sling:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:SlingStone)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| |ELSE| |IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| WeapArr[WeapPos].setOutputFormat(2); + WeapArr[WeapPos].energy = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); +|IIF(WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| +|IIF(EQ.MERGEALL.IS.AmuletOfMightyFists.0.EQUIPPED:Y)| + WeapArr[WeapPos].energy = ParseEnergy("", "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"); + WeapArr[WeapPos].sprop = "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"; +|ENDIF| +|ENDIF| |ELSE| WeapArr[WeapPos].setOutputFormat(3); WeapArr[WeapPos].addMeleeVector("|WEAPON.EQUIPPED.%weap.BASEHIT|", "|WEAPON.EQUIPPED.%weap.OHHIT|", "|WEAPON.EQUIPPED.%weap.THHIT|", "|WEAPON.EQUIPPED.%weap.TWPHITH|", "|WEAPON.EQUIPPED.%weap.TWPHITL|", "|WEAPON.EQUIPPED.%weap.TWOHIT|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.EQUIPPED.%weap.THDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|" ); + WeapArr[WeapPos].energy = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); |ENDIF| |ENDIF| WeapPos = WeapPos + 1; } |ENDFOR| + // Second loop through the weapons. Now effectively adding hand = off, or hand = both. |FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| if(('|WEAPON.EQUIPPED.%weap.NAME|x' != 'x') && ('x|WEAPON.EQUIPPED.%weap.HAND|' != 'xPrimary')) { WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.EQUIPPED.%weap.NAME| (equipped)","|WEAPON.EQUIPPED.%weap.CATEGORY|","|WEAPON.EQUIPPED.%weap.TOTALHIT|","|WEAPON.EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.EQUIPPED.%weap.HAND|"), "|WEAPON.EQUIPPED.%weap.RANGE|", "|WEAPON.EQUIPPED.%weap.CRIT|", "|WEAPON.EQUIPPED.%weap.MULT|", "|WEAPON.EQUIPPED.%weap.TYPE|", "|WEAPON.EQUIPPED.%weap.SIZE|", "|WEAPON.EQUIPPED.%weap.SPROP|" ); |IIF(WEAPON.EQUIPPED.%weap.CATEGORY:Ranged)| WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Bow:FALSE.AND.WEAPON.EQUIPPED.%weap.ISTYPE.Crossbow:FALSE.AND.WEAPON.EQUIPPED.%weap.ISTYPE.Blowgun:FALSE.AND.WEAPON.EQUIPPED.%weap.ISTYPE.Sling:FALSE)| |IIF(WEAPON.EQUIPPED.%weap.CONTENTS:0)| - RangedStuff = new WeaponRangedAmmoData( "", "" ); + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); |FOR,%range,0,4,1,0| RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); |ENDFOR| @@ -511,33 +667,134 @@ |FOR,%ammo,0,WEAPON.EQUIPPED.%weap.CONTENTS,1,0| fooA = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo|"; fooB = "|WEAPON.EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); if( fooA == "") fooA = "normal"; - RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); |FOR,%range,0,4,1,0| RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); |ENDFOR| WeapArr[WeapPos].addRangedData( RangedStuff ); |ENDFOR| |ENDIF| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Bow:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Arrow)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Crossbow:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Bolt)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Blowgun:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Dart)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Sling:TRUE)| + fooF = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:SlingStone)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| |ELSE| |IIF(WEAPON.EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| WeapArr[WeapPos].setOutputFormat(2); + WeapArr[WeapPos].energy = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); +|IIF(WEAPON.EQUIPPED.%weap.CATEGORY:NATURAL)| +|IIF(EQ.MERGEALL.IS.AmuletOfMightyFists.0.EQUIPPED:Y)| + WeapArr[WeapPos].energy = ParseEnergy("", "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"); + WeapArr[WeapPos].sprop = "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"; +|ENDIF| +|ENDIF| |ELSE| WeapArr[WeapPos].setOutputFormat(3); WeapArr[WeapPos].addMeleeVector("|WEAPON.EQUIPPED.%weap.BASEHIT|", "|WEAPON.EQUIPPED.%weap.OHHIT|", "|WEAPON.EQUIPPED.%weap.THHIT|", "|WEAPON.EQUIPPED.%weap.TWPHITH|", "|WEAPON.EQUIPPED.%weap.TWPHITL|", "|WEAPON.EQUIPPED.%weap.TWOHIT|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.EQUIPPED.%weap.THDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.EQUIPPED.%weap.OHDAMAGE|" ); + WeapArr[WeapPos].energy = ParseEnergy("", "|WEAPON.EQUIPPED.%weap.SPROP|"); |ENDIF| |ENDIF| WeapPos = WeapPos + 1; } |ENDFOR| + // And finally go through the non-equipped weapons in alphabetical order |FOR,%weap,0,COUNT[EQTYPE.WEAPON]-1,1,0| if('|WEAPON.NOT_EQUIPPED.%weap.NAME|x' != 'x') { - WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.NOT_EQUIPPED.%weap.NAME|","|WEAPON.NOT_EQUIPPED.%weap.CATEGORY|","|WEAPON.NOT_EQUIPPED.%weap.TOTALHIT|","|WEAPON.NOT_EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.NOT_EQUIPPED.%weap.HAND|"), "|WEAPON.NOT_EQUIPPED.%weap.RANGE|", "|WEAPON.NOT_EQUIPPED.%weap.CRIT|", "|WEAPON.NOT_EQUIPPED.%weap.MULT|", "|WEAPON.NOT_EQUIPPED.%weap.TYPE|", "|WEAPON.NOT_EQUIPPED.%weap.SIZE|", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|" ); + WeapArr[WeapPos] = new Weapon((WeapPos-1),"|WEAPON.NOT_EQUIPPED.%weap.NAME|","|WEAPON.NOT_EQUIPPED.%weap.CATEGORY|","|WEAPON.NOT_EQUIPPED.%weap.TOTALHIT|","|WEAPON.NOT_EQUIPPED.%weap.DAMAGE|", FirstChar("|WEAPON.NOT_EQUIPPED.%weap.HAND|"), "|WEAPON.NOT_EQUIPPED.%weap.RANGE|", "|WEAPON.NOT_EQUIPPED.%weap.CRIT|", "|WEAPON.NOT_EQUIPPED.%weap.MULT|", "|WEAPON.NOT_EQUIPPED.%weap.TYPE|", "|WEAPON.NOT_EQUIPPED.%weap.SIZE|", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|" ); |IIF(WEAPON.NOT_EQUIPPED.%weap.CATEGORY:Ranged)| - WeapArr[WeapPos].setOutputFormat(1); + WeapArr[WeapPos].setOutputFormat(1); +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Bow:FALSE.AND.WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Crossbow:FALSE.AND.WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Blowgun:FALSE.AND.WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Sling:FALSE)| |IIF(WEAPON.NOT_EQUIPPED.%weap.CONTENTS:0)| - RangedStuff = new WeaponRangedAmmoData( "", "" ); + fooF = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); |FOR,%range,0,4,1,0| RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); |ENDFOR| @@ -546,23 +803,121 @@ |FOR,%ammo,0,WEAPON.NOT_EQUIPPED.%weap.CONTENTS,1,0| fooA = "|WEAPON.NOT_EQUIPPED.%weap.CONTENTS.%ammo|"; fooB = "|WEAPON.NOT_EQUIPPED.%weap.CONTENTS.%ammo.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); if( fooA == "") fooA = "normal"; - RangedStuff = new WeaponRangedAmmoData( fooA, fooB ); + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); |FOR,%range,0,4,1,0| RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.CONTENTS.%ammo.DAMAGE|" ); |ENDFOR| WeapArr[WeapPos].addRangedData( RangedStuff ); |ENDFOR| |ENDIF| +|ENDIF| +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Bow:TRUE)| + fooF = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Arrow)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Crossbow:TRUE)| + fooF = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Bolt)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Blowgun:TRUE)| + fooF = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:Dart)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| +|IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Sling:TRUE)| + fooF = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + RangedStuff = new WeaponRangedAmmoData( "", "", fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|" ); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGENONE]-1),1,0| +|IIF(EQ.MERGEALL.%equip1.TYPE:SlingStone)| + fooA = "|EQ.MERGEALL.%equip1.NAME|"; + fooB = "|EQ.MERGEALL.%equip1.SPROP|"; + fooF = ParseEnergy(fooB, "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); + enchantment = ParseEnchantment("|EQ.MERGEALL.%equip1.TYPE|"); + if( fooA == "") fooA = "normal"; + RangedStuff = new WeaponRangedAmmoData( fooA, fooB, fooF ); +|FOR,%range,0,4,1,0| + RangedStuff.addRangeIncrement( "|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range|'", modAttackBonusString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.TOTALHIT|", enchantment), modDamageString("|WEAPON.NOT_EQUIPPED.%weap.RANGELIST.%range.DAMAGE|", enchantment, "N")); +|ENDFOR| + WeapArr[WeapPos].addRangedData( RangedStuff ); +|ENDIF| +|ENDFOR| +|ENDIF| |ELSE| |IIF(WEAPON.NOT_EQUIPPED.%weap.ISTYPE.Double.OR.WEAPON.NOT_EQUIPPED.%weap.CATEGORY:Non-Standard-Melee.OR.WEAPON.NOT_EQUIPPED.%weap.CATEGORY:NATURAL)| WeapArr[WeapPos].setOutputFormat(2); + WeapArr[WeapPos].energy = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); +|IIF(WEAPON.NOT_EQUIPPED.%weap.CATEGORY:NATURAL)| +|IIF(EQ.MERGEALL.IS.AmuletOfMightyFists.0.EQUIPPED:Y)| + WeapArr[WeapPos].energy = ParseEnergy("", "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"); + WeapArr[WeapPos].sprop = "|EQ.MERGEALL.IS.AmuletOfMightyFists.0.SPROP|"; +|ENDIF| +|ENDIF| |ELSE| WeapArr[WeapPos].setOutputFormat(3); WeapArr[WeapPos].addMeleeVector("|WEAPON.NOT_EQUIPPED.%weap.BASEHIT|", "|WEAPON.NOT_EQUIPPED.%weap.OHHIT|", "|WEAPON.NOT_EQUIPPED.%weap.THHIT|", "|WEAPON.NOT_EQUIPPED.%weap.TWPHITH|", "|WEAPON.NOT_EQUIPPED.%weap.TWPHITL|", "|WEAPON.NOT_EQUIPPED.%weap.TWOHIT|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.OHDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.THDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.BASICDAMAGE|", "|WEAPON.NOT_EQUIPPED.%weap.OHDAMAGE|" ); + WeapArr[WeapPos].energy = ParseEnergy("", "|WEAPON.NOT_EQUIPPED.%weap.SPROP|"); |ENDIF| |ENDIF| - WeapPos = WeapPos + 1; + WeapPos = WeapPos + 1; } |ENDFOR| @@ -583,7 +938,7 @@ |ENDIF| // Now, set up the list of skills |FOR,%skill,0,COUNT[SKILLS]-1,1,1| -SkillArr[%skill] = new Skill("|SKILL.%skill|","|SKILL.%skill.ABILITY|",|SKILL.%skill.TOTAL|,|SKILL.%skill.ABMOD|,|SKILL.%skill.RANK|,|SKILL.%skill.MISC|,"|SKILL.%skill.UNTRAINED|"); +SkillArr[%skill] = new Skill("|SKILL.%skill|","|SKILL.%skill.ABILITY|",|SKILL.%skill.TOTAL|,|SKILL.%skill.ABMOD|,|SKILL.%skill.RANK|,|SKILL.%skill.MISC|,"|SKILL.%skill.UNTRAINED|","|SKILL.%skill.EXPLAIN|"); |ENDFOR| // A variable of type Ability supports the following // Only those marked with * should be modified after creation @@ -791,7 +1146,7 @@ } } } - // We need to write the results to two divs occasionally. The second has "_SND" appended to the name. + // We need to write the results to two divs occasionally. The second has "_SND" appended to the name. outerTD = theDIV + "_TD_SND"; SndDIV = theDIV + "_SND"; if (document.getElementById(SndDIV) != null) { @@ -815,9 +1170,9 @@ var AttackResult = 0; var DamageResult = 0; var swings = new Array(); - if(bonus.search(/#/) == -1) { // +14/+8/+2 comes to us as +14#+8#+2 so the function call doesn't - swings[0] = bonus; // do math on the incoming value before handing it to us. Split - } else { // the swings up if there are multiples, and process. + if(bonus.search(/#/) == -1) { // +14/+8/+2 comes to us as +14#+8#+2 so the function call doesn't + swings[0] = bonus; // do math on the incoming value before handing it to us. Split + } else { // the swings up if there are multiples, and process. swings = bonus.split("#"); } for (x=0; x<swings.length; x++) { @@ -856,7 +1211,6 @@ RecordDiceRoll(msg); } } - function processBonus(damage) { if (damage >= 0) @@ -975,20 +1329,20 @@ then = SpecialAttacksListCurrent; SpecialAttacksListCurrent = whichText; now = "<B>" + SpecialAttacksList[whichText].Name + "</B> ~ " + SpecialAttacksList[whichText].Description; - if((ShowAspects == 1) && (SpecialAttacksList[whichText].showAspect == 1)) { + if((ShowSources == 1) && (ShowAspects == 1) && (SpecialAttacksList[whichText].showAspect == 1)) { now = now + "<br />" + SpecialAttacksList[whichText].Aspect ; } if(ShowSources == 1) - now = now + "<br />" + SpecialAttacksList[whichText].Source ; + now = now + "<br />" + SpecialAttacksList[whichText].Source ; } else if(whichTable == 'SPECIAL_QUALITIES_Table') { then = SpecialQualitiesListCurrent; SpecialQualitiesListCurrent = whichText; now = "<B>" + SpecialQualitiesList[whichText].Name + "</B> ~ " + SpecialQualitiesList[whichText].Description; - if((ShowAspects == 1) && (SpecialQualitiesList[whichText].showAspect == 1)) { + if((ShowSources == 1) && (ShowAspects == 1) && (SpecialQualitiesList[whichText].showAspect == 1)) { now = now + "<br />" + SpecialQualitiesList[whichText].Aspect ; } if(ShowSources == 1) - now = now + "<br />" + SpecialQualitiesList[whichText].Source ; + now = now + "<br />" + SpecialQualitiesList[whichText].Source ; } if(then != whichText) { Tvis.display = 'block'; @@ -1026,6 +1380,7 @@ document.getElementById('ShowSources').innerHTML = "Show Sources: <a class=\"c10yB\" name=\"#\" onclick=\"ToggleSources();\">Off</a>"; } BuildFeatsCompTable(); + BuildFeatsBenefitTable(); BuildEqCompTable(); ToggleLayer('SPECIAL_ATTACKS_Table','SPECIAL_ATTACKS_Details','-1'); ToggleLayer('SPECIAL_QUALITIES_Table','SPECIAL_QUALITIES_Details','-1'); @@ -1034,21 +1389,43 @@ newHTML = ""; newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="2">\n'; newHTML = newHTML + '<tr><td class="c10yB" colspan="2"><a name="#" onClick="CycleFeats();">FEATS</a></td></tr>\n'; - newHTML = newHTML + '<tr><td class="lt8sB" width="40%">NAME</td><td class="lt8sB" width="60%">DESCRIPTION</td></tr>\n'; + newHTML = newHTML + '<tr><td class="lt8sB" width="20%">NAME</td><td class="lt8sB" width="80%">SHORT DESCRIPTION</td></tr>\n'; |FOR,%feat,0,COUNT[FEATSALL.VISIBLE]-1,1,0| |OIF(EVEN:%feat,newHTML = newHTML + '<tr bgcolor="#DDDDDD">';,newHTML = newHTML + '<tr bgcolor="white">';)| newHTML = newHTML + '<td valign="top" class="l8s">|FEATALL.VISIBLE.%feat|</td>\n'; newHTML = newHTML + '<td valign="top" align="left" class="l8s">|FEATALL.VISIBLE.%feat.DESC|\n'; + if ((ShowSources == 1) && (ShowAspects == 1)) + if(|FEATALL.VISIBLE.%feat.ASPECTCOUNT| > 0) + newHTML = newHTML + '<br />|FEATALL.VISIBLE.%feat.ASPECT|\n'; if (ShowSources == 1) - newHTML = newHTML + '<br>|FEATALL.VISIBLE.%feat.SOURCE|\n'; + newHTML = newHTML + '<br />|FEATALL.VISIBLE.%feat.SOURCE|\n'; newHTML = newHTML + '</td></tr>\n'; |ENDFOR| newHTML = newHTML + '</table>\n'; document.getElementById('FeatsComprehensive').innerHTML = newHTML; } +function BuildFeatsBenefitTable() { + newHTML = ""; + newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="2">\n'; + newHTML = newHTML + '<tr><td class="c10yB" colspan="2"><a name="#" onClick="CycleFeats();">FEATS</a></td></tr>\n'; + newHTML = newHTML + '<tr><td class="lt8sB" width="20%">NAME</td><td class="lt8sB" width="80%">LONGER BENEFIT DESCRIPTION</td></tr>\n'; +|FOR,%feat,0,COUNT[FEATSALL.VISIBLE]-1,1,0| +|OIF(EVEN:%feat,newHTML = newHTML + '<tr bgcolor="#DDDDDD">';,newHTML = newHTML + '<tr bgcolor="white">';)| + newHTML = newHTML + '<td valign="top" class="l8s">|FEATALL.VISIBLE.%feat|</td>\n'; + newHTML = newHTML + '<td valign="top" align="left" class="l8s">|FEATALL.VISIBLE.%feat.BENEFIT|\n'; + if ((ShowSources == 1) && (ShowAspects == 1)) + if(|FEATALL.VISIBLE.%feat.ASPECTCOUNT| > 0) + newHTML = newHTML + '<br />|FEATALL.VISIBLE.%feat.ASPECT|\n'; + if (ShowSources == 1) + newHTML = newHTML + '<br />|FEATALL.VISIBLE.%feat.SOURCE|\n'; + newHTML = newHTML + '</td></tr>\n'; +|ENDFOR| + newHTML = newHTML + '</table>\n'; + document.getElementById('FeatsBenefitDiv').innerHTML = newHTML; +} function BuildEqCompTable() { newHTML = ""; - newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="0" border="0">\n<tr>\n'; + newHTML = newHTML + '<table width="100%" cellspacing="0" cellpadding="0" border="0">\n<tr>\n'; newHTML = newHTML + '<td class="c10yB"><a name="#" onclick="CycleEquipment()">EQUIPMENT</a> ('; newHTML = newHTML + StripZero("|TOTAL.WEIGHT|") + ' - ' + StripZero("|WEIGHT.LIGHT|") + '/' + StripZero("|WEIGHT.MEDIUM|") + '/' + StripZero("|WEIGHT.HEAVY|") + ' \n'; |IIF(TOTAL.LOAD:Light)| @@ -1105,7 +1482,7 @@ |ENDIF| |ENDIF| |ENDIF| - if(ShowSources == 1) + if(ShowSources == 1) newHTML = newHTML + '<br /><span class="lt7">|EQ.MERGENONE.%equip1.SOURCE|</span>\n'; newHTML = newHTML + '</td>\n'; newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td>\n'; @@ -1200,8 +1577,8 @@ |ENDIF| |ENDIF| |ENDIF| - if(ShowSources == 1) - newHTML = newHTML + '<br /><span class="lt7">|EQ.MERGENONE.%equip1.SOURCE|</span>\n'; + if(ShowSources == 1) + newHTML = newHTML + '<br /><span class="lt7">|EQ.MERGENONE.%equip1.SOURCE|</span>\n'; newHTML = newHTML + '</td>\n'; newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.LOCATION|<br /></td>\n'; newHTML = newHTML + '<td class="ct8s">|EQ.MERGENONE.%equip1.QTY|<br /></td>\n'; @@ -1221,6 +1598,7 @@ newHTML = newHTML + '</table>\n'; document.getElementById('EquipmentComprehensive').innerHTML = newHTML; } + // A variable of type ATK ("attack") supports the following // Only those marked with * should be modified after creation // name string RW "Melee" or "Ranged" @@ -1278,6 +1656,7 @@ // Only those marked with * should be modified after creation // name string RW Spot // ability string RW Base stat for skill +// explain string RW Explanation of the MISC build // statNr int RO stat number based on .ability // total int RO Current skill modifier based on everything // statmodifier int RO Modifier due to current base stat modifier (as taken from AbArr global array) @@ -1286,9 +1665,20 @@ // bUseUntrained bool RW true if this skill can be used untrained // baseStatModified bool RO true if base stat is currently modified by something else // notInRageMode bool RO true if skill disallowed in Barb Rage -function Skill(nName,nAbility,nTotal,nStatMod,nRank,nMiscMod,nUseUntrained){ +function Skill(nName,nAbility,nTotal,nStatMod,nRank,nMiscMod,nUseUntrained,nExplain){ this.name = nName; this.ability = nAbility; + this.explain = nExplain; + // Shorten name-name class skill check to just class skill... + var capt = this.name.toUpperCase() + '|PIPE|' + this.name.toUpperCase(); + var shorten = this.explain.replace(capt,"class skill"); + this.explain = shorten; + shorten = this.name.toUpperCase(); + capt = this.name.toUpperCase() + '|PIPE|' + shorten.replace(/ /g,""); + shorten = this.explain.replace(capt,"class skill"); + // Insert Ranks too... + capt = "[Stat] +" + nRank + "[Ranks]"; + this.explain = shorten.replace("[STAT]", capt); this.statNr = SkillStatModNr; this.total = SkillValue; this.statmodifier = SkillStatModifier; @@ -1461,7 +1851,7 @@ } function ACObjTouch() { - return this.touchBase-this.deflectionBase+this.deflection()-this.dodgeBase+this.dodge()-this.abilityBase+this.ability()-this.miscBase+this.misc(); + return this.touchBase-this.deflectionBase+this.deflection()-this.dodgeBase+this.dodge()-this.abilityBase+this.ability()-this.miscBase+this.misc(); } function ACObjTouchModified() { @@ -1501,10 +1891,10 @@ } function ACObjDodgeModified() { - if ( this.dodgeBase == this.dodge() ) - return FALSE; - else - return TRUE; + if ( this.dodgeBase == this.dodge() ) + return FALSE; + else + return TRUE; } function ACObjDeflection() { @@ -1532,7 +1922,7 @@ } function ACObjTotal() { - return this.totalBase-this.armorBase+this.armor()-this.shieldBase+this.shield()-this.deflectionBase+this.deflection()-this.naturalarmorBase+this.naturalarmor()-this.dodgeBase+this.dodge()-this.abilityBase+this.ability()-this.miscBase+this.misc(); + return this.totalBase-this.armorBase+this.armor()-this.shieldBase+this.shield()-this.deflectionBase+this.deflection()-this.naturalarmorBase+this.naturalarmor()-this.dodgeBase+this.dodge()-this.abilityBase+this.ability()-this.miscBase+this.misc(); } function ACObjTotalModified() { @@ -1801,7 +2191,6 @@ ATKPrint(); WeaponPrint(); } - function setSpellNatBonus() { foo = 12; // out of range marker, selections are 0-10. @@ -1813,7 +2202,7 @@ function setSpellDodgeBonus() { foo = 12; // out of range marker, selections are 0-10. - if (document.getElementById('spell_dodge_bonus') != null) + if (document.getElementById('spell_dodge_bonus') != null) foo = document.getElementById("spell_dodge_bonus").value; if ((foo > -1) && (foo < 11)) spell_Dodge_bonus = foo; @@ -1842,7 +2231,6 @@ if ((foo > -1) && (foo < 11)) spell_Shield_bonus = foo; } - function ABPrint() { tempHTML ='<table border="0" cellpadding="1" cellspacing="1" width="320px"><tr>'; @@ -1876,20 +2264,19 @@ } tempHTML = tempHTML+'<\/table>'; document.getElementById('AbilityDiv').innerHTML = tempHTML; - // Create a compact version of the Ability Scores and saves as well. tempHTML = ''; // Reorder the printout to physical and mental stats var CompArr = new Array('0','3','1','4','2','5'); - // Grab unconventional stats and add them at the end of the list. - if(AbArr.length > 6) + // Grab unconventional stats and add them at the end of the list. + if(AbArr.length > 6) for(i=6;i<AbArr.length;i++) CompArr[i] = i; tempHTML ='<table border="0" cellpadding="1px" cellspacing="1px" width="300px">'; for (i=0; i<AbArr.length;i++){ if(AbArr[CompArr[i]].visible == TRUE) { tempHTML = tempHTML+'<tr><td width="50%"><table border=0 cellpadding="1px" cellspacing="1px" width="100%"><tr>\n'; - tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+CompArr[i]+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+CompArr[i]+');"><br>'; + tempHTML = tempHTML+'<td width="1px" align="right" id=removej'+CompArr[i]+'><input class="statmodbutton" type=button value="+" name=AddStatButton onclick="AddStat('+CompArr[i]+');"><br />'; tempHTML = tempHTML+'<input class="statmodbutton" type=button value="-" name=RemoveStatButton onclick="RemoveStat('+CompArr[i]+');"><\/td>'; tempHTML = tempHTML+'<td width="49%" class="c10wB">'+AbArr[CompArr[i]].name+'<span class="c4w"><br />'+AbArr[CompArr[i]].longname+'<\/span><\/td>'; if (AbArr[CompArr[i]].hasTempMod()) { @@ -1922,16 +2309,16 @@ tempHTML = tempHTML+'<td '; if ( AC.totalModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.total()+'<br><span class="c6">TOTAL</span><\/td>'; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.total()+'<br /><span class="c6">TOTAL</span><\/td>'; tempHTML = tempHTML+'<td class="c7mB">:</td><td '; if ( AC.flatModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.flat()+'<br><span class="c6">FLAT</span><\/td>'; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.flat()+'<br /><span class="c6">FLAT</span><\/td>'; tempHTML = tempHTML+'<td class="c7mB">:</td><td '; if ( AC.touchModified() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.touch()+'<br><span class="c6">TOUCH</span><\/td>'; - tempHTML = tempHTML+'<td width="30%"> </td></tr></table></td>'; + tempHTML = tempHTML+'class="c10sB" width="30px">'+AC.touch()+'<br /><span class="c6">TOUCH</span><\/td>'; + tempHTML = tempHTML+'<td width="30%"> </td></tr></table></td>'; tempHTML = tempHTML+'</tr></table></td>'; tempHTML = tempHTML+'<tr><td colspan="2"><table border="0" cellspacing="1px" cellpadding="1px"><tr>'; for (i=0;i<ATKArr.length;i++){ @@ -2162,11 +2549,11 @@ if ( SkillArr[i].bSkillMastery == TRUE ) tempHTML = tempHTML + '*'; tempHTML = tempHTML + '<\/td>'; - tempHTML = tempHTML + '<td class="l8">'+SkillArr[i].name+'<\/td><td class="c8">'+SkillArr[i].ability+'<\/td><td class="cb8b">'+SkillArr[i].total()+'<\/td><td class="cb8mB">=<\/td><td class="cb8bB">'+SkillArr[i].statmodifier()+'<br /><\/td><td class="cb8mB">+<\/td><td class="cb8bB">'+SkillArr[i].rank+'<br /><\/td><td class="cb8mB">+<\/td><td class="cb8bB">'+SkillArr[i].miscmodifier+'<br /><\/td><\/tr>'; + tempHTML = tempHTML + '<td class="l8">'+SkillArr[i].name+'<br /> <span class="l7">'+SkillArr[i].explain+'</span><\/td><td class="c8">'+SkillArr[i].ability+'<\/td><td class="cb8b">'+SkillArr[i].total()+'<\/td><td class="cb8mB">=<\/td><td class="cb8bB">'+SkillArr[i].statmodifier()+'<br /><\/td><td class="cb8mB">+<\/td><td class="cb8bB">'+SkillArr[i].rank+'<br /><\/td><td class="cb8mB">+<\/td><td class="cb8bB">'+SkillArr[i].miscmodifier+'<br /><\/td><\/tr>'; } tempHTML = tempHTML + '<\/table>'; tempHTML = tempHTML + '<span class="l8"> ◆ = Useable Untrained<\/span>, '; - tempHTML = tempHTML + '<span class="l8">* = Skill Mastery<\/span>'; + tempHTML = tempHTML + '<span class="l8">* = Skill Mastery<br /> ARMOR = Armor or Encumberance, OTHER = unexplained conditionals<\/span>'; document.getElementById('SkillsComprehensive').innerHTML = tempHTML; return; } @@ -2276,8 +2663,8 @@ tempHTML = tempHTML+'<td width="25" class="c4">DEFLECTION<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">STAT<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">SIZE<br />BONUS<\/td><td><\/td>'; + tempHTML = tempHTML+'<td width="25" class="c4">NATURAL<br />ARMOR<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">DODGE<br />BONUS<\/td><td><\/td>'; - tempHTML = tempHTML+'<td width="25" class="c4">NATURAL<br />ARMOR<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISC<br />BONUS<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">MISS<br />CHANCE<\/td><td><\/td>'; tempHTML = tempHTML+'<td width="25" class="c4">ARCANE<br />FAILURE<\/td><td><\/td>'; @@ -2300,17 +2687,17 @@ tempHTML = tempHTML+'<td '; if ( AbArr[DEXindex].hasTempMod() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25">'+Init.initTotal()+'<br><span class="cb5">TOTAL</span><\/td>'; + tempHTML = tempHTML+'class="c10sB" width="25">'+Init.initTotal()+'<br /><span class="cb5">TOTAL</span><\/td>'; tempHTML = tempHTML+'<td class="cm7mB">=<\/td>'; tempHTML = tempHTML+'<td '; if ( AbArr[DEXindex].hasTempMod() ) tempHTML = tempHTML+styleTag; - tempHTML = tempHTML+'class="c10sB" width="25">'+AbArr[DEXindex].tempmodifier+'<br><span class="cb5">DEX</span><\/td>'; + tempHTML = tempHTML+'class="c10sB" width="25">'+AbArr[DEXindex].tempmodifier+'<br /><span class="cb5">DEX</span><\/td>'; tempHTML = tempHTML+'<td class="cm7mB">+<\/td>'; - tempHTML = tempHTML+'<td class="c10sB" width="25">'+Init.initBonus+'<br><span class="cb5">MISC</span><\/td>'; + tempHTML = tempHTML+'<td class="c10sB" width="25">'+Init.initBonus+'<br /><span class="cb5">MISC</span><\/td>'; tempHTML = tempHTML+'<td class="cm7mB"><\/td>'; tempHTML = tempHTML+'<td class="c8" width="25"><a name="#" onClick="rollIntoDIV(1,20,'+Init.initTotal()+',\'Initiative Roll\',\'InitRoll\',1);"><img src="die.png" Alt="Roll" width="24px" height="26px" border="0"></a><\/td>'; - tempHTML = tempHTML+'<td id="InitRoll_TD" class="c10sBx" width="25"><div id="InitRoll" class="c10B" style="background-color:transparent;display:inline;">'+wascurrent+'</div><br><span class="cb5">CURRENT</span><\/td>'; + tempHTML = tempHTML+'<td id="InitRoll_TD" class="c10sBx" width="25"><div id="InitRoll" class="c10B" style="background-color:transparent;display:inline;">'+wascurrent+'</div><br /><span class="cb5">CURRENT</span><\/td>'; tempHTML = tempHTML+'<\/tr><\/table>'; document.getElementById("Initdiv").innerHTML = tempHTML; } @@ -2372,8 +2759,8 @@ { |%VAR.BarbRageTimesLVL.INTVAL|; |IIF(GAMEMODE:Pathfinder)| - var strMod = |VAR.RageStatBonus|; - var conMod = |VAR.RageStatBonus|; + var strMod = |VAR.RageStrBonus|; + var conMod = |VAR.RageConBonus|; var willMod = |VAR.RageSaveBonus|; |ELSE| var strMod = |VAR.RageStrBonus|; @@ -2401,8 +2788,8 @@ // Global NumWeaponsFirstPage sets the max number of weapons to print in compact form, but is now // ineffective in Comprehensive mode now that we have moved away from page printing. -// This was 3 like the original combined.htm page, but that led to confusion for some. -// So, bumping to 100 to effectivly disable. +// This was 3 like the original combined.htm page, but that led to confusion for some. +// So, bumping to 100 to effectively disable the limit. var NumWeaponsFirstPage = 100; function WeaponPrint() { @@ -2421,7 +2808,17 @@ else tempHTML = tempHTML+'white'; tempHTML = tempHTML + '">' + WeapArr[0].modifyDamage() + '<br /><\/td>'; - tempHTML = tempHTML + '<td class="c8sB">20/x2<br /><\/td><\/tr>'; + tempHTML = tempHTML + '<td class="c8sB">20/x2<br /><\/td>'; + if ( WeapArr[i].energy != "" ) + { + tempHTML = tempHTML + '<tr>'; + tempHTML = tempHTML + '<td class="l8wB"> </td>'; + tempHTML = tempHTML + '<td class="r8wB">Energy </td>'; + tempHTML = tempHTML + '<td colspan="3" style="background:white" class="l8sB"> ' + WeapArr[i].energy; + tempHTML = tempHTML + '<\/td>'; + tempHTML = tempHTML + '<\/tr>'; + } + tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '</table>'; document.getElementById('UnarmedDiv').innerHTML = tempHTML; // OK, now compact weapons @@ -2467,7 +2864,7 @@ { tempHTML = tempHTML + '<br class="l2" /><table cellpadding="0" width="100%" cellspacing="0" border="0">'; tempHTML = tempHTML + '<tr>'; - tempHTML = tempHTML + '<td id="WEAPON_'+i+'_TD" class="c10B" bgcolor="black" rowspan="2" width="100px" nobreak><div id="WEAPON_'+i+'" class="c10B" style="background-color:transparent;display:inline;"> </div><\/td>'; + tempHTML = tempHTML + '<td id="WEAPON_'+i+'_TD" class="c9B" bgcolor="black" rowspan="2" width="120px" nobreak><div id="WEAPON_'+i+'" class="c9B" style="background-color:transparent;display:inline;"> </div><\/td>'; tempHTML = tempHTML + '<td class="l10wB" rowspan="2"> '+WeapArr[i].name+'<\/td>'; tempHTML = tempHTML + '<td class="c6wB" width="10%" height="15">HAND<\/td>'; tempHTML = tempHTML + '<td class="c6wB" width="10%" height="15">TYPE<\/td>'; @@ -2561,25 +2958,30 @@ tempHTML = tempHTML + '<td style="background:'+tempColor+'" class="c9sB">'+WeapArr[i].modifyRangedDamage(j,k)+'<\/td>'; } tempHTML = tempHTML + '<\/tr>'; + if ( WeapArr[i].rangedData[j].ammoEnergy != "" ) + { + tempHTML = tempHTML + '<tr>'; + tempHTML = tempHTML + '<td class="l8wB"> Energy</td>'; + tempHTML = tempHTML + '<td colspan="5" style="background:white;" class="l8sB"> ' + WeapArr[i].rangedData[j].ammoEnergy; + tempHTML = tempHTML + '<\/td>'; + tempHTML = tempHTML + '<\/tr>'; + } if ( WeapArr[i].rangedData[j].ammoSprop != "" ) { tempHTML = tempHTML + '<tr>'; tempHTML = tempHTML + '<td class="l8wB"> Ammo</td>'; - tempHTML = tempHTML + '<td colspan="5" style="background:'+tempColor+'" class="l8sB"> ' + WeapArr[i].rangedData[j].ammoSprop; + tempHTML = tempHTML + '<td colspan="5" style="background:white;" class="l8sB"> ' + WeapArr[i].rangedData[j].ammoSprop; tempHTML = tempHTML + '<\/td>'; tempHTML = tempHTML + '<\/tr>'; } -// tempHTML = tempHTML + '<tr>'; -// tempHTML = tempHTML + '<td class="l8swB" colspan="2"> Ammunition Used<br /><\/td>'; -// tempHTML = tempHTML + '<td class="cb9s" colspan="5">☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐<\/td>'; } tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '<tr>'; - tempHTML = tempHTML + '<td class="l8swB" colspan="2"> Special Properties<br /><\/td>'; + tempHTML = tempHTML + '<td class="l8swB" colspan="2"> Weapon Special Properties<br /><\/td>'; if (WeapArr[i].sprop == "") tempHTML = tempHTML + '<td class="l8swB" colspan="5"> <br /><\/td>'; else - tempHTML = tempHTML + '<td class="l8sB" style="background:'+tempColor+'" colspan="5"> '+WeapArr[i].sprop+'<br /><\/td>'; + tempHTML = tempHTML + '<td class="l8sB" style="background:white;" colspan="5"> '+WeapArr[i].sprop+'<br /><\/td>'; tempHTML = tempHTML + '<\/tr>'; tempHTML = tempHTML + '<\/table>'; tempHTML = tempHTML + '<span class="l2"><br /><\/span>'; @@ -2588,7 +2990,7 @@ { tempHTML = tempHTML + '<br class="l2" /><table cellpadding="0" width="100%" cellspacing="0" border="0">'; tempHTML = tempHTML + ' <tr>'; - tempHTML = tempHTML + ' <td id="WEAPON_'+i+'_TD" class="c10B" bgcolor="black" rowspan="2" width="80px" nobreak><div id="WEAPON_'+i+'" class="c10B" style="background-color:transparent;display:inline;"> </div><\/td>'; + tempHTML = tempHTML + ' <td id="WEAPON_'+i+'_TD" class="c9B" bgcolor="black" rowspan="2" width="120px" nobreak><div id="WEAPON_'+i+'" class="c9B" style="background-color:transparent;display:inline;"> </div><\/td>'; tempHTML = tempHTML + ' <td class="l10wB" height="15px" rowspan="2"> '+WeapArr[i].name+'<\/td>'; tempHTML = tempHTML + ' <td class="c6wB" width="15%" height="15">TOTAL ATTACK BONUS<\/td>'; tempHTML = tempHTML + ' <td class="c6wB" width="15%" height="15">DAMAGE<\/td>'; @@ -2662,6 +3064,14 @@ tempHTML = tempHTML + ' <td class="c8sB">'+WeapArr[i].size+'<br /><\/td>'; tempHTML = tempHTML + ' <td class="c8sB"> '+WeapArr[i].sprop+'<br /><\/td>'; tempHTML = tempHTML + ' <\/tr>'; + if ( WeapArr[i].energy != "" ) + { + tempHTML = tempHTML + '<tr>'; + tempHTML = tempHTML + '<td class="l8wB"> Energy</td>'; + tempHTML = tempHTML + '<td colspan="5" style="background:white;" class="l8sB"> ' + WeapArr[i].energy; + tempHTML = tempHTML + '<\/td>'; + tempHTML = tempHTML + '<\/tr>'; + } tempHTML = tempHTML + ' <\/table>'; tempHTML = tempHTML + ' <span class="l2"><br /><\/span>'; } @@ -2669,7 +3079,7 @@ { tempHTML = tempHTML + '<br class="l2" /><table cellpadding="0" width="100%" cellspacing="0" border="0">'; tempHTML = tempHTML + ' <tr>'; - tempHTML = tempHTML + ' <td id="WEAPON_'+i+'_TD" class="c10B" bgcolor="black" rowspan="2" width="80px" nobreak><div id="WEAPON_'+i+'" class="c10B" style="background-color:transparent;display:inline;"> </div><\/td>'; + tempHTML = tempHTML + ' <td id="WEAPON_'+i+'_TD" class="c9B" bgcolor="black" rowspan="2" width="120px" nobreak><div id="WEAPON_'+i+'" class="c9B" style="background-color:transparent;display:inline;"> </div><\/td>'; tempHTML = tempHTML + ' <td class="l10wB" height="15px" rowspan="2"> '+WeapArr[i].name+'<\/td>'; tempHTML = tempHTML + ' <td class="c6wB" width="10%" height="15">HAND<\/td>'; tempHTML = tempHTML + ' <td class="c6wB" width="10%" height="15">TYPE<\/td>'; @@ -2744,7 +3154,6 @@ else tempHTML = tempHTML + '<td style="background:'+tempColor+'" class="c9sB"><a name="#" onClick="RollAttack(1,20,\''+sendbonus+'\','+dice+','+die+','+bonus+','+critmin+',\''+WeapArr[i].name+'\',\'WEAPON_'+i+'\',1);"><img src="die_small.png" Alt="Roll" width="15px" heig... [truncated message content] |
From: <ama...@us...> - 2012-05-29 03:59:13
|
Revision: 16788 http://pcgen.svn.sourceforge.net/pcgen/?rev=16788&view=rev Author: amaitland Date: 2012-05-29 03:59:06 +0000 (Tue, 29 May 2012) Log Message: ----------- ASPECTS to saves not showing in Conditional Modifiers box on sheet Issue#: OS-181 Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2012-05-29 03:54:55 UTC (rev 16787) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2012-05-29 03:59:06 UTC (rev 16788) @@ -614,7 +614,10 @@ <td align="center" width="25" class="font4">MISC</td> <td align="center"></td> <td align="center" width="25" class="font4">TEMPORARY</td> - <td align="left" valign="top" width="63" rowspan="4" class="border"><font style="font-size: 4pt">CONDITIONAL<br />MODIFIERS</font></td> + <td align="left" valign="top" width="63" rowspan="4" class="border"><font style="font-size: 4pt">CONDITIONAL<br />MODIFIERS</font> +|FOR,%ability,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SaveBonus")-1,1,0| + |ABILITYALL.Special Ability.%ability.TYPE=SaveBonus.ASPECT.SaveBonus| +|ENDFOR|</td> </tr> |FOR,%checks,0,COUNT[CHECKS]-1,1,0| <tr> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2012-05-29 03:54:55 UTC (rev 16787) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2012-05-29 03:59:06 UTC (rev 16788) @@ -446,7 +446,10 @@ <td align="center" width="25" class="font4">MISC</td> <td align="center"></td> <td align="center" width="25" class="font4">TEMPORARY</td> - <td align="left" valign="top" width="63" rowspan="4" class="border4">CONDITIONAL<br />MODIFIERS</td> + <td align="left" valign="top" width="63" rowspan="4" class="border4">CONDITIONAL<br />MODIFIERS +|FOR,%ability,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SaveBonus")-1,1,0| + |ABILITYALL.Special Ability.%ability.TYPE=SaveBonus.ASPECT.SaveBonus| +|ENDFOR|</td> </tr> |FOR,%checks,0,COUNT[CHECKS]-1,1,0| <tr> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm 2012-05-29 03:54:55 UTC (rev 16787) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm 2012-05-29 03:59:06 UTC (rev 16788) @@ -177,6 +177,10 @@ |CHECK.2.MISC.NOMAGIC.NOSTAT|[MISC] |ENDIF| <br> +|FOR,%ability,0,count("ABILITIES","CATEGORY=Special Ability","TYPE=SaveBonus")-1,1,0| +<b>Conditionals:</b> +|ABILITYALL.Special Ability.%ability.TYPE=SaveBonus.ASPECT.SaveBonus| +|ENDFOR| </blockquote> <hr /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2012-11-05 15:47:56
|
Revision: 18162 http://pcgen.svn.sourceforge.net/pcgen/?rev=18162&view=rev Author: amaitland Date: 2012-11-05 15:47:45 +0000 (Mon, 05 Nov 2012) Log Message: ----------- Fix Bug: Stat blocks not showing Spell books correctly Issue#: OS-90 Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm 2012-11-05 06:09:53 UTC (rev 18161) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm 2012-11-05 15:47:45 UTC (rev 18162) @@ -590,66 +590,21 @@ |ENDIF| <!-- End Offensive Gear --> - -<!-- Known Spells --> -|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,0| +<!-- New Version from SRD --> +<!-- SpellBooks --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Spell Book)| +<p><b>Spell Book: </b>|SPELLBOOKNAME.%spellbook| +|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| |IIF(SPELLLISTMEMORIZE.%class:false)| -<br><b>Known |SPELLLISTCLASS.%class| Spells</b> (CL |MANUALWHITESPACE||SPELLLISTCLASS.%class.LEVEL||TEXT.NUMSUFFIX.SPELLLISTCLASS.%class.LEVEL||ENDMANUALWHITESPACE|): -|FOR,%level,9,0,-1,1| -|FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.0.%level],COUNT[SPELLSINBOOK.%class.0.%level],1,0| -|IIF(%spelllevelcount:0)| -<!-- no memorized spells for SPELLSINBOOK.%class 0 %level --> |ELSE| -<br>|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| -|IIF(%level:0.AND.GAMEMODE:Pathfinder)| -(at will) - -|ELSE| -(|SPELLLISTCAST.%class.%level|/day) - -|ENDIF| -|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.0.%level]-2,1,0| -<i>|TEXT.LOWER.SPELLMEM.%class.0.%level.%spell.NAME|</i> -|IIF(SPELLMEM.%class.0.%level.%spell.TIMES:1)| -|ELSE| -(|SPELLMEM.%class.0.%level.%spell.TIMES|) -|ENDIF| -|IIF(SPELLMEM.%class.0.%level.%spell.SAVEINFO:None)| -|ELSE| -(DC |SPELLMEM.%class.0.%level.%spell.DC|) -|ENDIF| -, -|ENDFOR| -|FOR,%spell,COUNT[SPELLSINBOOK.%class.0.%level]-1,COUNT[SPELLSINBOOK.%class.0.%level]-1,1,0| -|SPELLMEM.%class.0.%level.%spell.BONUSSPELL|<i>|TEXT.LOWER.SPELLMEM.%class.0.%level.%spell.NAME|</i> -|IIF(SPELLMEM.%class.0.%level.%spell.TIMES:1)| -|ELSE| -(|SPELLMEM.%class.0.%level.%spell.TIMES|) -|ENDIF| -|IIF(SPELLMEM.%class.0.%level.%spell.SAVEINFO:None)| -|ELSE| -(DC |SPELLMEM.%class.0.%level.%spell.DC|) -|ENDIF| -|ENDFOR| -|ENDIF| -|ENDFOR| -|ENDFOR| -|ENDIF| -|ENDFOR| -<!-- End Known Spells --> - -<!-- Prepared Spells --> -|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| - -|IIF(SPELLBOOK.%spellbook.TYPE:Prepared Spell List)| -<br><b>|SPELLBOOKNAME.%spellbook| Prepared Spell List</b> -|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,0| -|IIF(SPELLLISTMEMORIZE.%class:true)| -<br>|SPELLLISTCLASS.%class| (CL |MANUALWHITESPACE||SPELLLISTCLASS.%class.LEVEL||TEXT.NUMSUFFIX.SPELLLISTCLASS.%class.LEVEL||ENDMANUALWHITESPACE|): -|FOR,%level,9,0,-1,1| +<br />|SPELLLISTCLASS.%class| (CL |SPELLLISTCLASS.%class.LEVEL|): +|FOR,%level,0,9,1,1| |FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.%spellbook.%level],COUNT[SPELLSINBOOK.%class.%spellbook.%level],1,0| |IIF(%spelllevelcount:0)| <!-- no memorized spells for SPELLSINBOOK.%class %spellbook %level --> |ELSE| -<br>|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - +|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - |FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-2,1,0| <i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> |IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| @@ -679,23 +634,17 @@ |ENDIF| |ENDFOR| |ELSE| +</p> |ENDIF| |ENDFOR| -<!-- End Prepared Spells --> - -<!-- Domain list --> +<!-- End SpellBooks --> |%DOMAIN.1| -<br>*: Domain spell. -<br><b>Deity</b> |DEITY|; <b>Domains</b> -|FOR,%domain,1,COUNT[DOMAINS],1,0| -|DOMAIN.%domain|, -|ENDFOR| +<p><b>Deity: </b>|DEITY| <i>Domains</i>: |FOR.1,COUNT[DOMAINS]+1,1,\DOMAIN.%\(\DOMAIN.%.POWER\), ,NONE,2|</p> |%| -<!-- End Domain list --> <!-- Innate Spell-Like Abilities --> |IIF(VAR.IF(VAR("COUNT[SPELLSINBOOK.0.1.0]")>0;1;0):1)| -<br><b>Innate Spell-Like Abilities:</b> +<p><b>Innate Spell-Like Abilities:</b> |FOR,%spellbook,1,1,1,0| |FOR,%class,0,0,1,0| |FOR,%level,0,0,1,0| @@ -709,13 +658,14 @@ |IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:At Will)| at will) |ELSE| -|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|/|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|) +|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|) |ENDIF| |ENDFOR| |%| |ENDFOR| |ENDFOR| |ENDFOR| +</p> |ENDIF| <!-- End Innate Spell-Like Abilities --> @@ -723,7 +673,7 @@ |FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| |IIF(SPELLBOOK.%spellbook.TYPE:Innate Spell List)| |IIF(VAR.IF(VAR("COUNT[SPELLSINBOOK.0.%spellbook.0]")>0;1;0):1)| -<br><b>|SPELLBOOK.%spellbook.NAME| Spell-Like Abilities:</b> +<p><b>|SPELLBOOK.%spellbook.NAME| Spell-Like Abilities:</b> |FOR,%class,0,0,1,0| |FOR,%level,0,0,1,0| |%SPELLLISTBOOK.%class.%level.%spellbook| @@ -742,11 +692,86 @@ |%| |ENDFOR| |ENDFOR| +</p> |ENDIF| |ENDIF| |ENDFOR| <!-- End Other Spell-Like Abilities --> + +|%SPELLLISTCLASS.0| +<p><i>Spells:</i></p> +|%| + + +<!-- Prepared Spells --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Prepared Spell List)| +<p><b>|SPELLBOOKNAME.%spellbook| Prepared Spells: </b> +|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| +|IIF(SPELLLISTMEMORIZE.%class:false)| +|ELSE| +<br />|SPELLLISTCLASS.%class| (CL |SPELLLISTCLASS.%class.LEVEL|): +|FOR,%level,0,9,1,1| +|FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.%spellbook.%level],COUNT[SPELLSINBOOK.%class.%spellbook.%level],1,0| +|IIF(%spelllevelcount:0)| +<!-- no memorized spells for SPELLSINBOOK.%class %spellbook %level --> +|ELSE| +|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-2,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +|SPELLMEM.%class.%spellbook.%level.%spell.BONUSSPELL|<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ELSE| +</p> +|ENDIF| +|ENDFOR| +<!-- End Prepared Spells --> + +|FOR,%class,COUNT[SPELLRACE],COUNT[CLASSES],1,1| +|%SPELLLISTCLASS.%class| +<p><b>|SPELLLISTCLASS.%class|:</b> Spells per Day: (|FOR.0,9,1,\SPELLLISTCAST.%class.%\,NONE,/,0| DC:|SPELLLISTDC.%class.1|+spell level), Spells Known: +|FOR,%level,0,MAXSPELLLEVEL.%class,1,1| +|%SPELLLISTBOOK.%class.%level.0| +<b>|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - </b> +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.0.%level]-2,1,1| +|SPELLMEM.%class.0.%level.%spell.NAME|, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.0.%level]-1,COUNT[SPELLSINBOOK.%class.0.%level]-1,1,1| +|SPELLMEM.%class.0.%level.%spell.NAME| +|ENDFOR| +|%| +|ENDFOR| +</p> +|ENDFOR| +|%| + + + <hr /> <b>Abilities </b> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm 2012-11-05 06:09:53 UTC (rev 18161) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm 2012-11-05 15:47:45 UTC (rev 18162) @@ -962,6 +962,187 @@ (<font face="ScalaSans Caps">|EQ.IS.CombatGear.%equip.QTY.INTVAL|</font>) |ENDIF| |ENDFOR| + + +<!-- New Version from SRD --> +<!-- SpellBooks --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Spell Book)| +<p><b>Spell Book: </b>|SPELLBOOKNAME.%spellbook| +|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| +|IIF(SPELLLISTMEMORIZE.%class:false)| +|ELSE| +<br />|SPELLLISTCLASS.%class| (CL |SPELLLISTCLASS.%class.LEVEL|): +|FOR,%level,0,9,1,1| +|FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.%spellbook.%level],COUNT[SPELLSINBOOK.%class.%spellbook.%level],1,0| +|IIF(%spelllevelcount:0)| +<!-- no memorized spells for SPELLSINBOOK.%class %spellbook %level --> +|ELSE| +|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-2,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +|SPELLMEM.%class.%spellbook.%level.%spell.BONUSSPELL|<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ELSE| +</p> +|ENDIF| +|ENDFOR| +<!-- End SpellBooks --> + + +<!-- Innate Spell-Like Abilities --> +|IIF(VAR.IF(VAR("COUNT[SPELLSINBOOK.0.1.0]")>0;1;0):1)| +<p><b>Innate Spell-Like Abilities:</b> +|FOR,%spellbook,1,1,1,0| +|FOR,%class,0,0,1,0| +|FOR,%level,0,0,1,0| +|%SPELLLISTBOOK.%class.%level.%spellbook| +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> ( +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|, +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:At Will)| +at will) +|ELSE| +|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|) +|ENDIF| +|ENDFOR| +|%| +|ENDFOR| +|ENDFOR| +|ENDFOR| +</p> +|ENDIF| +<!-- End Innate Spell-Like Abilities --> + +<!-- Other Spell-Like Abilities --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Innate Spell List)| +|IIF(VAR.IF(VAR("COUNT[SPELLSINBOOK.0.%spellbook.0]")>0;1;0):1)| +<p><b>|SPELLBOOK.%spellbook.NAME| Spell-Like Abilities:</b> +|FOR,%class,0,0,1,0| +|FOR,%level,0,0,1,0| +|%SPELLLISTBOOK.%class.%level.%spellbook| +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> ( +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|, +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:At Will)| +at will) +|ELSE| +|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|) +|ENDIF| +|ENDFOR| +|%| +|ENDFOR| +|ENDFOR| +</p> +|ENDIF| +|ENDIF| +|ENDFOR| +<!-- End Other Spell-Like Abilities --> + + +|%SPELLLISTCLASS.0| +<p><i>Spells:</i></p> +|%| + + +<!-- Prepared Spells --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Prepared Spell List)| +<p><b>|SPELLBOOKNAME.%spellbook| Prepared Spells: </b> +|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| +|IIF(SPELLLISTMEMORIZE.%class:false)| +|ELSE| +<br />|SPELLLISTCLASS.%class| (CL |SPELLLISTCLASS.%class.LEVEL|): +|FOR,%level,0,9,1,1| +|FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.%spellbook.%level],COUNT[SPELLSINBOOK.%class.%spellbook.%level],1,0| +|IIF(%spelllevelcount:0)| +<!-- no memorized spells for SPELLSINBOOK.%class %spellbook %level --> +|ELSE| +|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-2,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +|SPELLMEM.%class.%spellbook.%level.%spell.BONUSSPELL|<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ELSE| +</p> +|ENDIF| +|ENDFOR| +<!-- End Prepared Spells --> + +|FOR,%class,COUNT[SPELLRACE],COUNT[CLASSES],1,1| +|%SPELLLISTCLASS.%class| +<p><b>|SPELLLISTCLASS.%class|:</b> Spells per Day: (|FOR.0,9,1,\SPELLLISTCAST.%class.%\,NONE,/,0| DC:|SPELLLISTDC.%class.1|+spell level), Spells Known: +|FOR,%level,0,MAXSPELLLEVEL.%class,1,1| +|%SPELLLISTBOOK.%class.%level.0| +<b>|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - </b> +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.0.%level]-2,1,1| +|SPELLMEM.%class.0.%level.%spell.NAME|, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.0.%level]-1,COUNT[SPELLSINBOOK.%class.0.%level]-1,1,1| +|SPELLMEM.%class.0.%level.%spell.NAME| +|ENDFOR| +|%| +|ENDFOR| +</p> +|ENDFOR| +|%| + + <!-- Spells Prepared --> |FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| |%SPELLLISTCLASS.%class| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm 2012-11-05 06:09:53 UTC (rev 18161) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock5.htm 2012-11-05 15:47:45 UTC (rev 18162) @@ -932,19 +932,21 @@ |ENDIF| |ENDFOR| +<!-- New Version from SRD --> <!-- SpellBooks --> |FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| |IIF(SPELLBOOK.%spellbook.TYPE:Spell Book)| -<br><b>|SPELLBOOKNAME.%spellbook|</b> -|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-2,1,1| +<p><b>Spell Book: </b>|SPELLBOOKNAME.%spellbook| +|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| |IIF(SPELLLISTMEMORIZE.%class:false)| |ELSE| +<br />|SPELLLISTCLASS.%class| (CL |SPELLLISTCLASS.%class.LEVEL|): |FOR,%level,0,9,1,1| |FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.%spellbook.%level],COUNT[SPELLSINBOOK.%class.%spellbook.%level],1,0| |IIF(%spelllevelcount:0)| <!-- no memorized spells for SPELLSINBOOK.%class %spellbook %level --> |ELSE| -<br>|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - +|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - |FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-2,1,0| <i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> |IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| @@ -973,10 +975,146 @@ |ENDFOR| |ENDIF| |ENDFOR| +|ELSE| +</p> |ENDIF| |ENDFOR| <!-- End SpellBooks --> +|%DOMAIN.1| +<p><b>Deity: </b>|DEITY| <i>Domains</i>: |FOR.1,COUNT[DOMAINS]+1,1,\DOMAIN.%\(\DOMAIN.%.POWER\), ,NONE,2|</p> +|%| +<!-- Innate Spell-Like Abilities --> +|IIF(VAR.IF(VAR("COUNT[SPELLSINBOOK.0.1.0]")>0;1;0):1)| +<p><b>Innate Spell-Like Abilities:</b> +|FOR,%spellbook,1,1,1,0| +|FOR,%class,0,0,1,0| +|FOR,%level,0,0,1,0| +|%SPELLLISTBOOK.%class.%level.%spellbook| +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> ( +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|, +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:At Will)| +at will) +|ELSE| +|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|) +|ENDIF| +|ENDFOR| +|%| +|ENDFOR| +|ENDFOR| +|ENDFOR| +</p> +|ENDIF| +<!-- End Innate Spell-Like Abilities --> + +<!-- Other Spell-Like Abilities --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Innate Spell List)| +|IIF(VAR.IF(VAR("COUNT[SPELLSINBOOK.0.%spellbook.0]")>0;1;0):1)| +<p><b>|SPELLBOOK.%spellbook.NAME| Spell-Like Abilities:</b> +|FOR,%class,0,0,1,0| +|FOR,%level,0,0,1,0| +|%SPELLLISTBOOK.%class.%level.%spellbook| +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> ( +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|, +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:At Will)| +at will) +|ELSE| +|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|/|SPELLMEM.%class.%spellbook.%level.%spell.TIMEUNIT|) +|ENDIF| +|ENDFOR| +|%| +|ENDFOR| +|ENDFOR| +</p> +|ENDIF| +|ENDIF| +|ENDFOR| +<!-- End Other Spell-Like Abilities --> + + +|%SPELLLISTCLASS.0| +<p><i>Spells:</i></p> +|%| + + +<!-- Prepared Spells --> +|FOR,%spellbook,2,COUNT[SPELLBOOKS]-1,1,0| +|IIF(SPELLBOOK.%spellbook.TYPE:Prepared Spell List)| +<p><b>|SPELLBOOKNAME.%spellbook| Prepared Spells: </b> +|FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| +|IIF(SPELLLISTMEMORIZE.%class:false)| +|ELSE| +<br />|SPELLLISTCLASS.%class| (CL |SPELLLISTCLASS.%class.LEVEL|): +|FOR,%level,0,9,1,1| +|FOR,%spelllevelcount,COUNT[SPELLSINBOOK.%class.%spellbook.%level],COUNT[SPELLSINBOOK.%class.%spellbook.%level],1,0| +|IIF(%spelllevelcount:0)| +<!-- no memorized spells for SPELLSINBOOK.%class %spellbook %level --> +|ELSE| +|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-2,1,0| +<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,COUNT[SPELLSINBOOK.%class.%spellbook.%level]-1,1,0| +|SPELLMEM.%class.%spellbook.%level.%spell.BONUSSPELL|<i>|TEXT.LOWER.SPELLMEM.%class.%spellbook.%level.%spell.NAME|</i> +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.TIMES:1)| +|ELSE| +(|SPELLMEM.%class.%spellbook.%level.%spell.TIMES|) +|ENDIF| +|IIF(SPELLMEM.%class.%spellbook.%level.%spell.SAVEINFO:None)| +|ELSE| +(DC |SPELLMEM.%class.%spellbook.%level.%spell.DC|) +|ENDIF| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ENDFOR| +|ENDIF| +|ENDFOR| +|ELSE| +</p> +|ENDIF| +|ENDFOR| +<!-- End Prepared Spells --> + +|FOR,%class,COUNT[SPELLRACE],COUNT[CLASSES],1,1| +|%SPELLLISTCLASS.%class| +<p><b>|SPELLLISTCLASS.%class|:</b> Spells per Day: (|FOR.0,9,1,\SPELLLISTCAST.%class.%\,NONE,/,0| DC:|SPELLLISTDC.%class.1|+spell level), Spells Known: +|FOR,%level,0,MAXSPELLLEVEL.%class,1,1| +|%SPELLLISTBOOK.%class.%level.0| +<b>|MANUALWHITESPACE||%level||TEXT.NUMSUFFIX.%level||ENDMANUALWHITESPACE| - </b> +|FOR,%spell,0,COUNT[SPELLSINBOOK.%class.0.%level]-2,1,1| +|SPELLMEM.%class.0.%level.%spell.NAME|, +|ENDFOR| +|FOR,%spell,COUNT[SPELLSINBOOK.%class.0.%level]-1,COUNT[SPELLSINBOOK.%class.0.%level]-1,1,1| +|SPELLMEM.%class.0.%level.%spell.NAME| +|ENDFOR| +|%| +|ENDFOR| +</p> +|ENDFOR| +|%| + + + + <p></p> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <td class="divider"><b>SPECIAL ABILITIES</b></td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spr...@us...> - 2013-10-16 08:32:24
|
Revision: 21734 http://sourceforge.net/p/pcgen/code/21734 Author: spraynpray Date: 2013-10-16 08:32:18 +0000 (Wed, 16 Oct 2013) Log Message: ----------- OS-271 Added link to PCGen website in HTML output sheets. Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_pathfinder.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_spellbook.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -2734,7 +2734,7 @@ </script> </head> <body onload="Compact();"> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> |%VAR.RageTimes.GTEQ.1| <script language="javascript" type="text/javascript">OneTimeBbnLevelParse();</script> |%| @@ -3244,7 +3244,7 @@ <p class="c5">PCGen Character Template by ROG, mods/maint by Arcady, Barak & Dimrill. For suggestions please post to pc...@ya... with "OS Suggestion" in the subject line.</p> <div id="SecondPage"> -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> <!-- 2nd page MAIN table --> <table width="100%" border="0"> <!-- Master Page Table --> <tr> @@ -3867,7 +3867,7 @@ <!-- 3-page spell listing Table This is only displayed in 3-page mode --> <div id="ThirdPage"> -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> |%SPELLLISTCLASS.0| <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> @@ -3970,7 +3970,7 @@ |FOR,%class,0,0,1,0| |FOR,%level,0,0,1,0| |%SPELLLISTBOOK.%class.%level.%spellbook| -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> <table width="100%" cellspacing="0" cellpadding="2"> <tr> <td colspan="11" class="c6wB">Racial Innate Spells</td> @@ -4050,7 +4050,7 @@ |FOR,%bar,COUNT[SPELLSINBOOK0.%spellbook.0],COUNT[SPELLSINBOOK0.%spellbook.0],1,1| |IIF(%foo:0.OR.%bar:0)| <!-- Either we do not have a innate race, or if we do we do not have any 0 level spell for the innate race --> -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> <table width="100%" cellspacing="0" cellpadding="2"> <tr> <td colspan="11" class="c6wB">|SPELLBOOKNAME.%spellbook|</td> @@ -4143,7 +4143,7 @@ |IIF(%spellrace:0)| <!-- No innate spells --> |ELSE| -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> |FOR,%spellbook,1,1,1,1| |FOR,%class,0,0,1,1| |FOR,%level,0,0,1,1| @@ -4234,7 +4234,7 @@ |ENDFOR| <!-- End Innate Spells --> |FOR,%spellbook,0,0,1,0| -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> |FOR,%class,COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1| |%SPELLLISTCLASS.%class| <!-- START Spell list Header Table (Known) --> @@ -4337,7 +4337,7 @@ |FOR,%class,0,0,1,0| |FOR,%level,0,0,1,0| |%SPELLLISTBOOK.%class.%level.%spellbook| -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> <table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> <tr> <td colspan="11" class="c6wB">Racial Innate</td> @@ -4417,7 +4417,7 @@ |FOR,%bar,COUNT[SPELLSINBOOK0.%spellbook.0],COUNT[SPELLSINBOOK0.%spellbook.0],1,1| |IIF(%foo:0.OR.%bar:0)| <!-- Either we do not have a innate race, or if we do we do not have any 0 level spell for the innate race --> -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> <table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> <tr> <td colspan="11" class="c6wB">|SPELLBOOKNAME.%spellbook|</td> @@ -4505,7 +4505,7 @@ <div id="BioComprehensive"> <a name="Bio"></a> -<p class="breakhere">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</p> +<p class="breakhere">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</p> <table width="100%" cellspacing="0" cellpadding="2"> <tr><td class="l14" colspan="2">|NAME|</td></tr> <tr><td id="BioImage" class="l6s" height="400" width="1%"><img src="|NAME|_Full.jpg" height="400" alt="|NAME|'s portrait" onerror="document.getElementById('BioImage').style.display = 'none'" /></td><td class="lt6" width="99%"> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_compact.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -96,7 +96,7 @@ </style> </head> <body bgcolor="white"> -<center><font size="-1">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</font></center><br /> +<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</font></center><br /> <!-- START Top Character Data --> <table cellpadding="0" cellspacing="4" border="0" width="100%" summary="Character Information"> <tr> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -5605,7 +5605,7 @@ <tr valign="top"> <td width="100%"> <table id="config" width="100%" border="0" cellspacing="1" cellpadding="1"> - <tr><td class="c6"><span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> + <tr><td class="c6"><span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> <tr id="config1" class="c6"> <td class="c6"> <input id="button4" type="button" value="Full Bio Header" name="button4" onclick="ToggleDIV('FullWideHeader');ToggleDIV('NarrowLeftHeader');" /> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_pathfinder.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_pathfinder.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_pathfinder.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -5597,7 +5597,7 @@ <tr valign="top"> <td width="100%"> <table id="config" width="100%" border="0" cellspacing="1" cellpadding="1"> - <tr><td class="c6"><span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> + <tr><td class="c6"><span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> <tr id="config1" class="c6"> <td class="c6"> <input id="button4" type="button" value="Full Bio Header" name="button4" onclick="ToggleDIV('FullWideHeader');ToggleDIV('NarrowLeftHeader');" /> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -6746,7 +6746,7 @@ <tr valign="top"> <td width="100%"> <table id="config" width="100%" border="0" cellspacing="1" cellpadding="1"> - <tr><td class="c6"><span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> + <tr><td class="c6"><span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> <tr id="config1" class="c6"> <td class="c6"> <input id="button4" type="button" value="Full Bio Header" name="button4" onclick="ToggleDIV('FullWideHeader');ToggleDIV('NarrowLeftHeader');" /> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -6738,7 +6738,7 @@ <tr valign="top"> <td width="100%"> <table id="config" width="100%" border="0" cellspacing="1" cellpadding="1"> - <tr><td class="c6"><span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> + <tr><td class="c6"><span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</td></tr> <tr id="config1" class="c6"> <td class="c6"> <input id="button4" type="button" value="Full Bio Header" name="button4" onclick="ToggleDIV('FullWideHeader');ToggleDIV('NarrowLeftHeader');" /> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_spellbook.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_spellbook.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_spellbook.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -237,7 +237,7 @@ </head> <body bgcolor="white"> -<center><font size="-1">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</font></center><br /> +<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</font></center><br /> <!-- START Top Character Data --> <table width="100%" border="0" cellspacing="0" cellpadding="0"> @@ -684,7 +684,7 @@ <!-- ================================================================ --> -<br /><center><font size="-1">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE|</font></center> +<br /><center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</font></center> </body> </html> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock1.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -19,7 +19,7 @@ </style> </head> <body> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <p> <b>|NAME|<br /> |GENDER.LONG| |RACE|; |SIZELONG| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock2.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -35,7 +35,7 @@ </style> </head> <body> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <p><b>|NAME|, |GENDER| |RACE||%REGION| From |REGION|.|%| |CLASSLIST|</b> CR |IIF(CR:0)| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock3.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -25,7 +25,7 @@ </head> <body> <!-- -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> --> <b>|NAME|:</b> |GENDER||RACE||%REGION| From |REGION|.|%| |CLASSLIST| ; CR Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -935,7 +935,7 @@ <p><b>|ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick|</b> |ABILITYALL.Special Ability.VISIBLE.%animalTrick.TYPE=AnimalTrick.DESC|</p> |ENDFOR| -<br><span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<br><span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <!-- ================================================================= --> </body> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock4a.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -359,7 +359,7 @@ <body> <font face="ScalaSans"> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <p> <table width="95%" border="0" cellspacing="0" cellpadding="0" summary="Name Field"> <tr valign="top"> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_statblock_SRD.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -621,7 +621,7 @@ |ENDIF| |ENDFOR| </p> -<font size="-2">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| </font> +<font size="-2">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| </font> <!-- End Trouble-shooting stuff --> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm 2013-10-16 06:53:48 UTC (rev 21733) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_troubleshooting.htm 2013-10-16 08:32:18 UTC (rev 21734) @@ -18,7 +18,7 @@ </head> <body> <!-- -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> --> <b>|NAME|</b><br> |GENDER| |RACE|; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spr...@us...> - 2013-10-16 08:33:31
|
Revision: 21735 http://sourceforge.net/p/pcgen/code/21735 Author: spraynpray Date: 2013-10-16 08:33:28 +0000 (Wed, 16 Oct 2013) Log Message: ----------- OS-271 Add a link to the PCGen website in the OS Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_consumables.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_std.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std_PFRPG.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_consumables.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_consumables.htm 2013-10-16 08:32:18 UTC (rev 21734) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_consumables.htm 2013-10-16 08:33:28 UTC (rev 21735) @@ -52,7 +52,7 @@ </style> </head> <body> -<center><font size="-1">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</font></center><br /> +<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</font></center><br /> <center> <h2>Consumable Equipment Sheet</h2> </center> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_std.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_std.htm 2013-10-16 08:32:18 UTC (rev 21734) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/eqsheet_fantasy_std.htm 2013-10-16 08:33:28 UTC (rev 21735) @@ -132,7 +132,7 @@ |EQSET.START| <!-- everything below this line will get output once for each Equipment Set --> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <div> <table width="100%" summary="Master Equipment Table"> <thead> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std.htm 2013-10-16 08:32:18 UTC (rev 21734) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std.htm 2013-10-16 08:33:28 UTC (rev 21735) @@ -32,7 +32,7 @@ </style> </head> <body> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <table border="0" cellspacing="0" width="100%" summary="Party Master Table"> |FOR.0,50,2, <td class="lt10s" width="50%"> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std_PFRPG.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std_PFRPG.htm 2013-10-16 08:32:18 UTC (rev 21734) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/psheet_fantasy_std_PFRPG.htm 2013-10-16 08:33:28 UTC (rev 21735) @@ -32,7 +32,7 @@ </style> </head> <body> -<span class="header">Created using PCGen |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> +<span class="header">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE| <br>Player: |PLAYERNAME|; Character Name: |NAME|</span> <table border="0" cellspacing="0" width="100%" summary="Party Master Table"> |FOR.0,50,2, <td class="lt10s" width="50%"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hen...@us...> - 2013-11-10 17:02:35
|
Revision: 22161 http://sourceforge.net/p/pcgen/code/22161 Author: henkslaaf2 Date: 2013-11-10 17:02:31 +0000 (Sun, 10 Nov 2013) Log Message: ----------- Merge pull request #13 from PCGen/os281-sourceshort-missing-for-spells OS-281 Add SOURCESHORT to spell entries Modified Paths: -------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2013-11-10 12:08:12 UTC (rev 22160) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_combined.htm 2013-11-10 17:02:31 UTC (rev 22161) @@ -4171,7 +4171,7 @@ </tr> |OIF(EVEN:%spell,<tr class="nobrkg">,<tr class="nobrkw">)| <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|<br /></td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> </tr> |OIF(EVEN:%spell,<tr class="nobrkg">,<tr class="nobrkw">)| <td colspan="6" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> @@ -4214,7 +4214,7 @@ </tr> |OIF(EVEN:%spell,<tr class="nobrkg">,<tr class="nobrkw">)| <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|<br /></td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> </tr> |OIF(EVEN:%spell,<tr style="background:#DDDDDD">,<tr style="background:white">)| <td colspan="6" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> @@ -4304,7 +4304,7 @@ </tr> |OIF(EVEN:%spell,<tr class="nobrkg">,<tr class="nobrkw">)| <td colspan="8" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|<br /></td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> </tr> <!-- |OIF(EVEN:%spell,<tr style="background:#DDDDDD">,<tr style="background:white">)| --> |OIF(EVEN:%spell,<tr class="nobrkg">,<tr class="nobrkw">)| Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2013-11-10 12:08:12 UTC (rev 22160) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop.htm 2013-11-10 17:02:31 UTC (rev 22161) @@ -7057,7 +7057,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> @@ -7108,7 +7108,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2013-11-10 12:08:12 UTC (rev 22160) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws.htm 2013-11-10 17:02:31 UTC (rev 22161) @@ -7046,7 +7046,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> @@ -7097,7 +7097,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm 2013-11-10 12:08:12 UTC (rev 22160) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_laptop_ws_pathfinder.htm 2013-11-10 17:02:31 UTC (rev 22161) @@ -7038,7 +7038,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> @@ -7089,7 +7089,7 @@ <tr> <td colspan="4" class="lt8"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> <td colspan="2" class="ct8"><i>Range:</i> |SPELLMEM.%class.%spellbook.%level.%spell.RANGE|</td> - <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> + <td colspan="2" class="rt8"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|</td> </tr> <tr> <td colspan="6" class="lt8"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|</td> Modified: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2013-11-10 12:08:12 UTC (rev 22160) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2013-11-10 17:02:31 UTC (rev 22161) @@ -2137,7 +2137,7 @@ </tr> |OIF(EVEN:%spell,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| <td colspan="7" class="sptab1"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|<br /></td> - <td colspan="2" class="sptab2"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> + <td colspan="2" class="sptab2"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> </tr> |OIF(EVEN:%spell,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| <td colspan="7" class="sptab1"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> @@ -2201,7 +2201,7 @@ </tr> |OIF(EVEN:%spell,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| <td colspan="7" class="sptab1"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|<br /></td> - <td colspan="2" class="sptab2"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> + <td colspan="2" class="sptab2"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> </tr> |OIF(EVEN:%spell,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| <td colspan="7" class="sptab1"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> @@ -2320,7 +2320,7 @@ </tr> |OIF(EVEN:%spell,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| <td colspan="8" class="sptab1"><i>Effect:</i> |SPELLMEM.%class.%spellbook.%level.%spell.EFFECT|<br /></td> - <td colspan="2" class="sptab2"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> + <td colspan="2" class="sptab2"><i>Source:</i> |SPELLMEM.%class.%spellbook.%level.%spell.SOURCESHORT| |SPELLMEM.%class.%spellbook.%level.%spell.SOURCEPAGE|<br /></td> </tr> |OIF(EVEN:%spell,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| <td colspan="8" class="sptab1"><i>Target Area:</i> |SPELLMEM.%class.%spellbook.%level.%spell.TARGET|<br /></td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2014-07-22 11:52:23
|
Revision: 24670 http://sourceforge.net/p/pcgen/code/24670 Author: jdempsey Date: 2014-07-22 11:52:17 +0000 (Tue, 22 Jul 2014) Log Message: ----------- Convert fantasy standard html sheet to FreeMarker Issue#: OS-342 Added Paths: ----------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/common/ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/common/common-spells.ftl Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm.ftl Removed Paths: ------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm Added: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/common/common-spells.ftl =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/common/common-spells.ftl (rev 0) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/common/common-spells.ftl 2014-07-22 11:52:17 UTC (rev 24670) @@ -0,0 +1,367 @@ +<#-- Common code for the spells block in HTML sheets --> +<#-- This file is included by the other sheets that need a standard output of spells --> + +<#macro spellBlock class spellbook level isKnownList=false> + <#if (!isKnownList) > + <table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + </#if> + <@loop from=0 to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]-1') ; spell , spell_has_next> + <#if (spell % 2 = 0)><tr bgcolor="#DDDDDD"><#else><tr bgcolor="white"></#if> + <td class="spname"> + <b><#if (isKnownList) >${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.BONUSSPELL')}</#if> + <#if (pcstring("TEXT.LENGTH.SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCELINK") = "0")> + ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME')} + <#else> + <a href="${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCELINK')}">${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME')}</a> + </#if> + </b><br /> + </td> + <td class="sptab"> + <#if (pcstring("SPELLMEM.${class}.${spellbook}.${level}.${spell}.SAVEINFO") = "None")> + <#else> + <#if (pcstring("SPELLMEM.${class}.${spellbook}.${level}.${spell}.RANGE") = "Personal")> + <#else> + <i>DC:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DC')}<br /> + </#if> + </#if> + </td> + <td class="sptab"><i>Save:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SAVEINFO')}<br /></td> + <td class="sptab"><i>Time:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.CASTINGTIME')}<#rt> + <#if (!isKnownList) ><#lt>, + <#if (pcstring("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES") = "At Will")> + at will + <#else> + ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES')}/${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMEUNIT')} + </#if> + </#if><#t> + <br /></td><#lt> + <td class="sptab"><i>Duration:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DURATION')}<br /></td> + <td class="sptab"><i>Rng:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.RANGE')}<br /></td> + <td class="sptab"><i>Comp:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.COMPONENTS')}<br /></td> + <td class="sptab"><i>SR:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SR')}<br /></td> + <td class="sptab"><i>School:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SCHOOL')}<br /></td> + <#if (isKnownList) > + <td class="sptab"> + <#if (pcstring("SPELLLISTTYPE.${class}") = "Psionic")> + <#assign ppcost = (level*2)-1 /> + <#if (ppcost = -1)> + <i>PP:</i> 0/1 + <#else> + <i>PP:</i> ${ppcost} + </#if> + </td> + <#elseif pcboolean("SPELLLISTMEMORIZE.${class}") > + <font style="font-size: medium">☐☐☐</font></td> + </#if> + </#if> + </tr> + <#assign numCols=7/><#if (isKnownList) ><#assign numCols=8/></#if> + <#if (spell % 2 = 0)><tr bgcolor="#DDDDDD"><#else><tr bgcolor="white"></#if> + <td colspan="${numCols}" class="sptab1"><i>Effect:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.EFFECT')}<br /></td> + <td colspan="2" class="sptab2"><i>Source:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCESHORT')} ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCEPAGE')}<br /></td> + </tr> + <#if (spell % 2 = 0)><tr bgcolor="#DDDDDD"><#else><tr bgcolor="white"></#if> + <td colspan="${numCols}" class="sptab1"><i>Target Area:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.TARGET')}<br /></td> + <td colspan="2" class="sptab2"><i>Caster Level:</i> ${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.CASTERLEVEL')}<br /></td> + </tr> + </@loop> + <#if (!isKnownList) > + <tr> + <td colspan="9" bgcolor="black"><br /></td> + </tr> + </table> + </#if> +</#macro> + +<!-- Start Racial Innate Spells --> +<#assign spellrace = pcvar('COUNT[SPELLRACE]') /> +<#if (spellrace = 0)> + <!-- No innate spells --> +<#else> +<br style="page-break-after: always" /> +<!--<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</font></center><br /> +--> +<div class="pcgen">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</div> +<#assign spellbook = 1 /> +<#assign class = 0 /> +<#assign level = 0 /> +<#if (pcvar("COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]") > 0) > +<!-- START Spell list Header Table (Racial Innate) --> +<table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + <tr> + <td colspan="11" class="sphead"><b>Innate Spell-like Abilities</b></td> + </tr> +</table> +<!-- End Spell List Header Table (Racial Innate) --> +<!-- Start Racial Innate Spell listing --> + <@spellBlock class="${class}" spellbook="${spellbook}" level="${level}" /> +</#if> +<!-- End Racial Innate Spells --> + +<!-- Start Other Innate Spells --> +<@loop from=2 to=pcvar('COUNT[SPELLBOOKS]-1') ; spellbook , spellbook_has_next> + <#assign class = 0 /> + <#assign level = 0 /> + <#if (pcvar("COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]") > 0) > + <!-- START Spell list Header Table (Other Innate) --><#lt> + <br /> + <table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + <tr> + <td colspan="9" class="sphead"><b>${pcstring('SPELLBOOKNAME.${spellbook}')} Spell-like Abilities</b></font></td> + </tr> + </table> + <@spellBlock class="${class}" spellbook="${spellbook}" level="${level}" /> + </#if> +</@loop> +<!-- End Other Innate Spells --> +</#if> +<!-- End Innate Spells --> + +<@loop from=0 to=0 ; spellbook , spellbook_has_next> +<br style="page-break-after: always" /> +<!--<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</font></center><br /> +--> +<div class="pcgen">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</div> +<@loop from=pcvar('COUNT[SPELLRACE]') to=pcvar('COUNT[SPELLRACE]+COUNT[CLASSES]-1') ; class , class_has_next><#-- TODO: Loop was of early exit type 1 --> +<#if (pcstring("SPELLLISTCLASS.${class}") != '') > +<!-- START Spell list Header Table (Known) --> +<table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + <tr> + <td colspan="${pcvar('MAXSPELLLEVEL.${class}')+2}" class="sphead"><b>${pcstring('SPELLLISTCLASS.${class}')} +<#if (pcstring("SPELLLISTTYPE.${class}") = "Psionic")> + Powers +<#else> + Spells +</#if> +</b></td> + </tr> + <tr> + <td bgcolor="black" class="sptop"><b>LEVEL</b></td> +<@loop from=0 to=pcvar('MAXSPELLLEVEL.${class}') ; level , level_has_next><#-- TODO: Loop was of early exit type 1 --> + <td bgcolor="black" class="sptop"><b>${level}</b></td> +</@loop> + </tr> + <tr> + <td class="sptab"><b>KNOWN</b></td> +<@loop from=0 to=pcvar('MAXSPELLLEVEL.${class}') ; level , level_has_next><#-- TODO: Loop was of early exit type 1 --> + <td class="sptab"><b>${pcstring('SPELLLISTKNOWN.${class}.${level}')}</b></td> +</@loop> + </tr> + <tr bgcolor="#DDDDDD"> + <td class="sptab"><b>PER DAY</b></td> +<@loop from=0 to=pcvar('MAXSPELLLEVEL.${class}') ; level , level_has_next><#-- TODO: Loop was of early exit type 1 --> + <td class="sptab"><b>${pcstring('SPELLLISTCAST.${class}.${level}')}</b></td> +</@loop> + </tr> +</table> +<!-- End Spell List Header Table (Known) --> +<!-- Start Known Spells --> +<table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> +<@loop from=0 to=pcvar('MAXSPELLLEVEL.${class}') ; level , level_has_next><#-- TODO: Loop was of early exit type 1 --> +<@loop from=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]') to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]') ; spellcount , spellcount_has_next> +<#if (spellcount = 0)> +<#else> + <tr> + <td colspan="10" class="splevel"><b>LEVEL ${level}</b></td> + </tr> +<#if pcboolean("SPELLLISTMEMORIZE.${class}") > +<#else> + <tr> + <td colspan="10" class="splevel"><b> + <@loop from=1 to=pcvar("COUNT[SPELLLISTCAST.${class}.${level}]")>☐</@loop> + </b></td> + </tr> +</#if> +<@spellBlock class=class spellbook=spellbook level=level isKnownList=true /> + +</#if> +</@loop> +</@loop> + <tr> + <td colspan="10" bgcolor="black"><font style="font-size: x-small" color="white">* = Domain/Specialty Spell</font></td> + </tr> +</table> +<br /> +</#if> +</@loop> +</@loop> +<!-- End Known Spells --> +<!-- ================================================================ --> +<!-- Start Prepared Spells --> +<@loop from=pcvar('COUNT[SPELLRACE]+COUNT[SPELLBOOKS]-2') to=pcvar('COUNT[SPELLRACE]+COUNT[SPELLBOOKS]-2') ; memorised , memorised_has_next> +<#if (memorised = 0)> +<#else> +<!-- Start Innate Prepared --> +<@loop from=pcvar('COUNT[SPELLRACE]') to=pcvar('COUNT[SPELLRACE]') ; spellrace , spellrace_has_next> +<#if (spellrace = 0)> +<#else> +<@loop from=1 to=1 ; spellbook , spellbook_has_next> +<@loop from=0 to=0 ; class , class_has_next> +<@loop from=0 to=0 ; level , level_has_next> +<#if (pcvar("COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]") > 0) > +<br style="page-break-after: always" /> +<!--<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</font></center><br /> +--> +<div class="pcgen">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</div> +<table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + <tr> + <td colspan="11" align="center" bgcolor="black"><font color="white"><b>Racial Innate</b></font></td> + </tr> + <tr> + <td valign="top"> + <table> +<@loop from=0 to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]-1') ; spell , spell_has_next> +<#if (pcstring("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES") = "At Will")> + <tr> + <td align="right" class="font9">At Will</td> +<#else> + <tr> + <td align="right"><font style="font-size: medium"> + <@loop from=1 to=pcvar("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES")>☐</@loop></font><#lt> + </td> +</#if> + <td class="font9"><b>${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME')}</b> (DC:${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DC')})</td> + </tr> +</@loop> + </table> + </td> + </tr> + <tr> + <td colspan="11" bgcolor="black"><font style="font-size: x-small" color="white"><br /></font></td> + </tr> +</table> +</#if> +</@loop> +</@loop> +</@loop> +<br /> + +<@loop from=2 to=pcvar('COUNT[SPELLBOOKS]-1') ; spellbook , spellbook_has_next> +<#assign class = 0 /> +<#assign level = 0 /> + <#if (pcvar("COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]") > 0) > +<table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + <tr> + <td colspan="11" align="center" bgcolor="black"><font color="white"><b>${pcstring('SPELLBOOKNAME.${spellbook}')} Spells</b></font></td> + </tr> + <td valign="top"> + <table> + <@loop from=0 to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]-1') ; spell , spell_has_next> + <#if (pcstring("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES") = "At Will")> + <tr> + <td align="right" class="font9">At Will</td> + <#else> + <tr> + <td align="right"><font style="font-size: medium"> + <@loop from=1 to=pcvar("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES")>☐</@loop></font> + </td> + </#if> + <td class="font9"><b>${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME')}</b> (DC:${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DC')})</td> + </tr> + </@loop> + </table> + </td> + </tr> + <tr> + <td colspan="11" bgcolor="black"><font style="font-size: x-small" color="white"><br /></font></td> + </tr> +</table> + </#if> +</@loop> +<br /> +</#if> +</@loop> +<!-- End Innate Prepared --> + + +<!-- Start Regular Prepared --> +<@loop from=2 to=pcvar('COUNT[SPELLBOOKS]-1') ; spellbook , spellbook_has_next> +<@loop from=pcvar('COUNT[SPELLRACE]') to=pcvar('COUNT[SPELLRACE]') ; foo , foo_has_next><#-- TODO: Loop was of early exit type 1 --> +<@loop from=pcvar('COUNT[SPELLSINBOOK0.${spellbook}.0]') to=pcvar('COUNT[SPELLSINBOOK0.${spellbook}.0]') ; bar , bar_has_next><#-- TODO: Loop was of early exit type 1 --> +<#if (foo = 0 || bar = 0) > +<!-- Either we do not have a innate race, or if we do we do not have any 0 level spell for the innate race --> +<br style="page-break-after: always" /> +<!--<center><font size="-1">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</font></center><br /> +--> +<div class="pcgen">Created using <a href="http://pcgen.org/">PCGen</a> ${pcstring('EXPORT.VERSION')} on ${pcstring('EXPORT.DATE')} <br />Player: ${pcstring('PLAYERNAME')}; Character Name: ${pcstring('NAME')}</div> +<table width="100%" cellspacing="0" cellpadding="2" summary="Spell List"> + <tr> + <td colspan="11" align="center" bgcolor="black"><font color="white"><b>${pcstring('SPELLBOOKNAME.${spellbook}')}</b></font></td> + </tr> +<@loop from=pcvar('COUNT[SPELLRACE]') to=pcvar('COUNT[SPELLRACE]+COUNT[CLASSES]-1') ; class , class_has_next><#-- TODO: Loop was of early exit type 1 --> +<#if (pcstring("SPELLLISTCLASS.${class}") != '') > + <tr> + <td align="center" bgcolor="#DDDDDD" colspan="11"><font style="font-size: small" color="black">${pcstring('SPELLLISTCLASS.${class}')}</font></td> + </tr> + <tr> +<@loop from=0 to=pcvar('4') ; level , level_has_next><#-- TODO: Loop was of early exit type 1 --> + <td valign="top"> +<@loop from=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]') to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]') ; spelllevelcount , spelllevelcount_has_next> +<#if (spelllevelcount = 0)> +<!-- no memorized spells for SPELLSINBOOK.${class} ${spellbook} ${level} --> +<#else> + <table summary="Spell List"> + <tr> + <td valign="top" align="center" colspan="2"><font style="font-size: small" color="black"><u>Level ${level}</u></font></td> + </tr> +<@loop from=0 to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]-1') ; spell , spell_has_next> + <tr> + <td align="right"><font style="font-size: medium"> + <@loop from=1 to=pcvar("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES")>☐</@loop></font> + </td> + <td class="font9"><b>${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.BONUSSPELL')}${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME')}</b> (DC:${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DC')})</td> + </tr> +</@loop> + </table> +</#if> +</@loop> + </td> +</@loop> +<tr> +<@loop from=5 to=pcvar('9') ; level , level_has_next><#-- TODO: Loop was of early exit type 1 --> + <td valign="top"> +<@loop from=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]') to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]') ; spelllevelcount , spelllevelcount_has_next> +<#if (spelllevelcount = 0)> +<!-- no memorized spells for SPELLSINBOOK.${class} ${spellbook} ${level} --> +<#else> + <table summary="Spell List"> + <tr> + <td valign="top" align="center" colspan="2"><font style="font-size: small" color="black"><u>Level ${level}</u></font></td> + </tr> +<@loop from=0 to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]-1') ; spell , spell_has_next> + <tr> + <td align="right"><font style="font-size: medium"> +<@loop from=1 to=pcvar("SPELLMEM.${class}.${spellbook}.${level}.${spell}.TIMES")>☐</@loop></font> + </td> + <td class="font9"><b>${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.BONUSSPELL')}${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME')}</b> (DC:${pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DC')})</td> + </tr> +</@loop> + </table> +</#if> +</@loop> + </td> +</@loop> +<!-- END SPELLLISTCLASS.${class} --> +</#if> +<!-- END FOR,${class},COUNT[SPELLRACE],COUNT[SPELLRACE]+COUNT[CLASSES]-1,1,1 --> +</@loop> + <tr> + <td colspan="11" bgcolor="black"><font style="font-size: x-small" color="white">* = Domain/Specialty Spell</font></td> + </tr> +</table> +<#else> +</#if> +<!-- END FOR,${bar},COUNT[SPELLSINBOOK0.${spellbook}.0],COUNT[SPELLSINBOOK0.${spellbook}.0],1,1 --> +</@loop> +<!-- END FOR,${foo},COUNT[SPELLRACE],COUNT[SPELLRACE],1,1 --> +</@loop> +<!-- END FOR,${spellbook},2,COUNT[SPELLBOOKS]-1,1,0 --> +</@loop> +<!-- ### END class Spellbook memorized spells ### --> +<!-- START FALSE IIF(${memorised}:0) --> +</#if> +</@loop> +<!-- ### END MEMORIZED ### --> + +<!-- End Prepared Spells --> +<!-- ================================================================= --> Deleted: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2014-07-22 11:51:06 UTC (rev 24669) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_std.htm 2014-07-22 11:52:17 UTC (rev 24670) @@ -1,2595 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> -<!-- -PCGen Character Sheet Template -============================== -Author: Richard O'Doherty-Gregg -Email: Od...@bi... -Modifications by: arcady -Email: ar...@ya... -Revisions: Barak 10/15/02 -Email: ba...@vo... -Revisions: Tir-Gwaith 10/11/09 -Email: tir...@gm... - -$Revision$ -$Author$ -$Date$ ---> -<head> -<meta http-equiv="content-type" content="text-html; charset=utf-8" /> -<title>|NAME| [|POOL.COST| Points]</title> -<style type="text/css"> - .pcgen { - font-size:xx-small; - } - .ab { - font-family: Scala Sans, sans-serif; - } - .abb, .abt, .h { - font-family: sans-serif; - } - .font6, .border6, .topline { font-size:xx-small; } - .font7 { font-family: Arial, sans-serif; font-size:x-small; } - .font8 { font-family: Arial, sans-serif; font-size:x-small; } - .font9, .font10 { font-family: Arial, sans-serif; font-size:small; } - .font14 { font-family: Arial, sans-serif; font-size:large; } - .h { font-size:small; vertical-align: bottom; } - .ab { font-size:medium; text-align:center; color:white; background:black; } - .sa-table th { font-size:9pt; text-align:center; color:white; background:black; text-transform:uppercase;} - .abb { font-size:medium; text-align:center; font-weight:bold; border: 1px solid black;} - .abt { font-size:medium; text-align:center; font-weight:bold; border: 5px solid lightgray;} - .sptab, .sptab1, .sptab2 { - font-size:x-small; - vertical-align:top; - } - .sptab { text-align:center; } - .sptab1 { text-align:left; } - .sptab2 { text-align:right; } - .notetab { font-family: Arial, sans-serif; vertical-align:top;border: 1px solid black; text-align:left;font-size:x-small;} - .skl { font-family: Arial, sans-serif; font-size: small; font-weight:bold; text-align:center; vertical-align:middle; border: 4px solid black;} - .spname { font-family: Arial, sans-serif; vertical-align:top; text-align:left;font-size:x-small;} - .sptop { font-family: Arial, sans-serif; vertical-align:top;border: 1px solid black; text-align:center;font-size:x-small; color:white;} - .splevel { font-family: Arial, sans-serif; background:black; text-align:center;font-size:small; color:white;} - .sphead { font-family: Arial, sans-serif; background:black; text-align:center;font-size:medium; color:white;} - .notehead { font-family: Arial, sans-serif; background:black; text-align:center;font-size:medium; color:white;} - .biodata { font-family: Arial, sans-serif; vertical-align:bottom; text-align:left;font-size:small;} - .topline { - border-top-width:1px; - border-top: 1pt solid black; - font-variant: small-caps; - } - .border { - border: 1px solid black; - } - .border6 { - border: 1px solid black; - } - .border7 { - border: 1px solid black; - font-size:x-small; - } - .border8 { - border: 1px solid black; - font-size:x-small; - } - .border9 { - border: 1px solid black; - font-size:small; - } - .pcgen { - text-align:center; - } - .border10 { - border: 1px solid black; - font-size:small; - } - .tempborder { - border: 5px solid lightgray; - } - .borderbottom { - border-bottom-width:1px; - border-bottom: 1pt solid black; - } - .borderbottom8 { - border-bottom-width:1px; - border-bottom: 1pt solid black; - font-size:x-small; - } - span.notes p {margin-top:0; margin-bottom:0;} - - .epic { - display:none; - } -</style> -</head> - -<body bgcolor="white"> -<div class="pcgen">Created using <a href="http://pcgen.org/">PCGen</a> |EXPORT.VERSION| on |EXPORT.DATE|</div> -<!-- START Top Character Data --> -<table cellpadding="0" cellspacing="4" border="0" width="100%" summary="Character Info"> - <tr> - <td colspan="2" class="h">|NAME| |%FOLLOWEROF|- |FOLLOWEROF| |%|</td> - <td colspan="2" class="h">|PLAYERNAME|</td> - <td colspan="1" class="h">|ALIGNMENT|</td> - <td colspan="1" class="h">|DEITY|</td> - <td class="h">|POOL.COST|</td> - <td rowspan="6" align="center" width="1%" class="border" class="font10"><a href="#Bio"><img src="file://localhost/|PORTRAIT.THUMB|" height="100%" alt="Click for Bio" border="0" /></a><br /></td> - </tr> - <tr> - <td colspan="2" class="topline">Character Name</td> - <td colspan="2" class="topline">PLAYER</td> - <td colspan="1" class="topline">ALIGNMENT</td> - <td colspan="1" class="topline">DEITY</td> - <td class="topline">POINTS</td> - </tr> - <tr> - <td colspan="1" class="h">|CLASSLIST| -|IIF(count("ABILITIES";"CATEGORY=Archetype";"TYPE=Archetype";"VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")>0)| - (|ABILITYLIST.Archetype.TYPE=Archetype|) -|ENDIF| - </td> - <td colspan="1" class="h">|EXP.CURRENT|</td> - <td colspan="1" class="h">|RACE|</td> - <td class="h">|SIZELONG| / |FACE|</td> - <td class="h">|HEIGHT|</td> - <td class="h">|WEIGHT|</td> -|IIF(VAR.IF(var("COUNT[VISION]")>0;1;0):1)| - <td colspan="1" class="h">|VISION|</td> -|ELSE| - <td colspan="1" class="h">Normal</td> -|ENDIF| - - </tr> - <tr> - <td colspan="1" class="topline">CLASS</td> - <td colspan="1" class="topline">EXPERIENCE</td> - <td colspan="1" class="topline">RACE</td> - <td class="topline">SIZE / FACE</td> - <td class="topline">HEIGHT</td> - <td class="topline">WEIGHT</td> - <td colspan="1" class="topline">VISION</td> - </tr> - <tr> - <td class="h">|TOTALLEVELS|</td> - <td class="h">|EXP.NEXT|</td> - <td class="h">|AGE|</td> - <td class="h">|GENDER|</td> - <td class="h">|COLOR.EYE|</td> - <td colspan="2" class="h">|COLOR.HAIR|, |LENGTH.HAIR|</td> - </tr> - <tr> - <td class="topline">LEVEL</td> - <td class="topline">NEXT LEVEL</td> - <td class="topline">AGE</td> - <td class="topline">GENDER</td> - <td class="topline">EYES</td> - <td colspan="2" class="topline">HAIR</td> - </tr> -</table> -<!-- STOP Top Character Data --> -<!-- START Page Master Table --> -<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="Page Master Table"> - <tr> - <td rowspan="2" valign="top"> - <!-- START Abilities Table --> - <table summary="Stat Block"> - <tr> - <td align="center" width="20%" class="font6">ABILITY<br />NAME</td> - <td align="center" width="20%" class="font6">ABILITY<br />SCORE</td> - <td align="center" width="20%" class="font6">ABILITY<br />MODIFIER</td> - <td align="center" width="20%" class="font6">TEMPORARY<br />SCORE</td> - <td align="center" width="20%" class="font6">TEMPORARY<br />MODIFIER</td> - </tr> -|FOR,%stat,0,COUNT[STATS]-1,1,1| - <tr> - <td class="ab"><b>|STAT.%stat.NAME|</b><br /> - <span class="font6">|STAT.%stat.LONGNAME|</span></td> - <td class="abb">|STAT.%stat.NOTEMP.NOEQUIP|</td> - <td class="abb">|STAT.%stat.MOD.NOTEMP.NOEQUIP|</td> - <td class="abt">|STAT.%stat|</td> - <td class="abt">|STAT.%stat.MOD|</td> - </tr> -|ENDFOR| - </table> - <!-- STOP Abilities Table --> - </td> - <td colspan="2" valign="top"> -|IIF(VAR.IF(var("UseAlternateDamage")==0;1;0):1)| -<!-- START Hit Point Table --> - <table summary="Hit Point Table"> - <tr> - <td align="center" width="50"></td> - <td align="center" width="25" valign="bottom"></td> - <td align="center"></td> - <td align="center" width="130" class="font6"><br />WOUNDS/CURRENT HP</td> - <td align="center"></td> - <td align="center" width="130" class="font6"><br />SUBDUAL DAMAGE</td> - <td align="center"></td> - <td align="center" width="130" class="font6"><br />DAMAGE<br />REDUCTION</td> - <td align="center"></td> - <td align="center" width="130" class="font6"><br />SPEED</td> - </tr> - <tr> - <td align="center" bgcolor="black" style="color:white;"><span class="font9"><b>HP</b></span> - <span class="font6" ><br />Hit Points</span></td> - <td align="center" class="border9"><b>|HP|</b></td> - <td align="center"><br /></td> - <td align="center" class="border9"><br /></td> - <td align="center"><br /></td> - <td align="center" class="border9"><br /></td> - <td align="center"><br /></td> - <td align="center" class="border9"><b> |DR| </b></td> - <td align="center"><br /></td> - <td align="center" class="border9"> -|FOR,%movement,0,COUNT[MOVE]-1,1,1| -|MOVE.%movement.NAME| |MOVE.%movement.RATE| -|IIF(MOVE.%movement.NAME:Fly)| -(|ABILITYALL.Special Ability.HIDDEN.0.TYPE=Maneuverability.ASPECT.Maneuverability|) -|ENDIF| -|ENDFOR| - </td> - </tr> - </table> -<!-- STOP Hit Point Table --> -|ELSE| -<!-- START Vitality/Wound Point Table--> - <table summary="Vitality/Wound Point Table"> - <tr> - <td align="center" width="50"></td> - <td align="center" width="25" valign="bottom"></td> - <td align="center"></td> - <td align="center" width="100" class="font6"><br />CURRENT VITALITY</td> - <td align="center"></td> - <td align="center" width="100" class="font6"><br />SUBDUAL DAMAGE</td> - <td align="center"></td> - <td align="center" width="50"></td> - <td align="center" width="25" valign="bottom"></td> - <td align="center"></td> - <td align="center" width="75" class="font6"><br />CURRENT WP</td> - <td align="center"></td> - <td align="center" width="60" class="font6"><br />DAMAGE<br />REDUCTION</td> - <td align="center"></td> - <td align="center" width="120" class="font6"><br />SPEED</td> - </tr> - <tr> - <td align="center" bgcolor="black"><font style="font-size:9pt" color="white"><b>VP</b></font> - <font style="font-size:5pt" color="white"><br />Vitality</font></td> - <td align="center" class="border9"><b>|HP|</b></td> - <td align="center"><br /></td> - <td align="center" class="border9"><br /></td> - <td align="center"><br /></td> - <td align="center" class="border9"><br /></td> - <td align="center"><br /></td> - <td align="center" bgcolor="black"><font style="font-size:9pt" color="white"><b>WP</b></span> - <font style="font-size:5pt" color="white"><br />Wound Points</font></td> - <td align="center" class="border9"><b>|ALTHP|</b></td> - <td align="center"><br /></td> - <td align="center" class="border9"><br /></td> - <td align="center"><br /></td> - <td align="center" class="border9"><b> |DR| </b></td> - <td align="center"><br /></td> - <td align="center" class="border10"> -|FOR,%movement,0,COUNT[MOVE]-1,1,1| -|MOVE.%movement.NAME| |MOVE.%movement.RATE| -|IIF(MOVE.%movement.NAME:Fly)| -(|ABILITYALL.Special Ability.HIDDEN.0.TYPE=Maneuverability.ASPECT.Maneuverability|) -|ENDIF| -|ENDFOR| - </td> - </tr> - </table> -<!-- STOP Vitality/Wound Point Table --> -|ENDIF| - <table summary="AC Table"> <!-- Armour Class Table --> - <tr> - <td align="center" bgcolor="black"><font style="font-size:9pt" color="white"><b>AC</b></font> - <font style="font-size:5pt" color="white"><br />Armour Class</font></td> - <td align="center" class="border9"><b>|AC.Total|</b></td> - <td align="center" class="font7"><b>:</b></td> - <td align="center" class="border9"><b>|AC.Touch|</b></td> - <td align="center" class="font7"><b>:</b></td> - <td align="center" class="border9"><b>|AC.Flatfooted|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border9"><b>|AC.Base|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Armor|</b></td> - - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Shield|</b></td> - - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Ability|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Size|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.NaturalArmor|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Dodge|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Deflection|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border9"><b>|AC.Misc|</b></td> - <td align="center" width="5"></td> - <td align="center" class="border9"><br /></td> - <td align="center"></td> - <td align="center" class="border9"><b>|SPELLFAILURE|</b></td> - <td align="center"></td> - <td align="center" class="border9"><b>|ACCHECK|</b></td> - <td align="center"></td> - <td align="center" class="border9"><b>|MAXDEX|</b></td> - <td align="center"></td> - <td align="center" class="border9"><b>|SR|</b></td> - <td align="center"></td> - <td align="center" class="border9"><b> </b></td> - </tr> - <tr> - <td align="center" width="50"></td> - <td align="center" width="25" valign="top"><font style="font-size: 6pt"><b>TOTAL</b></font></td> - <td align="center"></td> - <td align="center" width="25" valign="top"><font style="font-size: 6pt"><b>TOUCH</b></font></td> - <td align="center"></td> - <td align="center" width="25" valign="top"><font style="font-size: 6pt"><b>FLAT</b></font></td> - <td align="center"></td> - <td align="center" width="25" class="font6">BASE</td> - <td align="center"></td> - <td align="center" width="25" class="font6">ARMOR<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">SHIELD<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">STAT<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">SIZE<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">NATURAL<br />ARMOR</td> - <td align="center"></td> - <td align="center" width="25" class="font6">DODGE<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">DEFLECTION<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">MISC<br />BONUS</td> - <td align="center"></td> - <td align="center" width="25" class="font6">MISS<br />CHANCE</td> - <td align="center"></td> - <td align="center" width="25" class="font6">ARCANE<br />FAILURE</td> - <td align="center"></td> - <td align="center" width="25" class="font6">ARMOR<br />CHECK</td> - <td align="center"></td> - <td align="center" width="25" class="font6">MAX<br />DEX</td> - <td align="center"></td> - <td align="center" width="25" class="font6">SPELL<br />RESIST.</td> - <td align="center"></td> - <td align="center" width="25" class="font6">TEMP</td> - </tr> - </table> -<!-- STOP AC Table --> - </td> - </tr> - <tr> - <td valign="top"> -<!-- START Initiative Table --> - <table width="100%" summary="Initiative Table"> - <tr> - <td align="center" bgcolor="black"><font style="font-size:9pt" color="white"><b>INITIATIVE</b></font><font style="font-size:5pt" color="white"><br />Modifier</font></td> - <td align="center" class="border10"><b>|INITIATIVEMOD|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border10"><b>|STAT.1.MOD|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|INITIATIVEBONUS|</b></td> - <td width="50%" rowspan="2" align="center"><br /></td> - </tr> - <tr> - <td align="center" width="50" class="font7"></td> - <td align="center" width="25" valign="top" class="font7">TOTAL</td> - <td align="center"></td> - <td align="center" width="25" class="font6">DEX</td> - <td align="center"></td> - <td align="center" width="25" class="font6">MISC</td> - </tr> - </table> -<!-- STOP Initiative Table --> -<!-- START Base Attack Table --> - <table width="100%" summary="Base Attack Table"> - <tr> - <td align="center" bgcolor="black"><font style="font-size:9pt" color="white"><b>BASE ATTACK</b></font><font style="font-size:5pt" color="white"><br />Bonus</font></td> - <td align="center" width="94" class="border"><font style="font-size: small"><b>|ATTACK.MELEE|<br /></b></font></td> - <td align="center" width="50%"><br /></td> - </tr> - </table> -<!-- STOP Base Attack Table --> - </td> - <td rowspan="2" valign="top" width="50%"> -|%VAR.TOTALPOWERPOINTS.GTEQ.1| -<!-- START PSI Power Points Table --> - <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Power Point Table"> - <tr> - <td colspan="6" bgcolor="black" align="center"><font style="font-size: small" color="white"><b>PSI POWER POINTS</b></font></td> - </tr> - <tr> - <td bgcolor="#000000"><font color="#FFFFFF" style="font-size:9pt"><b> Base PP</b></font></td> - <td bgcolor="#FFFFFF" class="border" align="center"><font style="font-size:9pt">|VAR.BASEPOWERPOINTS.INTVAL|</font></td> - <td bgcolor="#000000"><font color="#FFFFFF" style="font-size:9pt"><b> Bonus PP</b></font></td> - <td bgcolor="#FFFFFF" class="border" align="center"><font style="font-size:9pt">|VAR.BONUSPOWERPOINTS.INTVAL|</font></td> - <td bgcolor="#000000"><font color="#FFFFFF" style="font-size:9pt"><b> Total PP</b></font></td> - <td bgcolor="#FFFFFF" class="border" align="center"><font style="font-size:9pt">|VAR.TOTALPOWERPOINTS.INTVAL|</font></td> - </tr> - <tr> - <td> </td> - </tr> - </table> -|%| -<!-- STOP PSI Power Points Table --> -<!-- START Skills Table --> - <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Skills Table"> - <tr> - <td height="30" bgcolor="black"></td> - <td height="30" bgcolor="black" align="center"><font style="font-size: small" color="white"><b>SKILLS</b></font></td> - <td colspan="4" height="30" bgcolor="black" align="center"></td> - <td height="30" bgcolor="black" align="right" ></td> - <td height="30" bgcolor="black" align="center"><font style="font-size: x-small" color="white" >MAX<br />RANKS</font></td> - <td colspan="2" height="30" bgcolor="white" align="center" class="skl"><b>|MAXSKILLLEVEL|/|MAXCCSKILLLEVEL|</b></td> - </tr> - <tr> - <td colspan="2" align="center" width="40%" class="border6">SKILL NAME</td> - <td align="center" width="5%" class="border6">ABILITY</td> - <td align="center" width="13%" colspan="1" class="border6">SKILL<br />MODIFIER</td> - <td align="center" width="13%" colspan="2" class="border6">ABILITY<br />MODIFIER</td> - <td align="center" width="13%" colspan="2" class="border6">RANKS</td> - <td align="center" width="13%" colspan="2" class="border6">MISC<br />MODIFIER</td> - </tr> -|FOR,%skill,0,${count("SKILLSIT")-1},1,0| -|OIF(EVEN:%skill,<tr bgcolor="#DDDDDD">,<tr bgcolor="white">)| - <td align="center" ><font style="font-size: x-small">|OIF(SKILL%skill.UNTRAINED,◆,)|</font></td> - <td align="left" class="font8"> |SKILL.%skill|</td> - <td align="center" class="font8">|SKILL.%skill.ABILITY|</td> - <td align="center" class="borderbottom8" valign="bottom"><b>|SKILL.%skill.TOTAL|</b></td> - <td align="center" valign="bottom" class="font8"><b>=</b></td> - <td align="center" class="borderbottom8" valign="bottom">|SKILL.%skill.ABMOD|<br /></td> - <td align="center" valign="bottom" class="font8"><b>+</b></td> - <td align="center" class="borderbottom8" valign="bottom">|TEXT.REPLACEFIRST{\.0,}.SKILL.%skill.RANK| <br /></td> - <td align="center" valign="bottom" class="font8"><b>+</b></td> - <td align="center" class="borderbottom8" valign="bottom">|SKILL.%skill.MISC|<br /></td> - </tr> -|ENDFOR| - </table> - <div class="font6">◆ = Useable Untrained</div> -<!-- STOP Skills Table --> -<div class="font7"> -|FOR,%ability,0,count("ABILITIES","ASPECT=SkillBonus")-1,1,0| - |ABILITYALL.ANY.%ability.ASPECT=SkillBonus.ASPECT.SkillBonus|<br/> -|ENDFOR| -</div> - </td> - </tr> - <tr> - <td colspan="2" valign="top"> -<!-- START Saving Throws Table --> - <table width="100%" summary="Saving Throws"> - <tr> - <td align="center" class="font6">SAVING THROWS</td> - <td align="center" width="25" class="font6">TOTAL</td> - <td align="center"></td> - <td align="center" width="25" class="font6">BASE</td> - <td align="center"></td> - <td align="center" width="25" class="font6">ABILITY</td> - <td align="center"></td> - <td align="center" width="25" class="font6">MAGIC</td> - <td align="center"></td> - <td align="center" width="25" class="font6 epic">EPIC</td> - <td align="center" class="epic"></td> - <td align="center" width="25" class="font6">MISC</td> - <td align="center"></td> - <td align="center" width="25" class="font6">TEMPORARY</td> - <td align="left" valign="top" width="63" rowspan="4" class="border8"><div class="font6">CONDITIONAL<br />MODIFIERS</div> -|FOR,%ability,0,count("ABILITIES","ASPECT=SaveBonus")-1,1,0| - |ABILITYALL.ANY.%ability.ASPECT=SaveBonus.ASPECT.SaveBonus| -|ENDFOR|</td> - </tr> -|FOR,%checks,0,COUNT[CHECKS]-1,1,0| - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>|CHECK.%checks.NAME|</b></font><font style="font-size:5pt" color="white"><br /> -|IIF(CHECK.%checks.NAME:Fortitude)| -Constitution -|ELSE| -|ENDIF| -|IIF(CHECK.%checks.NAME:Reflex)| -Dexterity -|ELSE| -|ENDIF| -|IIF(CHECK.%checks.NAME:Will)| -Wisdom -|ELSE| -|ENDIF| - </font></td> - <td align="center" class="border10"><b>|CHECK.%checks.TOTAL|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border10"><b>|CHECK.%checks.BASE|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|CHECK.%checks.STATMOD|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|CHECK.%checks.MAGIC|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10 epic"><b>|CHECK.%checks.EPIC|<br /></b></td> - <td align="center" class="font7 epic"><b>+</b></td> - <td align="center" class="border10"><b>|CHECK.%checks.MISC.NOMAGIC.NOSTAT|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="tempborder"><br /></td> - </tr> -|ENDFOR| - </table> -<!-- STOP Saving Throws Table --> -<!-- START Melee and Range Attack Table --> - <table width="100%" summary="Melee ~ Ranged Attacks"> - <tr> - <td align="center"></td> - <td align="center" width="60" valign="bottom" class="font6">TOTAL</td> - <td align="center"></td> - <td align="center" width="60" valign="bottom" class="font6">BASE ATTACK</td> - <td align="center"></td> - <td align="center" width="25" valign="bottom" class="font6">STAT</td> - <td align="center"></td> - <td align="center" width="25" valign="bottom" class="font6">SIZE</td> - <td align="center"></td> - <td align="center" width="25" valign="bottom" class="font6 epic">EPIC</td> - <td align="center" class="epic"></td> - <td align="center" width="25" valign="bottom" class="font6">MISC</td> - <td align="center"></td> - <td align="center" width="25" valign="bottom" class="font6">TEMP</td> - </tr> - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>MELEE</b></font><font style="font-size:5pt" color="white"><br />ATTACK BONUS</font></td> - <td align="center" class="border10"><b>|ATTACK.MELEE.TOTAL|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border10"><b>|ATTACK.MELEE|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.MELEE.STAT|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.MELEE.SIZE|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10 epic"><b>|${charbonusto("COMBAT","EPICAB")}|<br /></b></td> - <td align="center" class="font7 epic"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.MELEE.MISC|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="tempborder"><br /></td> - </tr> - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>RANGED</b></font><font style="font-size:5pt" color="white"><br />ATTACK BONUS</font></td> - <td align="center" class="border10"><b>|ATTACK.RANGED.TOTAL|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border10"><b>|ATTACK.RANGED|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.RANGED.STAT|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.RANGED.SIZE|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10 epic"><b>|${charbonusto("COMBAT","EPICAB")}|<br /></b></td> - <td align="center" class="font7 epic"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.RANGED.MISC|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="tempborder"><br /></td> - </tr> -|IIF(VAR.UseCombatManueverBonus:1)| - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>CMB</b></font><font style="font-size:5pt" color="white"><br />ATTACK BONUS</font></td> - <td align="center" class="border10"><b>|VAR.CMB.INTVAL.SIGN|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border10"><b>|ATTACK.MELEE.BASE|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|VAR.CMB_STAT.INTVAL.SIGN|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|VAR.CMB_SizeMod.INTVAL.SIGN|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10 epic"><b>+0<br /></b></td> - <td align="center" class="font7 epic"><b>+</b></td> - <td align="center" class="border10"><b>|VAR.CMB-ATTACK.MELEE.BASE-VAR.CMB_STAT-VAR.CMB_SizeMod.INTVAL.SIGN|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="tempborder"><br /></td> - </tr> - </table> - <table width="100%" summary="CMB block"> -|IIF(VAR.IF(VAR("CMD")>0;1;0):1)| - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>CMB</b></font></td> - <td align="center" class="border10"><b>|VAR.CMB_Grapple.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Trip.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Disarm.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Sunder.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_BullRush.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Overrun.INTVAL.SIGN|</b></td> - </tr> - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>CMD</b></font></td> - <td align="center" class="border10"><b>|VAR.CMD_Grapple.INTVAL|</b></td> - <td align="center" class="border10"><b> -|IIF(VAR.IF(var("CantBeTripped")!=0;1;0):1)| -Immune -|ELSE| -|VAR.CMD_Trip.INTVAL| -|ENDIF| - </b></td> - <td align="center" class="border10"><b>|VAR.CMD_Disarm.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMD_Sunder.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMD_BullRush.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMD_Overrun.INTVAL|</b></td> - </tr> -|ELSE| - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>OFFENSE</b></font></td> - <td align="center" class="border10"><b>|VAR.CMB_Grapple.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Trip.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Disarm.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Sunder.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Bull.INTVAL.SIGN|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Overrun.INTVAL.SIGN|</b></td> - </tr> - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>DEFENSE</b></font></td> - <td align="center" class="border10"><b>|VAR.CMB_Grapple_DEF.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Trip_DEF.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Disarm_DEF.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Sunder_DEF.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Bull_DEF.INTVAL|</b></td> - <td align="center" class="border10"><b>|VAR.CMB_Overrun_DEF.INTVAL|</b></td> - </tr> -|ENDIF| - <tr> - <td align="center" width="28%"></td> - <td align="center" width="12%" valign="bottom" class="font6">GRAPPLE</td> - <td align="center" width="12%" valign="bottom" class="font6">TRIP</td> - <td align="center" width="12%" valign="bottom" class="font6">DISARM</td> - <td align="center" width="12%" valign="bottom" class="font6">SUNDER</td> - <td align="center" width="12%" valign="bottom" class="font6">BULL RUSH</td> - <td align="center" width="12%" valign="bottom" class="font6">OVERRUN</td> - </tr> - </table> - <br /> -|ELSE| - <tr> - <td align="center" bgcolor="black"><font style="font-size:10pt" color="white"><b>GRAPPLE</b></font><font style="font-size:5pt" color="white"><br />ATTACK BONUS</font></td> - <td align="center" class="border10"><b>|ATTACK.GRAPPLE.TOTAL|</b></td> - <td align="center" class="font7"><b>=</b></td> - <td align="center" class="border10"><b>|ATTACK.GRAPPLE|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.GRAPPLE.STAT|</b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.GRAPPLE.SIZE|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="border10 epic"><b>|ATTACK.GRAPPLE.EPIC|<br /></b></td> - <td align="center" class="font7 epic"><b>+</b></td> - <td align="center" class="border10"><b>|ATTACK.GRAPPLE.MISC|<br /></b></td> - <td align="center" class="font7"><b>+</b></td> - <td align="center" class="tempborder"><br /></td> - </tr> - <tr><td></td></tr> - </table> -|ENDIF| -<!-- STOP Melee and Range Attack Table --> - -<!-- Add Martial Arts and Natural Attack Block Here --> - -<!-- START Unarmed Attack Table --> - <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Unarmed Attack"> - <tr> - <td align="center" height="25" bgcolor="black" rowspan="2" width="40%"><font style="font-size:10pt" color="white"><b>UNARMED</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>TOTAL ATTACK BONUS</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>DAMAGE</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>CRITICAL</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>REACH</b></font></td> - </tr> - <tr> - <td align="center" bgcolor="white" class="border"><font style="font-size:8pt" color="black"><b>|WEAPONH.TOTALHIT|<br /></b></font></td> - <td align="center" bgcolor="white" class="border"><font style="font-size:8pt" color="black"><b>|WEAPONH.DAMAGE|<br /></b></font></td> - <td align="center" bgcolor="white" class="border"><font style="font-size:8pt" color="black"><b>|WEAPONH.CRIT|/x|WEAPONH.MULT|<br /></b></font></td> - <td align="center" bgcolor="white" class="border"><font style="font-size:8pt" color="black"><b>|REACH|<br /></b></font></td> - </tr> - </table> - <font style="font-size:2pt"><br /></font> -<!-- STOP Unarmed Attack Table --> - - - - - - - - -<!-- START Weapon Table --> -|FOR,%weap,0,2,1,1| - <table cellpadding="0" width="100%" cellspacing="0" border="0" summary="Weapon Table"> -|IIF(WEAPON.%weap.CATEGORY:BOTH)| -|IIF(WEAPON.%weap.CATEGORY:Ranged)| - <tr> - <td align="left" height="15" bgcolor="black" width="8%"><font style="font-size:8pt" color="white"><b> Range</b></font></td> -|FOR,%range,0,4,1,0| - <td width="18%" align="center" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b>|WEAPON.%weap.RANGELIST.%range|'<br /></b></font></td> -|ENDFOR| - </tr> - <tr> - <td align="left" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b> Bonus</b></font></td> -|FOR,%range1,0,4,1,0| - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.RANGELIST.%range1.TOTALHIT|<br /></b></td> -|ENDFOR| - </tr> - <tr> - <td align="left" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b> Dam</b></font></td> -|FOR,%range2,0,4,1,0| - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.RANGELIST.%range2.DAMAGE|</b></td> -|ENDFOR| - </tr> - <tr> - <td align="left" bgcolor="black" class="border" colspan="2"><font style="font-size:8pt" color="white"><b> Ammunition Used<br /></b></font></td> - <td align="center" valign="bottom" bgcolor="white" class="border" colspan="5"><font style="font-size: x-small">☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐ ☐☐☐☐☐</font></td> - </tr> - <tr> - <td align="left" bgcolor="black" class="border" colspan="2"><font style="font-size:8pt" color="white"><b> Special Properties<br /></b></font></td> - <td align="left" bgcolor="white" class="border8" colspan="5"><b> |WEAPON.%weap.SPROP|<br /></b></td> - </tr> - </table> - <font style="font-size:2pt"><br /></font> -|ELSE| - <tr> - <td align="center" bgcolor="black" rowspan="2" width="40%"><font style="font-size:10pt" color="white"><b>|WEAPON.%weap.NAME|<br /></b></font></td> - <td align="center" bgcolor="black" width="12%" height="15"><font style="font-size:6pt" color="white"><b>HAND</b></font></td> - <td align="center" bgcolor="black" width="12%" height="15"><font style="font-size:6pt" color="white"><b>TYPE</b></font></td> - <td align="center" bgcolor="black" width="12%" height="15"><font style="font-size:6pt" color="white"><b>SIZE</b></font></td> - <td align="center" bgcolor="black" width="12%" height="15"><font style="font-size:6pt" color="white"><b>CRITICAL</b></font></td> - <td align="center" bgcolor="black" width="12%" height="15"><font style="font-size:6pt" color="white"><b>REACH</b></font></td> - </tr> - <tr> - <td align="center" bgcolor="white" class="border8" class="font8"><b>|WEAPON.%weap.HAND|<br /></b></td> - <td align="center" bgcolor="white" class="border8" class="font8"><b>|WEAPON.%weap.TYPE|<br /></b></td> - <td align="center" bgcolor="white" class="border8" class="font8"><b>|WEAPON.%weap.SIZE|<br /></b></td> - <td align="center" bgcolor="white" class="border8" class="font8"><b>|WEAPON.%weap.CRIT|/x|WEAPON.%weap.MULT|<br /></b></td> - <td align="center" bgcolor="white" class="border8" class="font8"><b>|WEAPON.%weap.REACH||WEAPON.%weap.REACHUNIT|<br /></b></td> - </tr> - </table> - <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Weapon Table"> - <tr> - <td align="center" height="15" bgcolor="black" width="8%"></td> - <td align="center" height="15" bgcolor="black" width="17%"><font style="font-size:6pt" color="white"><b>1H-P</b></font></td> - <td align="center" bgcolor="black" width="17%" height="15"><font style="font-size:6pt" color="white"><b>1H-O</b></font></td> - <td align="center" bgcolor="black" width="17%" height="15"><font style="font-size:6pt" color="white"><b>2H</b></font></td> - <td align="center" bgcolor="black" width="17%" height="15"><font style="font-size:6pt" color="white"><b>2W-P-(OH)</b></font></td> - <td align="center" bgcolor="black" width="17%" height="15"><font style="font-size:6pt" color="white"><b>2W-P-(OL)</b></font></td> - <td align="center" bgcolor="black" width="10%" height="15"><font style="font-size:6pt" color="white"><b>2W-OH</b></font></td> - </tr> - <tr> - <td align="left" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b> Bonus</b></font></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.BASEHIT|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.OHHIT|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.THHIT|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.TWPHITH|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.TWPHITL|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.TWOHIT|<br /></b></td> - </tr> - <tr> - <td align="left" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b> Dam</b></font></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.BASICDAMAGE|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.OHDAMAGE|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.THDAMAGE|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.BASICDAMAGE|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.BASICDAMAGE|<br /></b></td> - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.OHDAMAGE|<br /></b></td> - </tr> - </table> -|ENDIF| -|ELSE| -|IIF(WEAPON.%weap.CATEGORY:Ranged)| - <tr> - <td align="center" bgcolor="black" rowspan="2" width="40%"><font style="font-size:10pt" color="white"><b>|WEAPON.%weap.NAME|<br /></b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>HAND</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>TYPE</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>SIZE</b></font></td> - <td align="center" bgcolor="black" width="15%" height="15"><font style="font-size:6pt" color="white"><b>CRITICAL</b></font></td> - </tr> - <tr> - <td align="center" bgcolor="white" class="border8"><b>|WEAPON.%weap.HAND|<br /></b></td> - <td align="center" bgcolor="white" class="border8"><b>|WEAPON.%weap.TYPE|<br /></b></td> - <td align="center" bgcolor="white" class="border8"><b>|WEAPON.%weap.SIZE|<br /></b></td> - <td align="center" bgcolor="white" class="border8"><b>|WEAPON.%weap.CRIT|/x|WEAPON.%weap.MULT|<br /></b></td> - </tr> - </table> - <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Weapon Table"> -|IIF(WEAPON.%weap.CONTENTS:0)| - <tr> - <td align="left" height="15" bgcolor="black" width="8%"><font style="font-size:8pt" color="white"><b> Range</b></font></td> -|FOR,%range,0,4,1,0| - <td width="18%" align="center" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b>|WEAPON.%weap.RANGELIST.%range|'<br /></b></font></td> -|ENDFOR| - </tr> - <tr> - <td align="left" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b> Bonus</b></font></td> -|FOR,%range1,0,4,1,0| - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.RANGELIST.%range1.TOTALHIT|<br /></b></td> -|ENDFOR| - </tr> - <tr> - <td align="left" bgcolor="black" class="border"><font style="font-size:8pt" color="white"><b> Dam</b></font></td> -|FOR,%range2,0,4,1,0| - <td align="center" bgcolor="white" class="border7"><b>|WEAPON.%weap.RANGELIST.%range2.DAMAGE|</b></td> -|ENDFOR| - </tr> - <tr> - <td align="left" bgcolor="black" class="border" colspan="2"><font style="font-size:8pt" color="white"><b> Ammunition Used<br />... [truncated message content] |
From: <ama...@us...> - 2014-12-13 01:19:04
|
Revision: 25773 http://sourceforge.net/p/pcgen/code/25773 Author: amaitland Date: 2014-12-13 01:18:46 +0000 (Sat, 13 Dec 2014) Log Message: ----------- Fix: OS-391 D20Pro unable to import from the csheet_fantasy_generic_export.xml Added Paths: ----------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_generic_export.xml.ftl Removed Paths: ------------- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_generic_export.xml Deleted: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_generic_export.xml =================================================================== (Binary files differ) Added: Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_generic_export.xml.ftl =================================================================== --- Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_generic_export.xml.ftl (rev 0) +++ Trunk/pcgen/outputsheets/d20/fantasy/htmlxml/csheet_fantasy_generic_export.xml.ftl 2014-12-13 01:18:46 UTC (rev 25773) @@ -0,0 +1,3256 @@ +<#ftl encoding="UTF-8" strip_whitespace=true > +<?xml version="1.0" encoding="UTF-8"?> +<!-- + $Id: base.xml 24177 2014-06-16 22:41:07Z jdempsey $ +--> +<character> + <export> + <date>${pcstring('EXPORT.DATE')}</date> + <time>${pcstring('EXPORT.TIME')}</time> + <version>${pcstring('EXPORT.VERSION')}</version> + <paperinfo> + <name>${pcstring('PAPERINFO.NAME')}</name> + <height>${pcstring('PAPERINFO.HEIGHT')}</height> + <width>${pcstring('PAPERINFO.WIDTH')}</width> + <margins> + <top>${pcstring('PAPERINFO.MARGINTOP')}</top> + <bottom>${pcstring('PAPERINFO.MARGINBOTTOM')}</bottom> + <left>${pcstring('PAPERINFO.MARGINLEFT')}</left> + <right>${pcstring('PAPERINFO.MARGINRIGHT')}</right> + </margins> + </paperinfo> + <directories> + <pcgen>${pcstring('DIR.PCGEN')}</pcgen> + <templates>${pcstring('DIR.TEMPLATES')}</templates> + <pcg>${pcstring('DIR.PCG')}</pcg> + <html>${pcstring('DIR.HTML')}</html> + <temp>${pcstring('DIR.TEMP')}</temp> + </directories> + <invalidtext> + <tohit>${pcstring('INVALIDTEXT.TOHIT')}</tohit> + <damage>${pcstring('INVALIDTEXT.DAMAGE')}</damage> + </invalidtext> + </export> + <unit_set> + <name>${pcstring('UNITSET')}</name> + <height_unit>${pcstring('UNITSET.HEIGHTUNIT')}</height_unit> + <distance_unit>${pcstring('UNITSET.DISTANCEUNIT')}</distance_unit> + <weight_unit>${pcstring('UNITSET.WEIGHTUNIT')}</weight_unit> + </unit_set> + <!-- + ==================================== + ==================================== + BIO + ==================================== + ====================================--> + <basics> + <bonuses>${pcstring('BONUSLIST.STAT.STR')}</bonuses> + <bonuses>${pcstring('BONUSLIST.STAT.STR.TOTAL')}</bonuses> + <bonuses>${pcstring('BONUSLIST.CHECK.BASE')}</bonuses> + <bonuses>${pcstring('BONUSLIST.CHECK.BASE.TOTAL')}</bonuses> + <name>${pcstring('NAME')}</name> + <followerof>${pcstring('FOLLOWEROF')}</followerof> + <playername>${pcstring('PLAYERNAME')}</playername> + <charactertype>${pcstring('CHARACTERTYPE')}</charactertype> + <hero_points>${pcstring('VAR.HEROPOINTS.INTVAL')}</hero_points> + <age>${pcstring('AGE')}</age> + <alignment> + <long>${pcstring('ALIGNMENT')}</long> + <short>${pcstring('ALIGNMENT.SHORT')}</short> + </alignment> + <archetypes> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Archetype","TYPE=Archetype","VISIBILITY=DEFAULT[or]VISIBILITY=OUTPUT_ONLY")-1') ; trait , trait_has_next> + <archetype> + <name>${pcstring('ABILITY.Archetype.VISIBLE.${trait}.TYPE=Archetype')}</name> + <type>${pcstring('ABILITY.Archetype.VISIBLE.${trait}.TYPE=Archetype.TYPE')}</type> + </archetype> + </@loop> + </archetypes> + <bab>${pcstring('ATTACK.MELEE.BASE')}</bab> + <bio>${pcstring('BIO')}</bio> + <birthday>${pcstring('BIRTHDAY')}</birthday> + <birthplace>${pcstring('BIRTHPLACE')}</birthplace> + <catchphrase>${pcstring('CATCHPHRASE')}</catchphrase> + <classes> + <@loop from=0 to=pcvar('COUNT[CLASSES]-1') ; class , class_has_next> + <#if (pcvar(pcstring('CLASS.${class}.LEVEL')) > 0) > + <class> + <name>${pcstring('CLASS.${class}')}</name> + <abbreviation>${pcstring('CLASSABB.${class}')}</abbreviation> + <level>${pcstring('CLASS.${class}.LEVEL')}</level> + <bonuslist>${pcstring('CLASS.${class}.BONUSLIST')}</bonuslist> + <sequence>${class}</sequence> + <sequence_shortform><@pcstring tag="CLASSABB.${class}"/><@pcstring tag="CLASS.${class}.LEVEL"/></sequence_shortform> + </class> + </#if> + </@loop><#-- Classes --> + <levels_total>${pcstring('TOTALLEVELS')}</levels_total> + <levels_ecl>${pcstring('ECL')}</levels_ecl> + <!-- shortform below should be removed - it can be derived from class info above --> + <shortform><@loop from=0 to=pcvar('countdistinct("CLASSES")')-1 ; class , class_has_next ><#rt> + <#t><@pcstring tag="CLASSABB.${class}"/><@pcstring tag="CLASS.${class}.LEVEL"/><#if class_has_next> </#if> + <#t></@loop></shortform> + <!-- CLASSLIST is not extracted because we can derive it from the information above --> + </classes> + <deity> + <name>${pcstring('DEITY')}</name> + <alignment>${pcstring('DEITY.ALIGNMENT')}</alignment> + <description>${pcstring('DEITY.DESCRIPTION')}</description> + <domainlist>${pcstring('DEITY.DOMAINLIST')}</domainlist> + <favoredweapon>${pcstring('DEITY.FAVOREDWEAPON')}</favoredweapon> + <holyitem>${pcstring('DEITY.HOLYITEM')}</holyitem> + <pantheonlist>${pcstring('DEITY.PANTHEONLIST')}</pantheonlist> + <source>${pcstring('DEITY.SOURCE')}</source> + <special_abilities>${pcstring('DEITY.SA')}</special_abilities> + <appearance>${pcstring('DEITY.APPEARANCE')}</appearance> + <title>${pcstring('DEITY.TITLE')}</title> + <worshippers>${pcstring('DEITY.WORSHIPPERS')}</worshippers> + </deity> + <description>${pcstring('DESC')}</description> + <experience> + <current>${pcstring('EXP.CURRENT')}</current> + <next_level>${pcstring('EXP.NEXT')}</next_level> + <factor>${pcstring('EXP.FACTOR')}</factor> + <penalty>${pcstring('EXP.PENALTY')}</penalty> + </experience> + <eyes> + <color>${pcstring('COLOR.EYE')}</color> + </eyes> + <hair> + <color>${pcstring('COLOR.HAIR')}</color> + <length>${pcstring('LENGTH.HAIR')}</length> + </hair> + <skin> + <color>${pcstring('COLOR.SKIN')}</color> + </skin> + <cr>${pcstring('CR')}</cr> + <face> + <face>${pcstring('FACE')}</face> + <short>${pcstring('FACE.SHORT')}</short> + <squares>${pcstring('FACE.SQUARES')}</squares> + </face> + <favoredlist>${pcstring('FAVOREDLIST')}</favoredlist> + <followerlist>${pcstring('FOLLOWERLIST')}</followerlist> + <gender> + <long>${pcstring('GENDER.LONG')}</long> + <short>${pcstring('GENDER.SHORT')}</short> + </gender> + <handed>${pcstring('HANDED')}</handed> + <height> + <total>${pcstring('HEIGHT')}</total> + <feet>${pcstring('HEIGHT.FOOTPART')}</feet> + <inches>${pcstring('HEIGHT.INCHPART')}</inches> + </height> + <hitdice>${pcstring('HITDICE')}</hitdice> + <image>file:${pcstring('DIR.PCG')}/${pcstring('NAME')}.jpg</image> + <interests>${pcstring('INTERESTS')}</interests> + <languages> + <@loop from=0 to=pcvar('COUNT[LANGUAGES]-1') ; lang , lang_has_next> + <language>${pcstring('LANGUAGES.${lang}')}</language> + </@loop> + <language>${pcstring('ABILITYALL.ANY.0.ASPECT=Language.ASPECT.Language')}</language> + <all>${pcstring('LANGUAGES')}</all> + </languages> + <location>${pcstring('LOCATION')}</location> + <move> + <@loop from=0 to=pcvar('COUNT[MOVE]-1') ; move , move_has_next> + <move> + <name>${pcstring('MOVE.${move}.NAME')}</name> + <rate>${pcstring('MOVE.${move}.RATE')}</rate> + <squares>${pcstring('MOVE.${move}.SQUARES')}</squares> + <#if (pcstring("MOVE.${move}.NAME") = "Fly")> + <maneuverability>(${pcstring('ABILITYALL.Special Ability.HIDDEN.0.TYPE=Maneuverability.ASPECT.Maneuverability')})</maneuverability> + </#if> + </move> + </@loop> + <all>${pcstring('MOVEMENT')}</all> + </move> + <personality> + <trait>${pcstring('PERSONALITY1')}</trait> + <trait>${pcstring('PERSONALITY2')}</trait> + </personality> + <portrait> + <portrait>${pcstring('PORTRAIT')}</portrait> + <portrait_thumb>${pcstring('PORTRAIT.THUMB')}</portrait_thumb> + </portrait> + <phobias>${pcstring('PHOBIAS')}</phobias> + <#if (pcstring("ABILITYALL.ANY.0.TYPE=RaceName.HASASPECT.RaceName") = "Y")> + <race>${pcstring('ABILITYALL.ANY.0.ASPECT=RaceName.ASPECT.RaceName')}</race> + <#else> + <race>${pcstring('RACE')}</race> + </#if> + <race> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Internal","ASPECT=RaceExtra")-1') ; ability , ability_has_next> + <raceextra>${pcstring('ABILITYALL.Internal.HIDDEN.${ability}.ASPECT.RaceExtra')}</raceextra> + </@loop> + <racetype>${pcstring('RACETYPE')}</racetype> + <@loop from=0 to=pcvar('COUNT[RACESUBTYPE]-1') ; racesubtype , racesubtype_has_next> + <racesubtype>${pcstring('RACESUBTYPE.${racesubtype}')}</racesubtype> + </@loop> + </race> + <reach> + <reach>${pcstring('REACH')}</reach> + <squares>${pcstring('REACH.SQUARES')}</squares> + </reach> + <region>${pcstring('REGION')}</region> + <reputation>${pcstring('VAR.REPUTATION.INTVAL')}</reputation> + <residence>${pcstring('RESIDENCE')}</residence> + <size> + <long>${pcstring('SIZELONG')}</long> + <short>${pcstring('SIZE')}</short> + </size> + <speechtendency>${pcstring('SPEECHTENDENCY')}</speechtendency> + <type>${pcstring('TYPE')}</type> + <vision> + <@loop from=0 to=pcvar('COUNT[VISION]-1') ; vision , vision_has_next> + <vision>${pcstring('VISION.${vision}')}</vision> + </@loop> + <all>${pcstring('VISION')}</all> + </vision> + <wealth>${pcstring('VAR.WEALTH.INTVAL')}</wealth> + <gold>${pcstring('GOLD')}</gold> + <weight> + <weight_unit>${pcstring('WEIGHT')}</weight_unit> + <weight_nounit>${pcstring('WEIGHT.NOUNIT')}</weight_nounit> + </weight> + <poolpoints> + <cost>${pcstring('POOL.COST')}</cost> + <current>${pcstring('POOL.CURRENT')}</current> + </poolpoints> + <notes> + <@loop from=0 to=pcvar('COUNT[NOTES]-1') ; note , note_has_next> + <#if (pcstring("NOTE.${note}.NAME") = "DM Notes")> + <#else> + <note> + <name>${pcstring('NOTE.${note}.NAME')}</name> + <value>${pcstring('NOTE.${note}.VALUE.')}</value> + </note> + + </#if> + </@loop> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability","ASPECT=NotesSection")-1') ; ability , ability_has_next> + <note> + <name>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT.NotesSection')}</name> + <value>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT.Notes')}</value> + </note> + </@loop> + </notes> + </basics> + + <!-- Use ASPECT.NotesSection.x and ASPECT.Notes.y --> + <!-- + ==================================== + ==================================== + ABILITIES + ==================================== + ====================================--> + <abilities> + <@loop from=0 to=pcvar('COUNT[STATS]-1') ; stat , stat_has_next> + <ability> + <name> + <long>${pcstring('STAT.${stat}.LONGNAME')}</long> + <short>${pcstring('STAT.${stat}.NAME')}</short> + </name> + <score>${pcstring('STAT.${stat}')}</score> + <modifier>${pcstring('STAT.${stat}.MOD')}</modifier> + <!-- + Old BASE tag does not give stats with racial, and other permentant adjustments. + Use NOTEMP.NOEQUIP instead of BASE gives the correct results. + + <base>${pcstring('STAT.${stat}.BASE')}</base> + <basemod>${pcstring('STAT.${stat}.BASEMOD')}</basemod> + --> + <base>${pcstring('STAT.${stat}.NOTEMP.NOEQUIP')}</base> + <basemod>${pcstring('STAT.${stat}.MOD.NOTEMP.NOEQUIP')}</basemod> + + <noequip>${pcstring('STAT.${stat}.NOEQUIP')}</noequip> + <noequip_mod>${pcstring('STAT.${stat}.MOD.NOEQUIP')}</noequip_mod> + <no_temp_score>${pcstring('STAT.${stat}.NOTEMP')}</no_temp_score> + <no_temp_modifier>${pcstring('STAT.${stat}.MOD.NOTEMP')}</no_temp_modifier> + </ability> + </@loop> + </abilities> + <!-- + ==================================== + ==================================== + HIT POINTS + ==================================== + ====================================--> + <hit_points> + <usealternatedamage>${pcstring('VAR.UseAlternateDamage.INTVAL')}</usealternatedamage> + <points>${pcstring('HP')}</points> + <alternate>${pcstring('ALTHP')}</alternate> + <die>${pcstring('HITDICE')}</die> + <die_short>${pcstring('HITDICE.SHORT')}</die_short> + <current/> + <subdual/> + <damage_reduction>${pcstring('DR')}</damage_reduction> + <damage_threshold>${pcstring('VAR.DAMAGETHRESHOLD.INTVAL')}</damage_threshold> + <history> + <@loop from=1 to=pcvar('ECL') ; level , level_has_next> + <roll> + <level>${level}</level> + <roll>${pcstring('HPROLL.${level}')}</roll> + <stat>${pcstring('HPROLL.${level}.STAT')}</stat> + <total>${pcstring('HPROLL.${level}.TOTAL')}</total> + </roll> + </@loop> + </history> + </hit_points> + <!-- + ==================================== + ==================================== + ARMOR CLASS + ==================================== + ====================================--> + <armor_class> + <total>${pcstring('AC.Total')}</total> + <listing>${pcstring('BONUS.COMBAT.AC.LISTING')}</listing> + <flat>${pcstring('AC.Flatfooted')}</flat> + <touch>${pcstring('AC.Touch')}</touch> + <base>${pcstring('AC.Base')}</base> + <armor_bonus>${pcstring('AC.Armor')}</armor_bonus> + <shield_bonus>${pcstring('AC.Shield')}</shield_bonus> + <stat_mod>${pcstring('AC.Ability')}</stat_mod> + <size_mod>${pcstring('AC.Size')}</size_mod> + <natural>${pcstring('AC.NaturalArmor')}</natural> + <deflection>${pcstring('AC.Deflection')}</deflection> + <dodge>${pcstring('AC.Dodge')}</dodge> + <dodge_bonus>${pcstring('AC.Dodge')}</dodge_bonus> + <class_bonus>${pcstring('AC.ClassDefense')}</class_bonus> + <#if (gamemodename = "Modern" || gamemodename = "Darwins_World_2" || gamemodename = "Sidewinder") > + <equipment_bonus>${pcstring('AC.Equipment')}</equipment_bonus> + </#if> + <misc>${pcstring('AC.Misc')}</misc> + <insight>${pcstring('AC.Insight')}</insight> + <morale>${pcstring('AC.Morale')}</morale> + <sacred>${pcstring('AC.Sacred')}</sacred> + <profane>${pcstring('AC.Profane')}</profane> + <miss_chance/> + <max_dex>${pcstring('MAXDEX')}</max_dex> + <spell_failure>${pcstring('SPELLFAILURE')}</spell_failure> + <check_penalty>${pcstring('ACCHECK')}</check_penalty> + <spell_resistance>${pcstring('SR')}</spell_resistance> + </armor_class> + <!-- + ==================================== + ==================================== + INITIATIVE + ==================================== + ====================================--> + <initiative> + <total>${pcstring('INITIATIVEMOD')}</total> + <dex_mod>${pcstring('STAT.1.MOD')}</dex_mod> + <misc_mod>${pcstring('INITIATIVEMISC')}</misc_mod> + <spell_failure>${pcstring('SPELLFAILURE')}</spell_failure> + <check_penalty>${pcstring('ACCHECK')}</check_penalty> + <spell_resistance>${pcstring('SR')}</spell_resistance> + <hero_points>${pcstring('VAR.HEROPOINTS.INTVAL')}</hero_points> + </initiative> + <!-- + ==================================== + ==================================== + SKILLS + ==================================== + ====================================--> + <skillinfo> + <conditional_modifiers> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","ASPECT=SkillBonus")-1') ; ability , ability_has_next> + <skillbonus> + <description>${pcstring('ABILITYALL.ANY.${ability}.ASPECT=SkillBonus.ASPECT.SkillBonus')}</description> + </skillbonus> + </@loop> + </conditional_modifiers> + </skillinfo> + <skills> + <conditional_modifiers> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","ASPECT=SkillBonus")-1') ; ability , ability_has_next> + <skillbonus> + <description>${pcstring('ABILITYALL.ANY.${ability}.ASPECT=SkillBonus.ASPECT.SkillBonus')}</description> + </skillbonus> + </@loop> + </conditional_modifiers> + <skillpoints> + <total>${pcstring('SKILLPOINTS.TOTAL')}</total> + <used>${pcstring('SKILLPOINTS.USED')}</used> + <unused>${pcstring('SKILLPOINTS.UNUSED')}</unused> + <eclipse_total>${pcstring('VAR.CharacterSkillPts.INTVAL')}</eclipse_total> + </skillpoints> + <list_mods>${pcstring('SKILLLISTMODS')}</list_mods> + <#if (pcvar("VAR.Max_Rank_Display") > 0)> + <max_class_skill_level>${pcstring('VAR.Max_Rank_Display')}</max_class_skill_level> + <#else> + <max_class_skill_level>${pcstring('MAXSKILLLEVEL')}</max_class_skill_level> + </#if> + <max_cross_class_skill_level>${pcstring('MAXCCSKILLLEVEL')}</max_cross_class_skill_level> + <@loop from=0 to=pcvar('count("SKILLSIT", "VIEW=VISIBLE_EXPORT")')-1 ; skill ,skill_has_next> + <skill> + <name>${pcstring('SKILLSIT.${skill}')}</name> + <ranks>${pcstring('SKILLSIT.${skill}.RANK')}</ranks> + <mod>${pcstring('SKILLSIT.${skill}.MOD')}<!-- Mods from abilities, equipment, etc --> + </mod> + <skill_mod>${pcstring('SKILLSIT.${skill}.TOTAL')}</skill_mod> + <ability_mod>${pcstring('SKILLSIT.${skill}.ABMOD')}<!-- Mod from the key ability --> + </ability_mod> + <misc_mod>${pcstring('SKILLSIT.${skill}.MISC')}<!-- This is a calc value of TOTAL-RANK-ABMOD --> + </misc_mod> + <ability>${pcstring('SKILLSIT.${skill}.ABILITY')}</ability> + <synergy>${pcstring('SKILLSIT.${skill}.SYNERGY')}</synergy> + <untrained>${pcstring('SKILLSIT.${skill}.UNTRAINED')}</untrained> + <exclusive>${pcstring('SKILLSIT.${skill}.EXCLUSIVE')}</exclusive> + <trained_total>${pcstring('SKILLSIT.${skill}.TRAINED_TOTAL')}</trained_total> + <exclusive_total>${pcstring('SKILLSIT.${skill}.EXCLUSIVE_TOTAL')}</exclusive_total> + <classes>${pcstring('SKILLSIT.${skill}.CLASSES')}</classes> + <type>${pcstring('SKILLSIT.${skill}.TYPE')}</type> + </skill> + </@loop> + + <!-- Skills --> + </skills> + <!-- + ==================================== + ==================================== + SAVING THROWS + ==================================== + ====================================--> + <saving_throws> + <conditional_modifiers> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","ASPECT=SaveBonus")-1') ; ability , ability_has_next> + <savebonus> + <description>${pcstring('ABILITYALL.ANY.${ability}.ASPECT=SaveBonus.ASPECT.SaveBonus')}</description> + </savebonus> + </@loop> + </conditional_modifiers> + <@loop from=0 to=pcvar('COUNT[CHECKS]-1') ; check , check_has_next> + <#assign checkName = pcstring('CHECK.${check}.NAME')?lower_case /> + <#assign checkShortName = checkName /> + <#if (checkName = 'reflex')> + <#assign checkShortName = checkName?substring(0,3) /> + <#elseif (checkName?length >= 4) > + <#assign checkShortName = checkName?substring(0,4) /> + </#if> + <saving_throw> + <name> + <long>${checkName}</long> + <short>${checkShortName}</short> + </name> + <#if (checkName = 'fortitude')> + <ability>constitution</ability> + <#elseif (checkName = 'reflex')> + <ability>dexterity</ability> + <#elseif (checkName = 'will')> + <ability>wisdom</ability> + <#else> + <ability></ability> + </#if> + <total>${pcstring('CHECK.${check}.TOTAL')}</total> + <base>${pcstring('CHECK.${check}.BASE')}</base> + <abil_mod>${pcstring('CHECK.${check}.STATMOD')}</abil_mod> + <feats>${pcstring('CHECK.${check}.FEATS')}</feats> + <magic_mod>${pcstring('CHECK.${check}.MAGIC')}</magic_mod> + <misc_mod>${pcstring('CHECK.${check}.MISC.NOMAGIC.NOSTAT')}</misc_mod> + <misc_w_magic_mod>${pcstring('CHECK.${check}.MISC.NOSTAT')}</misc_w_magic_mod> + <race>${pcstring('CHECK.${check}.RACE')}</race> + <epic_mod>${pcstring('CHECK.${check}.EPIC')}</epic_mod> + <temp_mod/> + </saving_throw> + </@loop> + </saving_throws> + <!-- + ==================================== + ==================================== + ATTACK + ==================================== + ====================================--> + <attack> + <conditional_modifiers> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","ASPECT=CombatBonus")-1') ; ability , ability_has_next> + <combatbonus> + <description>${pcstring('ABILITYALL.ANY.${ability}.ASPECT=CombatBonus.ASPECT.CombatBonus')}</description> + </combatbonus> + </@loop> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","ASPECT=SaveBonus")-1') ; ability , ability_has_next> + <savebonus> + <description>${pcstring('ABILITYALL.ANY.${ability}.ASPECT=SaveBonus.ASPECT.SaveBonus')}</description> + </savebonus> + </@loop> + </conditional_modifiers> + + <melee> + <total>${pcstring('ATTACK.MELEE.TOTAL')}</total> + <total_short>${pcstring('ATTACK.MELEE.TOTAL.SHORT')}</total_short> + <bab>${pcstring('ATTACK.MELEE.BASE')}</bab> + <!-- ${pcstring('ATTACK.MELEE.BASE')} --> + <base_attack_bonus>${pcstring('ATTACK.MELEE')}</base_attack_bonus> + <stat_mod>${pcstring('ATTACK.MELEE.STAT')}</stat_mod> + <size_mod>${pcstring('ATTACK.MELEE.SIZE')}</size_mod> + <misc_mod>${pcstring('ATTACK.MELEE.MISC')}</misc_mod> + <epic_mod>${pcstring('VAR.charbonusto("COMBAT","EPICAB").INTVAL')}</epic_mod> + <!-- ${pcstring('ATTACK.MELEE.EPIC')} --> + <temp_mod/> + </melee> + <ranged> + <total>${pcstring('ATTACK.RANGED.TOTAL')}</total> + <bab>${pcstring('ATTACK.RANGED.BASE')}</bab> + <!-- ${pcstring('ATTACK.RANGED.BASE')} --> + <base_attack_bonus>${pcstring('ATTACK.RANGED')}</base_attack_bonus> + <stat_mod>${pcstring('ATTACK.RANGED.STAT')}</stat_mod> + <size_mod>${pcstring('ATTACK.RANGED.SIZE')}</size_mod> + <misc_mod>${pcstring('ATTACK.RANGED.MISC')}</misc_mod> + <epic_mod>${pcstring('VAR.charbonusto("COMBAT","EPICAB").INTVAL')}</epic_mod> + <!-- ${pcstring('ATTACK.RANGED.EPIC')} --> + <temp_mod/> + </ranged> + <!-- Either CMB block, or Grapple Block --> + <#-- |IIF(HASVAR:CMB.OR.HASFEAT:CMB Output)| --> + <#if (pchasvar('CMB') || pcboolean('VAR.HASFEAT:CMB Output')) > + <cmb> + <!-- Base stuff for standard block --> + <title>CMB</title> + <total>${pcstring('VAR.CMB.INTVAL.SIGN')}</total> + <bab>${pcstring('ATTACK.MELEE.BASE')}</bab> + <base_attack_bonus>${pcstring('ATTACK.MELEE')}</base_attack_bonus> + <stat_mod>${pcstring('VAR.CMB_STAT.INTVAL.SIGN')}</stat_mod> + <size_mod>${pcstring('VAR.CMB_SizeMod.INTVAL.SIGN')}</size_mod> + <misc_mod></misc_mod> <#-- This formula is giving incorrect results - STAT/STAT ${pcstring('VAR.CMB-ATTACK.MELEE.BASE-VAR.CMB_STAT-VAR.CMB_SizeMod.INTVAL.SIGN')} --> + <epic_mod/> + <temp_mod/> + <!-- Base values (not yet used) --> + <grapple_base>${pcstring('VAR.CMB_Grapple.INTVAL.SIGN')}</grapple_base> + <trip_base>${pcstring('VAR.CMB_Trip.INTVAL.SIGN')}</trip_base> + <disarm_base>${pcstring('VAR.CMB_Disarm.INTVAL.SIGN')}</disarm_base> + <sunder_base>${pcstring('VAR.CMB_Sunder.INTVAL.SIGN')}</sunder_base> + <bullrush_base>${pcstring('VAR.CMB_Bull.INTVAL.SIGN')}</bullrush_base> + <overrun_base>${pcstring('VAR.CMB_Overrun.INTVAL.SIGN')}</overrun_base> + <!-- Defense values --> + <#if (pchasvar('CMB'))> + <!-- Pathfinder (final release) --> + <!-- Attack values --> + <grapple_attack>${pcstring('VAR.CMB_Grapple.INTVAL.SIGN')}</grapple_attack> + <trip_attack>${pcstring('VAR.CMB_Trip.INTVAL.SIGN')}</trip_attack> + <disarm_attack>${pcstring('VAR.CMB_Disarm.INTVAL.SIGN')}</disarm_attack> + <sunder_attack>${pcstring('VAR.CMB_Sunder.INTVAL.SIGN')}</sunder_attack> + <bullrush_attack>${pcstring('VAR.CMB_BullRush.INTVAL.SIGN')}</bullrush_attack> + <overrun_attack>${pcstring('VAR.CMB_Overrun.INTVAL.SIGN')}</overrun_attack> + <!-- Defense values --> + <defense>${pcstring('VAR.CMD.INTVAL')}</defense> + <grapple_defense>${pcstring('VAR.CMD_Grapple.INTVAL')}</grapple_defense> + <trip_defense> + <#if (pchasvar("CantBeTripped"))> + Immune + <#else> + ${pcstring('VAR.CMD_Trip.INTVAL')} + </#if> + </trip_defense> + <disarm_defense>${pcstring('VAR.CMD_Disarm.INTVAL')}</disarm_defense> + <sunder_defense>${pcstring('VAR.CMD_Sunder.INTVAL')}</sunder_defense> + <bullrush_defense>${pcstring('VAR.CMD_BullRush.INTVAL')}</bullrush_defense> + <overrun_defense>${pcstring('VAR.CMD_Overrun.INTVAL')}</overrun_defense> + + <#else> + <!-- Pathfinder Beta version --> + <!-- Attack values --> + <grapple_attack>${pcstring('VAR.CMB_Grapple_OFF.INTVAL.SIGN')}</grapple_attack> + <trip_attack>${pcstring('VAR.CMB_Trip_OFF.INTVAL.SIGN')}</trip_attack> + <disarm_attack>${pcstring('VAR.CMB_Disarm_OFF.INTVAL.SIGN')}</disarm_attack> + <sunder_attack>${pcstring('VAR.CMB_Sunder_OFF.INTVAL.SIGN')}</sunder_attack> + <bullrush_attack>${pcstring('VAR.CMB_Bull_OFF.INTVAL.SIGN')}</bullrush_attack> + <overrun_attack>${pcstring('VAR.CMB_Overrun_OFF.INTVAL.SIGN')}</overrun_attack> + <!-- Defense values --> + <defense>${pcvar('VAR.CMB+VAR.CMB_DEF.INTVAL')}</defense> + <grapple_defense>${pcstring('VAR.CMB_Grapple_DEF.INTVAL')}</grapple_defense> + <trip_defense>${pcstring('VAR.CMB_Trip_DEF.INTVAL')}</trip_defense> + <disarm_defense>${pcstring('VAR.CMB_Disarm_DEF.INTVAL')}</disarm_defense> + <sunder_defense>${pcstring('VAR.CMB_Sunder_DEF.INTVAL')}</sunder_defense> + <bullrush_defense>${pcstring('VAR.CMB_Bull_DEF.INTVAL')}</bullrush_defense> + <overrun_defense>${pcstring('VAR.CMB_Overrun_DEF.INTVAL')}</overrun_defense> + </#if> + </cmb> + <#else> + <grapple> + <total>${pcstring('ATTACK.GRAPPLE.TOTAL')}</total> + <bab>${pcstring('ATTACK.GRAPPLE.BASE')}</bab> + <base_attack_bonus>${pcstring('ATTACK.GRAPPLE')}</base_attack_bonus> + <stat_mod>${pcstring('ATTACK.GRAPPLE.STAT')}</stat_mod> + <size_mod>${pcstring('ATTACK.GRAPPLE.SIZE')}</size_mod> + <misc_mod>${pcstring('ATTACK.GRAPPLE.MISC')}</misc_mod> + <epic_mod>${pcstring('ATTACK.GRAPPLE.EPIC')}</epic_mod> + <temp_mod/> + </grapple> + </#if> + <!-- End CMB / Grapple Block --> + </attack> + <!-- + ==================================== + ==================================== + WEAPONS + ==================================== + ====================================--> + <#macro weapCommonBlock weap> + <common> + <name> + <short>${pcstring('WEAPON.${weap}.NAME')}</short> + <long>${pcstring('WEAPON.${weap}.LONGNAME')}</long> + <output>${pcstring('WEAPON.${weap}.OUTPUTNAME')}</output> + </name> + <category>${pcstring('WEAPON.${weap}.CATEGORY')}</category> + <critical> + <range>${pcstring('WEAPON.${weap}.CRIT')}</range> + <multiplier>${pcstring('WEAPON.${weap}.MULT')}</multiplier> + </critical> + <to_hit> + <hit>${pcstring('WEAPON.${weap}.HIT')}</hit> + <magic_hit>${pcstring('WEAPON.${weap}.MAGICHIT')}</magic_hit> + <total_hit>${pcstring('WEAPON.${weap}.TOTALHIT')}</total_hit> + </to_hit> + <feat> + <hit>${pcstring('WEAPON.${weap}.FEATHIT')}</hit> + <damage>${pcstring('WEAPON.${weap}.FEATDAMAGE')}</damage> + </feat> + <magic> + <hit>${pcstring('WEAPON.${weap}.MAGICHIT')}</hit> + <damage>${pcstring('WEAPON.${weap}.MAGICDAMAGE')}</damage> + </magic> + <template> + <hit>${pcstring('WEAPON.${weap}.TEMPLATEHIT')}</hit> + <damage>${pcstring('WEAPON.${weap}.TEMPLATEDAMAGE')}</damage> + </template> + <hand>${pcstring('WEAPON.${weap}.HAND')}</hand> + <num_attacks>${pcstring('WEAPON.${weap}.NUMATTACKS')}</num_attacks> + <reach>${pcstring('WEAPON.${weap}.REACH')}</reach> + <reachunit>${pcstring('WEAPON.${weap}.REACHUNIT')}</reachunit> + <size>${pcstring('WEAPON.${weap}.SIZE')}</size> + <#if (pcstring("WEAPON.${weap}.ISTYPE.Natural.OR.WEAPON.${weap}.CATEGORY") = "NATURAL")> + <special_properties>${pcstring('ABILITYALL.Special Ability.${weap}.ASPECT.UnarmedNotes')}</special_properties> + <#else> + <special_properties>${pcstring('WEAPON.${weap}.SPROP')}</special_properties> + </#if> + <type>${pcstring('WEAPON.${weap}.TYPE')}</type> + <weight>${pcstring('WEAPON.${weap}.WT')}</weight> + <attacks>${pcstring('WEAPON.${weap}.ATTACKS')}</attacks> + <heft>${pcstring('WEAPON.${weap}.HEFT')}</heft> + <range>${pcstring('WEAPON.${weap}.RANGE')}</range> + <sizemod>${pcstring('WEAPON.${weap}.SIZEMOD')}</sizemod> + <basehit>${pcstring('WEAPON.${weap}.BASEHIT')}</basehit> + <misc>${pcstring('WEAPON.${weap}.MISC')}</misc> + <damage>${pcstring('WEAPON.${weap}.DAMAGE')}</damage> + <damagebonus>${pcstring('WEAPON.${weap}.DAMAGEBONUS')}</damagebonus> + <basedamagebonus>${pcstring('WEAPON.${weap}.BASEDAMAGEBONUS')}</basedamagebonus> + <thdamagebonus>${pcstring('WEAPON.${weap}.THDAMAGEBONUS')}</thdamagebonus> + <ohdamagebonus>${pcstring('WEAPON.${weap}.OHDAMAGEBONUS')}</ohdamagebonus> + <rateoffire>${pcstring('WEAPON.${weap}.RATEOFFIRE')}</rateoffire> + <islight>${pcstring('WEAPON.${weap}.ISLIGHT')}</islight> + <sequence>${weap}</sequence> + </common> + </#macro> + <#macro weapMeleeBlock weap> + <melee> + <invalidtext> + <tohit>${pcstring('INVALIDTEXT.TOHIT')}</tohit> + <damage>${pcstring('INVALIDTEXT.DAMAGE')}</damage> + </invalidtext> + <hand>${pcstring('WEAPON.${weap}.HAND')}</hand> + <w1_h1_p> + <!-- One weapon, 1 hand, primary hand --> + <to_hit>${pcstring('WEAPON.${weap}.BASEHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.BASICDAMAGE')}</damage> + </w1_h1_p> + <w1_h1_o> + <!-- One weapon, 1 handed, offhand --> + <to_hit>${pcstring('WEAPON.${weap}.OHHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.OHDAMAGE')}</damage> + </w1_h1_o> + <w1_h2> + <!-- One weapon, 2 handed --> + <to_hit>${pcstring('WEAPON.${weap}.THHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.THDAMAGE')}</damage> + </w1_h2> + <w2_p_oh> + <!-- Two weapons, this weapon in primary hand, other hand with heavy weapon --> + <to_hit>${pcstring('WEAPON.${weap}.TWPHITH')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.BASICDAMAGE')}</damage> + </w2_p_oh> + <w2_p_ol> + <!-- Two weapons, this weapon in primary hand, other hand with light weapon --> + <to_hit>${pcstring('WEAPON.${weap}.TWPHITL')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.BASICDAMAGE')}</damage> + </w2_p_ol> + <w2_o> + <!-- Two weapons, this weapon in off-hand --> + <to_hit>${pcstring('WEAPON.${weap}.TWOHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.OHDAMAGE')}</damage> + </w2_o> + </melee> + </#macro> + <#macro weapRangeBlock weap range> + <#if (pcstring('WEAPON.${weap}.RANGELIST.${range}') != "") > + <range> + <distance>${pcstring('WEAPON.${weap}.RANGELIST.${range}')}</distance> + <to_hit>${pcstring('WEAPON.${weap}.RANGELIST.${range}.TOTALHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.RANGELIST.${range}.DAMAGE')}</damage> + <basehit>${pcstring('WEAPON.${weap}.RANGELIST.${range}.BASEHIT')}</basehit> + <tohit_offhand>${pcstring('WEAPON.${weap}.RANGELIST.${range}.OHHIT')}</tohit_offhand> + <tohit_twohand>${pcstring('WEAPON.${weap}.RANGELIST.${range}.BASEHIT')}</tohit_twohand> + <tohit_2weap_heavy>${pcstring('WEAPON.${weap}.RANGELIST.${range}.TWPHITH')}</tohit_2weap_heavy> + <tohit_2weap_light>${pcstring('WEAPON.${weap}.RANGELIST.${range}.TWPHITL')}</tohit_2weap_light> + <tohit_2weap_offhand>${pcstring('WEAPON.${weap}.RANGELIST.${range}.TWOHIT')}</tohit_2weap_offhand> + <@loop from=0 to=pcvar('WEAPON.${weap}.CONTENTS-1') ; ammo , ammo_has_next> + <ammunition> + <name>${pcstring('WEAPON.${weap}.CONTENTS.${ammo}')}</name> + <special_properties>${pcstring('WEAPON.${weap}.CONTENTS.${ammo}.SPROP')}</special_properties> + <quantity>${pcstring('EQ.IS.WEAPON.${weap}.CONTENTS.${ammo}.QTY')}</quantity> + <to_hit>${pcstring('WEAPON.${weap}.RANGELIST.${range}.CONTENTS.${ammo}.TOTALHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.RANGELIST.${range}.CONTENTS.${ammo}.DAMAGE')}</damage> + </ammunition> + </@loop> + </range> + </#if> + </#macro> + + <weapons> + <#if (pcvar("VAR.UseMartialArts") = 1)> + <martialarts> + <total>${pcstring('WEAPONH.TOTALHIT')}</total> + <#if (pcvar("VAR.MartialArtsBonusDamage") < 0)> + <damage>${pcstring('VAR.MartialArtsDie.INTVAL')}d${pcstring('VAR.MartialArtsDieSize.INTVAL')}-${pcstring('VAR.MartialArtsBonusDamage.INTVAL')}</damage> + <#else> + <damage>${pcstring('VAR.MartialArtsDie.INTVAL')}d${pcstring('VAR.MartialArtsDieSize.INTVAL')}+${pcstring('VAR.MartialArtsBonusDamage.INTVAL')}</damage> + </#if> + <critical>${pcstring('WEAPONH.CRIT')}/x${pcstring('WEAPONH.MULT')}</critical> + <!-- Should be changed to a variable due to improved crit --> + <reach>${pcstring('REACH')}</reach> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability","TYPE=UnarmedDisplay")-1') ; NaturalAttack , NaturalAttack_has_next> + <special_property>${pcstring('ABILITYALL.Special Ability.${NaturalAttack}.TYPE=UnarmedDisplay.ASPECT.UnarmedNotes')}</special_property> + </@loop> + </martialarts> + <#else> + <unarmed> + <total>${pcstring('WEAPONH.TOTALHIT')}</total> + <damage>${pcstring('WEAPONH.DAMAGE')}</damage> + <critical>${pcstring('WEAPONH.CRIT')}/x${pcstring('WEAPONH.MULT')}</critical> + <!-- Should be changed to a variable due to improved crit --> + <reach>${pcstring('REACH')}</reach> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability","TYPE=UnarmedDisplay")-1') ; NaturalAttack , NaturalAttack_has_next> + <special_property>${pcstring('ABILITYALL.Special Ability.${NaturalAttack}.TYPE=UnarmedDisplay.ASPECT.UnarmedNotes')}</special_property> + </@loop> + <!-- Commenting this out (will need a test as well) + 3.0 uses "Subdual", 3.5 uses "nonlethal". We'll need a separate node for both. --> + <#if (gamemodename = "3e")> + <#if (pcvar('VAR.Unarmed') > 0)> + <type>(subdual or normal)</type> + <#else> + <type>(subdual only)</type> + </#if> + <#else> + <#if (pcvar('VAR.UnarmedLethal') > 0)> + <type>(lethal or nonlethal)</type> + <#else> + <type>(nonlethal only)</type> + </#if> + </#if> + </unarmed> + </#if> + <!-- Spirit Weapon - Melee --> + <#if (pcstring("VAR.UseSpiritWeaponMelee") = "1")> + <spiritweaponmelee> + <total>+${pcstring('VAR.SpiritWeaponMeleeToHit.INTVAL')}</total> + <#if (pcvar("VAR.SpiritWeaponMeleeBonusDamage") < 0)> + <damage>${pcstring('VAR.SpiritWeaponMeleeDie.INTVAL')}d${pcstring('VAR.SpiritWeaponMeleeDieSize.INTVAL')}-${pcstring('VAR.SpiritWeaponMeleeBonusDamage.INTVAL')}</damage> + <#else> + <damage>${pcstring('VAR.SpiritWeaponMeleeDie.INTVAL')}d${pcstring('VAR.SpiritWeaponMeleeDieSize.INTVAL')}+${pcstring('VAR.SpiritWeaponMeleeBonusDamage.INTVAL')}</damage> + </#if> + <critical>${pcstring('VAR.SpiritWeaponMeleeCritRange.INTVAL')}/x${pcstring('VAR.SpiritWeaponMeleeCritMult.INTVAL')}</critical> + <reach>${pcstring('REACH')}</reach> + </spiritweaponmelee> + </#if> + + <!-- Spirit Weapon - Ranged --> + <#if (pcstring("VAR.UseSpiritWeaponRanged") = "1")> + <spiritweaponranged> + <total>+${pcstring('VAR.SpiritWeaponRangedToHit.INTVAL')}</total> + <#if (pcvar("VAR.SpiritWeaponRangedBonusDamage") < 0)> + <damage>${pcstring('VAR.SpiritWeaponRangedDie.INTVAL')}d${pcstring('VAR.SpiritWeaponRangedDieSize.INTVAL')}-${pcstring('VAR.SpiritWeaponRangedBonusDamage.INTVAL')}</damage> + <#else> + <damage>${pcstring('VAR.SpiritWeaponRangedDie.INTVAL')}d${pcstring('VAR.SpiritWeaponRangedDieSize.INTVAL')}+${pcstring('VAR.SpiritWeaponRangedBonusDamage.INTVAL')}</damage> + </#if> + <critical>${pcstring('VAR.SpiritWeaponRangedCritRange.INTVAL')}/x${pcstring('VAR.SpiritWeaponRangedCritMult.INTVAL')}</critical> + <range>${pcstring('VAR.SpiritWeaponRangedRange.INTVAL')}</range> + </spiritweaponranged> + </#if> + <!-- End Spirit Weapon - Ranged --> + + <!-- Blank Natural Attack --> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Natural Attack","NAME=BlankNaturalAttack")-1') ; NaturalAttack , NaturalAttack_has_next> + <naturalattack> + <name>Weapon</name> + <tohit></tohit> + <damage></damage> + <type></type> + <threat></threat> + <reach></reach> + <range></range> + <rangeincrement>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackRangeIncrement')}</rangeincrement> + <notes>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackNotes')}${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.DESC')}</notes> + </naturalattack> + </@loop> + + <!-- Natural Attack --> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Natural Attack","TYPE=NaturalAttack")-1') ; NaturalAttack , NaturalAttack_has_next> + <naturalattack> + <name>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackName')}</name> + <tohit>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackToHit')}</tohit> + <damage>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackDamage')}</damage> + <type>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackType')}</type> + <threat>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackThreatRange')}${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackCritMult')}</threat> + <reach>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackReach.INTVAL')}</reach> + <rangeincrement>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackRangeIncrement')}</rangeincrement> + <range>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackRange')}</range> + <notes>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackNotes')}${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.DESC')}</notes> + <!--> Used to Validate Word Toggle between Crit / Mult vs. Crit <--> + <critmult>${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackCritMult')}</critmult> + <!--${pcstring('ABILITYALL.Natural Attack.${NaturalAttack}.TYPE=NaturalAttack.ASPECT.NaturalAttackDamageBonus.SIGN')}--> + <distance_unit>${pcstring('UNITSET.DISTANCEUNIT')}</distance_unit> + </naturalattack> + </@loop> + + <#-- Equipped weapon loop --> + <@loop from=0 to=pcvar('COUNT[EQTYPE.WEAPON]-1') ; weap , weap_has_next><#-- TODO: Loop was of early exit type 1 --> + <#assign weaponCategory> + ${pcstring('WEAPON.${weap}.CATEGORY')?lower_case} + </#assign> + <#if (weaponCategory?contains('both'))> + + <#if (weaponCategory?contains('ranged'))> + <#else><#-- IIF(WEAPON.${weap}.CATEGORY:Ranged) --> + <weapon> + <@weapCommonBlock weap="${weap}" /> + <@weapMeleeBlock weap="${weap}" /> + </#if><#-- IIF(WEAPON.${weap}.CATEGORY:Ranged) --> + <#if (weaponCategory?contains('ranged'))><#-- We work out now whether this is a Ranged Only or Thrown --> + <#if (pcboolean('WEAPON.${weap}.ISTYPE.Thrown'))><#-- Valid only if we find the Thrown Value --> + <ranges> + <rangetype>Thrown</rangetype> + <#if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0)> + <@loop from=0 to=5 ; range , range_has_next> + <@weapRangeBlock weap="${weap}" range="${range}" /> + </@loop><#-- Range --> + </#if><#-- if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0) --> + </ranges> + <#else><#-- IIF(WEAPON.${weap}.ISTYPE.Thrown) but IS Ranged --> + + <!-- New Ranges Section --> + <ranges> + <rangetype>Ranged</rangetype><!-- ranged first --> + <#if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0)> + <@loop from=0 to=10 ; range , range_has_next> + <@weapRangeBlock weap="${weap}" range="${range}" /> + </@loop><#-- Range --> + </#if><#-- if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0) --> + </ranges> + + </#if><#-- IIF(WEAPON.${weap}.ISTYPE.Thrown) --> + </weapon> + <#else><#-- CATEGORY:Ranged) --> + </#if><#-- CATEGORY:Ranged) --> + <!-- End New Ranges Section --> + <#else><#-- IIF(WEAPON.${weap}.CATEGORY:BOTH) --> + <#if (weaponCategory?contains('ranged'))> + <weapon> + <@weapCommonBlock weap="${weap}" /> + <#if (pcstring("WEAPON.${weap}.CONTENTS") = "0")> + <ranges> + <#if (pcboolean('WEAPON.${weap}.ISTYPE.Thrown'))> + + <rangetype>Thrown</rangetype> + <#if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0)> + <@loop from=0 to=5 ; range , range_has_next> + <@weapRangeBlock weap="${weap}" range="${range}" /> + </@loop><!-- Range --> + </#if><#-- if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0) --> + <#else><#-- Thrown --> + <rangetype>Ranged</rangetype><!-- ranged second --> + <#if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0)> + <@loop from=0 to=10 ; range , range_has_next> + <@weapRangeBlock weap="${weap}" range="${range}" /> + </@loop><#-- Range --> + </#if><#-- if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0) --> + </#if><#-- Thrown --> + </ranges> + <#else><#-- IIF(WEAPON.${weap}.CONTENTS:0) --> + <@loop from=0 to=pcvar('WEAPON.${weap}.CONTENTS-1') ; ammo , ammo_has_next> + <ranges> + <ammunition> + <name>${pcstring('WEAPON.${weap}.CONTENTS.${ammo}')}</name> + <special_properties>${pcstring('WEAPON.${weap}.CONTENTS.${ammo}.SPROP')}</special_properties> + <quantity>${pcstring('EQ.IS.WEAPON.${weap}.CONTENTS.${ammo}.QTY')}</quantity> + <to_hit>${pcstring('WEAPON.${weap}.RANGELIST.${weap}.CONTENTS.${ammo}.TOTALHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.RANGELIST.${weap}.CONTENTS.${ammo}.DAMAGE')}</damage> + </ammunition> + <ammunition> + <name>${pcstring('WEAPON.${weap}.CONTENTS.${ammo}')}</name> + </ammunition> + <#if (pcboolean('WEAPON.${weap}.ISTYPE.Thrown'))> + <rangetype>Thrown</rangetype> + <#if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0)> + <@loop from=0 to=5 ; range , range_has_next> + <@weapRangeBlock weap="${weap}" range="${range}" /> + </@loop><#-- Range --> + </#if><#-- if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0) --> + <#else><#--IIF(WEAPON.%weap.ISTYPE.Thrown) --> + <rangetype>Ranged</rangetype><!-- Ranged third --> + <#if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0)> + <@loop from=0 to=10 ; range , range_has_next> + <@weapRangeBlock weap="${weap}" range="${range}" /> + </@loop><#-- Range --> + </#if><#-- if (pcvar("WEAPON.${weap}.RANGE.NOUNITS") > 0) --> + + </#if><#--IIF(WEAPON.%weap.ISTYPE.Thrown) --> + + </ranges> + </@loop><#-- FOR,${ammo},0,WEAPON.${weap}.CONTENTS-1,1,1 --> + </#if><#-- IIF(WEAPON.${weap}.CONTENTS:0) --> + </weapon> + + <#else><#-- IIF(WEAPON.${weap}.CATEGORY:Ranged) --> + <!-- Request to remove the Double Weapon Block OS-133 --> + <#if (pcboolean('WEAPON.${weap}.ISTYPE.Double') || pcboolean('WEAPON.${weap}.ISTYPE.TwoHanded') || weaponCategory?contains('non-standard-melee') || weaponCategory?contains('natural'))> + <weapon> + <@weapCommonBlock weap="${weap}" /> + <simple> + <to_hit>${pcstring('WEAPON.${weap}.TOTALHIT')}</to_hit> + <damage>${pcstring('WEAPON.${weap}.DAMAGE')}</damage> + <range>${pcstring('WEAPON.${weap}.RANGE')}</range> + <!-- This is an Addition by Itwally for the Monk Flurry of Blows Fix per DATA-73 --> + <name>${pcstring('WEAPON.${weap}.NAME')}</name> + <class><@loop from=0 to=pcvar('countdistinct("CLASSES")')-1 ; class , class_has_next ><#rt> + <#t><@pcstring tag="CLASSABB.${class}"/><@pcstring tag="CLASS.${class}.LEVEL"/><#if class_has_next> </#if> + <#t></@loop></class> + <!-- End DATA-73 Work Around--> + </simple> + </weapon> + <#else><#-- IIF(WEAPON.${weap}.ISTYPE.Double.OR.WEAPON.${weap}.CATEGORY:Non-Standard-Melee) --> + <weapon> + <@weapCommonBlock weap="${weap}" /> + <@weapMeleeBlock weap="${weap}" /> + </weapon> + </#if><#-- IIF(WEAPON.weap}.ISTYPE.Double.OR.WEAPON.${weap}.CATEGORY:Non-Standard-Melee) --> + </#if><#-- IIF(WEAPON.weap}.CATEGORY:Ranged) --> + </#if><#-- IIF(WEAPON.weap}.CATEGORY:BOTH) --> + </@loop><#-- FOR,weap},0,COUNT[EQTYPE.WEAPON]-1,1,1 --> + </weapons> + <!-- + ==================================== + ==================================== + ARMOR + ==================================== + ====================================--> + <protection> + <@loop from=0 to=pcvar('COUNT[EQTYPE.Armor]-1') ; armor , armor_has_next> + <armor> + <name>${pcstring('ARMOR.Armor.ALL.${armor}.NAME')}</name> + <acbonus>${pcstring('ARMOR.Armor.ALL.${armor}.ACBONUS')}</acbonus> + <accheck>${pcstring('ARMOR.Armor.ALL.${armor}.ACCHECK')}</accheck> + <baseac>${pcstring('ARMOR.Armor.ALL.${armor}.BASEAC')}</baseac> + <edr>${pcstring('ARMOR.Armor.ALL.${armor}.EDR')}</edr> + <maxdex>${pcstring('ARMOR.Armor.ALL.${armor}.MAXDEX')}</maxdex> + <move>${pcstring('ARMOR.Armor.ALL.${armor}.MOVE')}</move> + <spellfail>${pcstring('ARMOR.Armor.ALL.${armor}.SPELLFAIL')}</spellfail> + <special_properties>${pcstring('ARMOR.Armor.ALL.${armor}.SPROP')}</special_properties> + <totalac>${pcstring('ARMOR.Armor.ALL.${armor}.TOTALAC')}</totalac> + <type>${pcstring('ARMOR.Armor.ALL.${armor}.TYPE')}</type> + <wt>${pcstring('ARMOR.Armor.ALL.${armor}.WT')}</wt> + <fulltype>${pcstring('EQTYPE.Armor.${armor}.TYPE')}</fulltype> + <location>${pcstring('EQTYPE.Armor.${armor}.LOCATION')}</location> + </armor> + </@loop> + <@loop from=0 to=pcvar('COUNT[EQTYPE.SHIELD]-1') ; armor , armor_has_next> + <shield> + <name>${pcstring('ARMOR.SHIELD.ALL.${armor}.NAME')}</name> + <acbonus>${pcstring('ARMOR.SHIELD.ALL.${armor}.ACBONUS')}</acbonus> + <accheck>${pcstring('ARMOR.SHIELD.ALL.${armor}.ACCHECK')}</accheck> + <baseac>${pcstring('ARMOR.SHIELD.ALL.${armor}.BASEAC')}</baseac> + <edr>${pcstring('ARMOR.SHIELD.ALL.${armor}.EDR')}</edr> + <maxdex>${pcstring('ARMOR.SHIELD.ALL.${armor}.MAXDEX')}</maxdex> + <move>${pcstring('ARMOR.SHIELD.ALL.${armor}.MOVE')}</move> + <spellfail>${pcstring('ARMOR.SHIELD.ALL.${armor}.SPELLFAIL')}</spellfail> + <special_properties>${pcstring('ARMOR.SHIELD.ALL.${armor}.SPROP')}</special_properties> + <totalac>${pcstring('ARMOR.SHIELD.ALL.${armor}.TOTALAC')}</totalac> + <type>${pcstring('ARMOR.SHIELD.ALL.${armor}.TYPE')}</type> + <wt>${pcstring('ARMOR.SHIELD.ALL.${armor}.WT')}</wt> + </shield> + </@loop> + <@loop from=0 to=pcvar('COUNT[EQTYPE.ACITEM]-1') ; armor , armor_has_next> + <item> + <name>${pcstring('ARMOR.ACITEM.${armor}.NAME')}</name> + <acbonus>${pcstring('ARMOR.ACITEM.${armor}.ACBONUS')}</acbonus> + <accheck>${pcstring('ARMOR.ACITEM.${armor}.ACCHECK')}</accheck> + <baseac>${pcstring('ARMOR.ACITEM.${armor}.BASEAC')}</baseac> + <edr>${pcstring('ARMOR.ACITEM.${armor}.EDR')}</edr> + <maxdex>${pcstring('ARMOR.ACITEM.${armor}.MAXDEX')}</maxdex> + <move>${pcstring('ARMOR.ACITEM.${armor}.MOVE')}</move> + <spellfail>${pcstring('ARMOR.ACITEM.${armor}.SPELLFAIL')}</spellfail> + <special_properties>${pcstring('ARMOR.ACITEM.${armor}.SPROP')}</special_properties> + <totalac>${pcstring('ARMOR.ACITEM.${armor}.TOTALAC')}</totalac> + <type>${pcstring('ARMOR.ACITEM.${armor}.TYPE')}</type> + <wt>${pcstring('ARMOR.ACITEM.${armor}.WT')}</wt> + </item> + </@loop> + </protection> + <!-- + ==================================== + ==================================== + CLASS-DEPENDANT FEATURES + ==================================== + ====================================--> + <class_features> + <!-- D&D 3.0 --> + <#if (pcvar("VAR.BardicMusicLevel") >= 1) > + <bardic_music> + <uses_per_day>${pcstring('VAR.BardicMusicLevel.INTVAL')}</uses_per_day> + <effects>Effects (Perform ranks required)</effects> + <text>Inspire Courage(3), Countersong(3), Fascinate(3),Inspire Competence(6), Suggestion(9), Inspire Greatness(12)</text> + </bardic_music> + </#if> + <!-- D&D 3.5 --> + <#if (pcvar("VAR.BardicMusicTimes") >= 1) > + <bardic_music> + <uses_per_day>${pcstring('VAR.BardicMusicTimes.INTVAL')}</uses_per_day> + <text> + </#if> + <#if (pcvar("VAR.CountersongDuration") >= 1) > + Countersong(duration = ${pcstring('VAR.CountersongDuration.INTVAL')} rounds) + </#if> + <#if (pcvar("VAR.FascinateCreatures.INTVAL") >= 1) > + Fascinate(up to ${pcstring('VAR.FascinateCreatures.INTVAL')} creatures for up to ${pcstring('VAR.FacinateDuration.INTVAL')} rounds) + </#if> + <#if (pcvar("VAR.InspireCourageSaves") >= 1) > + Inspire Courage(save bonus = ${pcstring('VAR.InspireCourageSaves.INTVAL.SIGN')}, attack and damage bonus = ${pcstring('VAR.InspireCourageAttack.INTVAL.SIGN')}) + </#if> + <#if (pcvar("VAR.InspireCompetenceBonus.INTVAL") >= 1) > + Inspire Competence(skill check bonus = ${pcstring('VAR.InspireCompetenceBonus.INTVAL.SIGN')} for up to ${pcstring('VAR.InspireCompetenceDuration.INTVAL')} minutes) + </#if> + <#if (pcvar("VAR.SingleSuggestionDC.INTVAL") >= 1) > + Suggestion(DC: ${pcstring('VAR.SingleSuggestionDC.INTVAL')}) + </#if> + <#if (pcvar("VAR.InspireGreatnessAllies.INTVAL") >= 1) > + Inspire Greatness(number of allies = ${pcstring('VAR.InspireGreatnessAllies.INTVAL')}, bonus HD = ${pcstring('VAR.InspireGreatnessHD.INTVAL')}, attack bonus = ${pcstring('VAR.InspireGreatnessAttack.INTVAL.SIGN')}, Fortitude bonus = ${pcstring('VAR.InspireGreatnessSaves.INTVAL.SIGN')}) + </#if> + <#if (pcvar("VAR.SongOfFreedomLVL.INTVAL") >= 1) > + Song of Freedom(effective caster level = ${pcstring('VAR.SongOfFreedomLVL.INTVAL')}) + </#if> + <#if (pcvar("VAR.InspireHeroicsAllies.INTVAL") >= 1) > + Inspire Greatness(number of allies = ${pcstring('VAR.InspireHeroicsAllies.INTVAL')}, save bonus = ${pcstring('VAR.InspireHeroicsSaves.INTVAL.SIGN')}, dodge bonus = ${pcstring('VAR.InspireHeroicsDodge.INTVAL.SIGN')}) + </#if> + <#if (pcvar("VAR.MassSuggestionDC.INTVAL") >= 1) > + Mass Suggestion(DC: ${pcstring('VAR.MassSuggestionDC.INTVAL')}) + </#if> + <#if (pcvar("VAR.BardicMusicTimes") >= 1) > + </text> + </bardic_music> + </#if> <!-- Bard --> + + + + + <!-- Pathfinder --> + <#if (pcvar("VAR.RageLVL") >= 1) > <!-- If character can Rage --> + <rage> + <uses_per_day>${pcstring('VAR.RageDuration.INTVAL')}</uses_per_day> + <uses_per_day.title>Rounds/day</uses_per_day.title> + </rage> + </#if> <!-- Character Rage --> + <#if (pcvar("VAR.RageTimes") >= 1) > <!-- If character can Rage --> + <rage> + <uses_per_day>${pcstring('VAR.RageTimes.INTVAL')}</uses_per_day> + <uses_per_day.title>Uses per day</uses_per_day.title> + <#if (pcboolean('ABILITYALL.Special Ability.0.TYPE=RageDescription.HASASPECT.RageDescription')) > + <description>${pcstring('ABILITYALL.Special Ability.0.TYPE=RageDescription.ASPECT.RageDescription')}</description> + <#else> + <description>The Barbarian gains +${pcstring('VAR.RageStrBonus.INTVAL')} to Strength, +${pcstring('VAR.RageConBonus.INTVAL')} to Constitution, and a +${pcstring('VAR.RageMorale.INTVAL')} morale bonus on Will saves, but suffers a -${pcstring('VAR.RageACPenalty.INTVAL')} penalty to AC for ${pcvar('VAR.RageConBonus.INTVAL+3')} rounds. At the end of the rage, the barbarian is fatigued (-2 to Strength, -2 to Dexterity, can't charge or run) for the duration of that encounter. The barbarian can only rage once per encounter. Entering a rage takes no time itself, but the barbarian can only do it during his action.</description> + </#if> + </rage> + <!-- this stuff needs a bit of work to display correct info for both 3e and 3.5e properly. - Tir Gwaith --> + </#if> <!-- Character Rage --> + + <!-- Turning ability --> + + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability","ASPECT=TurnType")-1') ; turncount , turncount_has_next> + <turning kind="${pcstring('TEXT.UPPER.ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnKind')}" type="${pcstring('TEXT.UPPER.ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnType')}"> + <level>${pcstring('ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnLevel.INTVAL')}</level> + <turn_check>1d20${pcstring('ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnCheck.INTVAL.SIGN')}</turn_check> + <damage>${pcstring('ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnDamage')}</damage> + <uses_per_day>${pcstring('ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnTimes.INTVAL')}</uses_per_day> + <notes>${pcstring('ABILITYALL.Special Ability.${turncount}.ASPECT=TurnType.ASPECT.TurnNotes')}</notes> + </turning> + </@loop> + + <!-- Eclipse Channeling --> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability","ASPECT=ChannelingType")-1') ; eclipsecount , eclipsecount_has_next> + <eclipse_channeling kind="${pcstring('TEXT.UPPER.ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingKind')}" type="${pcstring('TEXT.UPPER.ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingType')}"> + <level>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingLevel.INTVAL')}</level> + <channeling_check>1d20${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingCheck.INTVAL.SIGN')}</channeling_check> + <intensity>1d20${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingIntensity.INTVAL.SIGN')}</intensity> + <channel_intensity>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingIntensity.INTVAL')}</channel_intensity> + <damage>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingMagnitude')}${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingMagnitudeBonus.SIGN')}${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingMagnitudeFactor')}</damage> + <damage_bonus>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingMagnitudeBonus')}</damage_bonus> + <uses_per_day>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingUses.INTVAL')}</uses_per_day> + <range>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingRange.INTVAL')}</range> + <notes>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingNotes')}</notes> + <factor>${pcstring('ABILITYALL.Special Ability.${eclipsecount}.ASPECT=ChannelingType.ASPECT.ChannelingMagnitudeFactor')}</factor> + </eclipse_channeling> + </@loop> + + <!-- Channel Energy --> + <#if (pcvar("VAR.ChannelEnergyLVL") >= 1) > + <channel_energy> + <level>${pcstring('VAR.ChannelEnergyLVL.INTVAL')}</level> + <uses_per_day>${pcstring('VAR.ChannelEnergyTimes.INTVAL')}</uses_per_day> + <uses_per_day.title>Uses per day</uses_per_day.title> + <save_dc>${pcstring('VAR.ChannelEnergyDC.INTVAL')}</save_dc> + <dice>${pcstring('VAR.ChannelEnergyDice.INTVAL')}</dice> + <die_size>${pcstring('VAR.ChannelEnergyDieSize.INTVAL')}</die_size> + <#if (pcstring("VAR.ChannelPositiveEnergyDC") = "1")> + <description>You can unleash a wave of positive energy dealing ${pcstring('VAR.ChannelEnergyDice.INTVAL')}d${pcstring('VAR.ChannelEnergyDieSize.INTVAL')} (DC ${pcstring('VAR.ChannelEnergyDC.INTVAL')} for half)</description> + <#else> + <description>You can unleash a wave of negative energy dealing ${pcstring('VAR.ChannelEnergyDice.INTVAL')}d${pcstring('VAR.ChannelEnergyDieSize.INTVAL')} (DC ${pcstring('VAR.ChannelEnergyDC.INTVAL')} for half)</description> + </#if> + </channel_energy> + </#if> + + <#if (pcvar("VAR.KiPoolLVL") >= 1) > + <ki_pool> + <uses_per_day>${pcstring('VAR.KiPoints.INTVAL')}</uses_per_day> + </ki_pool> + </#if> <!-- 3.0 stunning fist --> + + <#if (pcvar("VAR.StunningAttack") >= 1) > + <stunning_fist> + <save_dc>${pcstring('VAR.StunDC.INTVAL')}</save_dc> + <uses_per_day>${pcstring('VAR.StunningAttack.INTVAL')}</uses_per_day> + </stunning_fist> + </#if> <!-- 3.0 stunning fist --> + + <#if (pcvar("VAR.StunningFistAttack") >= 1) > + <stunning_fist> + <save_dc>${pcstring('VAR.StunningFistDC.INTVAL')}</save_dc> + <uses_per_day>${pcstring('VAR.StunningFistAttack.INTVAL')}</uses_per_day> + <description>You know just where to strike to temporarily stun a foe. ${pcstring('VAR.StunningFistAttack.INTVAL')}/day (DC ${pcstring('VAR.StunningFistDC.INTVAL')})</description> + </stunning_fist> + </#if> <!-- 3.5 stunning fist --> + + <#if (pcvar("VAR.WholenessHpLVL") >= 1) > + <wholeness_of_body> + <hp_per_day>${pcstring('VAR.WholenessHpLVL.INTVAL*2')}</hp_per_day> + </wholeness_of_body> + </#if> <!-- 3.0 wholeness of body --> + + <#if (pcvar("VAR.WholenessBody") >= 1) > + <wholeness_of_body> + <hp_per_day>${pcstring('VAR.WholenessBody.INTVAL')}</hp_per_day> + </wholeness_of_body> + </#if> <!-- 3.5 wholeness of body --> + + <#if (pcvar("VAR.TOTALPOWERPOINTS") >= 1) > <!-- Psionics --> + <psionics> + <#if (pchasvar("Manifester") || pchasvar("PsychicWarriorManifester"))> + <type>3.0</type> + <#else> + <type>3.5</type> + </#if> + <base_pp>${pcstring('VAR.BASEPOWERPOINTS.INTVAL')}</base_pp> + <bonus_pp>${pcstring('VAR.BONUSPOWERPOINTS.INTVAL')}</bonus_pp> + <total_pp>${pcstring('VAR.TOTALPOWERPOINTS.INTVAL')}</total_pp> + </psionics> + </#if> <!-- Psionics --> + + <#if (pcvar("VAR.LayOnHands") >= 1) > <!-- D&D 3.0 and 3.5 --> + <layonhands> + <hp_per_day>${pcstring('VAR.LayOnHands.INTVAL')}</hp_per_day> + <hp_per_day.title>HP per day</hp_per_day.title> + </layonhands> + </#if> + + <#if (pcvar("VAR.LayOnHandsTimes") >= 1) > <!-- Pathfinder --> + <layonhands> + <hp_per_day>${pcstring('VAR.LayOnHandsTimes.INTVAL')}</hp_per_day> + <hp_per_day.title>Uses per day</hp_per_day.title> + <description>cure ${pcstring('VAR.LayOnHandsDice.INTVAL')}d6 per use</description> + </layonhands> + </#if> + + <#if (pcvar("VAR.WildshapeTimes") >= 1) > + <wildshape> + <uses_per_day>${pcstring('VAR.WildShapeTimes.INTVAL')}</uses_per_day> + <elemental_uses_per_day>${pcstring('VAR.WildShapeElementalTimes.INTVAL')}</elemental_uses_per_day> + <duration>${pcstring('VAR.WildShapeDuration.INTVAL')}</duration> + </wildshape> + </#if> + + + <#if (pcvar("VAR.LeadershipScore") >= 1) > + <leadership> + <score>${pcstring('VAR.LeadershipScore.INTVAL')}</score> + <max_cohort_level>${pcstring('VAR.LeadershipMaxCohortLvl')}</max_cohort_level> + </leadership> + </#if> + </class_features> + + <!-- Abilites with check lists - master/child abilities --> + <checklists> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability","ASPECT=CheckType")-1') ; ability , ability_has_next> + <checklist> + <#if (pcstring("ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.TYPE")?lower_case?contains("extraordinary"))> + <name>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType')} (Ex)</name> + <#else> + <#if (pcstring("ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.TYPE")?lower_case?contains("supernatural"))> + <name>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType')} (Su)</name> + <#else> + <#if (pcstring("ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.TYPE")?lower_case?contains("spelllike"))> + <name>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType')} (Sp)</name> + <#else> + </#if> + </#if> + </#if> + <header>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType')}</header> + <description>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.DESC')}</description> + <type>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.TYPE')}</type> + <source>${pcstring('ABILITYALL.Special Ability.VISIBLE.${ability}.ASPECT=CheckType.SOURCE')}</source> + <check_count>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.ASPECT.CheckCount.INTVAL')}</check_count> + <check_type>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.ASPECT.CheckType')}</check_type> + <#if (pcstring("ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.HASASPECT.MasterAbility") = "Y")> + <master>${pcstring('ABILITYALL.Special Ability.${ability}.ASPECT=CheckType.ASPECT.MasterAbility')}</master> + <@loop from=0 to=pcvar('countdistinct("ABILITIES","CATEGORY=Special Ability")-1') ; subability , subability_has_next> + <#if (pcstring("ABILITYALL.Special Ab... [truncated message content] |