X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspells1.c;h=3a5e7fe557b8158f8970b590b620cb495f1eca6f;hb=e70ba712cf4b753e7d3876f60980c87cfeec09e3;hp=9832e6af01ff4bbfcaa79e9190015f3ada7175f9;hpb=6f3a1d8fb3d0c49b1f02d41464fd5767f188f9f5;p=hengband%2Fhengband.git diff --git a/src/spells1.c b/src/spells1.c index 9832e6af0..3a5e7fe55 100644 --- a/src/spells1.c +++ b/src/spells1.c @@ -16,7 +16,9 @@ #include "trap.h" #include "object-curse.h" #include "player-damage.h" -#include "monster-hook.h" +#include "monsterrace-hook.h" +#include "melee.h" +#include "world.h" static int rakubadam_m; /*!< 振り落とされた際のダメージ量 */ @@ -1261,7 +1263,7 @@ static bool project_o(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P BIT_FLAGS flgs[TR_FLAG_SIZE]; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; KIND_OBJECT_IDX k_idx = 0; bool is_potion = FALSE; @@ -1685,7 +1687,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P bool heal_leper = FALSE; /* Hold the monster name */ - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; char m_poss[10]; PARAMETER_VALUE photo = 0; @@ -4032,7 +4034,6 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P /* Special message */ if (see_s_msg) { - /* Get the monster name */ monster_desc(killer, caster_ptr, 0); msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), killer); } @@ -4860,7 +4861,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) { - char m2_name[80]; + char m2_name[MAX_NLEN]; monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name); @@ -4900,11 +4901,9 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P if (((dam > 0) || get_angry) && !do_sleep) anger_monster(m_ptr); - /* Take note */ if ((fear || do_fear) && seen) { sound(SOUND_FLEE); - msg_format(_("%^sは恐怖して逃げ出した!", "%^s flees in terror!"), m_name); } @@ -4964,7 +4963,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P if (pet) mode |= PM_FORCE_PET; else mode |= (PM_NO_PET | PM_FORCE_FRIENDLY); - count += summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (pet ? p_ptr->lev*2/3+randint1(p_ptr->lev/2) : dun_level), 0, mode); + count += summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (pet ? p_ptr->lev*2/3+randint1(p_ptr->lev/2) : dun_level), 0, mode, '\0'); if (!one_in_(6)) break; } case 23: case 24: case 25: @@ -4979,7 +4978,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P int i = 0; if (one_in_(13)) { - while (i < 6) + while (i < A_MAX) { do { @@ -5005,7 +5004,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P { p_ptr->health_who = c_ptr->m_idx; p_ptr->redraw |= (PR_HEALTH); - redraw_stuff(); + handle_stuff(); } /* Verify this code */ @@ -5056,8 +5055,6 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P /* Mark the item as fully known */ q_ptr->ident |= (IDENT_MENTAL); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x); } @@ -5097,7 +5094,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID typ, BIT_FLAGS flg, int monspell) { int k = 0; - int rlev = 0; + DEPTH rlev = 0; /* Hack -- assume obvious */ bool obvious = TRUE; @@ -5112,7 +5109,7 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO monster_type *m_ptr = NULL; /* Monster name (for attacks) */ - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; /* Monster name (for damage) */ char killer[80]; @@ -5191,12 +5188,8 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO if (who > 0) { - /* Get the source monster */ m_ptr = &m_list[who]; - /* Extract the monster level */ rlev = (((&r_info[m_ptr->r_idx])->level >= 1) ? (&r_info[m_ptr->r_idx])->level : 1); - - /* Get the monster name */ monster_desc(m_name, m_ptr, 0); /* Get the monster's real name (gotten before polymorph!) */ @@ -5267,8 +5260,7 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO if (p_ptr->resist_pois) dam = (dam + 2) / 3; if (double_resist) dam = (dam + 2) / 3; - if ((!(double_resist || p_ptr->resist_pois)) && - one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW()) + if ((!(double_resist || p_ptr->resist_pois)) && one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW()) { do_dec_stat(A_CON); } @@ -5369,9 +5361,7 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO (void)set_stun(p_ptr->stun + plus_stun); } - if (!(p_ptr->resist_fire || - IS_OPPOSE_FIRE() || - p_ptr->immune_fire)) + if (!(p_ptr->resist_fire || IS_OPPOSE_FIRE() || p_ptr->immune_fire)) { inven_damage(set_acid_destroy, 3); } @@ -5645,14 +5635,9 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO msg_print(_("閃光のため非物質的な影の存在でいられなくなった。", "The light forces you out of your incorporeal shadow form.")); - p_ptr->redraw |= PR_MAP; - /* Update monsters */ + p_ptr->redraw |= (PR_MAP | PR_STATUS); p_ptr->update |= (PU_MONSTERS); p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); - - /* Redraw status bar */ - p_ptr->redraw |= (PR_STATUS); - } break; @@ -5724,7 +5709,7 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be...")); - for (k = 0; k < 6; k++) + for (k = 0; k < A_MAX; k++) { p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 7) / 8; if (p_ptr->stat_cur[k] < 3) p_ptr->stat_cur[k] = 3; @@ -5946,12 +5931,8 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO } learn_spell(monspell); - - /* Redraw mana */ p_ptr->redraw |= (PR_MANA); - - p_ptr->window |= (PW_PLAYER); - p_ptr->window |= (PW_SPELL); + p_ptr->window |= (PW_PLAYER | PW_SPELL); if (who > 0) { @@ -6174,7 +6155,7 @@ static bool project_p(MONSTER_IDX who, cptr who_name, int r, POSITION y, POSITIO if ((p_ptr->tim_eyeeye || hex_spelling(HEX_EYE_FOR_EYE)) && (get_damage > 0) && !p_ptr->is_dead && (who > 0)) { - char m_name_self[80]; + GAME_TEXT m_name_self[80]; /* hisself */ monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE); @@ -6238,27 +6219,13 @@ POSITION dist_to_line(POSITION y, POSITION x, POSITION y1, POSITION x1, POSITION */ bool in_disintegration_range(POSITION y1, POSITION x1, POSITION y2, POSITION x2) { - /* Delta */ - POSITION dx, dy; - - /* Absolute */ - POSITION ax, ay; - - /* Signs */ - POSITION sx, sy; - - /* Fractions */ - POSITION qx, qy; - - /* Scanners */ - POSITION tx, ty; - - /* Scale factors */ - POSITION f1, f2; - - /* Slope, or 1/Slope, of LOS */ - POSITION m; - + POSITION dx, dy; /* Delta */ + POSITION ax, ay; /* Absolute */ + POSITION sx, sy; /* Signs */ + POSITION qx, qy; /* Fractions */ + POSITION tx, ty; /* Scanners */ + POSITION f1, f2; /* Scale factors */ + POSITION m; /* Slope, or 1/Slope, of LOS */ /* Extract the offset */ dy = y2 - y1; @@ -6268,15 +6235,12 @@ bool in_disintegration_range(POSITION y1, POSITION x1, POSITION y2, POSITION x2) ay = ABS(dy); ax = ABS(dx); - /* Handle adjacent (or identical) grids */ if ((ax < 2) && (ay < 2)) return (TRUE); - /* Paranoia -- require "safe" origin */ /* if (!in_bounds(y1, x1)) return (FALSE); */ - /* Directly South/North */ if (!dx) { @@ -6327,12 +6291,10 @@ bool in_disintegration_range(POSITION y1, POSITION x1, POSITION y2, POSITION x2) return (TRUE); } - /* Extract some signs */ sx = (dx < 0) ? -1 : 1; sy = (dy < 0) ? -1 : 1; - /* Vertical "knights" */ if (ax == 1) { @@ -6351,7 +6313,6 @@ bool in_disintegration_range(POSITION y1, POSITION x1, POSITION y2, POSITION x2) } } - /* Calculate scale factor div 2 */ f2 = (ax * ay); @@ -6743,7 +6704,7 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da bool jump = FALSE; /* Attacker's name (prepared before polymorph)*/ - char who_name[80]; + GAME_TEXT who_name[MAX_NLEN]; /* Can the player see the source of this effect? */ bool see_s_msg = TRUE; @@ -6889,8 +6850,8 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da { u16b p; - byte a; - char c; + TERM_COLOR a; + SYMBOL_CODE c; /* Obtain the bolt pict */ p = bolt_pict(oy, ox, y, x, typ); @@ -6932,50 +6893,50 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da Term_xtra(TERM_XTRA_DELAY, msec); } } - if(project_o(0,0,y,x,dam,GF_SEEKER))notice=TRUE; - if( is_mirror_grid(&cave[y][x])) + if (project_o(0, 0, y, x, dam, GF_SEEKER))notice = TRUE; + if (is_mirror_grid(&cave[y][x])) { - /* The target of monsterspell becomes tha mirror(broken) */ - monster_target_y=(s16b)y; - monster_target_x=(s16b)x; + /* The target of monsterspell becomes tha mirror(broken) */ + monster_target_y = y; + monster_target_x = x; remove_mirror(y, x); next_mirror(&oy, &ox, y, x); - path_n = i+project_path(&(path_g[i+1]), (project_length ? project_length : MAX_RANGE), y, x, oy, ox, flg); - for(j = last_i; j <= i; j++) + path_n = i + project_path(&(path_g[i + 1]), (project_length ? project_length : MAX_RANGE), y, x, oy, ox, flg); + for (j = last_i; j <= i; j++) { y = GRID_Y(path_g[j]); x = GRID_X(path_g[j]); - if(project_m(0, 0, y, x, dam, GF_SEEKER, flg, TRUE)) notice=TRUE; - if(!who && (project_m_n==1) && !jump ){ - if(cave[project_m_y][project_m_x].m_idx >0 ){ - monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; + if (project_m(0, 0, y, x, dam, GF_SEEKER, flg, TRUE)) notice = TRUE; + if (!who && (project_m_n == 1) && !jump) { + if (cave[project_m_y][project_m_x].m_idx > 0) { + monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; - if (m_ptr->ml) - { - /* Hack -- auto-recall */ - if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (m_ptr->ml) + { + /* Hack -- auto-recall */ + if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx); - /* Hack - auto-track */ - health_track(cave[project_m_y][project_m_x].m_idx); + /* Hack - auto-track */ + health_track(cave[project_m_y][project_m_x].m_idx); + } } - } } - (void)project_f(0,0,y,x,dam,GF_SEEKER); + (void)project_f(0, 0, y, x, dam, GF_SEEKER); } last_i = i; } } for(i = last_i ; i < path_n ; i++) { - int py, px; + POSITION py, px; py = GRID_Y(path_g[i]); px = GRID_X(path_g[i]); - if(project_m(0, 0, py, px, dam, GF_SEEKER, flg, TRUE)) + if (project_m(0, 0, py, px, dam, GF_SEEKER, flg, TRUE)) notice = TRUE; - if(!who && (project_m_n==1) && !jump ){ - if(cave[project_m_y][project_m_x].m_idx > 0) + if (!who && (project_m_n == 1) && !jump) { + if (cave[project_m_y][project_m_x].m_idx > 0) { monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; @@ -7004,11 +6965,11 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da for (i = 0; i < path_n; ++i) { - int oy = y; - int ox = x; + POSITION oy = y; + POSITION ox = x; - int ny = GRID_Y(path_g[i]); - int nx = GRID_X(path_g[i]); + POSITION ny = GRID_Y(path_g[i]); + POSITION nx = GRID_X(path_g[i]); /* Advance */ y = ny; @@ -7027,8 +6988,8 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da { u16b p; - byte a; - char c; + TERM_COLOR a; + SYMBOL_CODE c; /* Obtain the bolt pict */ p = bolt_pict(oy, ox, y, x, typ); @@ -7103,7 +7064,7 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da } for( i = 0; i < path_n ; i++ ) { - int py, px; + POSITION py, px; py = GRID_Y(path_g[i]); px = GRID_X(path_g[i]); (void)project_m(0, 0, py, px, dam, GF_SUPER_RAY, flg, TRUE); @@ -7129,11 +7090,11 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da /* Project along the path */ for (i = 0; i < path_n; ++i) { - int oy = y; - int ox = x; + POSITION oy = y; + POSITION ox = x; - int ny = GRID_Y(path_g[i]); - int nx = GRID_X(path_g[i]); + POSITION ny = GRID_Y(path_g[i]); + POSITION nx = GRID_X(path_g[i]); if (flg & PROJECT_DISI) { @@ -7171,8 +7132,8 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da { u16b p; - byte a; - char c; + TERM_COLOR a; + SYMBOL_CODE c; /* Obtain the bolt pict */ p = bolt_pict(oy, ox, y, x, typ); @@ -7333,8 +7294,8 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da { u16b p; - byte a; - char c; + TERM_COLOR a; + SYMBOL_CODE c; drawn = TRUE; @@ -7388,10 +7349,7 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da } } - - /* Update stuff if needed */ - if (p_ptr->update) update_stuff(); - + update_creature(p_ptr); if (flg & PROJECT_KILL) { @@ -7432,8 +7390,7 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da } } - /* Update stuff if needed */ - if (p_ptr->update) update_stuff(); + update_creature(p_ptr); /* Check objects */ if (flg & (PROJECT_ITEM)) @@ -7732,7 +7689,7 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da if (p_ptr->riding) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, &m_list[p_ptr->riding], 0);