From 62b59943dfc636bb56a12d89a9b9e6d61f083aff Mon Sep 17 00:00:00 2001 From: Deskull Date: Sun, 16 Sep 2018 21:41:08 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#37353=20=E6=9C=AA=E3=82=B3?= =?utf8?q?=E3=83=9F=E3=83=83=E3=83=88=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?utf8?q?=E8=BF=BD=E5=8A=A0=E3=80=82=20orz=20Add=20non-committed=20files?= =?utf8?q?=20:(.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/cmd-item.h | 17 ++ src/realm-crusade.c | 617 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/realm-crusade.h | 1 + 3 files changed, 635 insertions(+) create mode 100644 src/cmd-item.h create mode 100644 src/realm-crusade.c create mode 100644 src/realm-crusade.h diff --git a/src/cmd-item.h b/src/cmd-item.h new file mode 100644 index 000000000..aaad3be27 --- /dev/null +++ b/src/cmd-item.h @@ -0,0 +1,17 @@ +/* cmd3-item.h */ + +extern void do_cmd_inven(void); +extern void do_cmd_equip(void); +extern void do_cmd_wield(void); +extern void do_cmd_takeoff(void); +extern void do_cmd_drop(void); +extern void do_cmd_destroy(void); +extern void do_cmd_observe(void); +extern void do_cmd_uninscribe(void); +extern void do_cmd_inscribe(void); +extern void do_cmd_refill(void); +extern void do_cmd_target(void); +extern void do_cmd_look(void); +extern void do_cmd_locate(void); +extern void do_cmd_query_symbol(void); +extern void do_cmd_use(void); \ No newline at end of file diff --git a/src/realm-crusade.c b/src/realm-crusade.c new file mode 100644 index 000000000..043729e5f --- /dev/null +++ b/src/realm-crusade.c @@ -0,0 +1,617 @@ +#include "angband.h" +#include "cmd-spell.h" + + + +/*! +* @brief ”jŽ×—̈斂–@‚ÌŠeˆ—‚ðs‚¤ +* @param spell –‚–@ID +* @param mode ˆ—“à—e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST) +* @return SPELL_NAME / SPELL_DESC / SPELL_INFO Žž‚É‚Í•¶Žš—ñƒ|ƒCƒ“ƒ^‚ð•Ô‚·BSPELL_CASTŽž‚ÍNULL•¶Žš—ñ‚ð•Ô‚·B +*/ +cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode) +{ + bool name = (mode == SPELL_NAME) ? TRUE : FALSE; + bool desc = (mode == SPELL_DESC) ? TRUE : FALSE; + bool info = (mode == SPELL_INFO) ? TRUE : FALSE; + bool cast = (mode == SPELL_CAST) ? TRUE : FALSE; + + int dir; + int plev = p_ptr->lev; + + switch (spell) + { + case 0: + if (name) return _("’¦”±", "Punishment"); + if (desc) return _("“dŒ‚‚̃{ƒ‹ƒg‚à‚µ‚­‚̓r[ƒ€‚ð•ú‚B", "Fires a bolt or beam of lightning."); + + { + int dice = 3 + (plev - 1) / 5; + int sides = 4; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides)); + } + } + break; + + case 1: + if (name) return _("Ž×ˆ«‘¶ÝŠ´’m", "Detect Evil"); + if (desc) return _("‹ß‚­‚̎׈«‚ȃ‚ƒ“ƒXƒ^[‚ðŠ´’m‚·‚éB", "Detects all evil monsters in your vicinity."); + + { + int rad = DETECT_RAD_DEFAULT; + + if (info) return info_radius(rad); + + if (cast) + { + detect_monsters_evil(rad); + } + } + break; + + case 2: + if (name) return _("‹°•|œ‹Ž", "Remove Fear"); + if (desc) return _("‹°•|‚ðŽæ‚菜‚­B", "Removes fear."); + + { + if (cast) + { + set_afraid(0); + } + } + break; + + case 3: + if (name) return _("ˆÐˆ³", "Scare Monster"); + if (desc) return _("ƒ‚ƒ“ƒXƒ^[1‘Ì‚ð‹°•|‚³‚¹‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Attempts to scare a monster."); + + { + int power = plev; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fear_monster(dir, power); + } + } + break; + + case 4: + if (name) return _("¹ˆæ", "Sanctuary"); + if (desc) return _("—אڂµ‚½‘S‚Ẵ‚ƒ“ƒXƒ^[‚𖰂点‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Attempts to sleep monsters in the adjacent squares."); + + { + int power = plev; + + if (info) return info_power(power); + + if (cast) + { + sleep_monsters_touch(); + } + } + break; + + case 5: + if (name) return _("“üŒû", "Portal"); + if (desc) return _("’†‹——£‚̃eƒŒƒ|[ƒg‚ð‚·‚éB", "Teleport medium distance."); + + { + POSITION range = 25 + plev / 2; + + if (info) return info_range(range); + + if (cast) + { + teleport_player(range, 0L); + } + } + break; + + case 6: + if (name) return _("ƒXƒ^[ƒ_ƒXƒg", "Star Dust"); + if (desc) return _("ƒ^[ƒQƒbƒg•t‹ß‚É‘MŒõ‚̃{ƒ‹ƒg‚ð˜AŽË‚·‚éB", "Fires many bolts of light near the target."); + + { + int dice = 3 + (plev - 1) / 9; + int sides = 2; + + if (info) return info_multi_damage_dice(dice, sides); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_blast(GF_LITE, dir, dice, sides, 10, 3); + } + } + break; + + case 7: + if (name) return _("g‘̏ò‰»", "Purify"); + if (desc) return _("A“ŁAžNžO‚©‚ç‘S‰õ‚·‚éB", "Heals all cut, stun and poison status."); + + { + if (cast) + { + set_cut(0); + set_poisoned(0); + set_stun(0); + } + } + break; + + case 8: + if (name) return _("Ž×ˆ«”ò‚΂µ", "Scatter Evil"); + if (desc) return _("Ž×ˆ«‚ȃ‚ƒ“ƒXƒ^[1‘Ì‚ðƒeƒŒƒ|[ƒg‚³‚¹‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Attempts to teleport an evil monster away."); + + { + int power = MAX_SIGHT * 5; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball(GF_AWAY_EVIL, dir, power, 0); + } + } + break; + + case 9: + if (name) return _("¹‚È‚éŒõ‹…", "Holy Orb"); + if (desc) return _("¹‚È‚é—Í‚ð‚à‚•óŽì‚ð•ú‚BŽ×ˆ«‚ȃ‚ƒ“ƒXƒ^[‚ɑ΂µ‚Ä‘å‚«‚ȃ_ƒ[ƒW‚ð—^‚¦‚邪A‘P—ǂȃ‚ƒ“ƒXƒ^[‚É‚ÍŒø‰Ê‚ª‚È‚¢B", + "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters."); + + { + int dice = 3; + int sides = 6; + int rad = (plev < 30) ? 2 : 3; + int base; + + if (p_ptr->pclass == CLASS_PRIEST || + p_ptr->pclass == CLASS_HIGH_MAGE || + p_ptr->pclass == CLASS_SORCERER) + base = plev + plev / 2; + else + base = plev + plev / 4; + + + if (info) return info_damage(dice, sides, base); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad); + } + } + break; + + case 10: + if (name) return _("ˆ«–‚•¥‚¢", "Exorcism"); + if (desc) return _("Ž‹ŠE“à‚Ì‘S‚ẴAƒ“ƒfƒbƒh‹y‚ш«–‚‚Ƀ_ƒ[ƒW‚ð—^‚¦AŽ×ˆ«‚ȃ‚ƒ“ƒXƒ^[‚ð‹°•|‚³‚¹‚éB", + "Damages all undead and demons in sight, and scares all evil monsters in sight."); + + { + int sides = plev; + int power = plev; + + if (info) return info_damage(1, sides, 0); + + if (cast) + { + dispel_undead(randint1(sides)); + dispel_demons(randint1(sides)); + turn_evil(power); + } + } + break; + + case 11: + if (name) return _("‰ðŽô", "Remove Curse"); + if (desc) return _("ƒAƒCƒeƒ€‚É‚©‚©‚Á‚½Žã‚¢Žô‚¢‚ð‰ðœ‚·‚éB", "Removes normal curses from equipped items."); + + { + if (cast) + { + if (remove_curse()) + { + msg_print(_("’N‚©‚ÉŒ©Žç‚ç‚ê‚Ä‚¢‚é‚悤‚È‹C‚ª‚·‚éB", "You feel as if someone is watching over you.")); + } + } + } + break; + + case 12: + if (name) return _("“§–¾Ž‹”F", "Sense Unseen"); + if (desc) return _("ˆê’莞ŠÔA“§–¾‚È‚à‚Ì‚ªŒ©‚¦‚é‚悤‚É‚È‚éB", "Gives see invisible for a while."); + + { + int base = 24; + + if (info) return info_duration(base, base); + + if (cast) + { + set_tim_invis(randint1(base) + base, FALSE); + } + } + break; + + case 13: + if (name) return _("‘Ύ׈«Œ‹ŠE", "Protection from Evil"); + if (desc) return _("Ž×ˆ«‚ȃ‚ƒ“ƒXƒ^[‚̍UŒ‚‚ð–h‚®ƒoƒŠƒA‚𒣂éB", "Gives aura which protect you from evil monster's physical attack."); + + { + int base = 25; + int sides = 3 * plev; + + if (info) return info_duration(base, sides); + + if (cast) + { + set_protevil(randint1(sides) + base, FALSE); + } + } + break; + + case 14: + if (name) return _("Ù‚«‚Ì—‹", "Judgment Thunder"); + if (desc) return _("‹­—Í‚È“dŒ‚‚̃{ƒ‹ƒg‚ð•ú‚B", "Fires a powerful bolt of lightning."); + + { + HIT_POINT dam = plev * 5; + + if (info) return info_damage(0, 0, dam); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_bolt(GF_ELEC, dir, dam); + } + } + break; + + case 15: + if (name) return _("¹‚È‚éŒäŒ¾—t", "Holy Word"); + if (desc) return _("Ž‹ŠE“à‚̎׈«‚È‘¶Ý‚É‘å‚«‚ȃ_ƒ[ƒW‚ð—^‚¦A‘Ì—Í‚ð‰ñ•œ‚µA“ŁA‹°•|AžNžOó‘ԁA•‰‚©‚ç‘S‰õ‚·‚éB", + "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status."); + + { + int dam_sides = plev * 6; + int heal = 100; + + if (info) return format(_("‘¹:1d%d/‰ñ%d", "dam:d%d/h%d"), dam_sides, heal); + if (cast) + { + dispel_evil(randint1(dam_sides)); + hp_player(heal); + set_afraid(0); + set_poisoned(0); + set_stun(0); + set_cut(0); + } + } + break; + + case 16: + if (name) return _("ŠJ‚©‚ꂽ“¹", "Unbarring Ways"); + if (desc) return _("ˆê’¼üã‚Ì‘S‚Ä‚Ì㩂Ɣà‚ð”j‰ó‚·‚éB", "Fires a beam which destroy traps and doors."); + + { + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + destroy_door(dir); + } + } + break; + + case 17: + if (name) return _("••–‚", "Arrest"); + if (desc) return _("Ž×ˆ«‚ȃ‚ƒ“ƒXƒ^[‚Ì“®‚«‚ðŽ~‚ß‚éB", "Attempts to paralyze an evil monster."); + + { + int power = plev * 2; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + stasis_evil(dir); + } + } + break; + + case 18: + if (name) return _("¹‚È‚éƒI[ƒ‰", "Holy Aura"); + if (desc) return _("ˆê’莞ŠÔAŽ×ˆ«‚ȃ‚ƒ“ƒXƒ^[‚ð‚Â‚¯‚鐹‚È‚éƒI[ƒ‰‚𓾂éB", + "Gives aura of holy power which injures evil monsters which attacked you for a while."); + + { + int base = 20; + + if (info) return info_duration(base, base); + + if (cast) + { + set_tim_sh_holy(randint1(base) + base, FALSE); + } + } + break; + + case 19: + if (name) return _("ƒAƒ“ƒfƒbƒh&ˆ«–‚‘ÞŽU", "Dispel Undead & Demons"); + if (desc) return _("Ž‹ŠE“à‚Ì‘S‚ẴAƒ“ƒfƒbƒh‹y‚ш«–‚‚Ƀ_ƒ[ƒW‚ð—^‚¦‚éB", "Damages all undead and demons in sight."); + + { + int sides = plev * 4; + + if (info) return info_damage(1, sides, 0); + + if (cast) + { + dispel_undead(randint1(sides)); + dispel_demons(randint1(sides)); + } + } + break; + + case 20: + if (name) return _("Ž×ˆ«‘ÞŽU", "Dispel Evil"); + if (desc) return _("Ž‹ŠE“à‚Ì‘S‚Ă̎׈«‚ȃ‚ƒ“ƒXƒ^[‚Ƀ_ƒ[ƒW‚ð—^‚¦‚éB", "Damages all evil monsters in sight."); + + { + int sides = plev * 4; + + if (info) return info_damage(1, sides, 0); + + if (cast) + { + dispel_evil(randint1(sides)); + } + } + break; + + case 21: + if (name) return _("¹‚È‚én", "Holy Blade"); + if (desc) return _("’ʏí‚Ì•Ší‚ɖŎׂ̑®«‚ð‚‚¯‚éB", "Makes current weapon especially deadly against evil monsters."); + + { + if (cast) + { + brand_weapon(13); + } + } + break; + + case 22: + if (name) return _("ƒXƒ^[ƒo[ƒXƒg", "Star Burst"); + if (desc) return _("‹‘å‚È‘MŒõ‚Ì‹…‚ð•ú‚B", "Fires a huge ball of powerful light."); + + { + HIT_POINT dam = 100 + plev * 2; + int rad = 4; + + if (info) return info_damage(0, 0, dam); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_ball(GF_LITE, dir, dam, rad); + } + } + break; + + case 23: + if (name) return _("“VŽg¢Š«", "Summon Angel"); + if (desc) return _("“VŽg‚ð1‘̏¢Š«‚·‚éB", "Summons an angel."); + + { + if (cast) + { + bool pet = !one_in_(3); + u32b flg = 0L; + + if (pet) flg |= PM_FORCE_PET; + else flg |= PM_NO_PET; + if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP; + + if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg)) + { + if (pet) + { + msg_print(_("u‚²—p‚Å‚²‚´‚¢‚Ü‚·‚©A‚²Žål—lv", "'What is thy bidding... Master?'")); + } + else + { + msg_print(_("u‰ä‚Í“ð‚̉º–l‚É‚ ‚炸I ˆ«sŽÒ‚æA‰÷‚¢‰ü‚ß‚æIv", "Mortal! Repent of thy impiousness.")); + } + } + } + } + break; + + case 24: + if (name) return _("Žm‹C‚—g", "Heroism"); + if (desc) return _("ˆê’莞ŠÔAƒq[ƒ[‹C•ª‚É‚È‚éB", "Removes fear, and gives bonus to hit and 10 more HP for a while."); + + { + int base = 25; + + if (info) return info_duration(base, base); + + if (cast) + { + set_hero(randint1(base) + base, FALSE); + hp_player(10); + set_afraid(0); + } + } + break; + + case 25: + if (name) return _("Žô‚¢‘ÞŽU", "Dispel Curse"); + if (desc) return _("ƒAƒCƒeƒ€‚É‚©‚©‚Á‚½‹­—Í‚ÈŽô‚¢‚ð‰ðœ‚·‚éB", "Removes normal and heavy curse from equipped items."); + + { + if (cast) + { + if (remove_all_curse()) + { + msg_print(_("’N‚©‚ÉŒ©Žç‚ç‚ê‚Ä‚¢‚é‚悤‚È‹C‚ª‚·‚éB", "You feel as if someone is watching over you.")); + } + } + } + break; + + case 26: + if (name) return _("Ž×ˆ«’Ç•ú", "Banish Evil"); + if (desc) return _("Ž‹ŠE“à‚Ì‘S‚Ă̎׈«‚ȃ‚ƒ“ƒXƒ^[‚ðƒeƒŒƒ|[ƒg‚³‚¹‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", + "Teleports all evil monsters in sight away unless resisted."); + + { + int power = 100; + + if (info) return info_power(power); + + if (cast) + { + if (banish_evil(power)) + { + msg_print(_("_¹‚È—Í‚ªŽ×ˆ«‚ð‘Å‚¿•¥‚Á‚½I", "The holy power banishes evil!")); + } + } + } + break; + + case 27: + if (name) return _("ƒnƒ‹ƒ}ƒQƒhƒ“", "Armageddon"); + if (desc) return _("Žü•Ó‚̃AƒCƒeƒ€Aƒ‚ƒ“ƒXƒ^[A’nŒ`‚ð”j‰ó‚·‚éB", "Destroy everything in nearby area."); + + { + int base = 12; + int sides = 4; + + if (cast) + { + destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE); + } + } + break; + + case 28: + if (name) return _("–Ú‚É‚Í–Ú‚ð", "An Eye for an Eye"); + if (desc) return _("ˆê’莞ŠÔAŽ©•ª‚ªƒ_ƒ[ƒW‚ðŽó‚¯‚½‚Æ‚«‚ɍUŒ‚‚ðs‚Á‚½ƒ‚ƒ“ƒXƒ^[‚ɑ΂µ‚Ä“¯“™‚̃_ƒ[ƒW‚ð—^‚¦‚éB", + "Gives special aura for a while. When you are attacked by a monster, the monster are injured with same amount of damage as you take."); + + { + int base = 10; + + if (info) return info_duration(base, base); + + if (cast) + { + set_tim_eyeeye(randint1(base) + base, FALSE); + } + } + break; + + case 29: + if (name) return _("_‚Ì“{‚è", "Wrath of the God"); + if (desc) return _("ƒ^[ƒQƒbƒg‚ÌŽüˆÍ‚É•ª‰ð‚Ì‹…‚𑽐”—Ž‚Æ‚·B", "Drops many balls of disintegration near the target."); + + { + HIT_POINT dam = plev * 3 + 25; + int rad = 2; + + if (info) return info_multi_damage(dam); + + if (cast) + { + if (!cast_wrath_of_the_god(dam, rad)) return NULL; + } + } + break; + + case 30: + if (name) return _("_ˆÐ", "Divine Intervention"); + if (desc) return _("—אڂ·‚郂ƒ“ƒXƒ^[‚ɐ¹‚È‚éƒ_ƒ[ƒW‚ð—^‚¦AŽ‹ŠE“à‚̃‚ƒ“ƒXƒ^[‚Ƀ_ƒ[ƒWAŒ¸‘¬AžNžOA¬—A‹°•|A–°‚è‚ð—^‚¦‚éB‚³‚ç‚É‘Ì—Í‚ð‰ñ•œ‚·‚éB", + "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP."); + + { + int b_dam = plev * 11; + int d_dam = plev * 4; + int heal = 100; + int power = plev * 4; + + if (info) return format(_("‰ñ%d/‘¹%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam / 2); + if (cast) + { + project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1); + dispel_monsters(d_dam); + slow_monsters(plev); + stun_monsters(power); + confuse_monsters(power); + turn_monsters(power); + stasis_monsters(power); + hp_player(heal); + } + } + break; + + case 31: + if (name) return _("¹í", "Crusade"); + if (desc) return _("Ž‹ŠE“à‚Ì‘P—ǂȃ‚ƒ“ƒXƒ^[‚ðƒyƒbƒg‚É‚µ‚悤‚Æ‚µA‚È‚ç‚È‚©‚Á‚½ê‡‹y‚Ñ‘P—Ç‚Å‚È‚¢ƒ‚ƒ“ƒXƒ^[‚ð‹°•|‚³‚¹‚éB‚³‚ç‚É‘½”‚̉Á‘¬‚³‚ꂽ‹RŽm‚ð¢Š«‚µAƒq[ƒ[Aj•ŸA‰Á‘¬A‘Ύ׈«Œ‹ŠE‚𓾂éB", + "Attempts to charm all good monsters in sight, and scare all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil."); + + { + if (cast) + { + int base = 25; + int sp_sides = 20 + plev; + int sp_base = plev; + + int i; + crusade(); + for (i = 0; i < 12; i++) + { + int attempt = 10; + POSITION my = 0, mx = 0; + + while (attempt--) + { + scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0); + + /* Require empty grids */ + 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 | PM_HASTE)); + } + set_hero(randint1(base) + base, FALSE); + set_blessed(randint1(base) + base, FALSE); + set_fast(randint1(sp_sides) + sp_base, FALSE); + set_protevil(randint1(base) + base, FALSE); + set_afraid(0); + } + } + break; + } + + return ""; +} + diff --git a/src/realm-crusade.h b/src/realm-crusade.h new file mode 100644 index 000000000..652eb55b0 --- /dev/null +++ b/src/realm-crusade.h @@ -0,0 +1 @@ +extern cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode); -- 2.11.0