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 */
}
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
/* 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;
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);
+ 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);
}
}
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
{
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]);
{
/* 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
}
-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 */
+ case 4: /* Detect Traps + Secret Doors */
(void)detect_traps(DETECT_RAD_DEFAULT);
(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, 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, 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 */
- 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 30: /* Holy Vision */
+ return identify_fully(FALSE, FALSE);
case 31: /* Ultimate resistance */
{
int v = randint1(plev/2)+plev/2;
map_area(DETECT_RAD_MAP);
break;
case 9: /* Identify */
- return ident_spell(FALSE);
+ return ident_spell(FALSE, FALSE);
case 10: /* Slow Monster */
if (!get_aim_dir(&dir)) return FALSE;
(void)detect_all(DETECT_RAD_DEFAULT);
break;
case 15: /* Identify True */
- return identify_fully(FALSE);
+ return identify_fully(FALSE, FALSE);
case 16: /* Detect Objects and Treasure*/
(void)detect_objects_normal(DETECT_RAD_DEFAULT);
(void)detect_treasure(DETECT_RAD_DEFAULT);
(void)charm_animals(plev * 2);
break;
case 21: /* Stone Tell */
- return identify_fully(FALSE);
+ return identify_fully(FALSE, FALSE);
case 22: /* Wall of Stone */
(void)wall_stone();
break;
}
case 26: /* Esoteria */
if (randint1(50) > plev)
- return ident_spell(FALSE);
+ return ident_spell(FALSE, FALSE);
else
- return identify_fully(FALSE);
+ return identify_fully(FALSE, FALSE);
break;
case 27: /* Mimic vampire */
(void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_VAMPIRE, FALSE);
case 25: /* Trump Lore */
if (success)
{
- return identify_fully(FALSE);
+ return identify_fully(FALSE, FALSE);
}
break;
case 26: /* Heal Monster */
teleport_player(plev * 5);
break;
case 20: /* Identify */
- return ident_spell(FALSE);
+ return ident_spell(FALSE, FALSE);
case 21: /* Stone to Mud */
if (!get_aim_dir(&dir)) return FALSE;
}
break;
case 26: /* Total Knowledge */
- return identify_fully(FALSE);
+ return identify_fully(FALSE, FALSE);
break;
case 27: /* Enchant Weapon */
return enchant_spell(randint0(4) + 1, randint0(4) + 1, 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,
((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
}
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);
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 */
+ 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);
(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))
{
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("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
return TRUE;
}
-void do_name_pet(void)
+static void do_name_pet(void)
{
monster_type *m_ptr;
char out_val[20];