diff --git a/.gitignore b/.gitignore
index 1645607..b25c15b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1 @@
*~
-*.xhtml
-*.xml
diff --git a/browserconfig.xml b/browserconfig.xml
new file mode 100644
index 0000000..e7c2f34
--- /dev/null
+++ b/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
This section is a work in progress.
++ Character Name is a bat hybrid, worshipper of the good god of darkness and privacy, Sui. + He also admires Quey, the good god of the wind and freedom. + He has a pet wyvern of the wind. +
++ Being a worshipper of Sui, Character Name focuses primarily on darkness magic, + but learns a lot of wind magic on the side. + Since neither of these elements are very attack-focused, + his preferred source of DPS is a bow and arrows. +
++ To be determined. +
++ Prince is a hatchling gust dragon. + There is more information on gust dragons below. +
+Skill Name | +Type | +Rank | +Extra | +
---|---|---|---|
Appraise | +Int | ++ | + |
Balance | +Dex | ++ | + |
Bluff | +Cha | +4 | ++ |
Climb | +Str | ++ | + |
Concentration | +Con | ++ | + |
Diplomacy | +Cha | ++ | + |
Disguise | +Cha | ++ | + |
Escape Artist | +Dex | ++ | + |
Forgery | +Int | ++ | + |
Gather Information | +Cha | ++ | + |
Handle Animal | +Cha | +4 | ++ |
Heal | +Wis | ++ | + |
Hide | +Dex | +4 | ++ |
Intimidate | +Cha | ++ | + |
Jump | +Str | +4 | ++ |
+ + Knowledge (Social) + + | +Int | +4 | ++ |
+ + Knowledge (Survival) + + | +Int | +4 | ++ |
+ + Knowledge (Magical) + + | +Int | ++ | + |
Listen | +Wis | +4 | ++1 | +
Move Silently | +Dex | +4 | ++ |
Open Lock | +Dex | ++ | + |
Ride | +Dex | ++ | + |
+ + Scent + + | +Wis | +4 | ++ |
Search | +Int | ++ | + |
Sense Motive | +Wis | ++ | + |
Sleight of Hand | +Dex | ++ | + |
Spot | +Wis | +4 | ++ |
Survival | +Wis | ++ | + |
Swim | +Str | ++ | + |
Tumble | +Dex | +4 | ++ |
# | +Weapon | +HP | +
---|---|---|
3 | +Caltrops | +N/A | +
2 | +Dagger (steel) | +2 | +
1 | +Longbow (wood) | +5 | +
Name | +Material | +Weight | +Value | +Damage Type | +Range | +Dmg | +Critical | +H | +HP | +
---|---|---|---|---|---|---|---|---|---|
+ Caltrops + | +Iron | +2 lb | +1 gp | +Piercing | +N/A | +1 | +N/A | +N/A | +N/A | +
+ Dagger + | +Steel | +1 lb | +2 gp | +Piercing/slashing | +N/A | +1d4 | +×2 | +10 | +2 | +
Dagger (thrown) | +— | +— | +— | +Piercing | +10 ft | +1d4 | +19–20/×2 | +— | +— | +
+ Longbow + | +Wood | +3 lb | +75 gp | +Piercing | +100 ft | +1d8 | +×3 | +5 | +5 | +
# | +Name | +Material | +Weight | +Hardness | +
---|---|---|---|---|
40 | ++ + Arrows (×20) + + | +Steel | +3 lb | +5 | +
# | +Name | +Weight | +Value | +
---|---|---|---|
1 | ++ Monk's Outfit + | +2 lb | +5 gp | +
1 | +Backpack | +2 lb | +2 gp | +
# | +Name | +Weight | +Value | +
---|---|---|---|
1 | ++ Crowbar + | +5 lb | +2 gp | +
1 | ++ + Flint & Steel + + | +— | +1 gp | +
1 | ++ + Grappling Hook + + | +4 lb | +1 gp | +
1 | ++ + Rope, hempen (50 ft) + + | +10 lb | +1 gp | +
1 | ++ + Thieves' Tools + + | +1 lb | +30 gp | +
+ Hybrid species are created when a were-creature mates with an animal while in animal form. + Each hybrid race has a different set of attributes. + Below are some of the attributes of a + human/giant golden-crowned flying fox + hybrid: +
+ Dragons are powerful reptiles, wielders of powerful elemental magic. + Each element is associated with its own species of dragon. + They are intelligent and mischeveous. +
++ Dragons mature extremely slowly, + taking centuries for a dragon to hatch in the first place. + This slow maturation rate makes them extremely rare. + Once hatched, they quickly bond with whoever raises them, + be it there mothers, or adoptive families. +
++ Posessing a dragon would be the ultimate symbol of an elite family, + for the dragon will serve the family its entire life. + Dragon eggs are worth far more than their weight in gold, + and eggs believed to be dragon eggs + are often passed down for generations. +
++ Wind dragons are flying serpents surrounded by a constant aura of wind, + so that they never need to touch the ground. + They are agile fliers with tornado breath, + capable of using some air magic. +
+This site is temporarily down as of 2019-02-22. No ETA.
+ + diff --git a/res/character.js b/res/character.js index 91f1b54..60c6f08 100644 --- a/res/character.js +++ b/res/character.js @@ -1,3 +1,54 @@ +/** + * Returns a random number between min (inclusive) and max (exclusive) + */ +function getRandomArbitrary(min, max) { + return Math.random() * (max - min) + min; +} + +function rolln(n, x) { + var total = 0; + while (n-- > 0) { + total += getRandomArbitrary(1, x); + } + return total; +} + +function roll(x) { + return rolln(1, x); +} + +function skillCheck(bonus) { + return roll(20) + bonus; +} + +function parseIfPresent(x) { + return x ? parseInt(x) : 0; +} + +function isBody(elem) { + return elem.getElementsByTagName('td').length > 0; +} + +function getRows(id) { + var rows = document.getElementById(id).getElementsByTagName('tr'); + var bodyrows = Array.from(rows).filter(isBody); + return bodyrows; +} + +function printWithSign(x) { + if (x > 0) { + return "+" + x.toString(); + } else if (x == 0) { + return ""; + } else { + return x.toString(); + } +} + +function abilityModifier(ability) { + return (ability - 10) / 2 +} + window.onload = function() { var skillsHeaders = document.getElementById("skills-headers"); var bonusHeader = document.createElement('th'); @@ -5,15 +56,10 @@ window.onload = function() { skillsHeaders.append(bonusHeader); var abilities = new Object(); - var abilityRows = - document.getElementById("ability-scores").getElementsByTagName('tr'); + var abilityRows = getRows('ability-scores'); for (let ability of abilityRows) { var columns = ability.getElementsByTagName('td'); - if (columns.length != 3) { - // This row contains headers, not values. - continue; - } var name = columns[0].innerText; var bonus = parseInt(columns[2].innerText); @@ -21,34 +67,44 @@ window.onload = function() { abilities[name] = bonus; } - var skillRows = - document.getElementById("skills-table").getElementsByTagName('tr'); + var skillRows = getRows('skills-table'); + + var classRankBonus = 8; + var totalRankBonus = classRankBonus + abilities['Int']; + var initialRanks = 4 * totalRankBonus; + var level = 1; + var levelRanks = (level - 1) * totalRankBonus; + var maxRanks = initialRanks + levelRanks; + var totalRanks = 0; for (let skill of skillRows) { var columns = skill.getElementsByTagName('td'); - if (columns.length != 4) { - // This row contains headers, not values. - continue; - } var abilityColumn = columns[1].innerText; var rankColumn = columns[2].innerText; var extraColumn = columns[3].innerText; var abilityBonus = abilities[abilityColumn]; - var rankBonus = parseInt(rankColumn); - var extraBonus = extraColumn ? parseInt(extraColumn) : 0; + var rankBonus = parseIfPresent(rankColumn); + var extraBonus = parseIfPresent(extraColumn); var totalBonus = abilityBonus + rankBonus + extraBonus; - var totalBonusText; - if (totalBonus >= 0) { - totalBonusText = "+" + totalBonus.toString(); - } else { - totalBonusText = totalBonus.toString(); - } + var totalBonusText = printWithSign(totalBonus); var totalBonusColumn = document.createElement('td'); totalBonusColumn.append(document.createTextNode(totalBonusText)); skill.append(totalBonusColumn); + + totalRanks += rankBonus; } + + var remainingRanks = maxRanks - totalRanks; + + var skillPointNotice = document.createElement('p'); + skillPointNotice.append(document.createTextNode('Total skill points remaining: ')); + skillPointNotice.append(document.createTextNode(remainingRanks.toString())); + skillPointNotice.append(document.createTextNode('/')); + skillPointNotice.append(document.createTextNode(maxRanks.toString())); + + document.getElementById('skill-points').append(skillPointNotice); } diff --git a/resume.xhtml b/resume.xhtml new file mode 100644 index 0000000..222d626 --- /dev/null +++ b/resume.xhtml @@ -0,0 +1,331 @@ + + + + + + ++ I taught myself to program at age 11, and am a moderator of the + + programming language design community. +
++ My primary interests are programming language theory and music theory. +
+