X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fxtra1.c;h=39e13b6607de48624ef78e1e98b67a549f307605;hb=b87eb07f1d5fe0bc3923868e2609b966a9c68a44;hp=70646d0704599b429e1fd414917c2c155a48161e;hpb=b199c52c6467f12443b6a55837cf5f057ebb8a0e;p=hengband%2Fhengband.git diff --git a/src/xtra1.c b/src/xtra1.c index 70646d070..39e13b660 100644 --- a/src/xtra1.c +++ b/src/xtra1.c @@ -161,14 +161,14 @@ void prt_time(void) extract_day_hour_min(&day, &hour, &min); /* Dump the info itself */ - c_put_str(TERM_WHITE, format( #ifdef JP - "%2dÆüÌÜ", + if (day < 1000) c_put_str(TERM_WHITE, format("%2dÆüÌÜ", day), ROW_DAY, COL_DAY); + else c_put_str(TERM_WHITE, "***ÆüÌÜ", ROW_DAY, COL_DAY); #else - "Day %-2d", + if (day < 1000) c_put_str(TERM_WHITE, format("Day%3d", day), ROW_DAY, COL_DAY); + else c_put_str(TERM_WHITE, "Day***", ROW_DAY, COL_DAY); #endif - day), ROW_DAY, COL_DAY); - + c_put_str(TERM_WHITE, format("%2d:%02d", hour, min), ROW_DAY, COL_DAY+7); } @@ -323,7 +323,20 @@ static void prt_stat(int stat) #define BAR_SUPERSTEALTH 50 #define BAR_RECALL 51 #define BAR_ALTER 52 - +#define BAR_SHCOLD 53 +#define BAR_SHELEC 54 +#define BAR_SHSHADOW 55 +#define BAR_MIGHT 56 +#define BAR_BUILD 57 +#define BAR_ANTIMULTI 58 +#define BAR_ANTITELE 59 +#define BAR_ANTIMAGIC 60 +#define BAR_PATIENCE 61 +#define BAR_REVENGE 62 +#define BAR_RUNESWORD 63 +#define BAR_VAMPILIC 64 +#define BAR_CURE 65 +#define BAR_ESP_EVIL 66 static struct { byte attr; @@ -385,12 +398,27 @@ static struct { {TERM_YELLOW, "±£", "Ķ±£Ì©"}, {TERM_WHITE, "µ¢", "µ¢´Ô"}, {TERM_WHITE, "¸½", "¸½¼ÂÊÑÍÆ"}, + /* Hex */ + {TERM_WHITE, "¥ª", "ɹ¥ª¡¼¥é"}, + {TERM_BLUE, "¥ª", "ÅÅ¥ª¡¼¥é"}, + {TERM_L_DARK, "¥ª", "±Æ¥ª¡¼¥é"}, + {TERM_YELLOW, "ÏÓ", "ÏÓÎ϶¯²½"}, + {TERM_RED, "Æù", "ÆùÂζ¯²½"}, + {TERM_L_DARK, "¿£", "È¿Áý¿£"}, + {TERM_ORANGE, "¥Æ", "È¿¥Æ¥ì¥Ý"}, + {TERM_RED, "Ëâ", "È¿ËâË¡"}, + {TERM_SLATE, "²æ", "²æËý"}, + {TERM_SLATE, "Àë", "Àë¹ð"}, + {TERM_L_DARK, "·õ", "Ëâ·õ²½"}, + {TERM_RED, "µÛ", "µÛ·ìÂÇ·â"}, + {TERM_WHITE, "²ó", "²óÉü"}, + {TERM_L_DARK, "´¶", "¼Ù°­´¶ÃÎ"}, {0, NULL, NULL} }; #else = { {TERM_YELLOW, "Ts", "Tsuyoshi"}, - {TERM_VIOLET, "Hu", "Hullc"}, + {TERM_VIOLET, "Ha", "Halluc"}, {TERM_L_DARK, "Bl", "Blind"}, {TERM_RED, "Pa", "Paralyzed"}, {TERM_VIOLET, "Cf", "Confused"}, @@ -442,6 +470,21 @@ static struct { {TERM_YELLOW, "Stlt", "Stealth"}, {TERM_WHITE, "Rc", "Recall"}, {TERM_WHITE, "Al", "Alter"}, + /* Hex */ + {TERM_WHITE, "SCo", "SCold"}, + {TERM_BLUE, "SEl", "SElec"}, + {TERM_L_DARK, "SSh", "SShadow"}, + {TERM_YELLOW, "EMi", "ExMight"}, + {TERM_RED, "Bu", "BuildUp"}, + {TERM_L_DARK, "AMl", "AntiMulti"}, + {TERM_ORANGE, "AT", "AntiTele"}, + {TERM_RED, "AM", "AntiMagic"}, + {TERM_SLATE, "Pa", "Patience"}, + {TERM_SLATE, "Rv", "Revenge"}, + {TERM_L_DARK, "Rs", "RuneSword"}, + {TERM_RED, "Vm", "Vampiric"}, + {TERM_WHITE, "Cu", "Cure"}, + {TERM_L_DARK, "ET", "EvilTele"}, {0, NULL, NULL} }; #endif @@ -455,7 +498,7 @@ static struct { */ static void prt_status(void) { - u32b bar_flags[2]; + u32b bar_flags[3]; int wid, hgt, row_statbar, max_col_statbar; int i, col = 0, num = 0; int space = 2; @@ -466,7 +509,7 @@ static void prt_status(void) Term_erase(0, row_statbar, max_col_statbar); - bar_flags[0] = bar_flags[1] = 0L; + bar_flags[0] = bar_flags[1] = bar_flags[2] = 0L; /* Tsuyoshi */ if (p_ptr->tsuyoshi) ADD_FLG(BAR_TSUYOSHI); @@ -599,6 +642,35 @@ static void prt_status(void) /* An Eye for an Eye */ if (p_ptr->tim_eyeeye) ADD_FLG(BAR_EYEEYE); + /* Hex spells */ + if (p_ptr->realm1 == REALM_HEX) + { + if (hex_spelling(HEX_BLESS)) ADD_FLG(BAR_BLESSED); + if (hex_spelling(HEX_DEMON_AURA)) { ADD_FLG(BAR_SHFIRE); ADD_FLG(BAR_REGENERATION); } + if (hex_spelling(HEX_XTRA_MIGHT)) ADD_FLG(BAR_MIGHT); + if (hex_spelling(HEX_DETECT_EVIL)) ADD_FLG(BAR_ESP_EVIL); + if (hex_spelling(HEX_ICE_ARMOR)) ADD_FLG(BAR_SHCOLD); + if (hex_spelling(HEX_RUNESWORD)) ADD_FLG(BAR_RUNESWORD); + if (hex_spelling(HEX_BUILDING)) ADD_FLG(BAR_BUILD); + if (hex_spelling(HEX_ANTI_TELE)) ADD_FLG(BAR_ANTITELE); + if (hex_spelling(HEX_SHOCK_CLOAK)) ADD_FLG(BAR_SHELEC); + if (hex_spelling(HEX_SHADOW_CLOAK)) ADD_FLG(BAR_SHSHADOW); + if (hex_spelling(HEX_CONFUSION)) ADD_FLG(BAR_ATTKCONF); + if (hex_spelling(HEX_EYE_FOR_EYE)) ADD_FLG(BAR_EYEEYE); + if (hex_spelling(HEX_ANTI_MULTI)) ADD_FLG(BAR_ANTIMULTI); + if (hex_spelling(HEX_VAMP_BLADE)) ADD_FLG(BAR_VAMPILIC); + if (hex_spelling(HEX_ANTI_MAGIC)) ADD_FLG(BAR_ANTIMAGIC); + if (hex_spelling(HEX_CURE_LIGHT) || + hex_spelling(HEX_CURE_SERIOUS) || + hex_spelling(HEX_CURE_CRITICAL)) ADD_FLG(BAR_CURE); + + if (p_ptr->magic_num2[2]) + { + if (p_ptr->magic_num2[1] == 1) ADD_FLG(BAR_PATIENCE); + if (p_ptr->magic_num2[1] == 2) ADD_FLG(BAR_REVENGE); + } + } + /* Calcurate length */ for (i = 0; bar[i].sstr; i++) { @@ -860,7 +932,7 @@ static void prt_hp(void) put_str("HP", ROW_CURHP, COL_CURHP); /* ¸½ºß¤Î¥Ò¥Ã¥È¥Ý¥¤¥ó¥È */ - sprintf(tmp, "%4ld", p_ptr->chp); + sprintf(tmp, "%4ld", (long int)p_ptr->chp); if (p_ptr->chp >= p_ptr->mhp) { @@ -881,7 +953,7 @@ static void prt_hp(void) put_str( "/", ROW_CURHP, COL_CURHP + 7 ); /* ºÇÂç¥Ò¥Ã¥È¥Ý¥¤¥ó¥È */ - sprintf(tmp, "%4ld", p_ptr->mhp); + sprintf(tmp, "%4ld", (long int)p_ptr->mhp); color = TERM_L_GREEN; c_put_str(color, tmp, ROW_CURHP, COL_CURHP + 8 ); @@ -911,7 +983,7 @@ static void prt_sp(void) #endif /* ¸½ºß¤Î¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È */ - sprintf(tmp, "%4ld", p_ptr->csp); + sprintf(tmp, "%4ld", (long int)p_ptr->csp); if (p_ptr->csp >= p_ptr->msp) { @@ -932,7 +1004,7 @@ static void prt_sp(void) put_str( "/", ROW_CURSP, COL_CURSP + 7 ); /* ºÇÂç¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È */ - sprintf(tmp, "%4ld", p_ptr->msp); + sprintf(tmp, "%4ld", (long int)p_ptr->msp); color = TERM_L_GREEN; c_put_str(color, tmp, ROW_CURSP, COL_CURSP + 8); @@ -978,24 +1050,21 @@ static void prt_depth(void) else (void)sprintf(depths, "Lev %d", dun_level); #endif - attr = TERM_SLATE; /* Get color of level based on feeling -JSV- */ - if ((turn - old_turn >= (150 - dun_level) * TURNS_PER_TICK) || cheat_xtra) + switch (p_ptr->feeling) { - switch (feeling) - { - case 1: attr = TERM_L_BLUE; break; /* Special */ - case 2: attr = TERM_VIOLET; break; /* Horrible visions */ - case 3: attr = TERM_RED; break; /* Very dangerous */ - case 4: attr = TERM_L_RED; break; /* Very bad feeling */ - case 5: attr = TERM_ORANGE; break; /* Bad feeling */ - case 6: attr = TERM_YELLOW; break; /* Nervous */ - case 7: attr = TERM_L_UMBER; break; /* Luck is turning */ - case 8: attr = TERM_L_WHITE; break; /* Don't like */ - case 9: attr = TERM_WHITE; break; /* Reasonably safe */ - case 10: attr = TERM_WHITE; break; /* Boring place */ - } + case 0: attr = TERM_SLATE; break; /* Unknown */ + case 1: attr = TERM_L_BLUE; break; /* Special */ + case 2: attr = TERM_VIOLET; break; /* Horrible visions */ + case 3: attr = TERM_RED; break; /* Very dangerous */ + case 4: attr = TERM_L_RED; break; /* Very bad feeling */ + case 5: attr = TERM_ORANGE; break; /* Bad feeling */ + case 6: attr = TERM_YELLOW; break; /* Nervous */ + case 7: attr = TERM_L_UMBER; break; /* Luck is turning */ + case 8: attr = TERM_L_WHITE; break; /* Don't like */ + case 9: attr = TERM_WHITE; break; /* Reasonably safe */ + case 10: attr = TERM_WHITE; break; /* Boring place */ } } @@ -1242,6 +1311,15 @@ sprintf(text, " %2d", command_rep); #endif break; } + case ACTION_SPELL: + { +#ifdef JP + strcpy(text, "±Ó¾§"); +#else + strcpy(text, "Spel"); +#endif + break; + } default: { strcpy(text, " "); @@ -1272,15 +1350,16 @@ static void prt_speed(void) row_speed = hgt + ROW_SPEED; /* Hack -- Visually "undo" the Search Mode Slowdown */ - if (p_ptr->action == ACTION_SEARCH) i += 10; + if (p_ptr->action == ACTION_SEARCH && !p_ptr->lightspeed) i += 10; /* Fast */ if (i > 110) { if (p_ptr->riding) { - if (m_list[p_ptr->riding].fast && !m_list[p_ptr->riding].slow) attr = TERM_L_BLUE; - else if (m_list[p_ptr->riding].slow && !m_list[p_ptr->riding].fast) attr = TERM_VIOLET; + monster_type *m_ptr = &m_list[p_ptr->riding]; + if (MON_FAST(m_ptr) && !MON_SLOW(m_ptr)) attr = TERM_L_BLUE; + else if (MON_SLOW(m_ptr) && !MON_FAST(m_ptr)) attr = TERM_VIOLET; else attr = TERM_GREEN; } else if ((is_fast && !p_ptr->slow) || p_ptr->lightspeed) attr = TERM_YELLOW; @@ -1299,8 +1378,9 @@ static void prt_speed(void) { if (p_ptr->riding) { - if (m_list[p_ptr->riding].fast && !m_list[p_ptr->riding].slow) attr = TERM_L_BLUE; - else if (m_list[p_ptr->riding].slow && !m_list[p_ptr->riding].fast) attr = TERM_VIOLET; + monster_type *m_ptr = &m_list[p_ptr->riding]; + if (MON_FAST(m_ptr) && !MON_SLOW(m_ptr)) attr = TERM_L_BLUE; + else if (MON_SLOW(m_ptr) && !MON_FAST(m_ptr)) attr = TERM_VIOLET; else attr = TERM_RED; } else if (is_fast && !p_ptr->slow) attr = TERM_YELLOW; @@ -1351,7 +1431,7 @@ static void prt_study(void) } -static void prt_mane(void) +static void prt_imitation(void) { int wid, hgt, row_study, col_study; @@ -1369,7 +1449,7 @@ static void prt_mane(void) #ifdef JP c_put_str(attr, "¤Þ¤Í", row_study, col_study); #else - c_put_str(attr, "Mane", row_study, col_study); + c_put_str(attr, "Imit", row_study, col_study); #endif } else @@ -1571,13 +1651,13 @@ static void health_redraw(bool riding) byte attr = TERM_RED; /* Invulnerable */ - if (m_ptr->invulner) attr = TERM_WHITE; + if (MON_INVULNER(m_ptr)) attr = TERM_WHITE; /* Asleep */ - else if (m_ptr->csleep) attr = TERM_BLUE; + else if (MON_CSLEEP(m_ptr)) attr = TERM_BLUE; /* Afraid */ - else if (m_ptr->monfear) attr = TERM_VIOLET; + else if (MON_MONFEAR(m_ptr)) attr = TERM_VIOLET; /* Healthy */ else if (pct >= 100) attr = TERM_L_GREEN; @@ -1673,7 +1753,7 @@ static void prt_frame_extra(void) /* Study spells */ prt_study(); - prt_mane(); + prt_imitation(); prt_status(); } @@ -2018,7 +2098,7 @@ static void calc_spells(void) { int i, j, k, levels; int num_allowed; - int num_boukyaku = 0; + int num_boukyaku = 0; magic_type *s_ptr; int which; @@ -2321,7 +2401,7 @@ static void calc_spells(void) /* Count it */ k++; } - if (k>32) k = 32; + if (k > 32) k = 32; if ((p_ptr->new_spells > k) && ((mp_ptr->spell_book == TV_LIFE_BOOK) || (mp_ptr->spell_book == TV_HISSATSU_BOOK))) p_ptr->new_spells = k; } @@ -2744,6 +2824,10 @@ static void calc_hitpoints(void) if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER)) mhp += 30; if (p_ptr->tsuyoshi) mhp += 50; + /* Factor in the hex spell settings */ + if (hex_spelling(HEX_XTRA_MIGHT)) mhp += 15; + if (hex_spelling(HEX_BUILDING)) mhp += 60; + /* New maximum hitpoints */ if (p_ptr->mhp != mhp) { @@ -3140,7 +3224,7 @@ void calc_bonuses(void) if (!p_ptr->migite) default_hand = 1; } - if (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE)) + if (CAN_TWO_HANDS_WIELDING()) { if (p_ptr->migite && (empty_hands(FALSE) == EMPTY_HAND_LARM) && object_allow_two_hands_wielding(&inventory[INVEN_RARM])) @@ -3545,7 +3629,7 @@ void calc_bonuses(void) case RACE_S_FAIRY: p_ptr->levitation = TRUE; break; - case RACE_KUTA: + case RACE_KUTAR: p_ptr->resist_conf = TRUE; break; case RACE_ANDROID: @@ -4213,6 +4297,49 @@ void calc_bonuses(void) p_ptr->dis_to_a += 10 + (p_ptr->lev * 2 / 5); } + /* Hex bonuses */ + if (p_ptr->realm1 == REALM_HEX) + { + if (hex_spelling_any()) p_ptr->skill_stl -= (1 + p_ptr->magic_num2[0]); + if (hex_spelling(HEX_DETECT_EVIL)) p_ptr->esp_evil = TRUE; + if (hex_spelling(HEX_XTRA_MIGHT)) p_ptr->stat_add[A_STR] += 4; + if (hex_spelling(HEX_BUILDING)) + { + p_ptr->stat_add[A_STR] += 4; + p_ptr->stat_add[A_DEX] += 4; + p_ptr->stat_add[A_CON] += 4; + } + if (hex_spelling(HEX_DEMON_AURA)) + { + p_ptr->sh_fire = TRUE; + p_ptr->regenerate = TRUE; + } + if (hex_spelling(HEX_ICE_ARMOR)) + { + p_ptr->sh_cold = TRUE; + p_ptr->to_a += 30; + p_ptr->dis_to_a += 30; + } + if (hex_spelling(HEX_SHOCK_CLOAK)) + { + p_ptr->sh_elec = TRUE; + new_speed += 3; + } + for (i = INVEN_RARM; i <= INVEN_FEET; i++) + { + int ac = 0; + o_ptr = &inventory[i]; + if (!o_ptr->k_idx) continue; + if (!object_is_armour(o_ptr)) continue; + if (!object_is_cursed(o_ptr)) continue; + ac += 5; + if (o_ptr->curse_flags & TRC_HEAVY_CURSE) ac += 7; + if (o_ptr->curse_flags & TRC_PERMA_CURSE) ac += 13; + p_ptr->to_a += ac; + p_ptr->dis_to_a += ac; + } + } + /* Calculate stats */ for (i = 0; i < 6; i++) { @@ -4596,8 +4723,8 @@ void calc_bonuses(void) new_speed = speed; } new_speed += (p_ptr->skill_exp[GINOU_RIDING] + p_ptr->lev *160L)/3200; - if (riding_m_ptr->fast) new_speed += 10; - if (riding_m_ptr->slow) new_speed -= 10; + if (MON_FAST(riding_m_ptr)) new_speed += 10; + if (MON_SLOW(riding_m_ptr)) new_speed -= 10; riding_levitation = (riding_r_ptr->flags7 & RF7_CAN_FLY) ? TRUE : FALSE; if (riding_r_ptr->flags7 & (RF7_CAN_SWIM | RF7_AQUATIC)) p_ptr->can_swim = TRUE; @@ -4740,6 +4867,14 @@ void calc_bonuses(void) { p_ptr->num_fire += (p_ptr->lev * 4); } + + /* Snipers love Cross bows */ + if ((p_ptr->pclass == CLASS_SNIPER) && + (p_ptr->tval_ammo == TV_BOLT)) + { + p_ptr->to_h_b += (10 + (p_ptr->lev / 5)); + p_ptr->dis_to_h_b += (10 + (p_ptr->lev / 5)); + } } } @@ -4801,7 +4936,7 @@ void calc_bonuses(void) case CLASS_BLUE_MAGE: num = 3; wgt = 100; mul = 2; break; - /* Priest, Mindcrafter */ + /* Priest, Mindcrafter, Magic-Eater */ case CLASS_PRIEST: case CLASS_MAGIC_EATER: case CLASS_MINDCRAFTER: @@ -4820,7 +4955,7 @@ void calc_bonuses(void) case CLASS_SAMURAI: num = 5; wgt = 70; mul = 4; break; - /* Kaji */ + /* Weaponsmith */ case CLASS_SMITH: num = 5; wgt = 150; mul = 5; break; @@ -4849,6 +4984,7 @@ void calc_bonuses(void) case CLASS_BEASTMASTER: num = 5; wgt = 70; mul = 3; break; + /* Cavalry */ case CLASS_CAVALRY: if ((p_ptr->riding) && (have_flag(flgs, TR_RIDING))) {num = 5; wgt = 70; mul = 4;} else {num = 5; wgt = 100; mul = 3;} @@ -4858,7 +4994,7 @@ void calc_bonuses(void) case CLASS_SORCERER: num = 1; wgt = 1; mul = 1; break; - /* Archer, Magic eater */ + /* Archer, Bard */ case CLASS_ARCHER: case CLASS_BARD: num = 4; wgt = 70; mul = 2; break; @@ -4867,8 +5003,9 @@ void calc_bonuses(void) case CLASS_FORCETRAINER: num = 4; wgt = 60; mul = 2; break; - /* Mirror Master */ + /* Mirror Master, Sniper */ case CLASS_MIRROR_MASTER: + case CLASS_SNIPER: num = 3; wgt = 100; mul = 3; break; /* Ninja */ @@ -4876,6 +5013,9 @@ void calc_bonuses(void) num = 4; wgt = 20; mul = 1; break; } + /* Hex - extra mights gives +1 bonus to max blows */ + if (hex_spelling(HEX_XTRA_MIGHT) || hex_spelling(HEX_BUILDING)) { num++; wgt /= 2; mul += 2; } + /* Enforce a minimum "weight" (tenth pounds) */ div = ((o_ptr->weight < wgt) ? wgt : o_ptr->weight); @@ -4979,6 +5119,23 @@ void calc_bonuses(void) p_ptr->dis_to_d[i] -= 10; } } + /* Hex bonuses */ + if (p_ptr->realm1 == REALM_HEX) + { + if (object_is_cursed(o_ptr)) + { + if (o_ptr->curse_flags & (TRC_CURSED)) { p_ptr->to_h[i] += 5; p_ptr->dis_to_h[i] += 5; } + if (o_ptr->curse_flags & (TRC_HEAVY_CURSE)) { p_ptr->to_h[i] += 7; p_ptr->dis_to_h[i] += 7; } + if (o_ptr->curse_flags & (TRC_PERMA_CURSE)) { p_ptr->to_h[i] += 13; p_ptr->dis_to_h[i] += 13; } + if (o_ptr->curse_flags & (TRC_TY_CURSE)) { p_ptr->to_h[i] += 5; p_ptr->dis_to_h[i] += 5; } + if (hex_spelling(HEX_RUNESWORD)) + { + if (o_ptr->curse_flags & (TRC_CURSED)) { p_ptr->to_d[i] += 5; p_ptr->dis_to_d[i] += 5; } + if (o_ptr->curse_flags & (TRC_HEAVY_CURSE)) { p_ptr->to_d[i] += 7; p_ptr->dis_to_d[i] += 7; } + if (o_ptr->curse_flags & (TRC_PERMA_CURSE)) { p_ptr->to_d[i] += 13; p_ptr->dis_to_d[i] += 13; } + } + } + } if (p_ptr->riding) { if ((o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE))) @@ -5885,7 +6042,7 @@ void redraw_stuff(void) p_ptr->redraw &= ~(PR_EXTRA); p_ptr->redraw &= ~(PR_CUT | PR_STUN); p_ptr->redraw &= ~(PR_HUNGER); - p_ptr->redraw &= ~(PR_STATE | PR_SPEED | PR_STUDY | PR_MANE | PR_STATUS); + p_ptr->redraw &= ~(PR_STATE | PR_SPEED | PR_STUDY | PR_IMITATION | PR_STATUS); prt_frame_extra(); } @@ -5921,10 +6078,10 @@ void redraw_stuff(void) if (p_ptr->pclass == CLASS_IMITATOR) { - if (p_ptr->redraw & (PR_MANE)) + if (p_ptr->redraw & (PR_IMITATION)) { - p_ptr->redraw &= ~(PR_MANE); - prt_mane(); + p_ptr->redraw &= ~(PR_IMITATION); + prt_imitation(); } } else if (p_ptr->redraw & (PR_STUDY))