[charactermanager] r355 committed - languages

0 views
Skip to first unread message

codesite...@google.com

unread,
Oct 9, 2009, 6:41:23 AM10/9/09
to characterman...@googlegroups.com
Revision: 355
Author: todd.chambery
Date: Fri Oct 9 03:40:47 2009
Log: languages
http://code.google.com/p/charactermanager/source/detail?r=355

Modified:
/trunk/charmgrjs/classes.js
/trunk/charmgrjs/common.js
/trunk/charmgrjs/edit.js
/trunk/charmgrjs/main.js
/trunk/charmgrjs/races.js
/trunk/charmgrjs/resources/felonious.grendel
/trunk/charmgrjs/spells.js

=======================================
--- /trunk/charmgrjs/classes.js Fri Sep 25 10:40:09 2009
+++ /trunk/charmgrjs/classes.js Fri Oct 9 03:40:47 2009
@@ -91,7 +91,8 @@
bonus_feats_levels: [3, 7, 11, 15, 19],
class_feats: {
1: [5, 6, 7, 58, 61]
- }
+ },
+ languages: [0, 3, 14]
}, {
id: 3,
name: "Druid",
@@ -108,7 +109,8 @@
bonus_feats_levels: [],
class_feats: {
1: [6, 7]
- }
+ },
+ languages: [16]
}, {
id: 4,
name: "Fighter",
@@ -226,7 +228,8 @@
spells_known: [[3, 1, '-', '-', '-', '-', '-', '-', '-', '-'], [4,
2, '-', '-', '-', '-', '-', '-', '-', '-'], [4, 2,
1, '-', '-', '-', '-', '-', '-', '-'], [4, 3,
2, '-', '-', '-', '-', '-', '-', '-'], [4, 3, 2,
1, '-', '-', '-', '-', '-', '-'], [4, 3, 3,
2, '-', '-', '-', '-', '-', '-'], [4, 4, 3, 2, 1, '-', '-', '-', '-', '-'],
[4, 4, 3, 3, 2, '-', '-', '-', '-', '-'], [4, 4, 4, 3, 2,
1, '-', '-', '-', '-'], [4, 4, 4, 3, 3, 2, '-', '-', '-', '-'], [4, 4, 4,
4, 3, 2, 1, '-', '-', '-'], [4, 4, 4, 4, 3, 3, 2, '-', '-', '-'], [4, 4, 4,
4, 4, 3, 2, 1, '-', '-'], [4, 4, 4, 4, 4, 3, 3, 2, '-', '-'], [4, 4, 4, 4,
4, 4, 3, 2, 1, '-'], [4, 4, 4, 4, 4, 4, 3, 3, 2, '-'], [4, 4, 4, 4, 4, 4,
4, 3, 2, 1], [4, 4, 4, 4, 4, 4, 4, 3, 3, 2], [4, 4, 4, 4, 4, 4, 4, 4, 3,
3], [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]],
skill_points_per_level: 2,
bonus_feats_levels: [4, 9, 14, 19],
- class_feats: {}
+ class_feats: {},
+ languages: [16]
}]);

rogue_special_abilities = [68, 69, 70, 71, 72, 73];
=======================================
--- /trunk/charmgrjs/common.js Mon Oct 5 09:19:03 2009
+++ /trunk/charmgrjs/common.js Fri Oct 9 03:40:47 2009
@@ -397,7 +397,7 @@
// armor
if (chardata.armor != null) {
char_armor = [];
- for (armor_idx in chardata.armor) {
+ for (var armor_idx in chardata.armor) {
char_armor.push(chardata.armor[armor_idx]);
}
chardata.armor = char_armor;
@@ -405,7 +405,7 @@
// weapons
if (chardata.weapons != null) {
char_weapons = [];
- for (weapon_idx in chardata.weapons) {
+ for (var weapon_idx in chardata.weapons) {
char_weapons.push(chardata.weapons[weapon_idx]);
}
chardata.weapons = char_weapons;
@@ -453,6 +453,15 @@
}
chardata.rogue_special_abilities = rogue_special_abilities;
}
+
+ // languages
+ if (chardata.languages != null) {
+ char_languages = [];
+ for (var lang_idx in chardata.languages) {
+ char_languages.push(chardata.languages[lang_idx]);
+ }
+ chardata.languages = char_languages;
+ }
}

function export_character() {
=======================================
--- /trunk/charmgrjs/edit.js Mon Oct 5 09:19:03 2009
+++ /trunk/charmgrjs/edit.js Fri Oct 9 03:40:47 2009
@@ -17,6 +17,10 @@
total_skill_points -= $(element).val();
});

+ // only subtract skill points after int mod languages are used up
+ var char_lang_count = (chardata.languages == null ? 0 :
chardata.languages.length);
+ total_skill_points -= Math.abs(Math.min(int_mod - char_lang_count, 0));
+
return total_skill_points;
}

@@ -40,7 +44,7 @@
}
ability_html += "</tr>\n<tr>";
for (id in abilities) {
- ability_html += "<td align='center'><input id='ability_" + abilities[id]
+ "' size='1' name='" + abilities[id]
+ ability_html += "<td align='center'><input id='ability_" + abilities[id]
+ "' style='width: 20px' name='" + abilities[id]
+ "score' value='' onblur='recalc_edit_page(chardata)'
type='text'></td>";
}
ability_html += "<td><b>XP</b><input id='xp' type='text' name='xp'
value='' size='5' onblur='recalc_edit_page(chardata)'/> &nbsp;<input
type='button' style='width: 35px' onclick='update_log(chardata)'
value='Log' /></td>";
@@ -76,16 +80,20 @@
// skills
var allskills = skills.get();
var skill_html = "<table border='0'><tr><td id='skill_pts_remaining'
colspan='2'>Skill pts remaining: 0</td></tr>";
+ // language
+ skill_html += "<tr onclick='show_languages()' bgcolor='#8DC3E9'><td
colspan=2><a class='fake_link' onclick='show_languages()'>Languages<span
id='languages_expand_flag' style='float: right'>+ </span></a></td></tr>";
+ skill_html += "<tr id='languages'><td colspan=2>" +
create_languages(chardata) + "</td></tr>";
for (skill in allskills) {
skill_html += "<tr><td><a id='skill_" + allskills[skill].id
+ "' class='fake_link' onclick='show_item_detail(skills, " +
allskills[skill].id + ")'>"
+ allskills[skill].name + "</a></td><td><input id='skill_" +
allskills[skill].id
- + "_input' size='1' value=''
onblur='recalc_edit_page(chardata)'></td></tr>";
+ + "_input' style='width: 20px' value=''
onblur='recalc_edit_page(chardata)'></td></tr>";
$('#skill_' +
allskills[skill].id).bind('blur', 'recalc_edit_page(chardata)');
}
skill_html += "</table>";
$('#skillspart').html(skill_html);
-
+ $('#languages').hide();
+
// weapons
build_data_part(chardata, "weapons", "weapon");

@@ -102,6 +110,26 @@
// create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
// }
}
+
+function show_languages(chardata) {
+ // TODO - refactor this with show_feats, show_specials
+ $('#languages').toggle();
+ var hidden = $('#languages').is(':hidden');
+ $('#languages_expand_flag').text(hidden ? '+ ' : '- ');
+}
+
+function create_languages(chardata) {
+ var clazz = classes.first({ id: chardata.class_id });
+ var race = races.first({ id: chardata.race_id });
+ var language_html = "<table width='100%'>";
+ for(var i=0; i<languages.length; i++) {
+ language_html += "<tr id='language_" + i + "'><td><input id='language_"
+ i + "_check' onclick='recalc_edit_page(chardata)' type='checkbox'/></td>";
+ language_html += "<td>" + languages[i] + "</td>";
+ }
+ language_html += "</table>";
+
+ return language_html;
+}

// Populates the form from char data. SHOULD ONLY BE CALLED ON load().
function populate_edit_page(chardata) {
@@ -140,24 +168,18 @@
$('#ability_' + abilities[id]).val(score);
// TODO - move to recalc_edit_page(chardata)?
}
-
-// for (var j in chardata.armor) {
-// var char_armor = armor.first( {
-// id : chardata.armor[j].armor_id
-// });
-// $("#armor_" + j + " option[id='armor_" + j + "_option_" +
char_armor.id + "']").attr("selected", true);
-// $("#armor_" + j + "Bon").val(
-// chardata.armor[j].armor_bonus == null ? char_armor.armor_bonus :
chardata.armor[j].armor_bonus);
-// $("#armor_" + j + "ACP").val(
-// chardata.armor[j].armor_check_penalty == null ?
char_armor.armor_check_penalty
-// : chardata.armor[j].armor_check_penalty);
-// $("#armor_" + j + "Note").val(chardata.armor[j].note == null ? '' :
chardata.armor[j].note);
-// }
-// if (chardata.armor != null && chardata.armor.length > 0) {
-// var name = 'armor_' + chardata.armor.length;
-// create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
-// }
-
+
+ for(var i=0; i<languages.length; i++) {
+ var is_race_language = (race.languages != null && (jQuery.inArray(i,
race.languages) > -1));
+ var is_class_language = (clazz.languages != null && (jQuery.inArray(i,
clazz.languages) > -1));
+ var checked = (chardata.languages != null && (jQuery.inArray(i,
chardata.languages) > -1)) || is_race_language || is_class_language;
+ $('#language_' + i + '_check').attr('checked', checked);
+ if(is_class_language || is_race_language) {
+ $('#language_' + i + '_check').attr('disabled', 'disabled');
+ $("tr[id='language_" + i + "']").addClass('disabled class_feat');
+ }
+ }
+
// TODO - move to recalc_edit_page(chardata)?
if (chardata.skills != null) {
var allskills = skills.get();
@@ -211,6 +233,21 @@
}
});

+ for(var i=0; i<languages.length; i++) {
+ var is_race_language = (race.languages != null && (jQuery.inArray(i,
race.languages) > -1));
+ var is_class_language = (clazz.languages != null && (jQuery.inArray(i,
clazz.languages) > -1));
+ var checked = $('#language_' + i + '_check').attr('checked');
+ var language_idx = chardata.languages != null ? jQuery.inArray(i,
chardata.languages) : -1;
+ if(checked && (language_idx == -1) && !is_race_language
&& !is_class_language) {
+ if(chardata.languages == null) {
+ chardata.languages = [];
+ }
+ chardata.languages.push(i);
+ } else if(!checked && (language_idx > -1)){
+ chardata.languages.splice(language_idx, 1);
+ }
+ }
+
$("input[id^='skill']").each(function(i, element) {
var skill = skills.first( {
id : i
=======================================
--- /trunk/charmgrjs/main.js Sun Oct 4 19:32:37 2009
+++ /trunk/charmgrjs/main.js Fri Oct 9 03:40:47 2009
@@ -137,7 +137,7 @@
}
}
if (conditional_feats.length > 0) {
- feats_html += "<table style='border: 1px solid #D0D0D0' width='100%'
border='0' margin='0'><tbody><tr><td colspan='3' bgcolor='#8DC3E9'
onclick='show_feats()'><a class='fake_link'
onclick='show_feats()'>Feats</a><span id='feat_expand_flag'
style='text-align: right; font-family: monospace'
class='box'>+</span></td></tr></tbody><tbody id='conditional_feats'>";
+ feats_html += "<table style='border: 1px solid #D0D0D0' width='100%'
border='0' margin='0'><tbody><tr><td colspan='3' bgcolor='#8DC3E9'
onclick='show_feats()'><a class='fake_link'
onclick='show_feats()'>Feats</a><span id='feat_expand_flag' style='float:
right; font-family: monospace; font-size: larger'>+
</span></td></tr></tbody><tbody id='conditional_feats'>";
for ( var i in conditional_feats) {
var checkbox = (conditional_feats[i].op != null ?
"<input id='feat_" + conditional_feats[i].id + "_conditional'
type='checkbox' onclick=\"" + conditional_feats[i].op + "\"/>" :
@@ -155,7 +155,7 @@
var class_specials = get_special_abilities(chardata);
var special_html = "";
if (count_attrs(class_specials) > 0) {
- special_html += "<table style='border: 1px solid #D0D0D0' width='100%'
border='0' margin='0'><tbody><tr><td colspan='2' bgcolor='#8DC3E9'
onclick='show_specials()'><a class='fake_link'
onclick='show_specials()'>Special Abilities</a><span
id='specials_expand_flag' class='box'>+</span></td></tr></tbody><tbody
id='specials'>";
+ special_html += "<table style='border: 1px solid #D0D0D0' width='100%'
border='0' margin='0'><tbody><tr><td colspan='2' bgcolor='#8DC3E9'
onclick='show_specials()'><a class='fake_link'
onclick='show_specials()'>Special Abilities</a><span
id='specials_expand_flag' style='float: right; font-family: monospace;
font-size: larger'>+</span></td></tr></tbody><tbody id='specials'>";
for (var i in class_specials) {
if(class_specials[i] != null) {
var checkbox = (class_specials[i].op != null ?
@@ -548,14 +548,14 @@
function show_feats() {
$('#conditional_feats').toggle();
var hidden = $('#conditional_feats').is(':hidden');
- $('#feat_expand_flag').text(hidden ? '+' : '-');
+ $('#feat_expand_flag').text(hidden ? '+ ' : '- ');
}

//TODO - refactor this
function show_specials() {
$('#specials').toggle();
var hidden = $('#specials').is(':hidden');
- $('#specials_expand_flag').text(hidden ? '+' : '-');
+ $('#specials_expand_flag').text(hidden ? '+ ' : '- ');
}

function calc_critical(weapon_critical, char_weapon, char_feats) {
=======================================
--- /trunk/charmgrjs/races.js Sun Oct 4 19:32:37 2009
+++ /trunk/charmgrjs/races.js Fri Oct 9 03:40:47 2009
@@ -5,7 +5,8 @@
abilities: {},
skills: {},
size: "medium",
- favored_class: -1
+ favored_class: -1,
+ languages: [4]
}, {
id: 1,
name: "Dwarf",
@@ -17,7 +18,8 @@
skills: {},
favored_class: 4,
size: "medium",
- spell_resistance: 2
+ spell_resistance: 2,
+ languages: [7]
}, {
id: 2,
name: "Elf",
@@ -28,7 +30,8 @@
},
skills: { 28 : 2 },
size: "medium",
- favored_class: 10
+ favored_class: 10,
+ languages: [8]
}, {
id: 3,
name: "Gnome",
@@ -39,7 +42,8 @@
},
skills: { 28 : 2 },
size: "small",
- favored_class: 1
+ favored_class: 1,
+ languages: [10]
}, {
id: 4,
name: "Half-Elf",
@@ -48,7 +52,8 @@
skills: { 7 : 2,
28: 1 },
size: "medium",
- favored_class: -1
+ favored_class: -1,
+ languages: [4, 8]
}, {
id: 5,
name: "Half-Orc",
@@ -60,7 +65,8 @@
},
skills: {},
size: "medium",
- favored_class: 0
+ favored_class: 0,
+ languages: [4, 15]
}, {
id: 6,
name: "Halfling",
@@ -69,7 +75,8 @@
'Dex': 2,
'Str': -2
},
- skills: { 28 : 2 },
+ skills: { 28 : 2 },
size: "small",
- favored_class: 8
+ favored_class: 8,
+ languages: [4, 5]
}]);
=======================================
--- /trunk/charmgrjs/resources/felonious.grendel Sun Oct 4 15:06:05 2009
+++ /trunk/charmgrjs/resources/felonious.grendel Fri Oct 9 03:40:47 2009
@@ -1,1 +1,1 @@
-{"name":"Felonious","xp":"26040","hp":"42","race_id":"4","class_id":"7","alignment_id":"0","goodness_id":"0","deity_id":"0","domain_id":"0","weapon_style":"archery","abilities":{"0":"16","1":"21","2":"10","3":"13","4":"12","5":"13"},"weapons":{"0":{"weapon_id":"34","name":"Mithrandir's","damage":"1d8","critical":"x3","note":"+2
vs
Giant/Goblin kin,
light/dark/fire","attack":"+2"},"1":{"weapon_id":"48"}},"armor":{"0":{"armor_id":"1"}},"feats":[{"feat_id":35},{"feat_id":49},{"feat_id":51},{"feat_id":74}]}
+{"name":"Felonious","xp":"28340","hp":"46","race_id":"4","class_id":"7","alignment_id":"0","goodness_id":"0","deity_id":"0","domain_id":"0","weapon_style":"archery","abilities":{"0":"16","1":"22","2":"10","3":"13","4":"12","5":"13"},"weapons":{"0":{"weapon_id":"34","name":"Mithrandir's","damage":"1d8","critical":"x3","note":"+3
vs
Giant/Goblin kin,
light/dark/fire","attack":"+2","dam":"1d8","crit":"x3"},"1":{"weapon_id":"48"}},"armor":{"0":{"armor_id":"1"}},"feats":[{"feat_id":35},{"feat_id":49},{"feat_id":51},{"feat_id":74}],"xp_log":{"0":{"xp":"27340","hp":"42","date":"Thu
Oct 08 2009","note":"outpost and journey to
Rockholm"}},"languages":{"0":7},"skills":[{"skill_id":0,"ranks":"2"},{"skill_id":3,"ranks":"2"},{"skill_id":4,"ranks":"7"},{"skill_id":10,"ranks":"4"},{"skill_id":13,"ranks":"2"},{"skill_id":15,"ranks":"7"},{"skill_id":17,"ranks":"5"},{"skill_id":21,"ranks":"1"},{"skill_id":24,"ranks":"1"},{"skill_id":28,"ranks":"6"},{"skill_id":29,"ranks":"4"},{"skill_id":34,"ranks":"2"},{"skill_id":35,"ranks":"3"},{"skill_id":39,"ranks":"7"},{"skill_id":42,"ranks":"5"},{"skill_id":44,"ranks":"1"},{"skill_id":1,"ranks":"2"},{"skill_id":33,"ranks":"2"},{"skill_id":43,"ranks":"2"}]}
=======================================
--- /trunk/charmgrjs/spells.js Wed Oct 7 19:39:47 2009
+++ /trunk/charmgrjs/spells.js Fri Oct 9 03:40:47 2009
@@ -6662,7 +6662,7 @@
save: "-",
sr: "Yes",
phb: 272,
- detail: ""
+ detail: "This spell functions like <i>raise dead</i>, except that you
are able to restore life and complete strength to any deceased creature.
The condition of the remains is not a factor. So long as some small portion
of the creature’s body still exists, it can be resurrected, but the portion
receiving the spell must have been part of the creature’s body at the time
of death. (The remains of a creature hit by a <i>disintegrate</i> spell
count as a small portion of its body.) The creature can have been dead no
longer than 10 years per caster level. <p class=sub>Upon completion of the
spell, the creature is immediately restored to full hit points, vigor, and
health, with no loss of prepared spells. However, the subject loses one
level, or 2 points of Constitution if the subject was 1st level. (If this
reduction would bring its Con to 0 or lower, it can’t be resurrected). This
level loss or Constitution loss cannot be repaired by any means. <p
class=sub>You can resurrect someone killed by a death effect or someone who
has been turned into an undead creature and then destroyed. You cannot
resurrect someone who has died of old age. Constructs, elementals,
outsiders, and undead creatures can’t be resurrected.<p
class=sub><i>Material Component</i>: A sprinkle of holy water and diamonds
worth a total of at least 10,000 gp."
}, {
id: 442,
name: "Reverse Gravity",
@@ -6677,7 +6677,7 @@
save: "-",
sr: "-",
phb: 273,
- detail: ""
+ detail: "This spell reverses gravity in an area, causing all
unattached objects and creatures within that area to fall upward and reach
the top of the area in 1 round. If some solid object (such as a ceiling) is
encountered in this fall, falling objects and creatures strike it in the
same manner as they would during a normal downward fall. If an object or
creature reaches the top of the area without striking anything, it remains
there, oscillating slightly, until the spell ends. At the end of the spell
duration, affected objects and creatures fall downward. <p
class=sub>Provided it has something to hold onto, a creature caught in the
area can attempt a Reflex save to secure itself when the spell strikes.
Creatures who can fly or levitate can keep themselves from falling. <p
class=sub><i>Arcane Material Component</i>: A lodestone and iron filings."
}, {
id: 443,
name: "Righteous Might",
@@ -6692,7 +6692,7 @@
save: "-",
sr: "-",
phb: 273,
- detail: ""
+ detail: "Your height immediately doubles, and your weight increases by
a factor of eight. This increase changes your size category to the next
larger one, and you gain a +8 size bonus to Strength and a +4 size bonus to
Constitution. You gain a +4 enhancement bonus to your natural armor. You
gain damage reduction 5/evil (if you normally channel positive energy) or
damage reduction 5/good (if you normally channel negative energy). At 12th
level this damage reduction becomes 10/evil or 10/good, and at 15th level
it becomes 15/evil or 15/good (the maximum). Your size modifier for AC and
attacks changes as appropriate to your new size category (if your original
size was Diminutive, Tiny, Small, Medium, or Large, the modifier decreases
by 1; otherwise see Size Modifier, page 134). <p class=sub><i>Use Table
8-4</i>: Creature Size and Scale to determine your new space and reach.
This spell doesn’t change your speed. <p class=sub>If insufficient room is
available for the desired growth, you attain the maximum possible size and
may make a Strength check (using your increased Strength) to burst any
enclosures in the process. If you fail, you are constrained without harm by
the materials enclosing you—the spell cannot crush you by increasing your
size. <p class=sub>All equipment you wear or carry is similarly enlarged by
the spell. Melee and projectile weapons deal more damage (see Table 2-2 in
the <i>Dungeon Master’s Guide</i>). Other magical properties are not
affected by this spell. Any enlarged item that leaves your possession
(including a projectile or thrown weapon) instantly returns to its normal
size. This means that thrown weapons deal their normal damage (projectiles
deal damage based on the size of the weapon that fired them). <p
class=sub>Multiple magical effects that increase size do not stack, which
means (among other things) that you can’t use a second casting of this
spell to further increase your size while you are still under the effect of
the first casting."
}, {
id: 444,
name: "Rope Trick",
@@ -6707,7 +6707,7 @@
save: "-",
sr: "-",
phb: 273,
- detail: ""
+ detail: "When this spell is cast upon a piece of rope from 5 to 30
feet long, one end of the rope rises into the air until the whole rope
hangs perpendicular to the ground, as if affixed at the upper end. The
upper end is, in fact, fastened to an extradimensional space that is
outside the multiverse of extradimensional spaces (“planes”). Crea-tures in
the extradimensional space are hidden, beyond the reach of spells
(including divinations), unless those spells work across planes. The space
holds as many as eight creatures (of any size). Creatures in the space can
pull the rope up into the space, making the rope “disappear.” In that case,
the rope counts as one of the eight creatures that can fit in the space.
The rope can support up to 16,000 pounds. A weight greater than that can
pull the rope free. <p class=sub>Spells cannot be cast across the
extra-dimensional interface, nor can area effects cross it. Those in the
extradimensional space can see out of it as if a 3-foot-by- 5-foot window
were centered on the rope. The window is present on the Material Plane, but
it’s invisible, and even creatures that can see the window can’t see
through it. Anything inside the extradimensional space drops out when the
spell ends. The rope can be climbed by only one person at a time. The
<i>rope trick</i> spell enables climbers to reach a normal place if they do
not climb all the way to the extradimensional space. <p
class=sub><i>Note</i>: It is hazardous to create an extradimensional space
within an existing extradimensional space or to take an extradimensional
space into an existing one. <p class=sub><i>Material Component</i>:
Powdered corn extract and a twisted loop of parchment."
}, {
id: 445,
name: "Rusting Grasp",
@@ -6722,7 +6722,7 @@
save: "-",
sr: "-",
phb: 273,
- detail: ""
+ detail: "Any iron or iron alloy item you touch becomes instantaneously
rusted, pitted, and worthless, effectively destroyed. If the item is so
large that it cannot fit within a 3-foot radius (a large iron door or a
wall of iron), a 3-foot-radius volume of the metal is rusted and destroyed.
Magic items made of metal are immune to this spell. <p class=sub>You may
employ rusting grasp in combat with a successful melee touch attack.
Rusting grasp used in this way instanta-neously destroys 1d6 points of
Armor Class gained from metal armor (to the maximum amount of protection
the armor offered) through corrosion. For example, full plate armor (AC +8)
could be reduced to +7 or as low as +2 in protection, depending on the die
roll. <p class=sub>Weapons in use by an opponent targeted by the spell are
more difficult to grasp. You must succeed on a melee touch attack against
the weapon. A metal weapon that is hit is destroyed. <p
class=sub><i>Note</i>: Striking at an opponent’s weapon provokes an attack
of opportunity. Also, you must touch the weapon and not the other way
around. <p class=sub>Against a ferrous creature, <i>rusting grasp</i>
instantaneously deals 3d6 points of damage +1 per caster level (maximum
+15) per successful attack. The spell lasts for 1 round per level, and you
can make one melee touch attack per round."
}, {
id: 446,
name: "Sanctuary",
@@ -6737,7 +6737,7 @@
save: "Will negs",
sr: "-",
phb: 274,
- detail: ""
+ detail: "Any opponent attempting to strike or otherwise directly
attack the warded creature, even with a targeted spell, must attempt a Will
save. If the save succeeds, the opponent can attack normally and is
unaffected by that casting of the spell. If the save fails, the opponent
can’t follow through with the attack, that part of its action is lost, and
it can’t directly attack the warded creature for the duration of the spell.
Those not attempting to attack the subject remain unaffected. This spell
does not prevent the warded creature from being attacked or affected by
area or effect spells. The subject cannot attack without breaking the spell
but may use nonattack spells or otherwise act. This allows a warded cleric
to heal wounds, for example, or to cast a <i>bless</i> spell, perform an
<i>augury</i>, summon creatures, and so on."
}, {
id: 447,
name: "Scare",
@@ -6752,7 +6752,7 @@
save: "Will part",
sr: "Yes",
phb: 274,
- detail: ""
+ detail: "This spell functions like <i>cause fear</i>, except that it
causes all targeted creatures of less than 6 HD to become frightened. <p
class=sub><i>Material Component</i>: A bit of bone from an undead skeleton,
zombie, ghoul, ghast, or mummy."
}, {
id: 448,
name: "Scintillating Pattern",
@@ -6767,7 +6767,7 @@
save: "-",
sr: "Yes",
phb: 274,
- detail: ""
+ detail: "A twisting pattern of discordant, coruscating colors weaves
through the air, affecting creatures within it. The spell affects a total
number of Hit Dice of creatures equal to your caster level (maximum 20).
Creatures with the fewest HD are affected first; and, among creatures with
equal HD, those who are closest to the spell’s point of origin are affected
first. Hit Dice that are not sufficient to affect a creature are wasted.
The spell affects each subject according to its Hit Dice. <p class=sub><i>6
or less</i>: Unconscious for 1d4 rounds, then stunned for 1d4 rounds, and
then confused for 1d4 rounds. (Treat an uncon-scious result as stunned for
nonliving creatures.) <p class=sub><i>7 to 12</i>: Stunned for 1d4 rounds,
then confused for 1d4 rounds. <p class=sub><i>13 or more</i>: Confused for
1d4 rounds. <p class=sub>Sightless creatures are not affected by
scintillating pattern. <p class=sub><i>Material Component</i>: A small
crystal prism."
}, {
id: 449,
name: "Scorching Ray",
@@ -6782,7 +6782,7 @@
save: "-",
sr: "Yes",
phb: 274,
- detail: ""
+ detail: "You blast your enemies with fiery rays. You may fire one ray,
plus one additional ray for every four levels beyond 3rd (to a maximum of
three rays at 11th level). Each ray requires a ranged touch attack to hit
and deals 4d6 points of fire damage. The rays may be fired at the same or
different targets, but all bolts must be aimed at targets within 30 feet of
each other and fired simultaneously."
}, {
id: 450,
name: "Screen",
@@ -6797,7 +6797,7 @@
save: "Will dsblf",
sr: "-",
phb: 274,
- detail: ""
+ detail: "This spell combines several elements to create a powerful
protection from scrying and direct observation. When casting the spell, you
dictate what will and will not be observed in the spell’s area. The
illusion created must be stated in general terms. Thus, you could specify
the illusion of yourself and another character playing chess for the
duration of the spell, but you could not have the illusory chess players
take a break, make dinner, and then resume their game. You could have a
crossroads appear quiet and empty even while an army is actually passing
through the area. You could specify that no one be seen (including passing
strangers), that your troops be undetected, or even that every fifth person
or unit should be visible. Once the conditions are set, they cannot be
changed. <p class=sub>Attempts to scry the area automatically detect the
image stated by you with no save allowed. Sight and sound are appropriate
to the illusion created. A band of people standing in a meadow could be
concealed as an empty meadow with birds chirping, for instance. <p
class=sub>Direct observation may allow a save (as per a normal illusion),
if there is cause to disbelieve what is seen. Certainly onlookers in the
area would become suspicious if a marching army disappeared at one point to
reappear at another. Even entering the area does not cancel the illusion or
necessarily allow a save, assuming that hidden beings take care to stay out
of the way of those affected by the illusion."
}, {
id: 451,
name: "Scrying",
@@ -6812,7 +6812,7 @@
save: "Will negs",
sr: "Yes",
phb: 274,
- detail: ""
+ detail: "You can see and hear some creature, which may be at any
distance. If the subject succeeds on a Will save, the scrying attempt
simply fails. The difficulty of the save depends on how well you know the
subject and what sort of physical connection (if any) you have to that
creature. Furthermore, if the subject is on another plane, it gets a +5
bonus on its Will save. <table><tr class=header><td>Knowledge</td><td>Will
Save Modifier</td></tr> <tr><td>None<sup>1</sup></td><td>+10</td></tr>
<tr><td>Secondhand (you have heard of the subject)</td><td>+5</td></tr>
<tr><td>Firsthand (you have met the subject)</td><td>+0</td></tr>
<tr><td>Familiar (you know the subject well)</td><td>-5</td></tr>
</table><p class=sub><p><sup>1</sup> You must have some sort of connection
to a creature you have no knowledge of. <table> <tr
class=header><td>Connection</td><td>Will Save Modifier</td></tr>
<tr><td>Likeness or picture</td><td>-2</td></tr> <tr><td>Possession or
garment</td><td>-4</td></tr> <tr><td>Body part, lock of hair, bit of nail,
etc.</td><td>-10</td></tr> </table> <p class=sub>If the save fails, you can
see and hear the subject and the subject’s immediate surroundings
(approximately 10 feet in all directions of the subject). If the
subjectmoves, the sensor follows at a speed of up to 150 feet. <p
class=sub><i>As with all divination (scrying) spells, the sensor has your
full visual acuity, including any magical effects. In addition, the
following spells have a 5% chance per caster level of operating through the
sensor</i>: <i>detect chaos, detect evil, detect good, detect law, detect
magic,</i> and <i>message</i>. <p class=sub>If the save succeeds, you can’t
attempt to scry on that subject again for at least 24 hours. <p
class=sub><i>Arcane Material Component</i>: The eye of a hawk, an eagle, or
a roc, plus nitric acid, copper, and zinc. <p class=sub><i>Wizard,
Sorcerer, or Bard Focus</i>: A mirror of finely wrought and highly polished
silver costing not less than 1,000 gp. The mirror must be at least 2 feet
by 4 feet. <p class=sub><i>Cleric Focus</i>: A holy water font costing not
less than 100 gp. <p class=sub><i>Druid Focus</i>: A natural pool of water."
}, {
id: 452,
name: "Scrying, Greater",
@@ -6827,7 +6827,7 @@
save: "Will negs",
sr: "Yes",
phb: 275,
- detail: ""
+ detail: "This spell functions like <i>scrying</i>, except as noted
above. Additionally, all of the following spells function reliably through
the sensor: <i>detect chaos, detect evil, detect good, detect law, detect
magic, message, read magic,</i> and <i>tongues</i>."
}, {
id: 453,
name: "Sculpt Sound",
@@ -6842,7 +6842,7 @@
save: "Will negs",
sr: "Yes",
phb: 275,
- detail: ""
+ detail: "You change the sounds that creatures or objects make. You can
create sounds where none exist (such as making trees sing), deaden sounds
(such as making a party of adventurers silent), or transform sounds into
other sounds (such as making a caster’s voice sound like a pig snorting).
All affected creatures or objects must be transmuted in the same way. Once
the transmutation is made, you cannot change it. <p class=sub>You can
change the qualities of sounds but cannot create words with which you are
unfamiliar yourself. For instance, you can’t change your voice so that it
sounds as though you are giving the command word to activate a magic item
unless you know that command word. <p class=sub>A spellcaster whose voice
is changed dramatically (such as into that of the aforementioned snorting
pig) is unable to cast spells with verbal components."
}, {
id: 454,
name: "Searing Light",
@@ -6857,7 +6857,7 @@
save: "-",
sr: "Yes",
phb: 275,
- detail: ""
+ detail: "Focusing divine power like a ray of the sun, you project a
blast of light from your open palm. You must succeed on a ranged touch
attack to strike your target. A creature struck by this ray of light takes
1d8 points of damage per two caster levels (maximum 5d8). An undead
creature takes 1d6 points of damage per caster level (maximum 10d6), and an
undead creature particularly vulnerable to bright light, such as a vampire,
takes 1d8 points of damage per caster level (maximum 10d8). A construct or
inanimate object takes only 1d6 points of damage per two caster levels
(maximum 5d6)."
}, {
id: 455,
name: "Secret Page",
Reply all
Reply to author
Forward
0 new messages