static bool cast_undead_spell(int Ind, int spell) { player_type *p_ptr = Players[Ind]; int dir; int plev = p_ptr->lev; switch (spell) { case GHOSTLY_BLINK: { teleport_player(Ind, 10); break; } case GHOSTLY_TELEPORT_SELF: { teleport_player(Ind, plev * 8); break; } case GHOSTLY_SCARE_MONSTER: { if (!get_aim_dir(Ind, &dir)) return (FALSE); (void)fear_monster(Ind, dir, plev); break; } case GHOSTLY_CONFUSE_MONSTER: { if (!get_aim_dir(Ind, &dir)) return (FALSE); confuse_monster(Ind, dir, plev); break; } case GHOSTLY_NETHER_BOLT: { if (!get_aim_dir(Ind, &dir)) return (FALSE); fire_bolt_or_beam(Ind, plev * 2, GF_NETHER, dir, 50 + damroll(5, 5) + plev); break; } case GHOSTLY_NETHER_BALL: { if (!get_aim_dir(Ind, &dir)) return (FALSE); fire_ball(Ind, GF_NETHER, dir, 100 + 2 * plev, 2); break; } case GHOSTLY_DARKNESS_STORM: { if (!get_aim_dir(Ind, &dir)) return (FALSE); fire_ball(Ind, GF_DARK, dir, plev * 5 + damroll(10, 10), 3); break; } } /* Success */ return (TRUE); }
/* * do_cmd_cast calls this function if the player's class * is 'imitator'. */ static bool use_mane(int spell) { int dir; int plev = p_ptr->lev; u32b mode = (PM_ALLOW_GROUP | PM_FORCE_PET); u32b u_mode = 0L; if (randint1(50+plev) < plev/10) u_mode = PM_ALLOW_UNIQUE; /* spell code */ switch (spell) { case MS_SHRIEK: #ifdef JP msg_print("かん高い金切り声をあげた。"); #else msg_print("You make a high pitched shriek."); #endif aggravate_monsters(0); break; case MS_XXX1: break; case MS_DISPEL: { int m_idx; if (!target_set(TARGET_KILL)) return FALSE; m_idx = cave[target_row][target_col].m_idx; if (!m_idx) break; if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; dispel_monster_status(m_idx); break; } case MS_ROCKET: if (!get_aim_dir(&dir)) return FALSE; #ifdef JP else msg_print("ロケットを発射した。"); #else else msg_print("You fire a rocket."); #endif fire_rocket(GF_ROCKET, dir, damage, 2); break; case MS_SHOOT: if (!get_aim_dir(&dir)) return FALSE; #ifdef JP else msg_print("矢を放った。"); #else else msg_print("You fire an arrow.");
void hellfire_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Hellfire"); break; case SPELL_DESC: var_set_string(res, "Fires a powerful ball of evil power directly from the bowels of hell. Good monsters are especially susceptible."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(666))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (get_aim_dir(&dir)) { fire_ball(GF_HELL_FIRE, dir, spell_power(666), 3); if (!demon_is_(DEMON_BALROG)) take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1); var_set_bool(res, TRUE); } break; } default: default_spell(cmd, res); break; } }
static void _banishing_mirror_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Banishing Mirror"); break; case SPELL_DESC: if (_on_mirror) var_set_string(res, "Quickly teleport away a nearby monster."); else var_set_string(res, "Teleport away a nearby monster."); break; case SPELL_CAST: { int dir; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_beam(GF_AWAY_ALL, dir, spell_power(p_ptr->lev)); var_set_bool(res, TRUE); break; } case SPELL_ENERGY: if (_on_mirror) { var_set_int(res, 50); break; } default: default_spell(cmd, res); break; } }
void hand_of_doom_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Hand of Doom"); break; case SPELL_DESC: var_set_string(res, "Attempt to mortally wound a target monster, draining a large proportion of their remaining health."); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You invoke the Hand of Doom!"); fire_ball_hide(GF_HAND_DOOM, dir, spell_power(p_ptr->lev * 3), 0); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
/****************************************************************************** * 10 20 30 40 45 50 * Angel: Angel -> Archangel -> Cherub -> Seraph -> Archon -> Planetar -> Solar ******************************************************************************/ static void _psycho_spear_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Psycho-Spear"); break; case SPELL_DESC: var_set_string(res, "Fires a beam of pure energy which penetrate the invulnerability barrier."); break; case SPELL_INFO: var_set_string(res, info_damage(1, spell_power(p_ptr->lev * 3), spell_power(p_ptr->lev * 3 + p_ptr->to_d_spell))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_beam(GF_PSY_SPEAR, dir, spell_power(randint1(p_ptr->lev*3) + p_ptr->lev*3 + p_ptr->to_d_spell)); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
static void _super_ray_spell(int cmd, variant *res) { int dd = 1; int ds = p_ptr->lev * 2; int b = 150; switch (cmd) { case SPELL_NAME: var_set_string(res, "Super Ray"); break; case SPELL_DESC: var_set_string(res, "Fires a powerful beam of mana. If the beam hit a mirror, it breaks that mirror and fires 8 beams of mana to 8 different directions from that point."); break; case SPELL_INFO: var_set_string(res, info_damage(dd, spell_power(ds), b)); break; case SPELL_CAST: { int dir; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_beam(GF_SUPER_RAY, dir, spell_power(damroll(dd,ds) + b)); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void invoke_logrus_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Invoke Logrus"); break; case SPELL_DESC: var_set_string(res, "Fires a huge ball of chaos."); break; case SPELL_INFO: var_set_string(res, info_damage(spell_power(10), 10, spell_power(p_ptr->lev*4))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_ball(GF_CHAOS, dir, spell_power(damroll(10, 10) + p_ptr->lev*4), 4); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void lightning_ball_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Lightning Ball"); break; case SPELL_DESC: var_set_string(res, "Fires a ball of electricity."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(3*p_ptr->lev/2 + 20))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_ball(GF_ELEC, dir, spell_power(3*p_ptr->lev/2 + 20), 2); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void acid_ball_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Acid Ball"); break; case SPELL_DESC: var_set_string(res, "Generate an Acid Ball on chosen target."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(3*p_ptr->lev/2 + 35))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_ball(GF_ACID, dir, spell_power(3*p_ptr->lev/2 + 35), 2); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void android_bazooka_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Bazooka"); break; case SPELL_DESC: var_set_string(res, "Fires your bazooka at a nearby monster."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(25 + p_ptr->lev * 2))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You fire your bazooka."); fire_ball(GF_MISSILE, dir, spell_power(25 + p_ptr->lev * 2), 2); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void amnesia_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Amnesia"); break; case SPELL_DESC: var_set_string(res, "Attempt to make target monster forget something."); break; case SPELL_CAST: { int dir = 0; int lvl = p_ptr->lev; if (p_ptr->lev > 40) lvl += (p_ptr->lev - 40) * 2; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; project_hook(GF_AMNESIA, dir, lvl, PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void android_ray_gun_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Ray Gun"); break; case SPELL_DESC: var_set_string(res, "Fires unresistable damage at chosen foe."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(5 + (p_ptr->lev+1) / 2))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You fire your ray gun."); fire_bolt(GF_MISSILE, dir, spell_power(5 + (p_ptr->lev+1) / 2)); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
static void _remove_obstacles_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Remove Obstacles"); break; case SPELL_DESC: var_set_string(res, "Clears a path to treasure! Traps, doors and trees will be removed."); break; case SPELL_CAST: { bool b = FALSE; int dir = 5; if (get_aim_dir(&dir)) { project(0, 1, py, px, 0, GF_REMOVE_OBSTACLE, PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE, -1); project_hook(GF_REMOVE_OBSTACLE, dir, 0, PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM); b = TRUE; } var_set_bool(res, b); } break; default: default_spell(cmd, res); break; } }
static void _fetch_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Fetch"); break; case SPELL_DESC: var_set_string(res, "Use your whip to fetch a nearby item."); break; case SPELL_CAST: if (_whip_check()) { int dir = 5; bool b = FALSE; int rng = 3 + p_ptr->lev/25; project_length = rng; if (get_aim_dir(&dir)) { b = _whip_fetch(dir, rng); } var_set_bool(res, b); } else { msg_print("Whip techniques can only be used if you are fighting with whips."); var_set_bool(res, FALSE); } break; default: default_spell(cmd, res); break; } }
static void _extended_whip_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Extended Crack"); break; case SPELL_DESC: var_set_string(res, "This spell extends the range of your whip based melee attack."); break; case SPELL_CAST: if (_whip_check()) { int dir = 5; bool b = FALSE; project_length = 2; if (get_aim_dir(&dir)) { project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL); b = TRUE; } var_set_bool(res, b); } else { msg_print("Whip techniques can only be used if you are fighting with whips."); var_set_bool(res, FALSE); } break; default: default_spell(cmd, res); break; } }
void holy_lance_spell(int cmd, variant *res) { int dam = spell_power(p_ptr->lev * 3); switch (cmd) { case SPELL_NAME: var_set_string(res, "Holy Lance"); break; case SPELL_DESC: var_set_string(res, "Fires a beam of pure holiness."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, dam)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (get_aim_dir(&dir)) { fire_beam(GF_HOLY_FIRE, dir, dam); var_set_bool(res, TRUE); } break; } default: default_spell(cmd, res); break; } }
void android_beam_cannon_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Beam Cannon"); break; case SPELL_DESC: var_set_string(res, ""); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(25 + p_ptr->lev * 3))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You fire a beam cannon."); fire_beam(GF_MISSILE, dir, spell_power(25 + p_ptr->lev * 3)); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void ice_bolt_spell(int cmd, variant *res) { int dd = 5 + p_ptr->lev / 4; int ds = 15; switch (cmd) { case SPELL_NAME: var_set_string(res, "Ice Bolt"); break; case SPELL_DESC: var_set_string(res, "Fires a bolt of ice."); break; case SPELL_INFO: var_set_string(res, info_damage(dd, spell_power(ds), 0)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_bolt(GF_ICE, dir, spell_power(damroll(dd, ds))); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void android_rocket_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Rocket Launcher"); break; case SPELL_DESC: var_set_string(res, "Launches a powerful rocket at your opponent."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(p_ptr->lev * 7))); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You launch a rocket."); fire_rocket(GF_ROCKET, dir, spell_power(p_ptr->lev * 7), 2); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void kiss_of_succubus_spell(int cmd, variant *res) { int dam = spell_power(100 + p_ptr->lev * 2); switch (cmd) { case SPELL_NAME: var_set_string(res, "Kiss of Succubus"); break; case SPELL_DESC: var_set_string(res, "Fires a ball of nexus."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, dam)); break; case SPELL_CAST: { int dir; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) break; fire_ball(GF_NEXUS, dir, dam, 4); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void _breathe_disintegration_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Breathe Disintegration"); break; case SPELL_DESC: var_set_string(res, "A disintegration breath. Not even the dungeon walls can withstand its power!"); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, p_ptr->chp / 4)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You breathe disintegration."); fire_ball(GF_DISINTEGRATE, dir, p_ptr->chp / 4, -3); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void lightning_bolt_spell(int cmd, variant *res) { int dd = 3 + p_ptr->lev / 4; int ds = 8; switch (cmd) { case SPELL_NAME: var_set_string(res, "Lightning Bolt"); break; case SPELL_DESC: var_set_string(res, "Fires a bolt or beam of electricity."); break; case SPELL_INFO: var_set_string(res, info_damage(dd, spell_power(ds), 0)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_bolt_or_beam(beam_chance(), GF_ELEC, dir, spell_power(damroll(dd, ds))); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void _shoot_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Shoot"); break; case SPELL_DESC: var_set_string(res, "Shoot a missile at chosen target."); break; case SPELL_INFO: var_set_string(res, info_damage(15, 15, 0)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You shoot a missile."); fire_bolt(GF_MISSILE, dir, damroll(15, 15)); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void brain_smash_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Brain Smash"); break; case SPELL_DESC: var_set_string(res, "Gaze intently at a single foe, causing damage, confusion and stunning"); break; case SPELL_INFO: var_set_string(res, info_damage(12, spell_power(12), 0)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_ball_hide(GF_BRAIN_SMASH, dir, spell_power(damroll(12, 12)), 0); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
static void _seeker_ray_spell(int cmd, variant *res) { int dd = 11 + (p_ptr->lev - 5)/4; int ds = 8; switch (cmd) { case SPELL_NAME: var_set_string(res, "Seeker Ray"); break; case SPELL_DESC: var_set_string(res, "Fires a beam of mana. If the beam hit a mirror, it breaks that mirror and reflects toward another mirror."); break; case SPELL_INFO: var_set_string(res, info_damage(spell_power(dd), ds, 0)); break; case SPELL_CAST: { int dir; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_beam(GF_SEEKER, dir, spell_power(damroll(dd,ds))); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void _breathe_time_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Breathe Time"); break; case SPELL_DESC: var_set_string(res, "Breathes time at chosen target"); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, p_ptr->chp / 5)); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; msg_print("You breathe time."); fire_ball(GF_TIME, dir, p_ptr->chp / 5, -3); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
void breathe_fire_II_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Breathe Fire"); break; case SPELL_DESC: var_set_string(res, "Breathes Fire at your opponent."); break; case SPELL_INFO: var_set_string(res, info_damage(0, 0, spell_power(p_ptr->chp*2/5))); break; case SPELL_COST_EXTRA: var_set_int(res, p_ptr->lev); break; case SPELL_CAST: { int dir = 0; var_set_bool(res, FALSE); if (get_aim_dir(&dir)) { stop_mouth(); msg_print("You breathe fire..."); fire_ball(GF_FIRE, dir, spell_power(p_ptr->chp*2/5), -1 - (p_ptr->lev / 20)); var_set_bool(res, TRUE); } break; } default: default_spell(cmd, res); break; } }
static void _shout_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Shout"); break; case SPELL_DESC: var_set_string(res, "Projects a cone of sound at a chosen foe."); break; case SPELL_INFO: var_set_string(res, info_damage(3 + (p_ptr->lev-1)/5, 4, 0)); break; case SPELL_CAST: { int dir; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_ball(GF_SOUND, dir, damroll(3 + (p_ptr->lev-1)/5, 4), -2); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }
static void _mirror_clashing_spell(int cmd, variant *res) { int dd = 8 + (p_ptr->lev - 5)/4; int ds = 8; int rad = p_ptr->lev > 20 ? spell_power((p_ptr->lev - 20)/8 + 1) : 0; switch (cmd) { case SPELL_NAME: var_set_string(res, "Mirror Clashing"); break; case SPELL_DESC: var_set_string(res, "Fires a ball of shards."); break; case SPELL_INFO: var_set_string(res, info_damage(spell_power(dd), ds, 0)); break; case SPELL_CAST: { int dir; var_set_bool(res, FALSE); if (!get_aim_dir(&dir)) return; fire_ball(GF_SHARDS, dir, spell_power(damroll(dd, ds)), rad); var_set_bool(res, TRUE); break; } default: default_spell(cmd, res); break; } }