From 0f140d3d8669c6c2bc24b5c6e73c5665ecb8d186 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Tue, 16 Dec 2014 00:39:24 -0500 Subject: [PATCH] The names of spells and alchemy were duplicated in several places, all slightly different; this unifies them all in one place --- osx/boe.infodlg.cpp | 7 ++-- osx/boe.menus.mac.mm | 12 +++--- osx/boe.party.cpp | 72 +++++++--------------------------- osx/pcedit/pc.editors.cpp | 20 +++++----- rsrc/strings/mage-spells.txt | 64 +----------------------------- rsrc/strings/magic-names.txt | 28 ++++++------- rsrc/strings/priest-spells.txt | 66 +------------------------------ 7 files changed, 51 insertions(+), 218 deletions(-) diff --git a/osx/boe.infodlg.cpp b/osx/boe.infodlg.cpp index cbbca943..343dfdda 100644 --- a/osx/boe.infodlg.cpp +++ b/osx/boe.infodlg.cpp @@ -69,15 +69,16 @@ unsigned short cur_entry; static void put_spell_info(cDialog& me, eSkill display_mode) { std::ostringstream store_text; - short pos,ran; + short pos,ran,spell_num; std::string res; pos = display_mode == eSkill::MAGE_SPELLS ? mage_spell_pos : priest_spell_pos; res = display_mode == eSkill::MAGE_SPELLS ? "mage-spells" : "priest-spells"; + spell_num = display_mode == eSkill::MAGE_SPELLS ? (pos + 1) : (pos + 101); eSpell spell = cSpell::fromNum(display_mode, pos); ran = (*spell).range; - me["name"].setText(get_str(res, pos * 2 + 1)); + me["name"].setText(get_str("magic-names", spell_num)); if((*spell).cost >= 0) store_text << (*spell).level << "/" << (*spell).cost; @@ -89,7 +90,7 @@ static void put_spell_info(cDialog& me, eSkill display_mode) { } else me["range"].setTextToNum(ran); - me["desc"].setText(get_str(res, pos * 2 + 2)); + me["desc"].setText(get_str(res, pos + 1)); me["when"].setText(get_str("spell-times", (*spell).when_cast)); } diff --git a/osx/boe.menus.mac.mm b/osx/boe.menus.mac.mm index 53ade652..cdc8bc59 100644 --- a/osx/boe.menus.mac.mm +++ b/osx/boe.menus.mac.mm @@ -19,8 +19,6 @@ extern short on_spell_menu[2][62]; extern short on_monst_menu[256]; -extern const char* mage_s_name[62]; -extern const char* priest_s_name[62]; extern bool party_in_memory; extern short current_pc; extern cUniverse univ; @@ -199,9 +197,10 @@ void adjust_spell_menus() { for(i = 0; i < 62; i++) if(on_spell_menu[0][i] >= 0) { eSpell spell = cSpell::fromNum(eSkill::MAGE_SPELLS, on_spell_menu[0][i]); + std::string name = get_str("magic-names", i + 1); if((*spell).cost >= 0) - sprintf(spell_name," L%d - %s, C %d",(*spell).level, mage_s_name[on_spell_menu[0][i]], (*spell).cost); - else sprintf(spell_name," L%d - %s, C ?",(*spell).level, mage_s_name[on_spell_menu[0][i]]); + sprintf(spell_name," L%d - %s, C %d",(*spell).level, name.c_str(), (*spell).cost); + else sprintf(spell_name," L%d - %s, C ?",(*spell).level, name.c_str()); NSString* str = [NSString stringWithUTF8String: spell_name]; NSMenuItem* newItem = [spell_menu addItemWithTitle: str action: @selector(spellMenu:) keyEquivalent: @""]; [newItem setTarget: targ]; @@ -232,9 +231,10 @@ void adjust_spell_menus() { for(i = 0; i < 62; i++) if(on_spell_menu[1][i] >= 0) { eSpell spell = cSpell::fromNum(eSkill::MAGE_SPELLS, on_spell_menu[1][i]); + std::string name = get_str("magic-names", i + 101); if((*spell).cost >= 0) - sprintf(spell_name," L%d - %s, C %d",(*spell).level, priest_s_name[on_spell_menu[1][i]], (*spell).cost); - else sprintf(spell_name," L%d - %s, C ?",(*spell).level, priest_s_name[on_spell_menu[1][i]]); + sprintf(spell_name," L%d - %s, C %d",(*spell).level, name.c_str(), (*spell).cost); + else sprintf(spell_name," L%d - %s, C ?",(*spell).level, name.c_str()); NSString* str = [NSString stringWithUTF8String: spell_name]; NSMenuItem* newItem = [spell_menu addItemWithTitle: str action: @selector(spellMenu:) keyEquivalent: @""]; [newItem setTarget: targ]; diff --git a/osx/boe.party.cpp b/osx/boe.party.cpp index ed97b128..c2703bc9 100644 --- a/osx/boe.party.cpp +++ b/osx/boe.party.cpp @@ -41,46 +41,6 @@ extern short skill_bonus[21]; // TODO: Use magic-names.txt instead of these arrays -const char *mage_s_name[62] = { - "Light","Spark","Minor Haste","Strength","Scare", - "Flame Cloud","Identify","Scry Monster","Goo","True Sight", - "Minor Poison","Flame","Slow","Dumbfound","Envenom", - "Stinking Cloud","Summon Beast","Conflagration","Dispel Field","Sleep Cloud", - "Unlock","Haste","Fireball","Long Light","Fear", - "Wall of Force","Weak Summoning","Flame Arrows","Web","Resist Magic", - "Poison","Ice Bolt","Slow Group","Magic Map", - "Capture Soul","Simulacrum","Venom Arrows","Wall of Ice", - "Stealth","Major Haste","Fire Storm","D. Barrier", - "Fire Barrier","Summoning","Shockstorm","Spray Fields", - "Major Poison","Group Fear","Kill","Paralysis", - "Daemon","Antimagic Cloud","MindDuel","Flight", - "Shockwave","M. Blessing","Mass Paralysis","Protection", - "Major Summon","Force Barrier","Quickfire","Death Arrows"}; -const char *priest_s_name[62] = { - "Minor Bless","Minor Heal","Weaken Poison","Turn Undead","Location", - "Sanctuary","Symbiosis","Minor Manna","Ritual - Sanctify","Stumble", - "Bless","Cure Poison","Curse","Light","Wound", - "Summon Spirit","Move Mountains","Charm Foe","Disease","Awaken", - "Heal","Light Heal All","Holy Scourge","Detect Life","Cure Paralysis", - "Manna","Forcefield","Cure Disease","Restore Mind","Smite", - "Cure Party","Curse All","Dispel Undead","Remove Curse", - "Sticks to Snakes","Martyr's Shield","Cleanse","Firewalk", - "Bless Party","Major Heal","Raise Dead","Flamestrike", - "Mass Sanctuary","Summon Host","Shatter","Dispel Fields", - "Heal All","Revive","Hyperactivity","Destone", - "Guardian","Mass Charm","Protective Circle","Pestilence", - "Revive All","Ravage Spirit","Resurrect","Divine Thud", - "Avatar","Wall of Blades","Word of Recall","Major Cleansing"}; -extern const char* alch_names[20]; -const char *alch_names_short[20] = { - "Weak Curing Potion","Weak Healing Potion","Weak Poison", - "Weak Speed Potion","Medium Poison", - "Medium Heal Potion","Strong Curing","Medium Speed Potion", - "Graymold Salve","Weak Energy Potion", - "Potion of Clarity","Strong Poison","Strong Heal Potion","Killer Poison", - "Resurrection Bal","Medium Energy Ptn.","Knowledge Brew" , - "Strong Strength","Bliss","Strong Power" -}; bool get_mage[30] = {1,1,1,1,1,1,0,1,1,0, 1,1,1,1,1,1,0,0,1,1, 1,1,1,1,1,0,0,0,1,1}; bool get_priest[30] = {1,1,1,1,1,1,0,0,0,1, 1,1,1,1,1,0,0,0,1,1, 1,0,1,1,0,0,0,1,0,0}; short combat_percent[20] = { @@ -2186,10 +2146,10 @@ static void put_spell_list(cDialog& me, const eSkill store_situation) { me["col4"].setText("Level 4:"); for(i = 0; i < 38; i++) { std::string id = "spell" + boost::lexical_cast(i + 1); - auto& names = (store_situation == eSkill::MAGE_SPELLS ? mage_s_name : priest_s_name); + std::string name = get_str("magic-names", i + (store_situation == eSkill::MAGE_SPELLS ? 1 : 101)); if((*cSpell::fromNum(store_situation,i)).cost < 0) { // Simulacrum, which has a variable cost - sprintf((char *) add_text,"%s (?)", names[i]); - } else sprintf((char *) add_text,"%s (%d)", names[i], (*cSpell::fromNum(store_situation,i)).cost); + sprintf((char *) add_text,"%s (?)", name.c_str()); + } else sprintf((char *) add_text,"%s (%d)", name.c_str(), (*cSpell::fromNum(store_situation,i)).cost); //for(j = 0; j < 30; i++) // if(add_text[j] == '&') // add_text[j] = (char) ((97 + i > 122) ? 65 + (i - 26) : 97 + i); @@ -2205,9 +2165,9 @@ static void put_spell_list(cDialog& me, const eSkill store_situation) { me["col4"].setText(""); for(i = 0; i < 38; i++) { std::string id = "spell" + boost::lexical_cast(i + 1); - auto& names = (store_situation == eSkill::MAGE_SPELLS ? mage_s_name : priest_s_name); + std::string name = get_str("magic-names", spell_index[i] + (store_situation == eSkill::MAGE_SPELLS ? 1 : 101)); if(spell_index[i] < 90) { - sprintf(add_text, "%s (%d)", names[spell_index[i]], (*cSpell::fromNum(store_situation,i)).cost); + sprintf(add_text, "%s (%d)", name.c_str(), (*cSpell::fromNum(store_situation,i)).cost); me[id].setText(add_text); } else me[id].hide(); @@ -2485,8 +2445,8 @@ eSpell pick_spell(short pc_num,eSkill type) { // 70 - no spell OW spell num //short which; // 0 - mage 1 - priest void print_spell_cast(eSpell spell,eSkill which) { short spell_num = (which == eSkill::PRIEST_SPELLS ? int(spell) - 100 : int(spell)); - sprintf ((char *) c_line, "Spell: %s ", - (which == eSkill::MAGE_SPELLS) ? (char *) mage_s_name[spell_num] : (char *) priest_s_name[spell_num]); + std::string name = get_str("magic-names", spell_num + (which == eSkill::MAGE_SPELLS ? 1 : 101)); + sprintf ((char *) c_line, "Spell: %s ", name.c_str()); add_string_to_buf((char *) c_line); } @@ -2520,6 +2480,8 @@ void start_town_targeting(eSpell s_num,short who_c,bool freebie) { spell_freebie = freebie; } +extern short alch_difficulty[20]; + void do_alchemy() { static const eItemAbil ingred1_needed[20] = { eItemAbil::HOLLY,eItemAbil::COMFREY,eItemAbil::HOLLY,eItemAbil::COMFREY,eItemAbil::WORMGRASS, @@ -2533,12 +2495,6 @@ void do_alchemy() { eItemAbil::HOLLY,eItemAbil::NONE,eItemAbil::COMFREY,eItemAbil::NONE,eItemAbil::NONE, eItemAbil::ASPTONGUE,eItemAbil::EMBERF,eItemAbil::EMBERF,eItemAbil::ASPTONGUE,eItemAbil::EMBERF, }; - static const short difficulty[20] = { - 1,1,1,3,3, - 4,5,5,7,9, - 9,10,12,12,9, - 14,19,10,16,20 - }; static const short fail_chance[20] = { 50,40,30,20,10, 8,6,4,2,0, @@ -2591,7 +2547,7 @@ void do_alchemy() { remove_charge(pc_num,which_item2); r1 = get_ran(1,1,100); - if(r1 < fail_chance[univ.party[pc_num].skills[eSkill::ALCHEMY] - difficulty[which_p]]) { + if(r1 < fail_chance[univ.party[pc_num].skills[eSkill::ALCHEMY] - alch_difficulty[which_p]]) { add_string_to_buf("Alchemy: Failed. "); r1 = get_ran(1,0,1); play_sound(41 ); @@ -2602,10 +2558,10 @@ void do_alchemy() { store_i.ability = (eItemAbil) potion_abils[which_p]; if(which_p == 8) store_i.magic_use_type = 2; - store_i.full_name = alch_names_short[which_p]; - if(univ.party[pc_num].skills[eSkill::ALCHEMY] - difficulty[which_p] >= 5) + store_i.full_name = get_str("magic-names", which_p + 200); + if(univ.party[pc_num].skills[eSkill::ALCHEMY] - alch_difficulty[which_p] >= 5) store_i.charges++; - if(univ.party[pc_num].skills[eSkill::ALCHEMY] - difficulty[which_p] >= 11) + if(univ.party[pc_num].skills[eSkill::ALCHEMY] - alch_difficulty[which_p] >= 11) store_i.charges++; if(store_i.variety == eItemType::POTION) store_i.graphic_num += get_ran(1,0,2); @@ -2649,7 +2605,7 @@ short alch_choice(short pc_num) { chooseAlchemy.attachClickHandlers(alch_choice_event_filter, {"cancel", "help"}); for(i = 0; i < 20; i++) { std::string n = boost::lexical_cast(i + 1); - chooseAlchemy["label" + n].setText(alch_names[i]); + chooseAlchemy["label" + n].setText(get_str("magic-names", i + 200)); chooseAlchemy["potion" + n].attachClickHandler(alch_choice_event_filter); if(univ.party[pc_num].skills[eSkill::ALCHEMY] < difficulty[i] || univ.party.alchemy[i] == 0) chooseAlchemy["potion" + n].hide(); diff --git a/osx/pcedit/pc.editors.cpp b/osx/pcedit/pc.editors.cpp index 4642de90..29e307b4 100644 --- a/osx/pcedit/pc.editors.cpp +++ b/osx/pcedit/pc.editors.cpp @@ -212,7 +212,7 @@ void display_pc(short pc_num,short mode, cDialog* parent) { for(i = 0; i < 62; i++) { std::string id = "spell" + boost::lexical_cast(i + 1); - label_str = get_str((mode == 0) ? "mage-spells" : "priest-spells",i * 2 + 1); + label_str = get_str("magic-names", i + (mode == 0 ? 1 : 101)); pcInfo[id].setText(label_str); } put_pc_spells(pcInfo, mode); @@ -306,14 +306,11 @@ void pick_race_abil(cPlayer *pc,short mode) { pickAbil.run(); } -const char* alch_names[20] = { - "Weak Curing Potion (1)","Weak Healing Potion (1)","Weak Poison (1)", - "Weak Speed Potion (3)","Medium Poison (3)", - "Medium Heal Potion (4)","Strong Curing (5)","Medium Speed Potion (5)", - "Graymold Salve (7)","Weak Energy Potion (9)", - "Potion of Clarity (9)","Strong Poison (10)","Strong Heal Potion (12)","Killer Poison (12)", - "Resurrection Balm (9)","Medium Energy Ptn. (14)","Knowledge Brew (19)" , - "Strong Strength (10)","Bliss (16)","Strong Power (20)" +short alch_difficulty[20] = { + 1,1,1,3,3, + 4,5,5,7,9, + 9,10,12,12,9, + 14,19,10,16,20 }; void display_alchemy(bool allowEdit) { @@ -325,7 +322,10 @@ void display_alchemy(bool allowEdit) { for(i = 0; i < 20; i++) { std::string id = "potion" + boost::lexical_cast(i + 1); - showAlch->addLabelFor(id, alch_names[i], LABEL_LEFT, 83, true); + std::string name = get_str("magic-names", i + 200) + " ("; + name += std::to_string(alch_difficulty[i]); + name += ')'; + showAlch->addLabelFor(id, name, LABEL_LEFT, 83, true); if(!allowEdit) showAlch->getControl(id).attachClickHandler(&cLed::noAction); cLed& led = dynamic_cast(showAlch->getControl(id)); diff --git a/rsrc/strings/mage-spells.txt b/rsrc/strings/mage-spells.txt index c5522500..988e5ebd 100644 --- a/rsrc/strings/mage-spells.txt +++ b/rsrc/strings/mage-spells.txt @@ -1,126 +1,64 @@ -Light Creates a weak light. -Spark Fires a weak bolt of electricity at an enemy. -Minor Haste Makes the selected PC move faster for a while. All haste spells take effect at the beginning of the next round. -Strength Makes the selected PC more skilled for a short time. Works like the priest spell 'Bless.' -Scare Decreases the morale of the victim. Casting this on a weak foe will make the foe flee. Even if the monster doesn't flee, later castings have a higher chance of success. -Flame Cloud This spell fills the selected space with a short-lasting wall of fire. -Identify This draining spell identifies all the unidentified items being held by your characters. -Scry Monster This spell is cast during combat. When cast, you receive information about the monster you target: current health, spell points, morale, etc. -Goo This spell covers the target with sticky goo, slowing it down and interfering with its attacks. -True Sight This spell lets you see everything in a short radius around you, even spaces blocked off by walls. It's useful for finding secret passages, for example. -Minor Poison Poisons the target creature. This does a fair amount of damage, but it takes time to happen. -Flame Fires a decent-sized bolt of flame at the target. The damage done increases with the level of the caster. -Slow Makes the victim get half its usual number of actions for a while. -Dumbfound Makes the victim incompetent: easier to hit, easier to damage, and less able to attack you. -Envenom This spell puts poison on the weapon of the selected PC, with no chance of failure or accidental poisoning. -Stinking Cloud When cast, a 3x3 area you select becomes filled with choking gasses. Anyone entering will have far less effective attacks for a short time. The gas will slowly fade on its own. -Summon Beast This spell summons one low-level, non-magical monster to fight on your side. It disappears after a short time. -Conflagration This spell makes the air in a radius 2 circle burst into flames, charring anyone inside the cloud. After creation, the cloud will rapidly fade. -Dispel Fields This spell dispels magical fields in the selected area. It removes blade walls, ice walls, and similar fields. Note, however, that the spell doesn't work on Fire and Force Barriers. -Sleep Cloud This spell creates a small cloud of sleep gas. There is a chance that anyone passing through the cloud will fall asleep (note that some creatures, like slimes, never sleep). -Unlock Doors Some doors are magically locked, and others are just hard to open. This spell can unlock them. However, it isn't guaranteed to succeed, and won't work on all doors. -Haste Makes the selected PC get twice the usual number of actions for a long time. All haste spells take effect at the beginning of the next round. -Fireball Fires a powerful ball of flame, which affects the target space and every adjacent space. The damage done increases with the level of the caster. -Long Light Like the first level light spell, but much more effective. -Fear -Like scare, but much more powerful. -Wall of Force +Like scare, but much more powerful. This powerful spell creates a line of force walls, which are like fire walls but more damaging and lasting. Hitting the space bar while targeting makes the wall rotate. -Weak Summoning When cast, a group of monsters appears and attacks all enemies of the caster. The number of monsters depends on the level of the caster. After a time, they disappear. -Flame Arrows This spell is like flame, but the caster gets to select several targets. The number of missiles increases with the level of the caster. If you don't want to use all the missiles, hit the space bar to cast the spell. -Web This spell covers a large circle with icky webs, slowing down everyone inside. The webs last until torn down. -Resist Magic You can cast this spell on another PC to make him/her resistant to magical damage and effects. Note this does not help against damage from fire or cold. -Poison This makes poison run thick in the veins of the target. Repeated castings will have a devastating effect. -Ice Bolt Slams the target with a heavy, pointed bolt of ice. Effective against monsters who are resistant to fire. Damage increases as the level of the caster increases. -Slow Group Makes all monsters within a 12 space radius move at half speed for a time. -Magic Map When cast in town, this powerful spell gives you a vision - your map will show you the entire area. However, to cast this spell you need a sapphire. -Capture Soul This spell stores a target monster in your mind, so that it may later be created with the Simulacrum spell. -Simulacrum This spell summons a monster you have memorized using Capture Soul. The cost depends on the level of the monster being summoned. -Venom Arrows This spell is similar to Flame Arrows, except that your targets are poisoned. -Wall of Ice This spell is similar to Wall of Force, except that it creates an ice wall. Ice walls do as much damage as force walls, but last a lot longer. -Stealth This powerful spell makes monsters less likely to see you for a time (duration depends on your level). Try casting it before walking through a room crowded with monsters. -Major Haste Gives the entire party double its actions (duration depends on the level of the caster). All haste spells take effect at the beginning of the next round. -Fire Storm This spell is like fireball, but does more damage, and affects all creatures within two spaces of the space you target. Be careful not to fry your party! -Dispel Barrier This spell has a chance (increasing with level) of destroying magical barriers. Some barriers are harder to dispel than others; some cannot be dispelled. Some barriers can be walked through. -Fire Barrier This spell creates a single fire barrier at the target space. Fire barriers are damaging and permanent. -Summoning This spell is like Minor Summoning, but summons more powerful monsters. -Shockstorm This spell creates a large sphere of force walls. -Spray Fields This spell creates a large number of small fields of a random sort, each of which may be individually targeted. The number of fields increases with the level of the caster. -Major Poison This spell makes the targeted monster very poisoned. This spell does a huge amount of damage, but it takes time to take effect. -Group Fear When cast, the caster begins to radiate a horrible aura of fear. All monsters within 12 spaces lose a lot of morale. This spell gains effectiveness rapidly with the level of the caster. -Kill The deadly Kill spell deals a devastating blow to one target you select. -Paralyze This spell affects several monsters - the number affected increases with your level and intelligence. Whoever you cast this on will be immobilized for a very long time. Powerful monsters might resist this spell. -Daemon This dangerous spell summons a beast from the netherworld to fight at your side. -Antimagic Cloud This spell creates a spherical field, from which no spells may be cast and in which no spells may be targeted. After creation, it slowly fades. -Mindduel When cast on a magic-using enemy, the two creatures get in a mental battle, absorbing spell points from each other. The loser may end up dumbfounded or killed. Requires a Smoky Crystal to cast. -Flight When cast outdoors, the party can fly for a short time. -Shockwave This spell sends a wave of force out from the caster, damaging everyone nearby. The farther someone is from the caster, the more damage is taken, out to a radius of 10. Don't cast in towns. -Major Blessing When cast, the entire party is blessed and hasted, and has their weapons mildly poisoned. -Mass Paralysis When cast, every monsters within a small radius of the caster will become paralyzed for quite some time. There is a chance they might resist the spell. -Protection One of the most powerful spells in the mage's repertoire. It makes the whole party temporarily magic resistant, and makes one PC you select immune to ALL damage for a short time. -Major Summoning This spell works like Summoning, but brings forth much more powerful creatures. -Force Barrier This spell creates an impenetrable, permanent barrier. Be careful not to trap yourself. -Quickfire Devastating beyond words, this spell creates a space of quickfire, which will sweep over the area killing everyone and everything. -Death Arrows This spell is like the previous Arrow spells, but strikes each target with a kill spell. The number of arrows increases with the level of the caster. diff --git a/rsrc/strings/magic-names.txt b/rsrc/strings/magic-names.txt index af94e67d..db96b6de 100644 --- a/rsrc/strings/magic-names.txt +++ b/rsrc/strings/magic-names.txt @@ -16,9 +16,9 @@ Envenom Stinking Cloud Summon Beast Conflagration -Dispel Field +Dispel Fields Sleep Cloud -Unlock +Unlock Door Haste Fireball Long Light @@ -197,23 +197,23 @@ Major Cleansing -Weak Curing -Weak Healing +Weak Curing Potion +Weak Healing Potion Weak Poison -Weak Speed +Weak Speed Potion Medium Poison -Medium Healing -Strong Curing -Medium Speed +Medium Healing Potion +Strong Curing Potion +Medium Speed Potion Graymold Salve -Weak Power +Weak Power Potion Potion of Clarity Strong Poison -Strong Healing +Strong Healing Potion Killer Poison Resurrection Balm -Medium Power +Medium Power Potion Knowledge Brew -Strong Strength -Bliss -Strong Power \ No newline at end of file +Strong Strength Potion +Potion of Bliss +Strong Power Potion \ No newline at end of file diff --git a/rsrc/strings/priest-spells.txt b/rsrc/strings/priest-spells.txt index 9fc5a946..eda39537 100644 --- a/rsrc/strings/priest-spells.txt +++ b/rsrc/strings/priest-spells.txt @@ -1,124 +1,62 @@ -Minor Bless Makes the character harder to hit and take less damage from blows. It also makes the PC hit more often, and his or her blows do more damage. Its effects decay with time. -Minor Heal Increases the health of the selected PC a small amount, up to the PC's maximum health. -Weaken Poison Reduces the amount of poison running around in the veins of the selected PC. -Turn Undead When cast on an undead creature, it usually does a reasonable amount of damage to it. It has no effect on non-undead. -Location Displays the party's x-y location in the town. -Sanctuary The target of this spell becomes magically shielded. For a time, monsters probably won't be able to attack him/her. The effects disappear when the PC attacks someone. -Symbiosis This spell has the caster absorb the damage taken by another character. The higher the level, the less damage the caster takes per health point healed. -Minor Manna Casting this spell gives the party a little more food. -Ritual - Sanctify When cast on a location filled with evil magic, the location receives a blessing. This might drive out the evil magic. Then again, it might not. -Stumble The victim of this spell moves more slowly and has less effective attacks for a short time. -Bless Like Minor Bless, but better. Its effect increases with the level of the caster. -Cure Poison Like Weaken Poison, but better. Its effect increases with the level of the caster. -Curse The opposite of bless. It makes everything much worse for the victim, for a time. Hitting someone with this spell several times vastly increases the effect. -Light Creates a short duration magical light source. -Wound Deals a painful blow to the targeted victim. The damage increases with your level. -Summon Spirit This spell summons a shade from the netherworld to aid you. It will disappear after a short time. -Move Mountains When cast on a fragile wall or outcropping of rock, the wall or outcropping crumbles into rubble. It doesn't work on all walls. -Charm Foe This spell has a chance of making the target monster start to fight for the party. The chance of it working drops sharply with the level of the monster. -Disease The victim of this spell is afflicted by a disease, which slowly weakens it. The disease lasts a long time. -Awaken Casting this on a sleeping character instantly wakes that character up. -Heal A much better version of Minor Heal. -Light Heal All Casts one minor heal on each PC. -Holy Scourge This spell gives the victim a powerful curse, the effect of which increases with the level of the caster. -Detect Life This spell causes all other living things to appear on your map for a short time. Note, however, that this spell only detects creatures in areas you have explored. -Cure Paralysis This spell instantly removes the effects of paralysis. -Manna This spell magically creates a lot of food for the party. -Forcefield This spell fills an area with walls of force, which are fairly damaging and reasonably long lasting. -Cure Disease Casting this spell on a PC cures all his/her disease. -Restore Mind This spell completely unfeebleminds the recipient. -Smite This spell fires a number of bolts of divinely inspired cold, the number of which increases with the level of the caster. To cast without using all of the targets, hit the space bar. -Cure All Poison Causes everyone to become less poisoned. Useful for dealing with those nasty swamps. -Curse All Causes all monsters within ten spaces to receive a powerful curse. -Dispel Undead Deals a deadly blow to the targeted undead nasty. The chance of the spell having an effect increases with the caster's level. -Remove Curse Occasionally, you will put on an item which then refuses to be taken off. Casting this spell has a chance of removing the curse. -Sticks to Snakes This spell summons a bunch of snakes to aid the party. Skillful casters have a chance of getting asps instead of the weaker giant snakes. -Martyr's Shield When something strikes the recipient of this spell in hand-to-hand combat, it takes as much damage as the victim. The duration of this spell increases with the level of the caster. -Cleanse This spell purifies the recipient. The beneficiary is completely unwebbed, and all disease is cured. -Firewalk When cast, for a short time everyone in the party can walk across lava with no damage. The duration increases slowly with the level of the caster. -Bless Party Much like Bless, but affects everyone. -Major Heal Works like the Heal spell, but gives much more bang for the spell points. -Raise Dead This spell returns a body to life. You need Resurrection Balm to cast this. There is a small chance (decreasing with level) that it turns the body to dust. A dusted character can only be raised with a Resurrect spell. Raising a PC reduces his/her stats. -Flamestrike The first 'area of affect' offensive priest spell. It chars all beings adjacent to the space you target. The damage done increases with level. -Mass Sanctuary This spell hides all PCs (like a sanctuary spell). As before, the effect for a PC is voided when that PC attacks. -Summon Host -This powerful spell summons four spirits, and a magical being to lead them. They then fight on the side of the caster for a little while. -Shatter +This powerful spell summons four spirits, and a magical being to lead them. They then fight on the side of the caster for a little while. This spell strikes every space adjacent to the party with a Move Mountains spell. -Dispel Fields All magical walls, etc. in the large area affected by this spell will be dispelled. It has a small chance of affecting quickfire. -Heal All Like the Heal spell, but affects the whole party. Very efficient. -Revive This spell heals all damage and cures all poison for one PC. -Hyperactivity This powerful spell instantly wakes up any sleeping characters in the party. What's more, it provides total resistance to magical sleep for a short time. Finally, it speeds back up any slowed character. -Destone Certain rare monsters can turn one of your characters to stone. This valuable spell undoes the damage. -Summon Guardian This spell summons a powerful, invisible being to fight on the side of the party. Be careful not to damage it by mistake! -Mass Charm When cast, all creatures within eight spaces of the caster have a chance of coming under his/her control. -Protective Circle A very unusual and effective spell for a party on the defensive. The caster is surrounded by several layers of magical fields, which fend off anyone attacking. -Pestilence This spell afflicts everyone within eight spaces with an effective but slow-acting disease. -Revive All When cast, the party receives a powerful healing (increasing with level of the caster) and has poison cured as well. -Ravage Spirit Demons are resistant to most magic. This spell gives them a blow which usually does a lot of damage. The chance of success increases with the level of the caster. -Resurrect Like raise dead, but much more effective, and works on even a dusted character. It also has a smaller chance of lowering the character's stats. It still requires Resurrection Balm to cast. -Divine Thud The most powerful offensive priest spell. It delivers a stunning blow of force to all beings within two spaces of the targeted space. -Avatar -This spell temporarily makes the caster an invulnerable, incredibly powerful avatar of the gods. -Wall of Blades +This spell temporarily makes the caster an invulnerable, incredibly powerful avatar of the gods. This spell creates a wall of the most damaging (and long lasting) of the magic walls. Rotate the wall by hitting space. -Word of Recall This spell returns the party to the town where they began the scenario. Because of the danger of teleporting from narrow, windy tunnels, it can only be cast outdoors. -Major Cleansing This spell removes all webs and disease from the party.