/* 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
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);
(void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
break;
case 4: /* Detect Traps + Secret Doors */
- (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;
(void)mass_genocide_undead(plev+50,TRUE);
break;
case 27: /* Clairvoyance */
- wiz_lite(FALSE, FALSE);
+ wiz_lite(FALSE);
break;
case 28: /* Restoration */
(void)do_res_stat(A_STR);
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);
(void)sleep_monsters_touch();
break;
case 5:
- teleport_player(plev*3);
+ teleport_player(25+plev/2);
break;
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 7:
(void)set_cut(0);
if (!get_aim_dir(&dir)) return FALSE;
(void)fire_ball(GF_AWAY_EVIL, dir, MAX_SIGHT*5, 0);
break;
- case 9: /* Exorcism */
- (void)dispel_undead(randint1(plev));
- (void)dispel_demons(randint1(plev));
- (void)turn_evil(plev);
- break;
- case 10: /* 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("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"); /* nanka */
+ msg_print("Mortal! Repent of thy impiousness.");
#endif
}
#ifdef JP
msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
#else
- msg_print("The power of your god banishes evil!"); /* nanka */
+ 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);
!in_disintegration_range(ty, tx, y, x))
continue;
- project(0, 2, y, x, plev * 4, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
+ 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)
/* 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);
+ /* Redraw object recall */
+ p_ptr->window |= (PW_OBJECT);
+
if (realm == REALM_LIFE)
{
chg_virtue(V_TEMPERANCE, 1);
}
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;
}
}
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];