/* File: cmd5.c */
-/* Purpose: Spell/Prayer commands */
-
/*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
*
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
+ * This software may be copied and distributed for educational, research,
+ * and not for profit purposes provided that this copyright and statement
+ * are included in all such copies. Other copyrights may also apply.
*/
+/* Purpose: Spell/Prayer commands */
+
#include "angband.h"
#include "spellstips.h"
* The "known" should be TRUE for cast/pray, FALSE for study
*/
-bool select_spellbook=FALSE;
bool select_the_force=FALSE;
static int get_spell(int *sn, cptr prompt, int sval, bool learned, int use_realm)
char out_val[160];
cptr p;
#ifdef JP
- char jverb_buf[128];
+ char jverb_buf[128];
#endif
int menu_line = (use_menu ? 1 : 0);
if (repeat_pull(sn))
{
/* Verify the spell */
- if (spell_okay(*sn, learned, FALSE, use_realm - 1))
+ if (spell_okay(*sn, learned, FALSE, use_realm))
{
/* Success */
return (TRUE);
for (i = 0; i < num; i++)
{
/* Look for "okay" spells */
- if (spell_okay(spells[i], learned, FALSE, use_realm - 1)) okay = TRUE;
+ if (spell_okay(spells[i], learned, FALSE, use_realm)) okay = TRUE;
}
/* No "okay" spells */
#ifdef JP
jverb1( prompt, jverb_buf );
(void) strnfmt(out_val, 78, "(%^s:%c-%c, '*'¤Ç°ìÍ÷, ESC¤ÇÃæÃÇ) ¤É¤Î%s¤ò%^s¤Þ¤¹¤«? ",
- p, I2A(0), I2A(num - 1), p, jverb_buf );
+ p, I2A(0), I2A(num - 1), p, jverb_buf );
#else
(void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) %^s which %s? ",
p, I2A(0), I2A(num - 1), prompt, p);
/* Get a spell from the user */
- choice = (always_show_list || use_menu) ? ESCAPE:1;
- while (!flag)
- {
+ choice = (always_show_list || use_menu) ? ESCAPE:1;
+ while (!flag)
+ {
if( choice==ESCAPE ) choice = ' ';
else if( !get_com(out_val, &choice, TRUE) )break;
}
if (menu_line > num) menu_line -= num;
/* Display a list of spells */
- print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
+ print_spells(menu_line, spells, num, 1, 15, use_realm);
if (ask) continue;
}
else
screen_save();
/* Display a list of spells */
- print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
+ print_spells(menu_line, spells, num, 1, 15, use_realm);
}
/* Hide the list */
spell = spells[i];
/* Require "okay" spells */
- if (!spell_okay(spell, learned, FALSE, use_realm - 1))
+ if (!spell_okay(spell, learned, FALSE, use_realm))
{
bell();
#ifdef JP
- msg_format("¤½¤Î%s¤ò%s¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£", p, prompt);
+ msg_format("¤½¤Î%s¤ò%s¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£", p, prompt);
#else
msg_format("You may not %s that %s.", prompt, p);
#endif
/* Access the spell */
if (!is_magic(use_realm))
{
- s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
+ s_ptr = &technic_info[use_realm - MIN_TECHNIC][spell];
}
else
{
- s_ptr = &mp_ptr->info[use_realm - 1][spell % 32];
+ s_ptr = &mp_ptr->info[use_realm - 1][spell];
}
if (use_realm == REALM_HISSATSU)
}
else
{
- if (p_ptr->pclass == CLASS_SORCERER)
- shouhimana = s_ptr->smana*2200 + 2399;
- else if (p_ptr->pclass == CLASS_RED_MAGE)
- shouhimana = s_ptr->smana*2600 + 2399;
- else
- shouhimana = (s_ptr->smana*(3800-spell_exp[spell])+2399);
+ /* Extract mana consumption rate */
+ shouhimana = s_ptr->smana*(3800 - experience_of_spell(spell, use_realm)) + 2399;
if(p_ptr->dec_mana)
shouhimana *= 3;
else shouhimana *= 4;
/* Prompt */
#ifdef JP
jverb1( prompt, jverb_buf );
- /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
- (void) strnfmt(tmp_val, 78, "%s(MP%d, ¼ºÇÔΨ%d%%)¤ò%s¤Þ¤¹¤«? ",
- spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
- spell_chance(spell, use_realm -1),jverb_buf);
+ /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
+ (void) strnfmt(tmp_val, 78, "%s(MP%d, ¼ºÇÔΨ%d%%)¤ò%s¤Þ¤¹¤«? ",
+ spell_names[technic2magic(use_realm)-1][spell], shouhimana,
+ spell_chance(spell, use_realm),jverb_buf);
#else
(void)strnfmt(tmp_val, 78, "%^s %s (%d mana, %d%% fail)? ",
- prompt, spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
- spell_chance(spell, use_realm - 1));
+ prompt, spell_names[technic2magic(use_realm)-1][spell], shouhimana,
+ spell_chance(spell, use_realm));
#endif
if (p_ptr->pclass == CLASS_PRIEST)
{
- if ((p_ptr->realm1 == REALM_LIFE) || (p_ptr->realm1 == REALM_HAJA))
+ if (is_good_realm(p_ptr->realm1))
{
choices &= ~(CH_DEATH | CH_DAEMON);
}
- else if ((p_ptr->realm1 == REALM_DEATH) || (p_ptr->realm1 == REALM_DAEMON))
+ else
{
- choices &= ~(CH_LIFE | CH_HAJA);
+ choices &= ~(CH_LIFE | CH_CRUSADE);
}
}
s = "You have no books that you can read.";
#endif
- select_spellbook=TRUE;
if (p_ptr->pclass == CLASS_FORCETRAINER)
select_the_force = TRUE;
if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
- select_spellbook = FALSE;
select_the_force = FALSE;
- return;
- }
- select_spellbook = FALSE;
+ return;
+ }
select_the_force = FALSE;
if (item == 1111) { /* the_force */
if (spell == -1) break;
/* Display a list of spells */
- print_spells(0, spells, num, 1, 15, use_realm - 1);
+ print_spells(0, spells, num, 1, 15, use_realm);
/* Notify that there's nothing to see, and wait. */
if (use_realm == REALM_HISSATSU)
/* Access the spell */
if (!is_magic(use_realm))
{
- s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
+ s_ptr = &technic_info[use_realm - MIN_TECHNIC][spell];
}
else
{
s_ptr = &mp_ptr->info[use_realm - 1][spell];
}
- roff_to_buf( spell_tips[technic2magic(use_realm)-1][spell] ,62,temp);
+ roff_to_buf(spell_tips[technic2magic(use_realm)-1][spell] ,62, temp, sizeof(temp));
for(j=0, line = 11;temp[j];j+=(1+strlen(&temp[j])))
{
prt(&temp[j], line, 15);
for (i = 0; i < 64; i++)
{
- spell_order[j] = spell_order[i];
- if(spell_order[i] < 32) j++;
+ p_ptr->spell_order[j] = p_ptr->spell_order[i];
+ if(p_ptr->spell_order[i] < 32) j++;
}
for (; j < 64; j++)
- spell_order[j] = 99;
+ p_ptr->spell_order[j] = 99;
for (i = 32; i < 64; i++)
{
- spell_exp[i] = 0;
+ p_ptr->spell_exp[i] = 0;
}
- spell_learned2 = 0L;
- spell_worked2 = 0L;
- spell_forgotten2 = 0L;
+ p_ptr->spell_learned2 = 0L;
+ p_ptr->spell_worked2 = 0L;
+ p_ptr->spell_forgotten2 = 0L;
#ifdef JP
sprintf(tmp,"ËâË¡¤ÎÎΰè¤ò%s¤«¤é%s¤ËÊѹ¹¤·¤¿¡£", realm_names[p_ptr->realm2], realm_names[next_realm]);
s = "You have no books that you can read.";
#endif
- select_spellbook=TRUE;
if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
- select_spellbook=FALSE;
/* Get the item (in the pack) */
if (item >= 0)
{
/* Ask for a spell, allow cancel */
#ifdef JP
- if (!get_spell(&spell, "³Ø¤Ö", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
+ if (!get_spell(&spell, "³Ø¤Ö", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
&& (spell == -1)) return;
#else
if (!get_spell(&spell, "study", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
{
/* Skip non "okay" prayers */
if (!spell_okay(spell, FALSE, TRUE,
- (increment ? p_ptr->realm2 - 1 : p_ptr->realm1 - 1))) continue;
+ (increment ? p_ptr->realm2 : p_ptr->realm1))) continue;
/* Hack -- Prepare the randomizer */
k++;
/* Learn the spell */
if (spell < 32)
{
- if (spell_learned1 & (1L << spell)) learned = TRUE;
- else spell_learned1 |= (1L << spell);
+ if (p_ptr->spell_learned1 & (1L << spell)) learned = TRUE;
+ else p_ptr->spell_learned1 |= (1L << spell);
}
else
{
- if (spell_learned2 & (1L << (spell - 32))) learned = TRUE;
- else spell_learned2 |= (1L << (spell - 32));
+ if (p_ptr->spell_learned2 & (1L << (spell - 32))) learned = TRUE;
+ else p_ptr->spell_learned2 |= (1L << (spell - 32));
}
if (learned)
{
int max_exp = (spell < 32) ? 1600 : 1400;
- int old_exp = spell_exp[spell];
+ int old_exp = p_ptr->spell_exp[spell];
int new_rank = 0;
cptr name = spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell%32];
}
else if (old_exp >= 1400)
{
- spell_exp[spell] = 1600;
+ p_ptr->spell_exp[spell] = 1600;
new_rank = 4;
}
else if (old_exp >= 1200)
{
- if (spell >= 32) spell_exp[spell] = 1400;
- else spell_exp[spell] += 200;
+ if (spell >= 32) p_ptr->spell_exp[spell] = 1400;
+ else p_ptr->spell_exp[spell] += 200;
new_rank = 3;
}
else if (old_exp >= 900)
{
- spell_exp[spell] = 1200+(old_exp-900)*2/3;
+ p_ptr->spell_exp[spell] = 1200+(old_exp-900)*2/3;
new_rank = 2;
}
else
{
- spell_exp[spell] = 900+(old_exp)/3;
+ p_ptr->spell_exp[spell] = 900+(old_exp)/3;
new_rank = 1;
}
#ifdef JP
}
else
{
- /* Find the next open entry in "spell_order[]" */
+ /* Find the next open entry in "p_ptr->spell_order[]" */
for (i = 0; i < 64; i++)
{
/* Stop at the first empty space */
- if (spell_order[i] == 99) break;
+ if (p_ptr->spell_order[i] == 99) break;
}
/* Add the spell to the known list */
- spell_order[i++] = spell;
+ p_ptr->spell_order[i++] = spell;
/* Mention the result */
#ifdef JP
- /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
+ /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
if (mp_ptr->spell_book == TV_MUSIC_BOOK)
{
- msg_format("%s¤ò³Ø¤ó¤À¡£",
+ msg_format("%s¤ò³Ø¤ó¤À¡£",
spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
}
else
{
- msg_format("%s¤Î%s¤ò³Ø¤ó¤À¡£",
+ msg_format("%s¤Î%s¤ò³Ø¤ó¤À¡£",
spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32] ,p);
}
#else
{
/* Message */
#ifdef JP
- if( p_ptr->new_spells < 10 ){
- msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
- }else{
- msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
- }
+ if( p_ptr->new_spells < 10 ){
+ msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
+ }else{
+ msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
+ }
#else
msg_format("You can learn %d more %s%s.",
p_ptr->new_spells, p,
/* Update Study */
p_ptr->update |= (PU_SPELLS);
update_stuff();
+
+ /* Redraw object recall */
+ p_ptr->window |= (PW_OBJECT);
}
-void wild_magic(int spell)
+static void wild_magic(int spell)
{
int counter = 0;
int type = SUMMON_BIZARRE1 + randint0(6);
switch (spell)
{
- case 0: /* Detect Evil */
- (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
- break;
- case 1: /* Cure Light Wounds */
+ case 0: /* Cure Light Wounds */
(void)hp_player(damroll(2, 10));
(void)set_cut(p_ptr->cut - 10);
break;
- case 2: /* Bless */
+ case 1: /* Bless */
(void)set_blessed(randint1(12) + 12, FALSE);
break;
- case 3: /* Remove Fear */
- (void)set_afraid(0);
+ case 2: /* Make Light Wounds */
+ if (!get_aim_dir(&dir)) return FALSE;
+ fire_ball_hide(GF_WOUNDS, dir, damroll(3 + ((plev - 1) / 5), 4), 0);
break;
- case 4: /* Call Light */
+ case 3: /* Call Light */
(void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
break;
- case 5: /* Detect Traps + Secret Doors */
- (void)detect_traps(DETECT_RAD_DEFAULT);
+ case 4: /* Detect Traps + Secret Doors */
+ (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
(void)detect_doors(DETECT_RAD_DEFAULT);
(void)detect_stairs(DETECT_RAD_DEFAULT);
break;
- case 6: /* Cure Medium Wounds */
+ case 5: /* Cure Medium Wounds */
(void)hp_player(damroll(4, 10));
(void)set_cut((p_ptr->cut / 2) - 20);
break;
+ case 6: /* Cure Poison */
+ (void)set_poisoned(0);
+ break;
case 7: /* Satisfy Hunger */
(void)set_food(PY_FOOD_MAX - 1);
break;
#endif
}
break;
- case 9: /* Cure Poison */
- (void)set_poisoned(0);
+ case 9: /* Make Medium Wounds */
+ if (!get_aim_dir(&dir)) return FALSE;
+ fire_ball_hide(GF_WOUNDS, dir, damroll(8 + ((plev - 5) / 4), 8), 0);
break;
case 10: /* Cure Critical Wounds */
(void)hp_player(damroll(8, 10));
(void)set_stun(0);
(void)set_cut(0);
break;
- case 11: /* Sense Unseen */
- (void)set_tim_invis(randint1(24) + 24, FALSE);
+ case 11:
+ (void)set_oppose_cold(randint1(20) + 20, FALSE);
+ (void)set_oppose_fire(randint1(20) + 20, FALSE);
break;
- case 12: /* Holy Orb */
- if (!get_aim_dir(&dir)) return FALSE;
-
- fire_ball(GF_HOLY_FIRE, dir,
- (damroll(3, 6) + plev +
- (plev / ((p_ptr->pclass == CLASS_PRIEST ||
- p_ptr->pclass == CLASS_HIGH_MAGE ||
- p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
- ((plev < 30) ? 2 : 3));
-
+ case 12:
+ map_area(DETECT_RAD_MAP);
break;
- case 13: /* Protection from Evil */
- (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
+ case 13:
+ (void)turn_undead();
break;
case 14: /* Healing */
(void)hp_player(300);
case 15: /* Glyph of Warding */
warding_glyph();
break;
- case 16: /* Exorcism */
- (void)dispel_undead(randint1(plev));
- (void)dispel_demons(randint1(plev));
- (void)turn_evil(plev);
- break;
- case 17: /* Dispel Curse */
+ case 16: /* Dispel Curse */
if (remove_all_curse())
{
#ifdef JP
#endif
}
break;
- case 18: /* Dispel Undead + Demons */
- (void)dispel_undead(randint1(plev * 3));
- (void)dispel_demons(randint1(plev * 3));
+ case 17: /* Perception */
+ return ident_spell(FALSE);
+ case 18: /* Dispel Undead */
+ (void)dispel_undead(randint1(plev * 5));
break;
case 19: /* 'Day of the Dove' */
charm_monsters(plev * 2);
break;
- case 20: /* Dispel Evil */
- (void)dispel_evil(randint1(plev * 4));
+ case 20: /* Make Critical Wounds */
+ if (!get_aim_dir(&dir)) return FALSE;
+ fire_ball_hide(GF_WOUNDS, dir, damroll(5+((plev - 5) / 3), 15), 0);
break;
- case 21: /* Banishment */
- if (banish_evil(100))
- {
-#ifdef JP
-msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
-#else
- msg_print("The power of your god banishes evil!");
-#endif
-
- }
+ case 21: /* Word of Recall */
+ if (!word_of_recall()) return FALSE;
break;
- case 22: /* Holy Word */
- (void)dispel_evil(randint1(plev * 4));
- (void)hp_player(1000);
- (void)set_afraid(0);
- (void)set_poisoned(0);
- (void)set_stun(0);
- (void)set_cut(0);
+ case 22: /* Alter Reality */
+ alter_reality();
break;
case 23: /* Warding True */
warding_glyph();
glyph_creation();
break;
- case 24: /* Heroism */
- (void)set_hero(randint1(25) + 25, FALSE);
- (void)hp_player(10);
- (void)set_afraid(0);
+ case 24:
+ num_repro += MAX_REPRO;
break;
- case 25: /* Prayer */
- (void)set_blessed(randint1(48) + 48, FALSE);
+ case 25: /* Detection True */
+ (void)detect_all(DETECT_RAD_DEFAULT);
break;
- case 26: /* Turn Undead */
+ case 26: /* Genocide Undead */
(void)mass_genocide_undead(plev+50,TRUE);
break;
- case 27: /* Restoration */
+ case 27: /* Clairvoyance */
+ wiz_lite(FALSE);
+ break;
+ case 28: /* Restoration */
(void)do_res_stat(A_STR);
(void)do_res_stat(A_INT);
(void)do_res_stat(A_WIS);
(void)do_res_stat(A_CHR);
(void)restore_level();
break;
- case 28: /* Healing True */
+ case 29: /* Healing True */
(void)hp_player(2000);
(void)set_stun(0);
(void)set_cut(0);
break;
- case 29: /* Holy Vision */
+ case 30: /* Holy Vision */
return identify_fully(FALSE);
- case 30: /* Divine Intervention */
- project(0, 1, py, px, 500, GF_HOLY_FIRE, PROJECT_KILL, -1);
- dispel_monsters(plev * 4);
- slow_monsters();
- stun_monsters(plev * 4);
- confuse_monsters(plev * 4);
- turn_monsters(plev * 4);
- stasis_monsters(plev * 4);
- summon_specific(-1, py, px, plev, SUMMON_ANGEL, (PM_ALLOW_GROUP | PM_FORCE_PET));
- (void)set_hero(randint1(25) + 25, FALSE);
- (void)hp_player(300);
- (void)set_fast(randint1(20 + plev) + plev, FALSE);
- (void)set_afraid(0);
- break;
case 31: /* Ultimate resistance */
{
int v = randint1(plev/2)+plev/2;
teleport_player(10);
break;
case 2: /* Detect Doors and Traps */
- (void)detect_traps(DETECT_RAD_DEFAULT);
+ (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
(void)detect_doors(DETECT_RAD_DEFAULT);
(void)detect_stairs(DETECT_RAD_DEFAULT);
break;
chg_virtue(V_KNOWLEDGE, 1);
chg_virtue(V_ENLIGHTEN, 1);
- wiz_lite(FALSE, FALSE);
+ wiz_lite(FALSE);
if (!(p_ptr->telepathy))
{
(void)set_tim_esp(randint1(30) + 25, FALSE);
damroll(3 + ((plev - 1) / 5), 4));
break;
case 2: /* Detect Doors & Traps */
- (void)detect_traps(DETECT_RAD_DEFAULT);
+ (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
(void)detect_doors(DETECT_RAD_DEFAULT);
(void)detect_stairs(DETECT_RAD_DEFAULT);
break;
case 3: /* Produce Food */
- (void)set_food(PY_FOOD_MAX - 1);
+ {
+ object_type forge, *q_ptr = &forge;
+
+#ifdef JP
+ msg_print("¿©ÎÁ¤òÀ¸À®¤·¤¿¡£");
+#else
+ msg_print("A food ration is produced.");
+#endif
+
+ /* Create the food ration */
+ object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
+
+ /* Drop the object from heaven */
+ (void)drop_near(q_ptr, -1, py, px);
break;
+
+ }
case 4: /* Daylight */
(void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
break;
case 10: /* Nature Awareness -- downgraded */
map_area(DETECT_RAD_MAP);
- (void)detect_traps(DETECT_RAD_DEFAULT);
+ (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
(void)detect_doors(DETECT_RAD_DEFAULT);
(void)detect_stairs(DETECT_RAD_DEFAULT);
(void)detect_monsters_normal(DETECT_RAD_DEFAULT);
fire_ball(GF_LITE, 0, 150, 8);
chg_virtue(V_KNOWLEDGE, 1);
chg_virtue(V_ENLIGHTEN, 1);
- wiz_lite(FALSE, FALSE);
+ wiz_lite(FALSE);
if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
{
#ifdef JP
}
else if (die < 106)
{
- destroy_area(py, px, 13+randint0(5), TRUE);
+ destroy_area(py, px, 13+randint0(5));
}
else if (die < 108)
{
(void)fire_beam(GF_AWAY_ALL, dir, plev);
break;
case 14: /* Word of Destruction */
- destroy_area(py, px, 13+randint0(5), TRUE);
+ destroy_area(py, px, 13+randint0(5));
break;
case 15: /* Invoke Logrus */
if (!get_aim_dir(&dir)) return FALSE;
}
else if (die < 106)
{
- destroy_area(py, px, 13+randint0(5), TRUE);
+ destroy_area(py, px, 13+randint0(5));
}
else if (die < 108)
{
if ((p_ptr->pclass == CLASS_ROGUE) ||
(p_ptr->pclass == CLASS_HIGH_MAGE) ||
- (p_ptr->pclass == CLASS_SORCERER))
+ (p_ptr->pclass == CLASS_SORCERER))
die = (randint1(110)) + plev / 5;
/* Card sharks and high mages get a level bonus */
chg_virtue(V_KNOWLEDGE, 1);
chg_virtue(V_ENLIGHTEN, 1);
- wiz_lite(FALSE, FALSE);
+ wiz_lite(FALSE);
}
else
{
(void)set_cut(p_ptr->cut - 10);
break;
case 8: /* Detect Doors & Traps */
- (void)detect_traps(DETECT_RAD_DEFAULT);
+ (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
(void)detect_doors(DETECT_RAD_DEFAULT);
(void)detect_stairs(DETECT_RAD_DEFAULT);
break;
case 31: /* Clairvoyance */
chg_virtue(V_KNOWLEDGE, 1);
chg_virtue(V_ENLIGHTEN, 1);
- wiz_lite(FALSE, FALSE);
+ wiz_lite(FALSE);
if (!p_ptr->telepathy)
{
(void)set_tim_esp(randint1(30) + 25, FALSE);
#ifdef JP
else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
#else
- else msg_print("You invokes the Hand of Doom!");
+ else msg_print("You invoke the Hand of Doom!");
#endif
fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
}
-static bool cast_haja_spell(int spell)
+static bool cast_crusade_spell(int spell)
{
int dir;
int beam;
case 1:
(void)detect_monsters_evil(DETECT_RAD_DEFAULT);
break;
- case 2: /* Bless */
- (void)set_blessed(randint1(12) + 12, FALSE);
- break;
- case 3: /* Remove Fear */
+ case 2: /* Remove Fear */
(void)set_afraid(0);
break;
- case 4:
+ case 3:
if (!get_aim_dir(&dir)) return FALSE;
(void)fear_monster(dir, plev);
break;
- case 5:
+ case 4:
(void)sleep_monsters_touch();
break;
- case 6:
- teleport_player(plev*3);
+ case 5:
+ teleport_player(25+plev/2);
break;
- case 7:
+ case 6:
if (!get_aim_dir(&dir)) return FALSE;
- fire_blast(GF_LITE, dir, 3+((plev-1)/8), 3, 10, 3);
+ fire_blast(GF_LITE, dir, 3+((plev-1)/9), 2, 10, 3);
break;
- case 8:
+ case 7:
(void)set_cut(0);
(void)set_poisoned(0);
(void)set_stun(0);
break;
- case 9:
+ case 8:
if (!get_aim_dir(&dir)) return FALSE;
(void)fire_ball(GF_AWAY_EVIL, dir, MAX_SIGHT*5, 0);
break;
- case 10: /* Exorcism */
- (void)dispel_undead(randint1(plev));
- (void)dispel_demons(randint1(plev));
- (void)turn_evil(plev);
- break;
- case 11: /* Holy Orb */
+ case 9: /* Holy Orb */
if (!get_aim_dir(&dir)) return FALSE;
fire_ball(GF_HOLY_FIRE, dir,
- (damroll(3, 6) + plev +
- (plev / ((p_ptr->pclass == CLASS_PRIEST ||
- p_ptr->pclass == CLASS_HIGH_MAGE ||
+ (damroll(3, 6) + plev +
+ (plev / ((p_ptr->pclass == CLASS_PRIEST ||
+ p_ptr->pclass == CLASS_HIGH_MAGE ||
p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
- ((plev < 30) ? 2 : 3));
+ ((plev < 30) ? 2 : 3));
break;
+ case 10: /* Exorcism */
+ (void)dispel_undead(randint1(plev));
+ (void)dispel_demons(randint1(plev));
+ (void)turn_evil(plev);
+ break;
+ case 11: /* Remove Curse */
+ if (remove_curse())
+ {
+#ifdef JP
+ msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
+#else
+ msg_print("You feel as if someone is watching over you.");
+#endif
+ }
+ break;
case 12: /* Sense Unseen */
(void)set_tim_invis(randint1(24) + 24, FALSE);
break;
(void)destroy_door(dir);
break;
- case 17: /* Remove Curse */
- if (remove_curse())
- {
-#ifdef JP
- msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
-#else
- msg_print("You feel as if someone is watching over you.");
-#endif
- }
+ case 17:
+ if (!get_aim_dir(&dir)) return FALSE;
+ (void)stasis_evil(dir);
break;
case 18:
set_tim_sh_holy(randint1(20)+20, FALSE);
#ifdef JP
msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
#else
- msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"); /* nanka */
+ msg_print("Mortal! Repent of thy impiousness.");
#endif
}
if (banish_evil(100))
{
#ifdef JP
-msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
+msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
#else
- msg_print("The power of your god banishes evil!");
+ msg_print("The holy power banishes evil!");
#endif
}
break;
case 27: /* Word of Destruction */
- destroy_area(py, px, 13+randint0(5), TRUE);
+ destroy_area(py, px, 13+randint0(5));
break;
case 28: /* Eye for an Eye */
set_tim_eyeeye(randint1(10)+10, FALSE);
case 29:
{
int x, y, tx, ty;
+ int nx, ny;
int dir, i;
int b = 10 + randint1(10);
+
if (!get_aim_dir(&dir)) return FALSE;
- tx = px;
- ty = py;
+
+ /* Use the given direction */
+ tx = px + 99 * ddx[dir];
+ ty = py + 99 * ddy[dir];
/* Hack -- Use an actual "target" */
if ((dir == 5) && target_okay())
tx = target_col;
ty = target_row;
}
- else
+
+ x = px;
+ y = py;
+
+ while(1)
{
- while(1)
- {
- tx += ddx[dir];
- ty += ddy[dir];
- if (!cave_floor_bold(ty,tx) || !player_has_los_bold(ty, tx) || cave[ty][tx].m_idx) break;
- }
+ /* Hack -- Stop at the target */
+ if ((y == ty) && (x == tx)) break;
+
+ ny = y;
+ nx = x;
+ mmove2(&ny, &nx, py, px, ty, tx);
+
+ /* Stop at maximum range */
+ if (MAX_SIGHT*2 < distance(py, px, ny, nx)) break;
+
+ /* Stopped by walls/doors */
+ if (!cave_floor_bold(ny, nx)) break;
+
+ /* Stopped by monsters */
+ if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
+
+ /* Save the new location */
+ x = nx;
+ y = ny;
}
+ tx = x;
+ ty = y;
for (i = 0; i < b; i++)
{
{
int dx, dy;
- x = tx - 8 + randint0(17);
- y = ty - 8 + randint0(17);
-
- if (!in_bounds(y,x) || !in_disintegration_range(ty, tx, y, x)) continue;
+ x = tx - 5 + randint0(11);
+ y = ty - 5 + randint0(11);
dx = (tx > x) ? (tx - x) : (x - tx);
dy = (ty > y) ? (ty - y) : (y - ty);
/* Approximate distance */
d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
+ /* Within the radius */
if (d < 5) break;
}
if (count < 0) continue;
- project(0, 2, y, x, plev * 4, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
+ /* Cannot penetrate perm walls */
+ if (!in_bounds(y,x) ||
+ cave_stop_disintegration(y,x) ||
+ !in_disintegration_range(ty, tx, y, x))
+ continue;
+
+ project(0, 2, y, x, plev * 3+25, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
}
}
break;
if (cave_empty_bold2(my, mx)) break;
}
if (attempt < 0) continue;
- summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET));
+ summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
}
(void)set_hero(randint1(25) + 25, FALSE);
(void)set_blessed(randint1(25) + 25, FALSE);
#ifdef JP
msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤ÊÇ˼٤μöʸ %d ¤ò¾§¤¨¤¿¡£", spell);
#else
- msg_format("You cast an unknown nanka spell: %d.", spell);
+ msg_format("You cast an unknown crusade spell: %d.", spell);
#endif
msg_print(NULL);
set_action(ACTION_NONE);
- switch(p_ptr->magic_num1[0])
- {
- case MUSIC_BLESS:
- if (!p_ptr->blessed)
+ switch(p_ptr->magic_num1[0])
+ {
+ case MUSIC_BLESS:
+ if (!p_ptr->blessed)
#ifdef JP
msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
#else
msg_print("The prayer has expired.");
#endif
- break;
- case MUSIC_HERO:
- if (!p_ptr->hero)
+ break;
+ case MUSIC_HERO:
+ if (!p_ptr->hero)
{
#ifdef JP
msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
/* Recalculate hitpoints */
p_ptr->update |= (PU_HP);
}
- break;
- case MUSIC_MIND:
- if (!p_ptr->tim_esp)
+ break;
+ case MUSIC_MIND:
+ if (!p_ptr->tim_esp)
{
#ifdef JP
msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
/* Update the monsters */
p_ptr->update |= (PU_MONSTERS);
}
- break;
- case MUSIC_STEALTH:
- if (!p_ptr->tim_stealth)
+ break;
+ case MUSIC_STEALTH:
+ if (!p_ptr->tim_stealth)
#ifdef JP
msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
#else
msg_print("You are no longer hided.");
#endif
- break;
- case MUSIC_RESIST:
- if (!p_ptr->oppose_acid)
+ break;
+ case MUSIC_RESIST:
+ if (!p_ptr->oppose_acid)
#ifdef JP
msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
#else
msg_print("You feel less resistant to acid.");
#endif
- if (!p_ptr->oppose_elec)
+ if (!p_ptr->oppose_elec)
#ifdef JP
msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
#else
msg_print("You feel less resistant to elec.");
#endif
- if (!p_ptr->oppose_fire)
+ if (!p_ptr->oppose_fire)
#ifdef JP
msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
#else
msg_print("You feel less resistant to fire.");
#endif
- if (!p_ptr->oppose_cold)
+ if (!p_ptr->oppose_cold)
#ifdef JP
msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
#else
msg_print("You feel less resistant to cold.");
#endif
- if (!p_ptr->oppose_pois)
+ if (!p_ptr->oppose_pois)
#ifdef JP
msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
#else
msg_print("You feel less resistant to pois.");
#endif
- break;
- case MUSIC_SPEED:
- if (!p_ptr->fast)
+ break;
+ case MUSIC_SPEED:
+ if (!p_ptr->fast)
#ifdef JP
msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
#else
msg_print("You feel yourself slow down.");
#endif
- break;
- case MUSIC_SHERO:
- if (!p_ptr->hero)
+ break;
+ case MUSIC_SHERO:
+ if (!p_ptr->hero)
{
#ifdef JP
msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
p_ptr->update |= (PU_HP);
}
- if (!p_ptr->fast)
+ if (!p_ptr->fast)
#ifdef JP
msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
#else
msg_print("You feel yourself slow down.");
#endif
- break;
- case MUSIC_INVULN:
- if (!p_ptr->invuln)
+ break;
+ case MUSIC_INVULN:
+ if (!p_ptr->invuln)
{
#ifdef JP
msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
/* Window stuff */
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
- break;
- }
+ break;
+ }
p_ptr->magic_num1[0] = MUSIC_NONE;
p_ptr->magic_num2[0] = 0;
int plev = p_ptr->lev;
int dir;
- if(p_ptr->magic_num1[0])
- {
- stop_singing();
- }
+ if(p_ptr->magic_num1[0])
+ {
+ stop_singing();
+ }
- p_ptr->magic_num2[0] = spell;
+ p_ptr->magic_num2[0] = spell;
switch (spell)
{
s = "You have no spell books!";
#endif
- select_spellbook=TRUE;
if (p_ptr->pclass == CLASS_FORCETRAINER)
select_the_force = TRUE;
if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
- select_spellbook = FALSE;
select_the_force = FALSE;
- return;
- }
- select_spellbook = FALSE;
+ return;
+ }
select_the_force = FALSE;
if (item == 1111) { /* the_force */
/* Ask for a spell */
#ifdef JP
- if (!get_spell(&spell,
- ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
+ if (!get_spell(&spell,
+ ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
sval, TRUE, realm))
- {
- if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
- return;
- }
+ {
+ if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
+ return;
+ }
#else
if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
sval, TRUE, realm))
if (!is_magic(use_realm))
{
- s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
+ s_ptr = &technic_info[use_realm - MIN_TECHNIC][spell];
}
else
{
s_ptr = &mp_ptr->info[realm - 1][spell];
}
- if (p_ptr->pclass == CLASS_SORCERER)
- shouhimana = s_ptr->smana*2200 + 2399;
- else if (p_ptr->pclass == CLASS_RED_MAGE)
- shouhimana = s_ptr->smana*2600 + 2399;
- else
- shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
+ /* Extract mana consumption rate */
+ shouhimana = s_ptr->smana*(3800 - experience_of_spell(spell, realm)) + 2399;
if(p_ptr->dec_mana)
shouhimana *= 3;
else shouhimana *= 4;
/* Verify "dangerous" spells */
if (shouhimana > p_ptr->csp)
{
+ if (flush_failure) flush();
+
/* Warning */
#ifdef JP
msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
/* Spell failure chance */
- chance = spell_chance(spell, use_realm - 1);
+ chance = spell_chance(spell, use_realm);
/* Failed spell */
if (randint0(100) < chance)
sound(SOUND_FAIL);
- if (realm == REALM_LIFE) /* nanka */
+ if (realm == REALM_LIFE)
{
if (randint1(100) < chance)
- chg_virtue(V_FAITH, -1);
+ chg_virtue(V_VITALITY, -1);
}
else if (realm == REALM_DEATH)
{
if (randint1(100) < chance)
chg_virtue(V_JUSTICE, 1);
}
- if (realm == REALM_HAJA) /* nanka */
+ if (realm == REALM_CRUSADE)
{
if (randint1(100) < chance)
- chg_virtue(V_FAITH, -1);
+ chg_virtue(V_JUSTICE, -1);
}
else if (randint1(100) < chance)
{
case REALM_DAEMON: /* DAEMON */
cast = cast_daemon_spell(spell);
break;
- case REALM_HAJA: /* HAJA */
- cast = cast_haja_spell(spell);
+ case REALM_CRUSADE: /* CRUSADE */
+ cast = cast_crusade_spell(spell);
break;
case REALM_MUSIC: /* MUSIC */
cast = cast_music_spell(spell);
/* A spell was cast */
if (!(increment ?
- (spell_worked2 & (1L << spell)) :
- (spell_worked1 & (1L << spell)))
+ (p_ptr->spell_worked2 & (1L << spell)) :
+ (p_ptr->spell_worked1 & (1L << spell)))
&& (p_ptr->pclass != CLASS_SORCERER)
&& (p_ptr->pclass != CLASS_RED_MAGE))
{
/* The spell worked */
if (realm == p_ptr->realm1)
{
- spell_worked1 |= (1L << spell);
+ p_ptr->spell_worked1 |= (1L << spell);
}
else
{
- spell_worked2 |= (1L << spell);
+ p_ptr->spell_worked2 |= (1L << spell);
}
/* Gain experience */
gain_exp(e * s_ptr->slevel);
- if (realm == REALM_LIFE) /* nanka */
+ /* Redraw object recall */
+ p_ptr->window |= (PW_OBJECT);
+
+ if (realm == REALM_LIFE)
{
- chg_virtue(V_FAITH, 1);
+ chg_virtue(V_TEMPERANCE, 1);
chg_virtue(V_COMPASSION, 1);
chg_virtue(V_VITALITY, 1);
- chg_virtue(V_HONOUR, 1);
+ chg_virtue(V_DILIGENCE, 1);
}
else if (realm == REALM_DEATH)
{
chg_virtue(V_HONOUR, -1);
chg_virtue(V_TEMPERANCE, -1);
}
- else if (realm == REALM_HAJA) /* nanka */
+ else if (realm == REALM_CRUSADE)
{
chg_virtue(V_FAITH, 1);
- chg_virtue(V_COMPASSION, 1);
- chg_virtue(V_VITALITY, 1);
+ chg_virtue(V_JUSTICE, 1);
+ chg_virtue(V_SACRIFICE, 1);
chg_virtue(V_HONOUR, 1);
}
else if (realm == REALM_NATURE)
else
chg_virtue(V_KNOWLEDGE, 1);
}
- if (realm == REALM_LIFE) /* nanka */
+ if (realm == REALM_LIFE)
{
- if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
+ if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, 1);
if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
- if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
+ if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_DILIGENCE, 1);
}
else if (realm == REALM_DEATH)
{
if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
}
- else if (realm == REALM_HAJA) /* nanka */
+ else if (realm == REALM_CRUSADE)
{
if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
- if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
- if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
+ if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, 1);
+ if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_SACRIFICE, 1);
if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
}
else if (realm == REALM_NATURE)
}
if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
{
- if (spell_exp[(increment ? 32 : 0)+spell] < 900)
- spell_exp[(increment ? 32 : 0)+spell]+=60;
- else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
- {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
- else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
- {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
- else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
- {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
+ s16b cur_exp = p_ptr->spell_exp[(increment ? 32 : 0)+spell];
+ s16b exp_gain = 0;
+
+ if (cur_exp < 900)
+ exp_gain+=60;
+ else if(cur_exp < 1200)
+ {
+ if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev))
+ exp_gain = 8;
+ }
+ else if(cur_exp < 1400)
+ {
+ if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel))
+ exp_gain = 2;
+ }
+ else if((cur_exp < 1600) && !increment)
+ {
+ if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel))
+ exp_gain = 1;
+ }
+ p_ptr->spell_exp[(increment ? 32 : 0)+spell] += exp_gain;
}
}
/* Hack -- Bypass free action */
(void)set_paralyzed(p_ptr->paralyzed + randint1(5 * oops + 1));
- if (realm == REALM_LIFE) /* nanka */
- chg_virtue(V_FAITH, -10);
+ if (realm == REALM_LIFE)
+ chg_virtue(V_VITALITY, -10);
else if (realm == REALM_DEATH)
chg_virtue(V_UNLIFE, -10);
else if (realm == REALM_DAEMON)
chg_virtue(V_JUSTICE, 10);
else if (realm == REALM_NATURE)
chg_virtue(V_NATURE, -10);
- else if (realm == REALM_HAJA) /* nanka */
- chg_virtue(V_FAITH, -10);
+ else if (realm == REALM_CRUSADE)
+ chg_virtue(V_JUSTICE, -10);
else
chg_virtue(V_KNOWLEDGE, -10);
monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
+ /* Unused */
+ (void)v;
+
if (w1 == p_ptr->riding) return TRUE;
if (w2 == p_ptr->riding) return FALSE;
/* HACK : Add the line to message buffer */
#ifdef JP
- sprintf(buf, "%s ¤òΥ¤·¤¿¡£", friend_name);
+ sprintf(buf, "%s ¤òÊü¤·¤¿¡£", friend_name);
#else
sprintf(buf, "Dismissed %s.", friend_name);
#endif
(Dismissed == 1 ? "" : "s"));
#endif
if (Dismissed == 0 && all_pets)
+#ifdef JP
msg_print("'U'nnamed ¤Ï¡¢¾èÇϰʳ°¤Î̾Á°¤Î¤Ê¤¤¥Ú¥Ã¥È¤À¤±¤òÁ´¤Æ²òÊü¤·¤Þ¤¹¡£");
+#else
+ msg_print("'U'nnamed means all your pets except named pets and your mount.");
+#endif
p_ptr->update |= (PU_MON_LITE);
}
{
int level = r_ptr->level;
if (p_ptr->riding_ryoute) level += 20;
- if ((dam/2 + r_ptr->level) > (skill_exp[GINOU_RIDING]/30+10))
+ if ((dam/2 + r_ptr->level) > (p_ptr->skill_exp[GINOU_RIDING]/30+10))
{
- if((skill_exp[GINOU_RIDING] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 1000)
+ if((p_ptr->skill_exp[GINOU_RIDING] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 1000)
{
- if (r_ptr->level*100 > (skill_exp[GINOU_RIDING] + 1500))
- skill_exp[GINOU_RIDING] += (1+(r_ptr->level - skill_exp[GINOU_RIDING]/100 - 15));
- else skill_exp[GINOU_RIDING]++;
+ if (r_ptr->level*100 > (p_ptr->skill_exp[GINOU_RIDING] + 1500))
+ p_ptr->skill_exp[GINOU_RIDING] += (1+(r_ptr->level - p_ptr->skill_exp[GINOU_RIDING]/100 - 15));
+ else p_ptr->skill_exp[GINOU_RIDING]++;
}
}
- if (randint0(dam/2 + level*2) < (skill_exp[GINOU_RIDING]/30+10))
+ if (randint0(dam/2 + level*2) < (p_ptr->skill_exp[GINOU_RIDING]/30+10))
{
if ((((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY)) && !p_ptr->riding_ryoute) || !one_in_(p_ptr->lev*(p_ptr->riding_ryoute ? 2 : 3)+30))
{
p_ptr->redraw |= (PR_EXTRA);
+ /* Update health track of mount */
+ p_ptr->redraw |= (PR_UHEALTH);
+
if (p_ptr->ffall && !force)
{
monster_desc(m_name, m_ptr, 0);
#else
take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Falling from riding", -1);
#endif
- p_ptr->redraw |= (PR_UHEALTH);
return TRUE;
}
#ifdef JP
msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
#else
- msg_print("That monster is no a pet.");
+ msg_print("That monster is not a pet.");
#endif
return FALSE;
return FALSE;
}
- if (r_info[m_ptr->r_idx].level > randint1((skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
+ if (r_info[m_ptr->r_idx].level > randint1((p_ptr->skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
{
#ifdef JP
msg_print("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
}
p_ptr->riding = c_ptr->m_idx;
+
+ /* Hack -- remove tracked monster */
+ if (p_ptr->riding == p_ptr->health_who) health_track(0);
}
/* Save the old location */
return TRUE;
}
-void do_name_pet(void)
+static void do_name_pet(void)
{
monster_type *m_ptr;
char out_val[20];