{"GF_SEEKER", GF_SEEKER },
{"GF_SUPER_RAY", GF_SUPER_RAY },
{"GF_STAR_HEAL", GF_STAR_HEAL },
+ {"GF_WATER_FLOW", GF_WATER_FLOW },
+ {"GF_CRUSADE", GF_CRUSADE },
+ {"GF_STASIS_EVIL", GF_STASIS_EVIL },
+ {"GF_WOUNDS", GF_WOUNDS },
{NULL, 0 }
};
int ob = option_info[i].o_bit;
if (option_info[i].o_var &&
- option_info[i].o_text &&
- streq(option_info[i].o_text, buf + 2) &&
- (!alive || option_info[i].o_page !=6))
+ option_info[i].o_text &&
+ streq(option_info[i].o_text, buf + 2))
{
+ if (p_ptr->playing && 6 == option_info[i].o_page && !p_ptr->wizard)
+ {
+#ifdef JP
+ msg_format("½é´ü¥ª¥×¥·¥ç¥ó¤ÏÊѹ¹¤Ç¤¤Þ¤»¤ó! '%s'", buf);
+#else
+ msg_format("Startup options can not changed! '%s'", buf);
+#endif
+ msg_print(NULL);
+ return 0;
+ }
+
/* Clear */
option_flag[os] &= ~(1L << ob);
(*option_info[i].o_var) = FALSE;
}
/* don't know that option. ignore it.*/
- msg_format("Ignored wrong option %s.", buf+2);
+#ifdef JP
+ msg_format("¥ª¥×¥·¥ç¥ó¤Î̾Á°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡§ %s", buf);
+#else
+ msg_format("Ignored invalid option: %s", buf);
+#endif
msg_print(NULL);
return 0;
}
int ob = option_info[i].o_bit;
if (option_info[i].o_var &&
- option_info[i].o_text &&
- streq(option_info[i].o_text, buf + 2) &&
- (!alive || option_info[i].o_page !=6))
+ option_info[i].o_text &&
+ streq(option_info[i].o_text, buf + 2))
{
+ if (p_ptr->playing && 6 == option_info[i].o_page && !p_ptr->wizard)
+ {
+#ifdef JP
+ msg_format("½é´ü¥ª¥×¥·¥ç¥ó¤ÏÊѹ¹¤Ç¤¤Þ¤»¤ó! '%s'", buf);
+#else
+ msg_format("Startup options can not changed! '%s'", buf);
+#endif
+ msg_print(NULL);
+ return 0;
+ }
+
/* Set */
option_flag[os] |= (1L << ob);
(*option_info[i].o_var) = TRUE;
}
/* don't know that option. ignore it.*/
- msg_format("Ignored wrong option %s.", buf+2);
+#ifdef JP
+ msg_format("¥ª¥×¥·¥ç¥ó¤Î̾Á°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡§ %s", buf);
+#else
+ msg_format("Ignored invalid option: %s", buf);
+#endif
msg_print(NULL);
return 0;
}
/*
- * Process line for auto picker/destroyer.
- */
-static errr process_pickpref_file_line(char *buf)
-{
- char *s, *s2;
- int i;
- byte act = 0;
-
- /* Nuke illegal char */
- for(i = 0; buf[i]; i++)
- {
-#ifdef JP
- if (iskanji(buf[i]))
- {
- i++;
- continue;
- }
-#endif
- if (isspace(buf[i]) && buf[i] != ' ')
- break;
- }
- buf[i] = 0;
-
- s = buf;
-
- act = DO_AUTOPICK | DO_DISPLAY;
- while (1)
- {
- if (*s == '!')
- {
- act &= ~DO_AUTOPICK;
- act |= DO_AUTODESTROY;
- s++;
- }
- else if (*s == '~')
- {
- act &= ~DO_AUTOPICK;
- act |= DONT_AUTOPICK;
- s++;
- }
- else if (*s == '(')
- {
- act &= ~DO_DISPLAY;
- s++;
- }
- else
- break;
- }
-
- /* don't mind upper or lower case */
- s2 = NULL;
- for (i = 0; s[i]; i++)
- {
-#ifdef JP
- if (iskanji(s[i]))
- {
- i++;
- continue;
- }
-#endif
- if (isupper(s[i]))
- s[i] = tolower(s[i]);
-
- /* Auto-inscription? */
- if (s[i] == '#')
- {
- s[i] = '\0';
- s2 = s + i + 1;
- break;
- }
- }
-
- /* Skip empty line */
- if (*s == 0)
- return 0;
- if (max_autopick == MAX_AUTOPICK)
- return 1;
-
- /* Already has the same entry? */
- for(i = 0; i < max_autopick; i++)
- if(!strcmp(s, autopick_name[i]))
- return 0;
-
- autopick_name[max_autopick] = string_make(s);
- autopick_action[max_autopick] = act;
-
- autopick_insc[max_autopick] = string_make(s2);
- max_autopick++;
- return 0;
-}
-
-
-
-/*
* Open the "user pref file" and parse it.
*/
static errr process_pref_file_aux(cptr name, bool read_pickpref)
if (!fp) return (-1);
/* Process the file */
- while (0 == my_fgets(fp, buf, 1024))
+ while (0 == my_fgets(fp, buf, sizeof(buf)))
{
/* Count lines */
line++;
{
char buf[1024];
- errr err = 0;
+ errr err1, err2;
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_PREF, name);
+ path_build(buf, sizeof(buf), ANGBAND_DIR_PREF, name);
- /* Process the pref file */
- err = process_pref_file_aux(buf, FALSE);
+ /* Process the system pref file */
+ err1 = process_pref_file_aux(buf, FALSE);
/* Stop at parser errors, but not at non-existing file */
- if (err < 1)
- {
- /* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_USER, name);
+ if (err1 > 0) return err1;
- /* Process the pref file */
- err = process_pref_file_aux(buf, FALSE);
- }
- /* Result */
- return (err);
+ /* Drop priv's */
+ safe_setuid_drop();
+
+ /* Build the filename */
+ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, name);
+
+ /* Process the user pref file */
+ err2 = process_pref_file_aux(buf, FALSE);
+
+ /* Grab priv's */
+ safe_setuid_grab();
+
+
+ /* User file does not exist, but read system pref file */
+ if (err2 < 0 && !err1)
+ return -2;
+
+ /* Result of user file processing */
+ return err2;
}
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_FILE, "time.txt");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "time.txt");
/* Open the file */
fp = my_fopen(buf, "r");
check_time_flag = TRUE;
/* Parse the file */
- while (0 == my_fgets(fp, buf, 80))
+ while (0 == my_fgets(fp, buf, sizeof(buf)))
{
/* Skip comments and blank lines */
if (!buf[0] || (buf[0] == '#')) continue;
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_FILE, "load.txt");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "load.txt");
/* Open the "load" file */
fp = my_fopen(buf, "r");
(void)gethostname(thishost, (sizeof thishost) - 1);
/* Parse it */
- while (0 == my_fgets(fp, buf, 1024))
+ while (0 == my_fgets(fp, buf, sizeof(buf)))
{
int value;
}
-/*
- * Print long number with header at given row, column
- * Use the color for the number, not the header
- */
-static void prt_lnum(cptr header, s32b num, int row, int col, byte color)
-{
- int len = strlen(header);
- char out_val[32];
- put_str(header, row, col);
- (void)sprintf(out_val, "%9ld", (long)num);
- c_put_str(color, out_val, row, col + len);
-}
-
-
-/*
- * Print number with header at given row, column
- */
-static void prt_num(cptr header, int num, int row, int col, byte color)
-{
- int len = strlen(header);
- char out_val[32];
- put_str(header, row, col);
- put_str(" ", row, col + len);
- (void)sprintf(out_val, "%6ld", (long)num);
- c_put_str(color, out_val, row, col + len + 3);
-}
-
-
-#ifdef JP
-/* ÆüËܸìÈdzÈÄ¥
- * £È£Ð / ºÇÂç ¤Î¤è¤¦¤Êɽ¼¨
- * xxxxx / yyyyy
- */
-static void prt_num_max( int num, int max , int row, int col, byte color1, byte color2 )
-{
- char out_val[32];
- (void)sprintf(out_val, "%5ld", (long)num);
- c_put_str(color1, out_val, row, col );
- put_str("/",row, col+6);
- (void)sprintf(out_val, "%5ld", (long)max);
- c_put_str(color2, out_val, row, col+8 );
-}
-
-/* ÆüËܸìÈdzÈÄ¥
- * xx ºÐ ¤È¤« xx kg ¤Ê¤É¤Îɽ¼¨ÍÑ cptr tailer ¤Ëñ°Ì¤¬Æþ¤ë¡£
- */
-static void prt_num2(cptr header, cptr tailer, int num, int row, int col, byte color)
-{
- int len = strlen(header);
- char out_val[32];
- put_str(header, row, col);
- put_str(" ", row, col + len);
- (void)sprintf(out_val, "%6ld", (long)num);
- c_put_str(color, out_val, row, col + len + 3);
- put_str(tailer, row, col + len + 3+6);
-}
-#endif
-
#define ENTRY_BARE_HAND 0
#define ENTRY_TWO_HANDS 1
#define ENTRY_RIGHT_HAND1 2
#define ENTRY_SOCIAL 41
#define ENTRY_ALIGN 42
+#define ENTRY_EXP_ANDR 43
+
static struct
{
{29, 5, 21, "ÂνÅ"},
{29, 6, 21, "¼Ò²ñŪÃÏ°Ì"},
{29, 7, 21, "°À"},
+ {29, 14, 21, "¶¯²½ÅÙ"},
};
#else
= {
{29, 5, 21, "Weight"},
{29, 6, 21, "Social Class"},
{29, 7, 21, "Align"},
+ {29, 14, 21, "Construction"},
};
#endif
/*
* Prints the following information on the screen.
- *
- * For this to look right, the following should be spaced the
- * same as in the prt_lnum code... -CFT
*/
static void display_player_middle(void)
{
int show_tohit, show_todam;
object_type *o_ptr;
int tmul = 0;
+ int e;
if(p_ptr->migite)
{
if (object_known_p(o_ptr)) show_tohit += o_ptr->to_h;
if (object_known_p(o_ptr)) show_todam += o_ptr->to_d;
- show_tohit += (weapon_exp[0][o_ptr->sval]-4000)/200;
+ if ((o_ptr->sval == SV_LIGHT_XBOW) || (o_ptr->sval == SV_HEAVY_XBOW))
+ show_tohit += (p_ptr->weapon_exp[0][o_ptr->sval])/400;
+ else
+ show_tohit += (p_ptr->weapon_exp[0][o_ptr->sval]-4000)/200;
/* Range attacks */
display_player_one_line(ENTRY_SHOOT_HIT_DAM, format("(%+d,%+d)", show_tohit, show_todam), TERM_L_BLUE);
if (p_ptr->action == ACTION_SEARCH) i += 10;
if (i > 0)
- attr = TERM_L_GREEN;
+ {
+ if (!p_ptr->riding)
+ attr = TERM_L_GREEN;
+ else
+ attr = TERM_GREEN;
+ }
else if (i == 0)
- attr = TERM_L_BLUE;
+ {
+ if (!p_ptr->riding)
+ attr = TERM_L_BLUE;
+ else
+ attr = TERM_GREEN;
+ }
else
- attr = TERM_L_UMBER;
+ {
+ if (!p_ptr->riding)
+ attr = TERM_L_UMBER;
+ else
+ attr = TERM_RED;
+ }
- if (is_fast) tmp_speed += 10;
- if (p_ptr->slow) tmp_speed -= 10;
- if (p_ptr->lightspeed) tmp_speed = 99;
+ if (!p_ptr->riding)
+ {
+ if (is_fast) tmp_speed += 10;
+ if (p_ptr->slow) tmp_speed -= 10;
+ if (p_ptr->lightspeed) tmp_speed = 99;
+ }
+ else
+ {
+ if (m_list[p_ptr->riding].fast) tmp_speed += 10;
+ if (m_list[p_ptr->riding].slow) tmp_speed -= 10;
+ }
if (tmp_speed)
{
- sprintf(buf, "(%+d%+d)", i-tmp_speed, tmp_speed);
+ if (!p_ptr->riding)
+ sprintf(buf, "(%+d%+d)", i-tmp_speed, tmp_speed);
+ else
+#ifdef JP
+ sprintf(buf, "¾èÇÏÃæ (%+d%+d)", i-tmp_speed, tmp_speed);
+#else
+ sprintf(buf, "Riding (%+d%+d)", i-tmp_speed, tmp_speed);
+#endif
+
if (tmp_speed > 0)
attr = TERM_YELLOW;
else
}
else
{
- sprintf(buf, "(%+d)", i);
+ if (!p_ptr->riding)
+ sprintf(buf, "(%+d)", i);
+ else
+#ifdef JP
+ sprintf(buf, "¾èÇÏÃæ (%+d)", i);
+#else
+ sprintf(buf, "Riding (%+d)", i);
+#endif
}
display_player_one_line(ENTRY_SPEED, buf, attr);
display_player_one_line(ENTRY_LEVEL, format("%d", p_ptr->lev), TERM_L_GREEN);
/* Dump experience */
- if (p_ptr->prace == RACE_ANDROID)
- display_player_one_line(ENTRY_CUR_EXP, "*****", TERM_L_GREEN);
- else if (p_ptr->exp >= p_ptr->max_exp)
- display_player_one_line(ENTRY_CUR_EXP, format("%ld", p_ptr->exp), TERM_L_GREEN);
+ if (p_ptr->prace == RACE_ANDROID) e = ENTRY_EXP_ANDR;
+ else e = ENTRY_CUR_EXP;
+
+ if (p_ptr->exp >= p_ptr->max_exp)
+ display_player_one_line(e, format("%ld", p_ptr->exp), TERM_L_GREEN);
else
- display_player_one_line(ENTRY_CUR_EXP, format("%ld", p_ptr->exp), TERM_YELLOW);
+ display_player_one_line(e, format("%ld", p_ptr->exp), TERM_YELLOW);
/* Dump max experience */
if (p_ptr->prace == RACE_ANDROID)
- display_player_one_line(ENTRY_MAX_EXP, "*****", TERM_L_GREEN);
+ /* Nothing */;
else
display_player_one_line(ENTRY_MAX_EXP, format("%ld", p_ptr->max_exp), TERM_L_GREEN);
/* Dump exp to advance */
- if ((p_ptr->lev >= PY_MAX_LEVEL) || (p_ptr->prace == RACE_ANDROID))
+ if (p_ptr->lev >= PY_MAX_LEVEL)
display_player_one_line(ENTRY_EXP_TO_ADV, "*****", TERM_L_GREEN);
+ else if (p_ptr->prace == RACE_ANDROID)
+ display_player_one_line(ENTRY_EXP_TO_ADV, format("%ld", (s32b)(player_exp_a[p_ptr->lev - 1] * p_ptr->expfact / 100L)), TERM_L_GREEN);
else
display_player_one_line(ENTRY_EXP_TO_ADV, format("%ld", (s32b)(player_exp[p_ptr->lev - 1] * p_ptr->expfact / 100L)), TERM_L_GREEN);
/* Dump Day */
{
- s32b len = 20L * TOWN_DAWN;
- s32b tick = turn % len + len / 4;
+ int day, hour, min;
+ extract_day_hour_min(&day, &hour, &min);
sprintf(buf,
#ifdef JP
- "%2dÆüÌÜ %d:%02d",
+ "%dÆüÌÜ %2d:%02d",
#else
- "Day %d %d:%02d",
+ "Day %d %2d:%02d",
#endif
- ((p_ptr->prace == RACE_VAMPIRE) ||
- (p_ptr->prace == RACE_SKELETON) ||
- (p_ptr->prace == RACE_ZOMBIE) ||
- (p_ptr->prace == RACE_SPECTRE))
- ? (turn - (15L * TOWN_DAWN)) / len + 1
- : (turn + (5L * TOWN_DAWN))/ len + 1,
- (24 * tick / len) % 24,
- (1440 * tick / len) % 60);
+ day, hour, min);
}
display_player_one_line(ENTRY_DAY, buf, TERM_L_GREEN);
int xdis, xdev, xsav, xstl;
cptr desc;
int muta_att = 0;
- u32b f1, f2, f3;
+ u32b flgs[TR_FLAG_SIZE];
int shots, shot_frac;
object_type *o_ptr;
o_ptr = &inventory[INVEN_RARM+i];
if (object_known_p(o_ptr)) damage[i] += o_ptr->to_d*100;
basedam = (o_ptr->dd * (o_ptr->ds + 1))*50;
- object_flags(o_ptr, &f1, &f2, &f3);
- if ((o_ptr->ident & IDENT_MENTAL) && (o_ptr->name1 == ART_VORPAL_BLADE))
+ object_flags(o_ptr, flgs);
+ if ((o_ptr->ident & IDENT_MENTAL) && ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD)))
{
/* vorpal blade */
basedam *= 5;
basedam /= 3;
}
- else if (object_known_p(o_ptr) && (f1 & TR1_VORPAL))
+ else if (object_known_p(o_ptr) && (have_flag(flgs, TR_VORPAL)))
{
/* vorpal flag only */
basedam *= 11;
basedam /= 9;
}
- if (object_known_p(o_ptr) && (p_ptr->pclass != CLASS_SAMURAI) && (f1 & TR1_FORCE_WEPON) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5)))
+ if (object_known_p(o_ptr) && (p_ptr->pclass != CLASS_SAMURAI) && (have_flag(flgs, TR_FORCE_WEAPON)) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5)))
basedam = basedam * 7 / 2;
if (p_ptr->riding && (o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
basedam = basedam*(o_ptr->dd+2)/o_ptr->dd;
/*
* Obtain the "flags" for the player as if he was an item
*/
-static void player_flags(u32b *f1, u32b *f2, u32b *f3)
+static void player_flags(u32b flgs[TR_FLAG_SIZE])
{
+ int i;
+
/* Clear */
- (*f1) = (*f2) = (*f3) = 0L;
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ flgs[i] = 0L;
/* Classes */
switch (p_ptr->pclass)
{
case CLASS_WARRIOR:
if (p_ptr->lev > 44)
- (*f3) |= (TR3_REGEN);
+ add_flag(flgs, TR_REGEN);
case CLASS_SAMURAI:
if (p_ptr->lev > 29)
- (*f2) |= (TR2_RES_FEAR);
+ add_flag(flgs, TR_RES_FEAR);
break;
case CLASS_PALADIN:
if (p_ptr->lev > 39)
- (*f2) |= (TR2_RES_FEAR);
+ add_flag(flgs, TR_RES_FEAR);
break;
case CLASS_CHAOS_WARRIOR:
if (p_ptr->lev > 29)
- (*f2) |= (TR2_RES_CHAOS);
+ add_flag(flgs, TR_RES_CHAOS);
if (p_ptr->lev > 39)
- (*f2) |= (TR2_RES_FEAR);
+ add_flag(flgs, TR_RES_FEAR);
break;
case CLASS_MONK:
case CLASS_FORCETRAINER:
if ((p_ptr->lev > 9) && !heavy_armor())
- (*f1) |= TR1_SPEED;
+ add_flag(flgs, TR_SPEED);
if ((p_ptr->lev>24) && !heavy_armor())
- (*f2) |= (TR2_FREE_ACT);
+ add_flag(flgs, TR_FREE_ACT);
break;
case CLASS_NINJA:
if (heavy_armor())
- (*f1) |= TR1_SPEED;
+ add_flag(flgs, TR_SPEED);
else
{
if (!inventory[INVEN_LARM].tval || p_ptr->hidarite)
- (*f1) |= TR1_SPEED;
+ add_flag(flgs, TR_SPEED);
if (p_ptr->lev>24)
- (*f2) |= (TR2_FREE_ACT);
+ add_flag(flgs, TR_FREE_ACT);
}
- (*f3) |= TR3_SLOW_DIGEST;
- (*f2) |= TR2_RES_FEAR;
- if (p_ptr->lev > 19) (*f2) |= TR2_RES_POIS;
- if (p_ptr->lev > 24) (*f2) |= TR2_SUST_DEX;
- if (p_ptr->lev > 29) (*f3) |= TR3_SEE_INVIS;
+ add_flag(flgs, TR_SLOW_DIGEST);
+ add_flag(flgs, TR_RES_FEAR);
+ if (p_ptr->lev > 19) add_flag(flgs, TR_RES_POIS);
+ if (p_ptr->lev > 24) add_flag(flgs, TR_SUST_DEX);
+ if (p_ptr->lev > 29) add_flag(flgs, TR_SEE_INVIS);
break;
case CLASS_MINDCRAFTER:
if (p_ptr->lev > 9)
- (*f2) |= (TR2_RES_FEAR);
+ add_flag(flgs, TR_RES_FEAR);
if (p_ptr->lev > 19)
- (*f2) |= (TR2_SUST_WIS);
+ add_flag(flgs, TR_SUST_WIS);
if (p_ptr->lev > 29)
- (*f2) |= (TR2_RES_CONF);
+ add_flag(flgs, TR_RES_CONF);
if (p_ptr->lev > 39)
- (*f3) |= (TR3_TELEPATHY);
+ add_flag(flgs, TR_TELEPATHY);
break;
case CLASS_BARD:
- (*f2) |= (TR2_RES_SOUND);
+ add_flag(flgs, TR_RES_SOUND);
break;
case CLASS_BERSERKER:
- (*f2) |= (TR2_SUST_STR);
- (*f2) |= (TR2_SUST_DEX);
- (*f2) |= (TR2_SUST_CON);
- (*f3) |= (TR3_REGEN);
- (*f2) |= (TR2_FREE_ACT);
- (*f1) |= (TR1_SPEED);
- if (p_ptr->lev > 39) (*f2) |= (TR2_REFLECT);
+ add_flag(flgs, TR_SUST_STR);
+ add_flag(flgs, TR_SUST_DEX);
+ add_flag(flgs, TR_SUST_CON);
+ add_flag(flgs, TR_REGEN);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_SPEED);
+ if (p_ptr->lev > 39) add_flag(flgs, TR_REFLECT);
break;
case CLASS_MIRROR_MASTER:
- if(p_ptr->lev > 39)(*f2) |= (TR2_REFLECT);
+ if(p_ptr->lev > 39)add_flag(flgs, TR_REFLECT);
break;
default:
break; /* Do nothing */
switch(p_ptr->mimic_form)
{
case MIMIC_DEMON:
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_CHAOS);
- (*f2) |= (TR2_RES_NETHER);
- (*f2) |= (TR2_RES_FIRE);
- (*f3) |= (TR3_SEE_INVIS);
- (*f1) |= (TR1_SPEED);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_CHAOS);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_RES_FIRE);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_SPEED);
break;
case MIMIC_DEMON_LORD:
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_CHAOS);
- (*f2) |= (TR2_RES_NETHER);
- (*f2) |= (TR2_RES_FIRE);
- (*f2) |= (TR2_RES_COLD);
- (*f2) |= (TR2_RES_ELEC);
- (*f2) |= (TR2_RES_ACID);
- (*f2) |= (TR2_RES_POIS);
- (*f2) |= (TR2_RES_CONF);
- (*f2) |= (TR2_RES_DISEN);
- (*f2) |= (TR2_RES_NEXUS);
- (*f2) |= (TR2_RES_FEAR);
- (*f2) |= (TR2_IM_FIRE);
- (*f3) |= (TR3_SH_FIRE);
- (*f3) |= (TR3_SEE_INVIS);
- (*f3) |= (TR3_TELEPATHY);
- (*f3) |= (TR3_FEATHER);
- (*f1) |= (TR1_SPEED);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_CHAOS);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_RES_FIRE);
+ add_flag(flgs, TR_RES_COLD);
+ add_flag(flgs, TR_RES_ELEC);
+ add_flag(flgs, TR_RES_ACID);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_RES_CONF);
+ add_flag(flgs, TR_RES_DISEN);
+ add_flag(flgs, TR_RES_NEXUS);
+ add_flag(flgs, TR_RES_FEAR);
+ add_flag(flgs, TR_IM_FIRE);
+ add_flag(flgs, TR_SH_FIRE);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_TELEPATHY);
+ add_flag(flgs, TR_FEATHER);
+ add_flag(flgs, TR_SPEED);
break;
case MIMIC_VAMPIRE:
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_DARK);
- (*f2) |= (TR2_RES_NETHER);
- if (p_ptr->pclass != CLASS_NINJA) (*f3) |= (TR3_LITE);
- (*f2) |= (TR2_RES_POIS);
- (*f2) |= (TR2_RES_COLD);
- (*f3) |= (TR3_SEE_INVIS);
- (*f1) |= (TR1_SPEED);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_DARK);
+ add_flag(flgs, TR_RES_NETHER);
+ if (p_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_RES_COLD);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_SPEED);
break;
}
}
switch (p_ptr->prace)
{
case RACE_ELF:
- (*f2) |= (TR2_RES_LITE);
+ add_flag(flgs, TR_RES_LITE);
break;
case RACE_HOBBIT:
- (*f2) |= (TR2_SUST_DEX);
+ add_flag(flgs, TR_SUST_DEX);
break;
case RACE_GNOME:
- (*f2) |= (TR2_FREE_ACT);
+ add_flag(flgs, TR_FREE_ACT);
break;
case RACE_DWARF:
- (*f2) |= (TR2_RES_BLIND);
+ add_flag(flgs, TR_RES_BLIND);
break;
case RACE_HALF_ORC:
- (*f2) |= (TR2_RES_DARK);
+ add_flag(flgs, TR_RES_DARK);
break;
case RACE_HALF_TROLL:
- (*f2) |= (TR2_SUST_STR);
+ add_flag(flgs, TR_SUST_STR);
if (p_ptr->lev > 14)
{
- (*f3) |= (TR3_REGEN);
+ add_flag(flgs, TR_REGEN);
if (p_ptr->pclass == CLASS_WARRIOR)
{
- (*f3) |= (TR3_SLOW_DIGEST);
+ add_flag(flgs, TR_SLOW_DIGEST);
/*
* Let's not make Regeneration a disadvantage
* for the poor warriors who can never learn
}
break;
case RACE_AMBERITE:
- (*f2) |= (TR2_SUST_CON);
- (*f3) |= (TR3_REGEN); /* Amberites heal fast */
+ add_flag(flgs, TR_SUST_CON);
+ add_flag(flgs, TR_REGEN); /* Amberites heal fast */
break;
case RACE_HIGH_ELF:
- (*f2) |= (TR2_RES_LITE);
- (*f3) |= (TR3_SEE_INVIS);
+ add_flag(flgs, TR_RES_LITE);
+ add_flag(flgs, TR_SEE_INVIS);
break;
case RACE_BARBARIAN:
- (*f2) |= (TR2_RES_FEAR);
+ add_flag(flgs, TR_RES_FEAR);
break;
case RACE_HALF_OGRE:
- (*f2) |= (TR2_SUST_STR);
- (*f2) |= (TR2_RES_DARK);
+ add_flag(flgs, TR_SUST_STR);
+ add_flag(flgs, TR_RES_DARK);
break;
case RACE_HALF_GIANT:
- (*f2) |= (TR2_RES_SHARDS);
- (*f2) |= (TR2_SUST_STR);
+ add_flag(flgs, TR_RES_SHARDS);
+ add_flag(flgs, TR_SUST_STR);
break;
case RACE_HALF_TITAN:
- (*f2) |= (TR2_RES_CHAOS);
+ add_flag(flgs, TR_RES_CHAOS);
break;
case RACE_CYCLOPS:
- (*f2) |= (TR2_RES_SOUND);
+ add_flag(flgs, TR_RES_SOUND);
break;
case RACE_YEEK:
- (*f2) |= (TR2_RES_ACID);
+ add_flag(flgs, TR_RES_ACID);
if (p_ptr->lev > 19)
- (*f2) |= (TR2_IM_ACID);
+ add_flag(flgs, TR_IM_ACID);
break;
case RACE_KLACKON:
- (*f2) |= (TR2_RES_CONF);
- (*f2) |= (TR2_RES_ACID);
+ add_flag(flgs, TR_RES_CONF);
+ add_flag(flgs, TR_RES_ACID);
if (p_ptr->lev > 9)
- (*f1) |= TR1_SPEED;
+ add_flag(flgs, TR_SPEED);
break;
case RACE_KOBOLD:
- (*f2) |= (TR2_RES_POIS);
+ add_flag(flgs, TR_RES_POIS);
break;
case RACE_NIBELUNG:
- (*f2) |= (TR2_RES_DISEN);
- (*f2) |= (TR2_RES_DARK);
+ add_flag(flgs, TR_RES_DISEN);
+ add_flag(flgs, TR_RES_DARK);
break;
case RACE_DARK_ELF:
- (*f2) |= (TR2_RES_DARK);
+ add_flag(flgs, TR_RES_DARK);
if (p_ptr->lev > 19)
- (*f3) |= (TR3_SEE_INVIS);
+ add_flag(flgs, TR_SEE_INVIS);
break;
case RACE_DRACONIAN:
- (*f3) |= TR3_FEATHER;
+ add_flag(flgs, TR_FEATHER);
if (p_ptr->lev > 4)
- (*f2) |= (TR2_RES_FIRE);
+ add_flag(flgs, TR_RES_FIRE);
if (p_ptr->lev > 9)
- (*f2) |= (TR2_RES_COLD);
+ add_flag(flgs, TR_RES_COLD);
if (p_ptr->lev > 14)
- (*f2) |= (TR2_RES_ACID);
+ add_flag(flgs, TR_RES_ACID);
if (p_ptr->lev > 19)
- (*f2) |= (TR2_RES_ELEC);
+ add_flag(flgs, TR_RES_ELEC);
if (p_ptr->lev > 34)
- (*f2) |= (TR2_RES_POIS);
+ add_flag(flgs, TR_RES_POIS);
break;
case RACE_MIND_FLAYER:
- (*f2) |= (TR2_SUST_INT);
- (*f2) |= (TR2_SUST_WIS);
+ add_flag(flgs, TR_SUST_INT);
+ add_flag(flgs, TR_SUST_WIS);
if (p_ptr->lev > 14)
- (*f3) |= (TR3_SEE_INVIS);
+ add_flag(flgs, TR_SEE_INVIS);
if (p_ptr->lev > 29)
- (*f3) |= (TR3_TELEPATHY);
+ add_flag(flgs, TR_TELEPATHY);
break;
case RACE_IMP:
- (*f2) |= (TR2_RES_FIRE);
+ add_flag(flgs, TR_RES_FIRE);
if (p_ptr->lev > 9)
- (*f3) |= (TR3_SEE_INVIS);
+ add_flag(flgs, TR_SEE_INVIS);
break;
case RACE_GOLEM:
- (*f3) |= (TR3_SEE_INVIS);
- (*f2) |= (TR2_FREE_ACT);
- (*f2) |= (TR2_RES_POIS);
- (*f3) |= (TR3_SLOW_DIGEST);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_SLOW_DIGEST);
if (p_ptr->lev > 34)
- (*f2) |= (TR2_HOLD_LIFE);
+ add_flag(flgs, TR_HOLD_LIFE);
break;
case RACE_SKELETON:
- (*f3) |= (TR3_SEE_INVIS);
- (*f2) |= (TR2_RES_SHARDS);
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_POIS);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_RES_SHARDS);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_POIS);
if (p_ptr->lev > 9)
- (*f2) |= (TR2_RES_COLD);
+ add_flag(flgs, TR_RES_COLD);
break;
case RACE_ZOMBIE:
- (*f3) |= (TR3_SEE_INVIS);
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_NETHER);
- (*f2) |= (TR2_RES_POIS);
- (*f3) |= (TR3_SLOW_DIGEST);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_SLOW_DIGEST);
if (p_ptr->lev > 4)
- (*f2) |= (TR2_RES_COLD);
+ add_flag(flgs, TR_RES_COLD);
break;
case RACE_VAMPIRE:
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_DARK);
- (*f2) |= (TR2_RES_NETHER);
- if (p_ptr->pclass != CLASS_NINJA) (*f3) |= (TR3_LITE);
- (*f2) |= (TR2_RES_POIS);
- (*f2) |= (TR2_RES_COLD);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_DARK);
+ add_flag(flgs, TR_RES_NETHER);
+ if (p_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_RES_COLD);
break;
case RACE_SPECTRE:
- (*f3) |= (TR3_FEATHER);
- (*f2) |= (TR2_FREE_ACT);
- (*f2) |= (TR2_RES_COLD);
- (*f3) |= (TR3_SEE_INVIS);
- (*f2) |= (TR2_HOLD_LIFE);
- (*f2) |= (TR2_RES_NETHER);
- (*f2) |= (TR2_RES_POIS);
- (*f3) |= (TR3_SLOW_DIGEST);
+ add_flag(flgs, TR_FEATHER);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_RES_COLD);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_SLOW_DIGEST);
/* XXX pass_wall */
if (p_ptr->lev > 34)
- (*f3) |= TR3_TELEPATHY;
+ add_flag(flgs, TR_TELEPATHY);
break;
case RACE_SPRITE:
- (*f2) |= (TR2_RES_LITE);
- (*f3) |= (TR3_FEATHER);
+ add_flag(flgs, TR_RES_LITE);
+ add_flag(flgs, TR_FEATHER);
if (p_ptr->lev > 9)
- (*f1) |= (TR1_SPEED);
+ add_flag(flgs, TR_SPEED);
break;
case RACE_BEASTMAN:
- (*f2) |= (TR2_RES_SOUND);
- (*f2) |= (TR2_RES_CONF);
+ add_flag(flgs, TR_RES_SOUND);
+ add_flag(flgs, TR_RES_CONF);
break;
case RACE_ANGEL:
- (*f3) |= (TR3_FEATHER);
- (*f3) |= (TR3_SEE_INVIS);
+ add_flag(flgs, TR_FEATHER);
+ add_flag(flgs, TR_SEE_INVIS);
break;
case RACE_DEMON:
- (*f2) |= (TR2_RES_FIRE);
- (*f2) |= (TR2_RES_NETHER);
- (*f2) |= (TR2_HOLD_LIFE);
+ add_flag(flgs, TR_RES_FIRE);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_HOLD_LIFE);
if (p_ptr->lev > 9)
- (*f3) |= (TR3_SEE_INVIS);
+ add_flag(flgs, TR_SEE_INVIS);
break;
case RACE_DUNADAN:
- (*f2) |= (TR2_SUST_CON);
+ add_flag(flgs, TR_SUST_CON);
break;
case RACE_S_FAIRY:
- (*f3) |= (TR3_FEATHER);
+ add_flag(flgs, TR_FEATHER);
break;
case RACE_KUTA:
- (*f2) |= (TR2_RES_CONF);
+ add_flag(flgs, TR_RES_CONF);
break;
case RACE_ANDROID:
- (*f2) |= (TR2_FREE_ACT);
- (*f2) |= (TR2_RES_POIS);
- (*f3) |= (TR3_SLOW_DIGEST);
- (*f2) |= (TR2_HOLD_LIFE);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_SLOW_DIGEST);
+ add_flag(flgs, TR_HOLD_LIFE);
break;
default:
; /* Do nothing */
{
if (p_ptr->muta3 & MUT3_FLESH_ROT)
{
- (*f3) &= ~(TR3_REGEN);
+ remove_flag(flgs, TR_REGEN);
}
if ((p_ptr->muta3 & MUT3_XTRA_FAT) ||
(p_ptr->muta3 & MUT3_XTRA_LEGS) ||
(p_ptr->muta3 & MUT3_SHORT_LEG))
{
- (*f1) |= TR1_SPEED;
+ add_flag(flgs, TR_SPEED);
}
if (p_ptr->muta3 & MUT3_ELEC_TOUC)
{
- (*f3) |= TR3_SH_ELEC;
+ add_flag(flgs, TR_SH_ELEC);
}
if (p_ptr->muta3 & MUT3_FIRE_BODY)
{
- (*f3) |= TR3_SH_FIRE;
- (*f3) |= TR3_LITE;
+ add_flag(flgs, TR_SH_FIRE);
+ add_flag(flgs, TR_LITE);
}
if (p_ptr->muta3 & MUT3_WINGS)
{
- (*f3) |= TR3_FEATHER;
+ add_flag(flgs, TR_FEATHER);
}
if (p_ptr->muta3 & MUT3_FEARLESS)
{
- (*f2) |= (TR2_RES_FEAR);
+ add_flag(flgs, TR_RES_FEAR);
}
if (p_ptr->muta3 & MUT3_REGEN)
{
- (*f3) |= TR3_REGEN;
+ add_flag(flgs, TR_REGEN);
}
if (p_ptr->muta3 & MUT3_ESP)
{
- (*f3) |= TR3_TELEPATHY;
+ add_flag(flgs, TR_TELEPATHY);
}
if (p_ptr->muta3 & MUT3_MOTION)
{
- (*f2) |= TR2_FREE_ACT;
+ add_flag(flgs, TR_FREE_ACT);
}
}
if (p_ptr->pseikaku == SEIKAKU_SEXY)
- (*f3) |= TR3_AGGRAVATE;
+ add_flag(flgs, TR_AGGRAVATE);
if (p_ptr->pseikaku == SEIKAKU_MUNCHKIN)
{
- (*f2) |= (TR2_RES_BLIND);
- (*f2) |= (TR2_RES_CONF);
- (*f2) |= (TR2_HOLD_LIFE);
- (*f3) |= (TR3_LITE);
+ add_flag(flgs, TR_RES_BLIND);
+ add_flag(flgs, TR_RES_CONF);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_LITE);
if (p_ptr->lev > 9)
- (*f1) |= (TR1_SPEED);
+ add_flag(flgs, TR_SPEED);
}
if (p_ptr->special_defense & KATA_FUUJIN)
- (*f2) |= TR2_REFLECT;
+ add_flag(flgs, TR_REFLECT);
if (p_ptr->special_defense & KAMAE_GENBU)
- (*f2) |= TR2_REFLECT;
+ add_flag(flgs, TR_REFLECT);
if (p_ptr->special_defense & KAMAE_SUZAKU)
- (*f3) |= TR3_FEATHER;
+ add_flag(flgs, TR_FEATHER);
if (p_ptr->special_defense & KAMAE_SEIRYU)
{
- (*f2) |= (TR2_RES_FIRE);
- (*f2) |= (TR2_RES_COLD);
- (*f2) |= (TR2_RES_ACID);
- (*f2) |= (TR2_RES_ELEC);
- (*f2) |= (TR2_RES_POIS);
- (*f3) |= (TR3_FEATHER);
- (*f3) |= (TR3_SH_FIRE);
- (*f3) |= (TR3_SH_ELEC);
- (*f3) |= (TR3_SH_COLD);
+ add_flag(flgs, TR_RES_FIRE);
+ add_flag(flgs, TR_RES_COLD);
+ add_flag(flgs, TR_RES_ACID);
+ add_flag(flgs, TR_RES_ELEC);
+ add_flag(flgs, TR_RES_POIS);
+ add_flag(flgs, TR_FEATHER);
+ add_flag(flgs, TR_SH_FIRE);
+ add_flag(flgs, TR_SH_ELEC);
+ add_flag(flgs, TR_SH_COLD);
}
if (p_ptr->special_defense & KATA_MUSOU)
{
- (*f2) |= TR2_RES_FEAR;
- (*f2) |= TR2_RES_LITE;
- (*f2) |= TR2_RES_DARK;
- (*f2) |= TR2_RES_BLIND;
- (*f2) |= TR2_RES_CONF;
- (*f2) |= TR2_RES_SOUND;
- (*f2) |= TR2_RES_SHARDS;
- (*f2) |= TR2_RES_NETHER;
- (*f2) |= TR2_RES_NEXUS;
- (*f2) |= TR2_RES_CHAOS;
- (*f2) |= TR2_RES_DISEN;
- (*f2) |= TR2_REFLECT;
- (*f2) |= TR2_HOLD_LIFE;
- (*f2) |= TR2_FREE_ACT;
- (*f3) |= TR3_SH_FIRE;
- (*f3) |= TR3_SH_ELEC;
- (*f3) |= TR3_SH_COLD;
- (*f3) |= TR3_FEATHER;
- (*f3) |= TR3_LITE;
- (*f3) |= TR3_SEE_INVIS;
- (*f3) |= TR3_TELEPATHY;
- (*f3) |= TR3_SLOW_DIGEST;
- (*f3) |= TR3_REGEN;
- (*f2) |= (TR2_SUST_STR);
- (*f2) |= (TR2_SUST_INT);
- (*f2) |= (TR2_SUST_WIS);
- (*f2) |= (TR2_SUST_DEX);
- (*f2) |= (TR2_SUST_CON);
- (*f2) |= (TR2_SUST_CHR);
+ add_flag(flgs, TR_RES_FEAR);
+ add_flag(flgs, TR_RES_LITE);
+ add_flag(flgs, TR_RES_DARK);
+ add_flag(flgs, TR_RES_BLIND);
+ add_flag(flgs, TR_RES_CONF);
+ add_flag(flgs, TR_RES_SOUND);
+ add_flag(flgs, TR_RES_SHARDS);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_RES_NEXUS);
+ add_flag(flgs, TR_RES_CHAOS);
+ add_flag(flgs, TR_RES_DISEN);
+ add_flag(flgs, TR_REFLECT);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_SH_FIRE);
+ add_flag(flgs, TR_SH_ELEC);
+ add_flag(flgs, TR_SH_COLD);
+ add_flag(flgs, TR_FEATHER);
+ add_flag(flgs, TR_LITE);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_TELEPATHY);
+ add_flag(flgs, TR_SLOW_DIGEST);
+ add_flag(flgs, TR_REGEN);
+ add_flag(flgs, TR_SUST_STR);
+ add_flag(flgs, TR_SUST_INT);
+ add_flag(flgs, TR_SUST_WIS);
+ add_flag(flgs, TR_SUST_DEX);
+ add_flag(flgs, TR_SUST_CON);
+ add_flag(flgs, TR_SUST_CHR);
}
}
-static void tim_player_flags(u32b *f1, u32b *f2, u32b *f3, bool im_and_res)
+static void tim_player_flags(u32b flgs[TR_FLAG_SIZE], bool im_and_res)
{
+ int i;
+
/* Clear */
- (*f1) = (*f2) = (*f3) = 0L;
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ flgs[i] = 0L;
if (p_ptr->hero || p_ptr->shero || music_singing(MUSIC_HERO) || music_singing(MUSIC_SHERO))
- (*f2) |= TR2_RES_FEAR;
+ add_flag(flgs, TR_RES_FEAR);
if (p_ptr->tim_invis)
- (*f3) |= TR3_SEE_INVIS;
+ add_flag(flgs, TR_SEE_INVIS);
if (p_ptr->tim_regen)
- (*f3) |= TR3_REGEN;
+ add_flag(flgs, TR_REGEN);
if (p_ptr->tim_esp || music_singing(MUSIC_MIND))
- (*f3) |= TR3_TELEPATHY;
+ add_flag(flgs, TR_TELEPATHY);
if (p_ptr->fast || p_ptr->slow || music_singing(MUSIC_SPEED) || music_singing(MUSIC_SHERO))
- (*f1) |= TR1_SPEED;
+ add_flag(flgs, TR_SPEED);
if ((p_ptr->special_defense & KATA_MUSOU) || music_singing(MUSIC_RESIST))
{
- (*f2) |= (TR2_RES_FIRE);
- (*f2) |= (TR2_RES_COLD);
- (*f2) |= (TR2_RES_ACID);
- (*f2) |= (TR2_RES_ELEC);
- (*f2) |= (TR2_RES_POIS);
+ add_flag(flgs, TR_RES_FIRE);
+ add_flag(flgs, TR_RES_COLD);
+ add_flag(flgs, TR_RES_ACID);
+ add_flag(flgs, TR_RES_ELEC);
+ add_flag(flgs, TR_RES_POIS);
}
if (im_and_res)
{
if (p_ptr->oppose_acid && !(p_ptr->special_defense & DEFENSE_ACID) && !((prace_is_(RACE_YEEK)) && (p_ptr->lev > 19)))
- (*f2) |= TR2_RES_ACID;
+ add_flag(flgs, TR_RES_ACID);
if (p_ptr->oppose_elec && !(p_ptr->special_defense & DEFENSE_ELEC))
- (*f2) |= TR2_RES_ELEC;
+ add_flag(flgs, TR_RES_ELEC);
if (p_ptr->oppose_fire && !(p_ptr->special_defense & DEFENSE_FIRE))
- (*f2) |= TR2_RES_FIRE;
+ add_flag(flgs, TR_RES_FIRE);
if (p_ptr->oppose_cold && !(p_ptr->special_defense & DEFENSE_COLD))
- (*f2) |= TR2_RES_COLD;
+ add_flag(flgs, TR_RES_COLD);
}
else
{
if (p_ptr->oppose_acid)
- (*f2) |= TR2_RES_ACID;
+ add_flag(flgs, TR_RES_ACID);
if (p_ptr->oppose_elec)
- (*f2) |= TR2_RES_ELEC;
+ add_flag(flgs, TR_RES_ELEC);
if (p_ptr->oppose_fire)
- (*f2) |= TR2_RES_FIRE;
+ add_flag(flgs, TR_RES_FIRE);
if (p_ptr->oppose_cold)
- (*f2) |= TR2_RES_COLD;
+ add_flag(flgs, TR_RES_COLD);
}
if (p_ptr->oppose_pois)
- (*f2) |= TR2_RES_POIS;
+ add_flag(flgs, TR_RES_POIS);
if (p_ptr->special_attack & ATTACK_ACID)
- (*f1) |= TR1_BRAND_ACID;
+ add_flag(flgs, TR_BRAND_ACID);
if (p_ptr->special_attack & ATTACK_ELEC)
- (*f1) |= TR1_BRAND_ELEC;
+ add_flag(flgs, TR_BRAND_ELEC);
if (p_ptr->special_attack & ATTACK_FIRE)
- (*f1) |= TR1_BRAND_FIRE;
+ add_flag(flgs, TR_BRAND_FIRE);
if (p_ptr->special_attack & ATTACK_COLD)
- (*f1) |= TR1_BRAND_COLD;
+ add_flag(flgs, TR_BRAND_COLD);
if (p_ptr->special_attack & ATTACK_POIS)
- (*f1) |= TR1_BRAND_POIS;
+ add_flag(flgs, TR_BRAND_POIS);
if (p_ptr->special_defense & DEFENSE_ACID)
- (*f2) |= TR2_IM_ACID;
+ add_flag(flgs, TR_IM_ACID);
if (p_ptr->special_defense & DEFENSE_ELEC)
- (*f2) |= TR2_IM_ELEC;
+ add_flag(flgs, TR_IM_ELEC);
if (p_ptr->special_defense & DEFENSE_FIRE)
- (*f2) |= TR2_IM_FIRE;
+ add_flag(flgs, TR_IM_FIRE);
if (p_ptr->special_defense & DEFENSE_COLD)
- (*f2) |= TR2_IM_COLD;
+ add_flag(flgs, TR_IM_COLD);
if (p_ptr->wraith_form)
- (*f2) |= TR2_REFLECT;
+ add_flag(flgs, TR_REFLECT);
/* by henkma */
if (p_ptr->tim_reflect){
- (*f2) |= TR2_REFLECT;
+ add_flag(flgs, TR_REFLECT);
}
if (p_ptr->magicdef)
{
- (*f2) |= TR2_RES_BLIND;
- (*f2) |= TR2_RES_CONF;
- (*f2) |= TR2_REFLECT;
- (*f2) |= TR2_FREE_ACT;
- (*f3) |= TR3_FEATHER;
+ add_flag(flgs, TR_RES_BLIND);
+ add_flag(flgs, TR_RES_CONF);
+ add_flag(flgs, TR_REFLECT);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_FEATHER);
}
if (p_ptr->tim_res_nether)
{
- (*f2) |= TR2_RES_NETHER;
+ add_flag(flgs, TR_RES_NETHER);
}
if (p_ptr->tim_sh_fire)
{
- (*f3) |= TR3_SH_FIRE;
+ add_flag(flgs, TR_SH_FIRE);
}
if (p_ptr->ult_res)
{
- (*f2) |= TR2_RES_FEAR;
- (*f2) |= TR2_RES_LITE;
- (*f2) |= TR2_RES_DARK;
- (*f2) |= TR2_RES_BLIND;
- (*f2) |= TR2_RES_CONF;
- (*f2) |= TR2_RES_SOUND;
- (*f2) |= TR2_RES_SHARDS;
- (*f2) |= TR2_RES_NETHER;
- (*f2) |= TR2_RES_NEXUS;
- (*f2) |= TR2_RES_CHAOS;
- (*f2) |= TR2_RES_DISEN;
- (*f2) |= TR2_REFLECT;
- (*f2) |= TR2_HOLD_LIFE;
- (*f2) |= TR2_FREE_ACT;
- (*f3) |= TR3_SH_FIRE;
- (*f3) |= TR3_SH_ELEC;
- (*f3) |= TR3_SH_COLD;
- (*f3) |= TR3_FEATHER;
- (*f3) |= TR3_LITE;
- (*f3) |= TR3_SEE_INVIS;
- (*f3) |= TR3_TELEPATHY;
- (*f3) |= TR3_SLOW_DIGEST;
- (*f3) |= TR3_REGEN;
- (*f2) |= (TR2_SUST_STR);
- (*f2) |= (TR2_SUST_INT);
- (*f2) |= (TR2_SUST_WIS);
- (*f2) |= (TR2_SUST_DEX);
- (*f2) |= (TR2_SUST_CON);
- (*f2) |= (TR2_SUST_CHR);
+ add_flag(flgs, TR_RES_FEAR);
+ add_flag(flgs, TR_RES_LITE);
+ add_flag(flgs, TR_RES_DARK);
+ add_flag(flgs, TR_RES_BLIND);
+ add_flag(flgs, TR_RES_CONF);
+ add_flag(flgs, TR_RES_SOUND);
+ add_flag(flgs, TR_RES_SHARDS);
+ add_flag(flgs, TR_RES_NETHER);
+ add_flag(flgs, TR_RES_NEXUS);
+ add_flag(flgs, TR_RES_CHAOS);
+ add_flag(flgs, TR_RES_DISEN);
+ add_flag(flgs, TR_REFLECT);
+ add_flag(flgs, TR_HOLD_LIFE);
+ add_flag(flgs, TR_FREE_ACT);
+ add_flag(flgs, TR_SH_FIRE);
+ add_flag(flgs, TR_SH_ELEC);
+ add_flag(flgs, TR_SH_COLD);
+ add_flag(flgs, TR_FEATHER);
+ add_flag(flgs, TR_LITE);
+ add_flag(flgs, TR_SEE_INVIS);
+ add_flag(flgs, TR_TELEPATHY);
+ add_flag(flgs, TR_SLOW_DIGEST);
+ add_flag(flgs, TR_REGEN);
+ add_flag(flgs, TR_SUST_STR);
+ add_flag(flgs, TR_SUST_INT);
+ add_flag(flgs, TR_SUST_WIS);
+ add_flag(flgs, TR_SUST_DEX);
+ add_flag(flgs, TR_SUST_CON);
+ add_flag(flgs, TR_SUST_CHR);
}
}
+/* Mode flags for displaying player flags */
+#define DP_CURSE 0x01
+#define DP_IMM 0x02
+#define DP_WP 0x08
+
+
/*
* Equippy chars
*/
-static void display_player_equippy(int y, int x)
+static void display_player_equippy(int y, int x, u16b mode)
{
- int i;
+ int i, max_i;
byte a;
char c;
object_type *o_ptr;
+ /* Weapon flags need only two column */
+ if (mode & DP_WP) max_i = INVEN_LARM + 1;
+ else max_i = INVEN_TOTAL;
/* Dump equippy chars */
- for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
+ for (i = INVEN_RARM; i < max_i; i++)
{
/* Object */
o_ptr = &inventory[i];
void print_equippy(void)
{
- display_player_equippy(ROW_EQUIPPY, COL_EQUIPPY);
+ display_player_equippy(ROW_EQUIPPY, COL_EQUIPPY, 0);
}
/*
*
*/
-static void known_obj_immunity(u32b *f1, u32b *f2, u32b *f3)
+static void known_obj_immunity(u32b flgs[TR_FLAG_SIZE])
{
int i;
/* Clear */
- (*f1) = (*f2) = (*f3) = 0L;
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ flgs[i] = 0L;
/* Check equipment */
for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
- u32b o_f1, o_f2, o_f3;
+ u32b o_flgs[TR_FLAG_SIZE];
object_type *o_ptr;
if (!o_ptr->k_idx) continue;
/* Known flags */
- object_flags_known(o_ptr, &o_f1, &o_f2, &o_f3);
+ object_flags_known(o_ptr, o_flgs);
- if (o_f2 & TR2_IM_ACID) (*f2) |= TR2_RES_ACID;
- if (o_f2 & TR2_IM_ELEC) (*f2) |= TR2_RES_ELEC;
- if (o_f2 & TR2_IM_FIRE) (*f2) |= TR2_RES_FIRE;
- if (o_f2 & TR2_IM_COLD) (*f2) |= TR2_RES_COLD;
+ if (have_flag(flgs, TR_IM_ACID)) add_flag(flgs, TR_RES_ACID);
+ if (have_flag(flgs, TR_IM_ELEC)) add_flag(flgs, TR_RES_ELEC);
+ if (have_flag(flgs, TR_IM_FIRE)) add_flag(flgs, TR_RES_FIRE);
+ if (have_flag(flgs, TR_IM_COLD)) add_flag(flgs, TR_RES_COLD);
}
}
-static void player_immunity(u32b *f1, u32b *f2, u32b *f3)
+static void player_immunity(u32b flgs[TR_FLAG_SIZE])
{
+ int i;
+
/* Clear */
- (*f1) = (*f2) = (*f3) = 0L;
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ flgs[i] = 0L;
if (prace_is_(RACE_SPECTRE))
- (*f2) |= TR2_RES_NETHER;
+ add_flag(flgs, TR_RES_NETHER);
if (p_ptr->mimic_form == MIMIC_VAMPIRE || prace_is_(RACE_VAMPIRE))
- (*f2) |= TR2_RES_DARK;
+ add_flag(flgs, TR_RES_DARK);
if (p_ptr->mimic_form == MIMIC_DEMON_LORD)
- (*f2) |= TR2_RES_FIRE;
+ add_flag(flgs, TR_RES_FIRE);
else if (prace_is_(RACE_YEEK) && p_ptr->lev > 19)
- (*f2) |= TR2_RES_ACID;
+ add_flag(flgs, TR_RES_ACID);
}
-static void tim_player_immunity(u32b *f1, u32b *f2, u32b *f3)
+static void tim_player_immunity(u32b flgs[TR_FLAG_SIZE])
{
+ int i;
+
/* Clear */
- (*f1) = (*f2) = (*f3) = 0L;
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ flgs[i] = 0L;
if (p_ptr->special_defense & DEFENSE_ACID)
- (*f2) |= TR2_RES_ACID;
+ add_flag(flgs, TR_RES_ACID);
if (p_ptr->special_defense & DEFENSE_ELEC)
- (*f2) |= TR2_RES_ELEC;
+ add_flag(flgs, TR_RES_ELEC);
if (p_ptr->special_defense & DEFENSE_FIRE)
- (*f2) |= TR2_RES_FIRE;
+ add_flag(flgs, TR_RES_FIRE);
if (p_ptr->special_defense & DEFENSE_COLD)
- (*f2) |= TR2_RES_COLD;
+ add_flag(flgs, TR_RES_COLD);
if (p_ptr->wraith_form)
- (*f2) |= TR2_RES_DARK;
+ add_flag(flgs, TR_RES_DARK);
}
-static void player_vuln_flags(u32b *f1, u32b *f2, u32b *f3)
+static void player_vuln_flags(u32b flgs[TR_FLAG_SIZE])
{
+ int i;
+
/* Clear */
- (*f1) = (*f2) = (*f3) = 0L;
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ flgs[i] = 0L;
if ((p_ptr->muta3 & MUT3_VULN_ELEM) || (p_ptr->special_defense & KATA_KOUKIJIN))
{
- (*f2) |= TR2_RES_ACID;
- (*f2) |= TR2_RES_ELEC;
- (*f2) |= TR2_RES_FIRE;
- (*f2) |= TR2_RES_COLD;
+ add_flag(flgs, TR_RES_ACID);
+ add_flag(flgs, TR_RES_ELEC);
+ add_flag(flgs, TR_RES_FIRE);
+ add_flag(flgs, TR_RES_COLD);
}
if (prace_is_(RACE_ANDROID))
- (*f2) |= TR2_RES_ELEC;
+ add_flag(flgs, TR_RES_ELEC);
if (prace_is_(RACE_ENT))
- (*f2) |= TR2_RES_FIRE;
+ add_flag(flgs, TR_RES_FIRE);
if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) ||
(p_ptr->mimic_form == MIMIC_VAMPIRE))
- (*f2) |= TR2_RES_LITE;
+ add_flag(flgs, TR_RES_LITE);
}
+
+/*
+ * A struct for storing misc. flags
+ */
+typedef struct {
+ u32b player_flags[TR_FLAG_SIZE];
+ u32b tim_player_flags[TR_FLAG_SIZE];
+ u32b player_imm[TR_FLAG_SIZE];
+ u32b tim_player_imm[TR_FLAG_SIZE];
+ u32b player_vuln[TR_FLAG_SIZE];
+ u32b known_obj_imm[TR_FLAG_SIZE];
+} all_player_flags;
+
+
/*
* Helper function, see below
*/
-static void display_player_flag_aux(int row, int col, char *header,
- int n, u32b flag1, u32b flag2,
- u32b im_f[], u32b vul_f)
+static void display_flag_aux(int row, int col, cptr header,
+ int flag1, all_player_flags *f, u16b mode)
{
int i;
- u32b f[3];
bool vuln = FALSE;
+ int max_i;
- if ((vul_f & flag1) && !((im_f[0] | im_f[1] | im_f[2]) & flag1))
+ if (have_flag(f->player_vuln, flag1) &&
+ !(have_flag(f->known_obj_imm, flag1) ||
+ have_flag(f->player_imm, flag1) ||
+ have_flag(f->tim_player_imm, flag1)))
vuln = TRUE;
/* Header */
- c_put_str(TERM_WHITE, header, row, col);
+ if (!(mode & DP_IMM)) c_put_str(TERM_WHITE, header, row, col);
/* Advance */
col += strlen(header) + 1;
+ /* Weapon flags need only two column */
+ if (mode & DP_WP) max_i = INVEN_LARM + 1;
+ else max_i = INVEN_TOTAL;
+
/* Check equipment */
- for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
+ for (i = INVEN_RARM; i < max_i; i++)
{
+ u32b flgs[TR_FLAG_SIZE];
object_type *o_ptr;
- f[0] = f[1] = f[2] = 0L;
/* Object */
o_ptr = &inventory[i];
/* Known flags */
- object_flags_known(o_ptr, &f[0], &f[1], &f[2]);
+ object_flags_known(o_ptr, flgs);
/* Default */
- c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
+ if (!(mode & DP_IMM))
+ c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
/* Check flags */
- if (f[n - 1] & flag1) c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
- if (f[n - 1] & flag2) c_put_str(TERM_WHITE, "*", row, col);
+ if (mode & DP_CURSE)
+ {
+ if ((mode & DP_CURSE) && (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE)))
+ c_put_str(TERM_WHITE, "+", row, col);
+ if ((mode & DP_CURSE) && (o_ptr->curse_flags & TRC_PERMA_CURSE))
+ c_put_str(TERM_WHITE, "*", row, col);
+ }
+ else
+ {
+ if (have_flag(flgs, flag1))
+ c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE),
+ (mode & DP_IMM) ? "*" : "+", row, col);
+ }
/* Advance */
col++;
}
- /* Player flags */
- player_flags(&f[0], &f[1], &f[2]);
+ /* Assume that player flag is already written */
+ if (mode & DP_IMM) return;
/* Default */
c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
- /* Check flags */
- if (f[n-1] & flag1) c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
+ /* Player flags */
+ if (have_flag(f->player_flags, flag1)) c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
/* Timed player flags */
- tim_player_flags(&f[0], &f[1], &f[2], TRUE);
-
- /* Check flags */
- if (f[n-1] & flag1) c_put_str((byte)(vuln ? TERM_ORANGE : TERM_YELLOW), "#", row, col);
+ if (have_flag(f->tim_player_flags, flag1)) c_put_str((byte)(vuln ? TERM_ORANGE : TERM_YELLOW), "#", row, col);
/* Immunity */
- if (im_f[2] & flag1) c_put_str(TERM_YELLOW, "*", row, col);
- if (im_f[1] & flag1) c_put_str(TERM_WHITE, "*", row, col);
+ if (have_flag(f->tim_player_imm, flag1)) c_put_str(TERM_YELLOW, "*", row, col);
+ if (have_flag(f->player_imm, flag1)) c_put_str(TERM_WHITE, "*", row, col);
/* Vulnerability */
if (vuln) c_put_str(TERM_RED, "v", row, col + 1);
int row;
int col;
- u32b im_f[3][3], vul_f[3];
-
- known_obj_immunity(&im_f[0][0], &im_f[1][0], &im_f[2][0]);
- player_immunity(&im_f[0][1], &im_f[1][1], &im_f[2][1]);
- tim_player_immunity(&im_f[0][2], &im_f[1][2], &im_f[2][2]);
+ all_player_flags f;
- player_vuln_flags(&vul_f[0], &vul_f[1], &vul_f[2]);
+ /* Extract flags and store */
+ player_flags(f.player_flags);
+ tim_player_flags(f.tim_player_flags, TRUE);
+ player_immunity(f.player_imm);
+ tim_player_immunity(f.tim_player_imm);
+ known_obj_immunity(f.known_obj_imm);
+ player_vuln_flags(f.player_vuln);
/*** Set 1 ***/
row = 12;
col = 1;
- display_player_equippy(row-2, col+8);
+ display_player_equippy(row-2, col+8, 0);
c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+8);
#ifdef JP
-display_player_flag_aux(row+0, col, "ÂÑ»À :", 2, TR2_RES_ACID, TR2_IM_ACID, im_f[1], vul_f[1]);
-display_player_flag_aux(row+1, col, "ÂÑÅÅ·â:", 2, TR2_RES_ELEC, TR2_IM_ELEC, im_f[1], vul_f[1]);
-display_player_flag_aux(row+2, col, "ÂѲбê:", 2, TR2_RES_FIRE, TR2_IM_FIRE, im_f[1], vul_f[1]);
-display_player_flag_aux(row+3, col, "ÂÑÎ䵤:", 2, TR2_RES_COLD, TR2_IM_COLD, im_f[1], vul_f[1]);
-display_player_flag_aux(row+4, col, "ÂÑÆÇ :", 2, TR2_RES_POIS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+5, col, "ÂÑÁ®¸÷:", 2, TR2_RES_LITE, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+6, col, "ÂѰŹõ:", 2, TR2_RES_DARK, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+7, col, "ÂÑÇËÊÒ:", 2, TR2_RES_SHARDS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+8, col, "ÂÑÌÕÌÜ:", 2, TR2_RES_BLIND, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+9, col, "ÂѺ®Íð:", 2, TR2_RES_CONF, 0, im_f[1], vul_f[1]);
-#else
- display_player_flag_aux(row+0, col, "Acid :", 2, TR2_RES_ACID, TR2_IM_ACID, im_f[1], vul_f[1]);
- display_player_flag_aux(row+1, col, "Elec :", 2, TR2_RES_ELEC, TR2_IM_ELEC, im_f[1], vul_f[1]);
- display_player_flag_aux(row+2, col, "Fire :", 2, TR2_RES_FIRE, TR2_IM_FIRE, im_f[1], vul_f[1]);
- display_player_flag_aux(row+3, col, "Cold :", 2, TR2_RES_COLD, TR2_IM_COLD, im_f[1], vul_f[1]);
- display_player_flag_aux(row+4, col, "Poison:", 2, TR2_RES_POIS, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+5, col, "Light :", 2, TR2_RES_LITE, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+6, col, "Dark :", 2, TR2_RES_DARK, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+7, col, "Shard :", 2, TR2_RES_SHARDS, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+8, col, "Blind :", 2, TR2_RES_BLIND, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+9, col, "Conf :", 2, TR2_RES_CONF, 0, im_f[1], vul_f[1]);
+display_flag_aux(row+0, col, "ÂÑ»À :", TR_RES_ACID, &f, 0);
+display_flag_aux(row+0, col, "ÂÑ»À :", TR_IM_ACID, &f, DP_IMM);
+display_flag_aux(row+1, col, "ÂÑÅÅ·â:", TR_RES_ELEC, &f, 0);
+display_flag_aux(row+1, col, "ÂÑÅÅ·â:", TR_IM_ELEC, &f, DP_IMM);
+display_flag_aux(row+2, col, "ÂѲбê:", TR_RES_FIRE, &f, 0);
+display_flag_aux(row+2, col, "ÂѲбê:", TR_IM_FIRE, &f, DP_IMM);
+display_flag_aux(row+3, col, "ÂÑÎ䵤:", TR_RES_COLD, &f, 0);
+display_flag_aux(row+3, col, "ÂÑÎ䵤:", TR_IM_COLD, &f, DP_IMM);
+display_flag_aux(row+4, col, "ÂÑÆÇ :", TR_RES_POIS, &f, 0);
+display_flag_aux(row+5, col, "ÂÑÁ®¸÷:", TR_RES_LITE, &f, 0);
+display_flag_aux(row+6, col, "ÂѰŹõ:", TR_RES_DARK, &f, 0);
+display_flag_aux(row+7, col, "ÂÑÇËÊÒ:", TR_RES_SHARDS, &f, 0);
+display_flag_aux(row+8, col, "ÂÑÌÕÌÜ:", TR_RES_BLIND, &f, 0);
+display_flag_aux(row+9, col, "ÂѺ®Íð:", TR_RES_CONF, &f, 0);
+#else
+ display_flag_aux(row+0, col, "Acid :", TR_RES_ACID, &f, 0);
+ display_flag_aux(row+0, col, "Acid :", TR_IM_ACID, &f, DP_IMM);
+ display_flag_aux(row+1, col, "Elec :", TR_RES_ELEC, &f, 0);
+ display_flag_aux(row+1, col, "Elec :", TR_IM_ELEC, &f, DP_IMM);
+ display_flag_aux(row+2, col, "Fire :", TR_RES_FIRE, &f, 0);
+ display_flag_aux(row+2, col, "Fire :", TR_IM_FIRE, &f, DP_IMM);
+ display_flag_aux(row+3, col, "Cold :", TR_RES_COLD, &f, 0);
+ display_flag_aux(row+3, col, "Cold :", TR_IM_COLD, &f, DP_IMM);
+ display_flag_aux(row+4, col, "Poison:", TR_RES_POIS, &f, 0);
+ display_flag_aux(row+5, col, "Light :", TR_RES_LITE, &f, 0);
+ display_flag_aux(row+6, col, "Dark :", TR_RES_DARK, &f, 0);
+ display_flag_aux(row+7, col, "Shard :", TR_RES_SHARDS, &f, 0);
+ display_flag_aux(row+8, col, "Blind :", TR_RES_BLIND, &f, 0);
+ display_flag_aux(row+9, col, "Conf :", TR_RES_CONF, &f, 0);
#endif
row = 12;
col = 26;
- display_player_equippy(row-2, col+8);
+ display_player_equippy(row-2, col+8, 0);
c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+8);
#ifdef JP
-display_player_flag_aux(row+0, col, "Âѹ첻:", 2, TR2_RES_SOUND, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+1, col, "ÂÑÃϹö:", 2, TR2_RES_NETHER, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+2, col, "ÂÑ°øº®:", 2, TR2_RES_NEXUS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+3, col, "ÂÑ¥«¥ª:", 2, TR2_RES_CHAOS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+4, col, "ÂÑÎô²½:", 2, TR2_RES_DISEN, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+5, col, "ÂѶ²ÉÝ:", 2, TR2_RES_FEAR, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+6, col, "È¿¼Í :", 2, TR2_REFLECT, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+7, col, "²Ð±ê¥ª:", 3, TR3_SH_FIRE, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+8, col, "Åŵ¤¥ª:", 3, TR3_SH_ELEC, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+9, col, "Î䵤¥ª:", 3, TR3_SH_COLD, 0, im_f[2], vul_f[2]);
+display_flag_aux(row+0, col, "Âѹ첻:", TR_RES_SOUND, &f, 0);
+display_flag_aux(row+1, col, "ÂÑÃϹö:", TR_RES_NETHER, &f, 0);
+display_flag_aux(row+2, col, "ÂÑ°øº®:", TR_RES_NEXUS, &f, 0);
+display_flag_aux(row+3, col, "ÂÑ¥«¥ª:", TR_RES_CHAOS, &f, 0);
+display_flag_aux(row+4, col, "ÂÑÎô²½:", TR_RES_DISEN, &f, 0);
+display_flag_aux(row+5, col, "ÂѶ²ÉÝ:", TR_RES_FEAR, &f, 0);
+display_flag_aux(row+6, col, "È¿¼Í :", TR_REFLECT, &f, 0);
+display_flag_aux(row+7, col, "²Ð±ê¥ª:", TR_SH_FIRE, &f, 0);
+display_flag_aux(row+8, col, "Åŵ¤¥ª:", TR_SH_ELEC, &f, 0);
+display_flag_aux(row+9, col, "Î䵤¥ª:", TR_SH_COLD, &f, 0);
#else
- display_player_flag_aux(row+0, col, "Sound :", 2, TR2_RES_SOUND, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+1, col, "Nether:", 2, TR2_RES_NETHER, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+2, col, "Nexus :", 2, TR2_RES_NEXUS, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+3, col, "Chaos :", 2, TR2_RES_CHAOS, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+4, col, "Disnch:", 2, TR2_RES_DISEN, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+5, col, "Fear :", 2, TR2_RES_FEAR, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+6, col, "Reflct:", 2, TR2_REFLECT, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+7, col, "AuFire:", 3, TR3_SH_FIRE, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+8, col, "AuElec:", 3, TR3_SH_ELEC, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+9, col, "AuCold:", 3, TR3_SH_COLD, 0, im_f[2], vul_f[2]);
+ display_flag_aux(row+0, col, "Sound :", TR_RES_SOUND, &f, 0);
+ display_flag_aux(row+1, col, "Nether:", TR_RES_NETHER, &f, 0);
+ display_flag_aux(row+2, col, "Nexus :", TR_RES_NEXUS, &f, 0);
+ display_flag_aux(row+3, col, "Chaos :", TR_RES_CHAOS, &f, 0);
+ display_flag_aux(row+4, col, "Disnch:", TR_RES_DISEN, &f, 0);
+ display_flag_aux(row+5, col, "Fear :", TR_RES_FEAR, &f, 0);
+ display_flag_aux(row+6, col, "Reflct:", TR_REFLECT, &f, 0);
+ display_flag_aux(row+7, col, "AuFire:", TR_SH_FIRE, &f, 0);
+ display_flag_aux(row+8, col, "AuElec:", TR_SH_ELEC, &f, 0);
+ display_flag_aux(row+9, col, "AuCold:", TR_SH_COLD, &f, 0);
#endif
row = 12;
col = 51;
- display_player_equippy(row-2, col+12);
+ display_player_equippy(row-2, col+12, 0);
c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+12);
#ifdef JP
-display_player_flag_aux(row+0, col, "²Ã® :", 1, TR1_SPEED, 0, im_f[0], vul_f[0]);
-display_player_flag_aux(row+1, col, "ÂÑËãáã :", 2, TR2_FREE_ACT, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+2, col, "Æ©ÌÀÂλëǧ:", 3, TR3_SEE_INVIS, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+3, col, "·Ð¸³ÃÍÊÝ»ý:", 2, TR2_HOLD_LIFE, 0, im_f[2], vul_f[1]);
-display_player_flag_aux(row+4, col, "¥Æ¥ì¥Ñ¥·¡¼:", 3, TR3_TELEPATHY, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+5, col, "Ãپò½ :", 3, TR3_SLOW_DIGEST, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+6, col, "µÞ²óÉü :", 3, TR3_REGEN, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+7, col, "ÉâÍ· :", 3, TR3_FEATHER, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+8, col, "±Ê±ó¸÷¸» :", 3, TR3_LITE, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+9, col, "¼ö¤¤ :", 3, (TR3_CURSED | TR3_HEAVY_CURSE), TR3_PERMA_CURSE, im_f[2], vul_f[2]);
-#else
- display_player_flag_aux(row+0, col, "Speed :", 1, TR1_SPEED, 0, im_f[0], vul_f[0]);
- display_player_flag_aux(row+1, col, "FreeAction:", 2, TR2_FREE_ACT, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+2, col, "SeeInvisi.:", 3, TR3_SEE_INVIS, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+3, col, "Hold Life :", 2, TR2_HOLD_LIFE, 0, im_f[1], vul_f[1]);
- display_player_flag_aux(row+4, col, "Telepathy :", 3, TR3_TELEPATHY, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+5, col, "SlowDigest:", 3, TR3_SLOW_DIGEST, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+6, col, "Regene. :", 3, TR3_REGEN, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+7, col, "Levitation:", 3, TR3_FEATHER, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+8, col, "Perm Lite :", 3, TR3_LITE, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+9, col, "Cursed :", 3, (TR3_CURSED | TR3_HEAVY_CURSE), TR3_PERMA_CURSE, im_f[2], vul_f[2]);
+display_flag_aux(row+0, col, "²Ã® :", TR_SPEED, &f, 0);
+display_flag_aux(row+1, col, "ÂÑËãáã :", TR_FREE_ACT, &f, 0);
+display_flag_aux(row+2, col, "Æ©ÌÀÂλëǧ:", TR_SEE_INVIS, &f, 0);
+display_flag_aux(row+3, col, "·Ð¸³ÃÍÊÝ»ý:", TR_HOLD_LIFE, &f, 0);
+display_flag_aux(row+4, col, "·Ù¹ð :", TR_WARNING, &f, 0);
+display_flag_aux(row+5, col, "Ãپò½ :", TR_SLOW_DIGEST, &f, 0);
+display_flag_aux(row+6, col, "µÞ²óÉü :", TR_REGEN, &f, 0);
+display_flag_aux(row+7, col, "ÉâÍ· :", TR_FEATHER, &f, 0);
+display_flag_aux(row+8, col, "±Ê±ó¸÷¸» :", TR_LITE, &f, 0);
+display_flag_aux(row+9, col, "¼ö¤¤ :", 0, &f, DP_CURSE);
+#else
+ display_flag_aux(row+0, col, "Speed :", TR_SPEED, &f, 0);
+ display_flag_aux(row+1, col, "FreeAction:", TR_FREE_ACT, &f, 0);
+ display_flag_aux(row+2, col, "SeeInvisi.:", TR_SEE_INVIS, &f, 0);
+ display_flag_aux(row+3, col, "Hold Life :", TR_HOLD_LIFE, &f, 0);
+ display_flag_aux(row+4, col, "Warning :", TR_WARNING, &f, 0);
+ display_flag_aux(row+5, col, "SlowDigest:", TR_SLOW_DIGEST, &f, 0);
+ display_flag_aux(row+6, col, "Regene. :", TR_REGEN, &f, 0);
+ display_flag_aux(row+7, col, "Levitation:", TR_FEATHER, &f, 0);
+ display_flag_aux(row+8, col, "Perm Lite :", TR_LITE, &f, 0);
+ display_flag_aux(row+9, col, "Cursed :", 0, &f, DP_CURSE);
+#endif
+
+}
+
+
+/*
+ * Special display, part 2
+ */
+static void display_player_other_flag_info(void)
+{
+ int row;
+ int col;
+
+ all_player_flags f;
+
+ /* Extract flags and store */
+ player_flags(f.player_flags);
+ tim_player_flags(f.tim_player_flags, TRUE);
+ player_immunity(f.player_imm);
+ tim_player_immunity(f.tim_player_imm);
+ known_obj_immunity(f.known_obj_imm);
+ player_vuln_flags(f.player_vuln);
+
+ /*** Set 1 ***/
+
+ row = 3;
+ col = 1;
+
+ display_player_equippy(row-2, col+12, DP_WP);
+
+ c_put_str(TERM_WHITE, "ab@", row-1, col+12);
+
+#ifdef JP
+ display_flag_aux(row+ 0, col, "¼Ù° ÇÜÂÇ :", TR_SLAY_EVIL, &f, DP_WP);
+ display_flag_aux(row+ 0, col, "¼Ù° ÇÜÂÇ :", TR_KILL_EVIL, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 1, col, "ÉÔ»à ÇÜÂÇ :", TR_SLAY_UNDEAD, &f, DP_WP);
+ display_flag_aux(row+ 1, col, "ÉÔ»à ÇÜÂÇ :", TR_KILL_UNDEAD, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 2, col, "°Ëâ ÇÜÂÇ :", TR_SLAY_DEMON, &f, DP_WP);
+ display_flag_aux(row+ 2, col, "°Ëâ ÇÜÂÇ :", TR_KILL_DEMON, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 3, col, "ζ ÇÜÂÇ :", TR_SLAY_DRAGON, &f, DP_WP);
+ display_flag_aux(row+ 3, col, "ζ ÇÜÂÇ :", TR_KILL_DRAGON, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 4, col, "¿Í´Ö ÇÜÂÇ :", TR_SLAY_HUMAN, &f, DP_WP);
+ display_flag_aux(row+ 4, col, "¿Í´Ö ÇÜÂÇ :", TR_KILL_HUMAN, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 5, col, "ưʪ ÇÜÂÇ :", TR_SLAY_ANIMAL, &f, DP_WP);
+ display_flag_aux(row+ 5, col, "ưʪ ÇÜÂÇ :", TR_KILL_ANIMAL, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 6, col, "¥ª¡¼¥¯ÇÜÂÇ:", TR_SLAY_ORC, &f, DP_WP);
+ display_flag_aux(row+ 6, col, "¥ª¡¼¥¯ÇÜÂÇ:", TR_KILL_ORC, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 7, col, "¥È¥í¥ëÇÜÂÇ:", TR_SLAY_TROLL, &f, DP_WP);
+ display_flag_aux(row+ 7, col, "¥È¥í¥ëÇÜÂÇ:", TR_KILL_TROLL, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 8, col, "µð¿Í ÇÜÂÇ :", TR_SLAY_GIANT, &f, DP_WP);
+ display_flag_aux(row+ 8, col, "µð¿Í ÇÜÂÇ :", TR_KILL_GIANT, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 9, col, "Íϲò :", TR_BRAND_ACID, &f, DP_WP);
+ display_flag_aux(row+10, col, "ÅÅ·â :", TR_BRAND_ELEC, &f, DP_WP);
+ display_flag_aux(row+11, col, "¾Æ´þ :", TR_BRAND_FIRE, &f, DP_WP);
+ display_flag_aux(row+12, col, "Åà·ë :", TR_BRAND_COLD, &f, DP_WP);
+ display_flag_aux(row+13, col, "ÆÇ»¦ :", TR_BRAND_POIS, &f, DP_WP);
+ display_flag_aux(row+14, col, "ÀÚ¤ìÌ£ :", TR_VORPAL, &f, DP_WP);
+ display_flag_aux(row+15, col, "ÃÏ¿Ì :", TR_IMPACT, &f, DP_WP);
+ display_flag_aux(row+16, col, "µÛ·ì :", TR_VAMPIRIC, &f, DP_WP);
+ display_flag_aux(row+17, col, "¥«¥ª¥¹¸ú²Ì:", TR_CHAOTIC, &f, DP_WP);
+ display_flag_aux(row+18, col, "ÍýÎÏ :", TR_FORCE_WEAPON, &f, DP_WP);
+#else
+ display_flag_aux(row+ 0, col, "Slay Evil :", TR_SLAY_EVIL, &f, DP_WP);
+ display_flag_aux(row+ 0, col, "Slay Evil :", TR_KILL_EVIL, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 1, col, "Slay Und. :", TR_SLAY_UNDEAD, &f, DP_WP);
+ display_flag_aux(row+ 1, col, "Slay Und. :", TR_KILL_UNDEAD, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 2, col, "Slay Demon:", TR_SLAY_DEMON, &f, DP_WP);
+ display_flag_aux(row+ 2, col, "Slay Demon:", TR_KILL_DEMON, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 3, col, "Slay Drag.:", TR_SLAY_DRAGON, &f, DP_WP);
+ display_flag_aux(row+ 3, col, "Slay Drag.:", TR_KILL_DRAGON, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 4, col, "Slay Human:", TR_SLAY_HUMAN, &f, DP_WP);
+ display_flag_aux(row+ 4, col, "Slay Human:", TR_KILL_HUMAN, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 5, col, "Slay Anim.:", TR_SLAY_ANIMAL, &f, DP_WP);
+ display_flag_aux(row+ 5, col, "Slay Anim.:", TR_KILL_ANIMAL, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 6, col, "Slay Orc :", TR_SLAY_ORC, &f, DP_WP);
+ display_flag_aux(row+ 6, col, "Slay Orc :", TR_KILL_ORC, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 7, col, "Slay Troll:", TR_SLAY_TROLL, &f, DP_WP);
+ display_flag_aux(row+ 7, col, "Slay Troll:", TR_KILL_TROLL, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 8, col, "Slay Giant:", TR_SLAY_GIANT, &f, DP_WP);
+ display_flag_aux(row+ 8, col, "Slay Giant:", TR_KILL_GIANT, &f, (DP_WP|DP_IMM));
+ display_flag_aux(row+ 9, col, "Acid Brand:", TR_BRAND_ACID, &f, DP_WP);
+ display_flag_aux(row+10, col, "Elec Brand:", TR_BRAND_ELEC, &f, DP_WP);
+ display_flag_aux(row+11, col, "Fire Brand:", TR_BRAND_FIRE, &f, DP_WP);
+ display_flag_aux(row+12, col, "Cold Brand:", TR_BRAND_COLD, &f, DP_WP);
+ display_flag_aux(row+13, col, "Poison Brd:", TR_BRAND_POIS, &f, DP_WP);
+ display_flag_aux(row+14, col, "Sharpness :", TR_VORPAL, &f, DP_WP);
+ display_flag_aux(row+15, col, "Quake :", TR_IMPACT, &f, DP_WP);
+ display_flag_aux(row+16, col, "Vampicic :", TR_VAMPIRIC, &f, DP_WP);
+ display_flag_aux(row+17, col, "Chatic :", TR_CHAOTIC, &f, DP_WP);
+ display_flag_aux(row+18, col, "Force Wep.:", TR_FORCE_WEAPON, &f, DP_WP);
+#endif
+
+
+ /*** Set 2 ***/
+
+ row = 3;
+ col = col + 12 + 7;
+
+ display_player_equippy(row-2, col+12, 0);
+ c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+12);
+
+#ifdef JP
+ display_flag_aux(row+ 0, col, "¥Æ¥ì¥Ñ¥·¡¼:", TR_TELEPATHY, &f, 0);
+ display_flag_aux(row+ 1, col, "¼Ù°ESP :", TR_ESP_EVIL, &f, 0);
+ display_flag_aux(row+ 2, col, "̵À¸ÊªESP :", TR_ESP_NONLIVING, &f, 0);
+ display_flag_aux(row+ 3, col, "Á±ÎÉESP :", TR_ESP_GOOD, &f, 0);
+ display_flag_aux(row+ 4, col, "ÉÔ»àESP :", TR_ESP_UNDEAD, &f, 0);
+ display_flag_aux(row+ 5, col, "°ËâESP :", TR_ESP_DEMON, &f, 0);
+ display_flag_aux(row+ 6, col, "ζESP :", TR_ESP_DRAGON, &f, 0);
+ display_flag_aux(row+ 7, col, "¿Í´ÖESP :", TR_ESP_HUMAN, &f, 0);
+ display_flag_aux(row+ 8, col, "ưʪESP :", TR_ESP_ANIMAL, &f, 0);
+ display_flag_aux(row+ 9, col, "¥ª¡¼¥¯ESP :", TR_ESP_ORC, &f, 0);
+ display_flag_aux(row+10, col, "¥È¥í¥ëESP :", TR_ESP_TROLL, &f, 0);
+ display_flag_aux(row+11, col, "µð¿ÍESP :", TR_ESP_GIANT, &f, 0);
+
+ display_flag_aux(row+13, col, "ÏÓÎÏ°Ý»ý :", TR_SUST_STR, &f, 0);
+ display_flag_aux(row+14, col, "ÃÎÎÏ°Ý»ý :", TR_SUST_INT, &f, 0);
+ display_flag_aux(row+15, col, "¸¤µ°Ý»ý :", TR_SUST_WIS, &f, 0);
+ display_flag_aux(row+16, col, "´ïÍÑ°Ý»ý :", TR_SUST_DEX, &f, 0);
+ display_flag_aux(row+17, col, "Âѵװݻý :", TR_SUST_CON, &f, 0);
+ display_flag_aux(row+18, col, "Ì¥ÎÏ°Ý»ý :", TR_SUST_CHR, &f, 0);
+#else
+ display_flag_aux(row+ 0, col, "Telepathy :", TR_TELEPATHY, &f, 0);
+ display_flag_aux(row+ 1, col, "ESP Evil :", TR_ESP_EVIL, &f, 0);
+ display_flag_aux(row+ 2, col, "ESP Noliv.:", TR_ESP_NONLIVING, &f, 0);
+ display_flag_aux(row+ 3, col, "ESP Good :", TR_ESP_GOOD, &f, 0);
+ display_flag_aux(row+ 4, col, "ESP Undead:", TR_ESP_UNDEAD, &f, 0);
+ display_flag_aux(row+ 5, col, "ESP Demon :", TR_ESP_DEMON, &f, 0);
+ display_flag_aux(row+ 6, col, "ESP Dragon:", TR_ESP_DRAGON, &f, 0);
+ display_flag_aux(row+ 7, col, "ESP Human :", TR_ESP_HUMAN, &f, 0);
+ display_flag_aux(row+ 8, col, "ESP Animal:", TR_ESP_ANIMAL, &f, 0);
+ display_flag_aux(row+ 9, col, "ESP Orc :", TR_ESP_ORC, &f, 0);
+ display_flag_aux(row+10, col, "ESP Troll :", TR_ESP_TROLL, &f, 0);
+ display_flag_aux(row+11, col, "ESP Giant :", TR_ESP_GIANT, &f, 0);
+
+ display_flag_aux(row+13, col, "Sust Str :", TR_SUST_STR, &f, 0);
+ display_flag_aux(row+14, col, "Sust Int :", TR_SUST_INT, &f, 0);
+ display_flag_aux(row+15, col, "Sust Wis :", TR_SUST_WIS, &f, 0);
+ display_flag_aux(row+16, col, "Sust Dex :", TR_SUST_DEX, &f, 0);
+ display_flag_aux(row+17, col, "Sust Con :", TR_SUST_CON, &f, 0);
+ display_flag_aux(row+18, col, "Sust Chr :", TR_SUST_CHR, &f, 0);
+#endif
+
+
+ /*** Set 3 ***/
+
+ row = 3;
+ col = col + 12 + 17;
+
+ display_player_equippy(row-2, col+14, 0);
+
+ c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+14);
+
+#ifdef JP
+ display_flag_aux(row+ 0, col, "Äɲù¶·â :", TR_BLOWS, &f, 0);
+ display_flag_aux(row+ 1, col, "ºÎ·¡ :", TR_TUNNEL, &f, 0);
+ display_flag_aux(row+ 2, col, "ÀÖ³°Àþ»ëÎÏ :", TR_INFRA, &f, 0);
+ display_flag_aux(row+ 3, col, "ËâË¡Æ»¶ñ»ÙÇÛ:", TR_MAGIC_MASTERY, &f, 0);
+ display_flag_aux(row+ 4, col, "±£Ì© :", TR_STEALTH, &f, 0);
+ display_flag_aux(row+ 5, col, "õº÷ :", TR_SEARCH, &f, 0);
+
+ display_flag_aux(row+ 7, col, "¾èÇÏ :", TR_RIDING, &f, 0);
+ display_flag_aux(row+ 8, col, "ÅêÚ³ :", TR_THROW, &f, 0);
+ display_flag_aux(row+ 9, col, "½ËÊ¡ :", TR_BLESSED, &f, 0);
+ display_flag_aux(row+10, col, "È¿¥Æ¥ì¥Ý¡¼¥È:", TR_NO_TELE, &f, 0);
+ display_flag_aux(row+11, col, "È¿ËâË¡ :", TR_NO_MAGIC, &f, 0);
+ display_flag_aux(row+12, col, "¾ÃÈñËâÎϸº¾¯:", TR_DEC_MANA, &f, 0);
+
+ display_flag_aux(row+14, col, "·Ð¸³Ã͸º¾¯ :", TR_DRAIN_EXP, &f, 0);
+ display_flag_aux(row+15, col, "Íð¥Æ¥ì¥Ý¡¼¥È:", TR_TELEPORT, &f, 0);
+ display_flag_aux(row+16, col, "È¿´¶ :", TR_AGGRAVATE, &f, 0);
+ display_flag_aux(row+17, col, "ÂÀ¸Å¤Î±åÇ° :", TR_TY_CURSE, &f, 0);
+#else
+ display_flag_aux(row+ 0, col, "Add Blows :", TR_BLOWS, &f, 0);
+ display_flag_aux(row+ 1, col, "Add Tunnel :", TR_TUNNEL, &f, 0);
+ display_flag_aux(row+ 2, col, "Add Infra :", TR_INFRA, &f, 0);
+ display_flag_aux(row+ 3, col, "Add Device :", TR_MAGIC_MASTERY, &f, 0);
+ display_flag_aux(row+ 4, col, "Add Stealth :", TR_STEALTH, &f, 0);
+ display_flag_aux(row+ 5, col, "Add Search :", TR_SEARCH, &f, 0);
+
+ display_flag_aux(row+ 7, col, "Riding :", TR_RIDING, &f, 0);
+ display_flag_aux(row+ 8, col, "Throw :", TR_THROW, &f, 0);
+ display_flag_aux(row+ 9, col, "Blessed :", TR_BLESSED, &f, 0);
+ display_flag_aux(row+10, col, "No Teleport :", TR_NO_TELE, &f, 0);
+ display_flag_aux(row+11, col, "Anti Magic :", TR_NO_MAGIC, &f, 0);
+ display_flag_aux(row+12, col, "Econom. Mana:", TR_DEC_MANA, &f, 0);
+
+ display_flag_aux(row+14, col, "Drain Exp :", TR_DRAIN_EXP, &f, 0);
+ display_flag_aux(row+15, col, "Rnd.Teleport:", TR_TELEPORT, &f, 0);
+ display_flag_aux(row+16, col, "Aggravate :", TR_AGGRAVATE, &f, 0);
+ display_flag_aux(row+17, col, "TY Curse :", TR_TY_CURSE, &f, 0);
#endif
}
int row, col;
object_type *o_ptr;
- u32b f1, f2, f3;
+ u32b flgs[TR_FLAG_SIZE];
s16b k_idx;
byte a;
c_put_str(TERM_BLUE, " ´ðËÜ", row, stat_col+7);
c_put_str(TERM_L_BLUE, " ¼ï ¿¦ À Áõ ", row, stat_col+13);
c_put_str(TERM_L_GREEN, "¹ç·×", row, stat_col+28);
-c_put_str(TERM_YELLOW, "¸½ºß", row, stat_col+33);
+c_put_str(TERM_YELLOW, "¸½ºß", row, stat_col+35);
#else
c_put_str(TERM_WHITE, "Stat", row, stat_col+1);
c_put_str(TERM_BLUE, " Base", row, stat_col+7);
e_adj -= cp_ptr->c_adj[i];
e_adj -= ap_ptr->a_adj[i];
- /* Reduced name of stat */
-#ifdef JP
- c_put_str(TERM_WHITE, stat_names[i], row + i+1, stat_col+1);
-#else
- c_put_str(TERM_WHITE, stat_names_reduced[i], row + i+1, stat_col+1);
-#endif
+ if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
+ /* Reduced name of stat */
+ c_put_str(TERM_WHITE, stat_names_reduced[i], row + i+1, stat_col+1);
+ else
+ c_put_str(TERM_WHITE, stat_names[i], row + i+1, stat_col+1);
/* Internal "natural" max value. Maxes at 18/100 */
cnv_stat(p_ptr->stat_max[i], buf);
if (p_ptr->stat_max[i] == p_ptr->stat_max_max[i])
{
+#ifdef JP
c_put_str(TERM_WHITE, "!", row + i+1, stat_col + 6);
+#else
+ c_put_str(TERM_WHITE, "!", row + i+1, stat_col + 4);
+#endif
}
c_put_str(TERM_BLUE, buf, row + i+1, stat_col + 13 - strlen(buf));
k_idx = o_ptr->k_idx;
/* Acquire "known" flags */
- object_flags_known(o_ptr, &f1, &f2, &f3);
+ object_flags_known(o_ptr, flgs);
/* Initialize color based of sign of pval. */
for (stat = 0; stat < 6; stat++)
c = '.';
/* Boost */
- if (f1 & 1 << stat)
+ if (have_flag(flgs, stat))
{
/* Default */
c = '*';
if (o_ptr->pval < 10) c = '0' + o_ptr->pval;
}
- if (f2 & 1 << stat)
+ if (have_flag(flgs, stat + TR_SUST_STR))
{
/* Dark green for sustained stats */
a = TERM_GREEN;
a = TERM_RED;
/* Label boost */
- if (o_ptr->pval < 10) c = '0' - o_ptr->pval;
+ if (o_ptr->pval > -10) c = '0' - o_ptr->pval;
}
}
/* Sustain */
- else if (f2 & 1 << stat)
+ else if (have_flag(flgs, stat + TR_SUST_STR))
{
/* Dark green "s" */
a = TERM_GREEN;
}
/* Player flags */
- player_flags(&f1, &f2, &f3);
+ player_flags(flgs);
/* Check stats */
for (stat = 0; stat < 6; stat++)
a = TERM_RED;
/* Label boost */
- if (dummy < 10) c = '0' - dummy;
+ if (dummy > -10) c = '0' - dummy;
}
}
}
/* Sustain */
- if (f2 & 1<<stat)
+ if (have_flag(flgs, stat + TR_SUST_STR))
{
/* Dark green "s" */
a = TERM_GREEN;
/* Dump */
- Term_putch(col, row + stat+1, a, c);
- }
-}
-
-
-/*
- * Object flag names
- */
-static cptr object_flag_names[96] =
-{
-#ifdef JP
-"+ÏÓÎÏ",
-"+ÃÎǽ",
-"+¸¤µ",
-"+´ïÍÑ",
-"+Âѵ×",
-"+Ì¥ÎÏ",
-#else
- "Add Str",
- "Add Int",
- "Add Wis",
- "Add Dex",
- "Add Con",
- "Add Chr",
-#endif
-
-#ifdef JP
- "ËâÆ»¶ñ",
-
- "ÍýÎÏ",
-#else
- "M.Item-Mas",
-
- "Force wep.",
-#endif
-
-#ifdef JP
-"+±£Ì©¹ÔÆ°",
-"+õº÷",
-"+ÀÖ³°Àþ»ë",
-"+·¡ºï",
-"+¥¹¥Ô¡¼¥É",
-"+ÂÇ·â²ó¿ô",
-"¥«¥ª¥¹¸ú²Ì",
-"µÛ·ì",
-"ưʪ ÇÜÂÇ",
-"¼Ù° ÇÜÂÇ",
-"ÉÔ»à ÇÜÂÇ",
-"°Ëâ ÇÜÂÇ",
-"¥ª¡¼¥¯ÇÜÂÇ",
-"¥È¥í¥ëÇÜÂÇ",
-"µð¿Í ÇÜÂÇ",
-"ζ ÇÜÂÇ",
-"ζ ÇÜÇÜÂÇ",
-"±Ô¿Ï",
-"ÃÏ¿ÌȯÀ¸",
-"ÆÇ°À¹¶·â",
-"»À°À¹¶·â",
-"ÅÅ°À¹¶·â",
-"²Ð°À¹¶·â",
-"Îä°À¹¶·â",
-#else
- "Add Stea.",
- "Add Sear.",
- "Add Infra",
- "Add Tun..",
- "Add Speed",
- "Add Blows",
- "Chaotic",
- "Vampiric",
- "Slay Anim.",
- "Slay Evil",
- "Slay Und.",
- "Slay Demon",
- "Slay Orc",
- "Slay Troll",
- "Slay Giant",
- "Slay Drag.",
- "Kill Drag.",
- "Sharpness",
- "Impact",
- "Poison Brd",
- "Acid Brand",
- "Elec Brand",
- "Fire Brand",
- "Cold Brand",
-#endif
-
-
-#ifdef JP
-"ÏÓÎÏ ÊÝ»ý",
-"ÃÎǽ ÊÝ»ý",
-"¸¤µ ÊÝ»ý",
-"´ïÍÑ ÊÝ»ý",
-"ÂÑµ× ÊÝ»ý",
-"Ì¥ÎÏ ÊÝ»ý",
-#else
- "Sust Str",
- "Sust Int",
- "Sust Wis",
- "Sust Dex",
- "Sust Con",
- "Sust Chr",
-#endif
-
- NULL,
- NULL,
-#ifdef JP
-"ĶÂÑ»À ",
-"ĶÂÑÅÅ·â",
-"ĶÂѲбê",
-"ĶÂÑÎ䵤",
-#else
- "Imm Acid",
- "Imm Elec",
- "Imm Fire",
- "Imm Cold",
-#endif
-
- NULL,
-#ifdef JP
-"È¿¼Í",
-"ÂÑËãáã",
-"·Ð¸³ÃÍÊÝ»ý",
-#else
- "Reflect",
- "Free Act",
- "Hold Life",
-#endif
-
-#ifdef JP
-"ÂÑ»À ",
-"ÂÑÅÅ·â",
-"ÂѲбê",
-"ÂÑÎ䵤",
-"ÂÑÆÇ ",
-"ÂѶ²ÉÝ",
-"ÂÑÁ®¸÷",
-"ÂѰŹõ",
-"ÂÑÌÕÌÜ",
-"ÂѺ®Íð",
-"Âѹ첻",
-"ÂÑÇËÊÒ",
-"ÂÑÃϹö",
-"ÂÑ°øº®",
-"ÂÑ¥«¥ª",
-"ÂÑÎô²½",
-#else
- "Res Acid",
- "Res Elec",
- "Res Fire",
- "Res Cold",
- "Res Pois",
- "Res Fear",
- "Res Lite",
- "Res Dark",
- "Res Blind",
- "Res Conf",
- "Res Sound",
- "Res Shard",
- "Res Neth",
- "Res Nexus",
- "Res Chaos",
- "Res Disen",
-#endif
-
-
-
-
-#ifdef JP
- "²Ð±ê¥ª¡¼¥é",
-
- "Åŵ¤¥ª¡¼¥é",
-#else
- "Aura Fire",
-
- "Aura Elec",
-#endif
-
- NULL,
-#ifdef JP
- "Î䵤¥ª¡¼¥é",
-#else
- "Aura Cold",
-#endif
-#ifdef JP
-"Ëɥƥì¥Ý",
-"È¿ËâË¡",
-"¸º¾ÃÈñËâÎÏ",
-"¼Ù°¤Ê±åÇ°",
-NULL,
-"Hide Type",
-"Show Mods",
-"¾ï»þÅÁÀâʪ",
-"ÉâÍ·",
-"¸÷¸»",
-"Æ©ÌÀ»ëǧ",
-"¥Æ¥ì¥Ñ¥·¡¼",
-"Ãپò½",
-"µÞ²óÉü",
-"¶¯Îϼͷâ",
-"¹â®¼Í·â",
-"̵½ý »À",
-"̵½ý ÅÅ",
-"̵½ý ²Ð",
-"̵½ý Îä",
-"»ÏÆ°",
-"·Ð¸³µÛ¼ý",
-"¥Æ¥ì¥Ý¡¼¥È",
-"È¿´¶",
-"½ËÊ¡",
-"¼ö¤¤",
-"½Å¤¤¼ö¤¤",
-"±Ê±ó¤Î¼ö¤¤"
-#else
- "NoTeleport",
- "AntiMagic",
- "DecMana",
- "EvilCurse",
- NULL,
- "Hide Type",
- "Show Mods",
- "Insta Art",
- "Levitate",
- "Lite",
- "See Invis",
- "Telepathy",
- "Digestion",
- "Regen",
- "Xtra Might",
- "Xtra Shots",
- "Ign Acid",
- "Ign Elec",
- "Ign Fire",
- "Ign Cold",
- "Activate",
- "Drain Exp",
- "Teleport",
- "Aggravate",
- "Blessed",
- "Cursed",
- "Hvy Curse",
- "Prm Curse"
-#endif
-
-};
-
-
-/*
- * Summarize resistances
- */
-static void display_player_ben(void)
-{
- int i, x, y;
-
- object_type *o_ptr;
-
- u32b f1, f2, f3;
-
- u16b b[6];
- u16b color[6];
-
-
- /* Reset */
- for (i = 0; i < 6; i++) b[i] = 0;
-
-
- /* Scan equipment */
- for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
- {
- /* Object */
- o_ptr = &inventory[i];
-
- /* Known object flags */
- object_flags_known(o_ptr, &f1, &f2, &f3);
-
-
- if ((prace_is_(RACE_S_FAIRY)) && (f3 & TR3_AGGRAVATE))
- {
- f3 &= ~(TR3_AGGRAVATE);
- f1 |= TR1_STEALTH;
- }
-
- /* Incorporate */
- b[0] |= (f1 & 0xFFFF);
- b[1] |= (f1 >> 16);
- b[2] |= (f2 & 0xFFFF);
- b[3] |= (f2 >> 16);
- b[4] |= (f3 & 0xFFFF);
- b[5] |= (f3 >> 16);
- }
-
-
- /* Player flags */
- player_flags(&f1, &f2, &f3);
-
- /* Incorporate */
- b[0] |= (f1 & 0xFFFF);
- b[1] |= (f1 >> 16);
- b[2] |= (f2 & 0xFFFF);
- b[3] |= (f2 >> 16);
- b[4] |= (f3 & 0xFFFF);
- b[5] |= (f3 >> 16);
-
- /* Player flags */
- tim_player_flags(&f1, &f2, &f3, FALSE);
-
- /* Incorporate */
- b[0] |= (f1 & 0xFFFF);
- b[1] |= (f1 >> 16);
- b[2] |= (f2 & 0xFFFF);
- b[3] |= (f2 >> 16);
- b[4] |= (f3 & 0xFFFF);
- b[5] |= (f3 >> 16);
- color[0] = (u16b)(f1 & 0xFFFF);
- color[1] = (u16b)(f1 >> 16);
- color[2] = (u16b)(f2 & 0xFFFF);
- color[3] = (u16b)(f2 >> 16);
- color[4] = (u16b)(f3 & 0xFFFF);
- color[5] = (u16b)(f3 >> 16);
-
- /* Scan cols */
- for (x = 0; x < 6; x++)
- {
- /* Scan rows */
- for (y = 0; y < 16; y++)
- {
- byte a = TERM_SLATE;
- char c = '.';
-
- cptr name = object_flag_names[16*x+y];
-
- /* No name */
- if (!name) continue;
-
- /* Dump name */
- Term_putstr(x * 13, y + 4, -1, TERM_WHITE, name);
-
- /* Dump colon */
- Term_putch(x * 13 + 10, y + 4, TERM_WHITE, ':');
-
- /* Check flag */
- if (b[x] & (1<<y))
- {
- if (color[x] & (1<<y))
- {
- a = TERM_YELLOW;
- c = '#';
- }
- else
- {
- a = TERM_WHITE;
- c = '+';
- }
- }
-
- /* Dump flag */
- Term_putch(x * 13 + 11, y + 4, a, c);
- }
- }
-}
-
-
-/*
- * Summarize resistances
- */
-static void display_player_ben_one(int mode)
-{
- int i, n, x, y;
-
- object_type *o_ptr;
-
- u32b f1, f2, f3;
-
- u16b b[13][6];
- u16b color[6];
-
-
- /* Scan equipment */
- for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
- {
- /* Index */
- n = (i - INVEN_RARM);
-
- /* Object */
- o_ptr = &inventory[i];
-
- object_flags_known(o_ptr, &f1, &f2, &f3);
-
- if ((prace_is_(RACE_S_FAIRY)) && (f3 & TR3_AGGRAVATE))
- {
- f3 &= ~(TR3_AGGRAVATE);
- f1 |= TR1_STEALTH;
- }
-
- /* Incorporate */
- b[n][0] = (u16b)(f1 & 0xFFFF);
- b[n][1] = (u16b)(f1 >> 16);
- b[n][2] = (u16b)(f2 & 0xFFFF);
- b[n][3] = (u16b)(f2 >> 16);
- b[n][4] = (u16b)(f3 & 0xFFFF);
- b[n][5] = (u16b)(f3 >> 16);
- }
-
-
- /* Index */
- n = 12;
-
- /* Player flags */
- player_flags(&f1, &f2, &f3);
-
- /* Incorporate */
- b[n][0] = (u16b)(f1 & 0xFFFF);
- b[n][1] = (u16b)(f1 >> 16);
- b[n][2] = (u16b)(f2 & 0xFFFF);
- b[n][3] = (u16b)(f2 >> 16);
- b[n][4] = (u16b)(f3 & 0xFFFF);
- b[n][5] = (u16b)(f3 >> 16);
-
- /* Player flags */
- tim_player_flags(&f1, &f2, &f3, FALSE);
-
- /* Incorporate */
- b[n][0] |= (f1 & 0xFFFF);
- b[n][1] |= (f1 >> 16);
- b[n][2] |= (f2 & 0xFFFF);
- b[n][3] |= (f2 >> 16);
- b[n][4] |= (f3 & 0xFFFF);
- b[n][5] |= (f3 >> 16);
- color[0] = (u16b)(f1 & 0xFFFF);
- color[1] = (u16b)(f1 >> 16);
- color[2] = (u16b)(f2 & 0xFFFF);
- color[3] = (u16b)(f2 >> 16);
- color[4] = (u16b)(f3 & 0xFFFF);
- color[5] = (u16b)(f3 >> 16);
-
-
- /* Scan cols */
- for (x = 0; x < 3; x++)
- {
- /* Equippy */
- display_player_equippy(2, x * 26 + 11);
-
- /* Label */
- Term_putstr(x * 26 + 11, 3, -1, TERM_WHITE, "abcdefghijkl@");
-
- /* Scan rows */
- for (y = 0; y < 16; y++)
- {
- cptr name = object_flag_names[48*mode+16*x+y];
-
- /* No name */
- if (!name) continue;
-
- /* Dump name */
- Term_putstr(x * 26, y + 4, -1, TERM_WHITE, name);
-
- /* Dump colon */
- Term_putch(x * 26 + 10, y + 4, TERM_WHITE, ':');
-
- /* Check flags */
- for (n = 0; n < 13; n++)
- {
- byte a = TERM_SLATE;
- char c = '.';
-
- /* Check flag */
- if (b[n][3*mode+x] & (1<<y))
- {
- if ((n == 12) && (color[3*mode+x] & (1<<y)))
- {
- a = TERM_YELLOW;
- c = '#';
- }
- else
- {
- a = TERM_WHITE;
- c = '+';
- }
- }
-
- /* Dump flag */
- Term_putch(x * 26 + 11 + n, y + 4, a, c);
- }
- }
+ Term_putch(col, row + stat+1, a, c);
}
}
/*
* Display the character on the screen (various modes)
*
- * The top two and bottom two lines are left blank.
+ * The top one and bottom two lines are left blank.
*
* Mode 0 = standard display with skills
* Mode 1 = standard display with history
* Mode 2 = summary of various things
- * Mode 3 = current flags (combined)
- * Mode 4 = current flags (part 1)
- * Mode 5 = current flags (part 2)
- * Mode 6 = mutations
+ * Mode 3 = summary of various things (part 2)
+ * Mode 4 = mutations
*/
void display_player(int mode)
{
/* XXX XXX XXX */
- if ((p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3) && skip_mutations)
- mode = (mode % 7);
+ if ((p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3) && display_mutations)
+ mode = (mode % 5);
else
- mode = (mode % 6);
+ mode = (mode % 4);
/* Erase screen */
clear_from(0);
display_player_one_line(ENTRY_REALM, tmp, TERM_L_BLUE);
}
- if (p_ptr->pclass == CLASS_CHAOS_WARRIOR)
+ if ((p_ptr->pclass == CLASS_CHAOS_WARRIOR) || (p_ptr->muta2 & MUT2_CHAOS_GIFT))
display_player_one_line(ENTRY_PATRON, chaos_patrons[p_ptr->chaos_patron], TERM_L_BLUE);
/* Age, Height, Weight, Social */
if (p_ptr->stat_max[i] == p_ptr->stat_max_max[i])
{
- c_put_str(TERM_WHITE, "!", 2+i, 64);
+#ifdef JP
+ c_put_str(TERM_WHITE, "!", 3+i, 59);
+#else
+ c_put_str(TERM_WHITE, "!", 3+i, 59-2);
+#endif
}
}
/* Display "history" info */
if (mode == 1)
{
+ char statmsg[1000];
+
#ifdef JP
put_str("(¥¥ã¥é¥¯¥¿¡¼¤ÎÀ¸¤¤Î©¤Á)", 11, 25);
#else
for (i = 0; i < 4; i++)
{
- put_str(history[i], i + 12, 10);
+ put_str(p_ptr->history[i], i + 12, 10);
}
+ *statmsg = '\0';
- if (death)
+ if (p_ptr->is_dead && p_ptr->total_winner)
+ {
+#ifdef JP
+ strcpy(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï¾¡Íø¤Î¸å°úÂष¤¿¡£");
+#else
+ strcpy(statmsg, "...You retired from the adventure after the winning.");
+#endif
+ }
+ else if (p_ptr->is_dead)
{
if (dun_level)
+ {
+ if (p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST))
+ {
+ /* Get the quest text */
+ init_flags = INIT_ASSIGN;
+
+ process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+
+#ifdef JP
+ sprintf(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï¡¢¥¯¥¨¥¹¥È¡Ö%s¡×¤Ç%s¤Ë»¦¤µ¤ì¤¿¡£", quest[p_ptr->inside_quest].name, p_ptr->died_from);
+#else
+ sprintf(statmsg, "...You were killed by %s in the quest '%s'.", p_ptr->died_from, quest[p_ptr->inside_quest].name);
+#endif
+ }
+ else
+ {
#ifdef JP
- put_str(format("¡Ä¤¢¤Ê¤¿¤Ï %s ¤Î %d ³¬¤Ç»à¤ó¤À¡£", map_name(), dun_level), 5 + 12, 10);
+ sprintf(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï¡¢%s¤Î%d³¬¤Ç%s¤Ë»¦¤µ¤ì¤¿¡£", map_name(), dun_level, p_ptr->died_from);
#else
- put_str(format("...You were dead at level %d of %s.", dun_level, map_name()), 5 + 12, 10);
+ sprintf(statmsg, "...You were killed by %s on level %d of %s.", p_ptr->died_from, dun_level, map_name());
#endif
+ }
+ }
else
#ifdef JP
- put_str(format("¡Ä¤¢¤Ê¤¿¤Ï %s ¤Ç»à¤ó¤À¡£", map_name()), 5 + 12, 10);
+ sprintf(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï%s¤Ç%s¤Ë»¦¤µ¤ì¤¿¡£", map_name(), p_ptr->died_from);
#else
- put_str(format("...You were dead at %s.", map_name()), 5 + 12, 10);
+ sprintf(statmsg, "...You were killed by %s in %s.", p_ptr->died_from, map_name());
#endif
}
- else
+ else if (character_dungeon)
{
if (dun_level)
+ {
+ if (p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST))
+ {
+ /* Get the quest text */
+ init_flags = INIT_ASSIGN;
+
+ process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+
+#ifdef JP
+ sprintf(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï¸½ºß¡¢ ¥¯¥¨¥¹¥È¡Ö%s¡×¤ò¿ë¹ÔÃæ¤À¡£", quest[p_ptr->inside_quest].name);
+#else
+ sprintf(statmsg, "...Now, you are in the quest '%s'.", quest[p_ptr->inside_quest].name);
+#endif
+ }
+ else
+ {
#ifdef JP
- put_str(format("¡Ä¤¢¤Ê¤¿¤Ï¸½ºß¡¢ %s ¤Î %d ³¬¤Çõº÷¤·¤Æ¤¤¤ë¡£", map_name(), dun_level), 5 + 12, 10);
+ sprintf(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï¸½ºß¡¢ %s ¤Î %d ³¬¤Çõº÷¤·¤Æ¤¤¤ë¡£", map_name(), dun_level);
#else
- put_str(format("...Now, you are exploring at level %d of %s.", dun_level, map_name()), 5 + 12, 10);
+ sprintf(statmsg, "...Now, you are exploring level %d of %s.", dun_level, map_name());
#endif
+ }
+ }
else
#ifdef JP
- put_str(format("¡Ä¤¢¤Ê¤¿¤Ï¸½ºß¡¢ %s ¤Ë¤¤¤ë¡£", map_name()), 5 + 12, 10);
+ sprintf(statmsg, "¡Ä¤¢¤Ê¤¿¤Ï¸½ºß¡¢ %s ¤Ë¤¤¤ë¡£", map_name());
#else
- put_str(format("...Now, you are in %s.", map_name()), 5 + 12, 10);
+ sprintf(statmsg, "...Now, you are in %s.", map_name());
#endif
}
+
+ if (*statmsg)
+ {
+ char temp[64*2], *t;
+ roff_to_buf(statmsg, 60, temp);
+ t = temp;
+ for(i=0 ; i<2 ; i++)
+ {
+ if(t[0]==0)
+ break;
+ else
+ {
+ put_str(t, i + 5 + 12, 10);
+ t += strlen(t)+1;
+ }
+ }
+ }
+
}
/* Display "various" info */
/* Special */
else if (mode == 3)
{
- display_player_ben();
+ display_player_other_flag_info();
}
- else if (mode == 6)
+ else if (mode == 4)
{
do_cmd_knowledge_mutations();
}
+}
- /* Special */
- else
- {
- display_player_ben_one(mode % 2);
- }
+static bool ang_sort_comp_quest_num(vptr u, vptr v, int a, int b)
+{
+ int *q_num = (int *)u;
+ quest_type *qa = &quest[q_num[a]];
+ quest_type *qb = &quest[q_num[b]];
+
+ if (qa->complev < qb->complev) return TRUE;
+ if (qa->complev > qb->complev) return FALSE;
+ if (qa->level <= qb->level) return TRUE;
+ return FALSE;
+}
+
+static void ang_sort_swap_quest_num(vptr u, vptr v, int a, int b)
+{
+ int *q_num = (int *)u;
+ int tmp;
+
+ tmp = q_num[a];
+ q_num[a] = q_num[b];
+ q_num[b] = tmp;
}
errr make_character_dump(FILE *fff)
store_type *st_ptr;
char o_name[MAX_NLEN];
char buf[1024];
+ int total;
+ int *quest_num;
+ int dummy;
-
-#ifndef FAKE_VERSION
- /* Begin dump */
- fprintf(fff, " [Angband %d.%d.%d Character Dump]\n\n",
- VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
-#else
#ifdef JP
fprintf(fff, " [ÊѶòÈÚÅÜ %d.%d.%d ¥¥ã¥é¥¯¥¿¾ðÊó]\n\n",
FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH);
FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH);
#endif
-#endif
-
update_playtime();
/* Display player */
display_player(1);
/* Dump part of the screen */
- for (y = 11; y < 18; y++)
+ for (y = 10; y < 19; y++)
{
/* Dump each row */
for (x = 0; x < 79; x++)
}
fprintf(fff, "\n");
- /* Display history */
+
+ /* Display flags (part 1) */
display_player(2);
/* Dump part of the screen */
fprintf(fff, "%s\n", buf);
}
- for (i = 0; i < p_ptr->count / 80; i++)
+ fprintf(fff, "\n");
+
+ /* Display flags (part 2) */
+ display_player(3);
+
+ /* Dump part of the screen */
+ for (y = 1; y < 22; y++)
+ {
+ /* Dump each row */
+ for (x = 0; x < 79; x++)
+ {
+ /* Get the attr/char */
+ (void)(Term_what(x, y, &a, &c));
+
+ /* Dump it (Ignore equippy tile graphic) */
+ if (a < 128)
+ buf[x] = c;
+ else
+ buf[x] = ' ';
+ }
+
+ /* End the string */
+ buf[x] = '\0';
+
+ /* Kill trailing spaces */
+ while ((x > 0) && (buf[x-1] == ' ')) buf[--x] = '\0';
+
+ /* End the row */
+ fprintf(fff, "%s\n", buf);
+ }
+
+ for (i = 0; (unsigned int) i < (p_ptr->count / 80); i++)
fprintf(fff, " ");
fprintf(fff, "\n");
- for (i = 0; i < p_ptr->count % 80; i++)
+ for (i = 0; (unsigned int) i < (p_ptr->count % 80); i++)
fprintf(fff, " ");
+
{
bool pet = FALSE;
#ifdef JP
fprintf(fff, " ¾èÇÏÃæ");
#else
- fprintf(fff, " riding");
+ fprintf(fff, " (riding)");
#endif
fprintf(fff, "\n");
}
if (pet) fprintf(fff, "\n");
}
- if (death && !total_winner)
+#ifdef JP
+ fprintf(fff, "\n [¥¯¥¨¥¹¥È¾ðÊó]\n");
+#else
+ fprintf(fff, "\n [Quest information]\n");
+#endif
+
+#ifdef JP
+ fprintf(fff, "\n¡ÔãÀ®¤·¤¿¥¯¥¨¥¹¥È¡Õ\n");
+#else
+ fprintf(fff, "\n< Completed Quest >\n");
+#endif
+
+ /* Allocate Memory */
+ C_MAKE(quest_num, max_quests, int);
+
+ /* Sort by compete level */
+ for (i = 1; i < max_quests; i++)
+ {
+ quest_num[i] = i;
+ }
+ ang_sort_comp = ang_sort_comp_quest_num;
+ ang_sort_swap = ang_sort_swap_quest_num;
+ ang_sort(quest_num, &dummy, max_quests);
+
+ /* Dump Quest Information */
+ total = 0;
+ for (i = 1; i < max_quests; i++)
+ {
+ int num = quest_num[i];
+
+ /* No info from "silent" quests */
+ if (quest[num].flags & QUEST_FLAG_SILENT) continue;
+
+ if (quest[num].status == QUEST_STATUS_FINISHED)
+ {
+ int old_quest;
+
+ total++;
+
+ if (num < MIN_RANDOM_QUEST)
+ {
+ /* Set the quest number temporary */
+ old_quest = p_ptr->inside_quest;
+ p_ptr->inside_quest = num;
+
+ /* Get the quest */
+ init_flags = INIT_ASSIGN;
+
+ process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+
+ /* Reset the old quest number */
+ p_ptr->inside_quest = old_quest;
+ }
+
+ if ((num >= MIN_RANDOM_QUEST) && quest[num].r_idx)
+ {
+ /* Print the quest info */
+
+ if (quest[num].complev == 0)
+ {
+ fprintf(fff,
+#ifdef JP
+ " %s (%d³¬) - ÉÔÀᄀ\n",
+#else
+ " %s (Dungeon level: %d) - (Cancelled)\n",
+#endif
+ r_name+r_info[quest[num].r_idx].name,
+ quest[num].level);
+ }
+ else
+ {
+ fprintf(fff,
+#ifdef JP
+ " %s (%d³¬) - ¥ì¥Ù¥ë%d\n",
+#else
+ " %s (Dungeon level: %d) - level %d\n",
+#endif
+ r_name+r_info[quest[num].r_idx].name,
+ quest[num].level,
+ quest[num].complev);
+ }
+ }
+ else
+ {
+ /* Print the quest info */
+#ifdef JP
+ fprintf(fff, " %s (´í¸±ÅÙ:%d³¬ÁêÅö) - ¥ì¥Ù¥ë%d\n",
+#else
+ fprintf(fff, " %s (Danger level: %d) - level %d\n",
+#endif
+
+ quest[num].name, quest[num].level, quest[num].complev);
+ }
+ }
+ }
+#ifdef JP
+ if (!total) fprintf(fff, " ¤Ê¤·\n");
+#else
+ if (!total) fprintf(fff, " Nothing.\n");
+#endif
+
+#ifdef JP
+ fprintf(fff, "\n¡Ô¼ºÇÔ¤·¤¿¥¯¥¨¥¹¥È¡Õ\n");
+#else
+ fprintf(fff, "\n< Failed Quest >\n");
+#endif
+ total = 0;
+ for (i = 1; i < max_quests; i++)
+ {
+ int num = quest_num[i];
+
+ /* No info from "silent" quests */
+ if (quest[num].flags & QUEST_FLAG_SILENT) continue;
+
+ if ((quest[num].status == QUEST_STATUS_FAILED_DONE) || (quest[num].status == QUEST_STATUS_FAILED))
+ {
+ int old_quest;
+
+ total++;
+
+ if (num < MIN_RANDOM_QUEST)
+ {
+ /* Set the quest number temporary */
+ old_quest = p_ptr->inside_quest;
+ p_ptr->inside_quest = num;
+
+ /* Get the quest text */
+ init_flags = INIT_ASSIGN;
+
+ process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+
+ /* Reset the old quest number */
+ p_ptr->inside_quest = old_quest;
+ }
+
+ if ((num >= MIN_RANDOM_QUEST) && quest[num].r_idx)
+ {
+ /* Print the quest info */
+#ifdef JP
+ fprintf(fff, " %s (%d³¬) - ¥ì¥Ù¥ë%d\n",
+#else
+ fprintf(fff, " %s (Dungeon level: %d) - level %d\n",
+#endif
+
+ r_name+r_info[quest[num].r_idx].name, quest[num].level, quest[num].complev);
+ }
+ else
+ {
+ /* Print the quest info */
+#ifdef JP
+ fprintf(fff, " %s (´í¸±ÅÙ:%d³¬ÁêÅö) - ¥ì¥Ù¥ë%d\n",
+#else
+ fprintf(fff, " %s (Danger level: %d) - level %d\n",
+#endif
+
+ quest[num].name, quest[num].level, quest[num].complev);
+ }
+ }
+ }
+
+#ifdef JP
+ if (!total) fprintf(fff, " ¤Ê¤·\n");
+#else
+ if (!total) fprintf(fff, " Nothing.\n");
+#endif
+ fprintf(fff, "\n");
+
+ /* Free Memory */
+ C_KILL(quest_num, max_quests, int);
+
+ if (p_ptr->is_dead && !p_ptr->total_winner)
{
#ifdef JP
fprintf(fff, "\n [»à¤ÌľÁ°¤Î¥á¥Ã¥»¡¼¥¸]\n\n");
#else
fprintf(fff, "\n [Last messages]\n\n");
#endif
- for (i = MIN(message_num(), 15); i >= 0; i--)
+ for (i = MIN(message_num(), 30); i >= 0; i--)
{
fprintf(fff,"> %s\n",message_str((s16b)i));
}
}
#ifdef JP
- fprintf(fff, "\n [¤½¤Î¾¤Î¾ðÊó] \n");
+ fprintf(fff, "\n [¤½¤Î¾¤Î¾ðÊó]\n");
#else
fprintf(fff, "\n [Miscellaneous information]\n");
#endif
#endif
}
- if (noscore)
+ if (p_ptr->noscore)
#ifdef JP
fprintf(fff, "\n ²¿¤«ÉÔÀµ¤Ê¤³¤È¤ò¤·¤Æ¤·¤Þ¤Ã¤Æ¤Þ¤¹¡£");
#else
fprintf(fff, "\n\n");
}
+#ifdef JP
+ fprintf(fff, " [¥Á¥§¥Ã¥¯¥µ¥à: \"%s\"]\n\n", get_check_sum());
+#else
+ fprintf(fff, " [Check Sum: \"%s\"]\n\n", get_check_sum());
+#endif
+
return 0;
}
safe_setuid_drop();
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_USER, name);
+ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, name);
/* File type is "TEXT" */
FILE_TYPE(FILE_TYPE_TEXT);
/* Build query */
#ifdef JP
-(void)sprintf(out_val, "¸½Â¸¤¹¤ë¥Õ¥¡¥¤¥ë %s ¤Ë¾å½ñ¤¤·¤Þ¤¹¤«? ", buf);
+ (void)sprintf(out_val, "¸½Â¸¤¹¤ë¥Õ¥¡¥¤¥ë %s ¤Ë¾å½ñ¤¤·¤Þ¤¹¤«? ", buf);
#else
(void)sprintf(out_val, "Replace existing file %s? ", buf);
#endif
/* Ask */
- if (get_check(out_val)) fd = -1;
+ if (get_check_strict(out_val, CHECK_NO_HISTORY)) fd = -1;
}
/* Open the non-existing file */
if (fd < 0) fff = my_fopen(buf, "w");
- /* Grab priv's */
- safe_setuid_grab();
-
-
/* Invalid file */
if (!fff)
{
/* Message */
#ifdef JP
-msg_format("¥¥ã¥é¥¯¥¿¾ðÊó¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤½Ð¤·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡ª");
+ prt("¥¥ã¥é¥¯¥¿¾ðÊó¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤½Ð¤·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡ª", 0, 0);
#else
- msg_format("Character dump failed!");
+ prt("Character dump failed!", 0, 0);
#endif
- msg_print(NULL);
+ (void)inkey();
/* Error */
return (-1);
/* Close it */
my_fclose(fff);
+ /* Grab priv's */
+ safe_setuid_grab();
/* Message */
#ifdef JP
/* Backup value for "line" */
int back = 0;
+ /* Color of the next line */
+ byte color = TERM_WHITE;
+
/* Loop counter */
int cnt;
/* Sub-menu information */
char hook[68][32];
- /* Tags for in-file references */
- int tags[68];
-
bool reverse = (line < 0);
+ int wid, hgt, rows;
+
+ Term_get_size(&wid, &hgt);
+ rows = hgt - 4;
+
/* Wipe finder */
strcpy(finder, "");
/* Build the filename */
- path_build(path, 1024, ANGBAND_DIR_HELP, name);
+ path_build(path, sizeof(path), ANGBAND_DIR_HELP, name);
/* Open the file */
fff = my_fopen(path, "r");
/* Build the filename */
- path_build(path, 1024, ANGBAND_DIR_INFO, name);
+ path_build(path, sizeof(path), ANGBAND_DIR_INFO, name);
/* Open the file */
fff = my_fopen(path, "r");
if (!fff)
{
/* Build the filename */
- path_build(path, 1024, ANGBAND_DIR, name);
+ path_build(path, sizeof(path), ANGBAND_DIR, name);
for (i = 0; path[i]; i++)
if ('\\' == path[i])
/* Pre-Parse the file */
while (TRUE)
{
+ char *str;
+
/* Read a line or stop */
- if (my_fgets(fff, buf, 1024)) break;
+ if (my_fgets(fff, buf, sizeof(buf))) break;
+
+ /* Get a color */
+ if (prefix(buf, "#####")) str = &buf[6];
+ else str = buf;
/* XXX Parse "menu" items */
- if (prefix(buf, "***** "))
+ if (prefix(str, "***** "))
{
/* Notice "menu" requests */
- if ((buf[6] == '[') && (isdigit(buf[7]) || isalpha(buf[7])))
+ if ((str[6] == '[') && isalpha(str[7]))
{
/* This is a menu file */
menu = TRUE;
/* Extract the menu item */
- k = isdigit(buf[7]) ? D2I(buf[7]) : buf[7] - 'A' + 10;
+ k = str[7] - 'A';
- if ((buf[8] == ']') && (buf[9] == ' '))
+ if ((str[8] == ']') && (str[9] == ' '))
{
/* Extract the menu item */
- strcpy(hook[k], buf + 10);
+ strncpy(hook[k], str + 10, 31);
+
+ /* Make sure it's null-terminated */
+ hook[k][31] = '\0';
}
}
/* Notice "tag" requests */
- else if ((buf[6] == '<') && (isdigit(buf[7]) || isalpha(buf[7])) &&
- (buf[8] == '>'))
+ else if (str[6] == '<')
{
- /* Extract the menu item */
- k = isdigit(buf[7]) ? D2I(buf[7]) : buf[7] - 'A' + 10;
-
- /* Extract the menu item */
- tags[k] = next;
+ str[strlen(str) - 1] = '\0';
+ if (tag && streq(str + 7, tag)) line = next;
}
/* Skip this */
/* Save the number of "real" lines */
size = next;
- if (line == -1) line = ((size-1)/20)*20;
-
- /* Go to the tagged line */
- if (tag)
- line = tags[isdigit(tag[0]) ? D2I(tag[0]) : tag[0] - 'A' + 10];
+ /* start from bottom when reverse mode */
+ if (line == -1) line = ((size-1)/rows)*rows;
/* Display the file */
while (TRUE)
Term_clear();
/* Restart when necessary */
- if (line >= size) line = 0;
-
+ if (line >= size - rows) line = size - rows;
+ if (line < 0) line = 0;
/* Re-open the file if needed */
if (next > line)
while (next < line)
{
/* Get a line */
- if (my_fgets(fff, buf, 1024)) break;
+ if (my_fgets(fff, buf, sizeof(buf))) break;
/* Skip tags/links */
if (prefix(buf, "***** ")) continue;
next++;
}
- /* Dump the next 20 lines of the file */
- for (i = 0; i < 20; )
+ /* Dump the next 20, or rows, lines of the file */
+ for (i = 0; i < rows; )
{
+ int print_x, x;
+ cptr str;
+
/* Hack -- track the "first" line */
if (!i) line = next;
/* Get a line of the file or stop */
- if (my_fgets(fff, buf, 1024)) break;
+ if (my_fgets(fff, buf, sizeof(buf))) break;
/* Hack -- skip "special" lines */
if (prefix(buf, "***** ")) continue;
+ /* Get a color */
+ if (prefix(buf, "#####"))
+ {
+ color = color_char_to_attr(buf[5]);
+ str = &buf[6];
+ }
+ else
+ {
+ color = TERM_WHITE;
+ str = buf;
+ }
+
/* Count the "real" lines */
next++;
- /* Make a lower case version of buf for searching */
- strcpy(lc_buf, buf);
+ /* Make a lower case version of str for searching */
+ strcpy(lc_buf, str);
for (lc_buf_ptr = lc_buf; *lc_buf_ptr != 0; lc_buf_ptr++)
{
find = NULL;
/* Dump the line */
- Term_putstr(0, i+2, -1, TERM_WHITE, buf);
+ x = 0;
+ print_x = 0;
+ while (str[x])
+ {
+ /* Color ? */
+ if (prefix(str + x, "[[[[["))
+ {
+ byte c = color_char_to_attr(str[x + 5]);
+ x += 6;
+
+ /* Ok print the link name */
+ while (str[x] != ']')
+ {
+ Term_putch(print_x, i + 2, c, str[x]);
+ x++;
+ print_x++;
+ }
+ }
+ else
+ {
+ Term_putch(print_x, i + 2, color, str[x]);
+ print_x++;
+ }
+
+ x++;
+ }
/* Hilite "shower" */
if (shower[0])
{
- cptr str = lc_buf;
+ cptr s2 = lc_buf;
/* Display matches */
- while ((str = strstr(str, shower)) != NULL)
+ while ((s2 = strstr(s2, shower)) != NULL)
{
int len = strlen(shower);
/* Display the match */
- Term_putstr(str-lc_buf, i+2, len, TERM_YELLOW, &buf[str-lc_buf]);
+ Term_putstr(s2-lc_buf, i+2, len, TERM_YELLOW, &str[s2-lc_buf]);
/* Advance */
- str += len;
+ s2 += len;
}
}
/* Show a general "title" */
if (show_version)
{
+ prt(format(
#ifdef JP
-prt(format("[ÊѶòÈÚÅÜ %d.%d.%d, %s, %d/%d]",
+ "[ÊѶòÈÚÅÜ %d.%d.%d, %s, %d/%d]",
#else
- prt(format("[Hengband %d.%d.%d, %s, Line %d/%d]",
+ "[Hengband %d.%d.%d, %s, Line %d/%d]",
#endif
FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH,
}
else
{
+ prt(format(
#ifdef JP
-prt(format("[%s, %d/%d]",
-#else
- prt(format("[%s, Line %d/%d]",
-#endif
- caption, line, size), 0, 0);
- }
-
- /* Prompt -- menu screen */
- if (menu)
- {
- /* Wait for it */
-#ifdef JP
-prt("[ ÈÖ¹æ¤òÆþÎϤ·¤Æ²¼¤µ¤¤( ESC¤Ç½ªÎ» ) ]", 23, 0);
+ "[%s, %d/%d]",
#else
- prt("[Press a Number, or ESC to exit.]", 23, 0);
+ "[%s, Line %d/%d]",
#endif
-
+ caption, line, size), 0, 0);
}
/* Prompt -- small files */
- else if (size <= 20)
+ if (size <= rows)
{
/* Wait for it */
#ifdef JP
-prt("[¥¡¼:(?)¥Ø¥ë¥× (ESC)½ªÎ»]", 23, 0);
+prt("[¥¡¼:(?)¥Ø¥ë¥× (ESC)½ªÎ»]", hgt - 1, 0);
#else
- prt("[Press ESC to exit.]", 23, 0);
+ prt("[Press ESC to exit.]", hgt - 1, 0);
#endif
}
{
#ifdef JP
if(reverse)
- prt("[¥¡¼:(RET/¥¹¥Ú¡¼¥¹)¢¬ (-)¢ (?)¥Ø¥ë¥× (ESC)½ªÎ»]", 23, 0);
+ prt("[¥¡¼:(RET/¥¹¥Ú¡¼¥¹)¢¬ (-)¢ (?)¥Ø¥ë¥× (ESC)½ªÎ»]", hgt - 1, 0);
else
- prt("[¥¡¼:(RET/¥¹¥Ú¡¼¥¹)¢ (-)¢¬ (?)¥Ø¥ë¥× (ESC)½ªÎ»]", 23, 0);
+ prt("[¥¡¼:(RET/¥¹¥Ú¡¼¥¹)¢ (-)¢¬ (?)¥Ø¥ë¥× (ESC)½ªÎ»]", hgt - 1, 0);
#else
- prt("[Press Return, Space, -, =, /, |, or ESC to exit.]", 23, 0);
+ prt("[Press Return, Space, -, =, /, |, or ESC to exit.]", hgt - 1, 0);
#endif
}
{
/* Get "shower" */
#ifdef JP
-prt("¶¯Ä´: ", 23, 0);
+prt("¶¯Ä´: ", hgt - 1, 0);
#else
- prt("Show: ", 23, 0);
+ prt("Show: ", hgt - 1, 0);
#endif
(void)askfor_aux(shower, 80);
{
/* Get "finder" */
#ifdef JP
-prt("¸¡º÷: ", 23, 0);
+prt("¸¡º÷: ", hgt - 1, 0);
#else
- prt("Find: ", 23, 0);
+ prt("Find: ", hgt - 1, 0);
#endif
{
char tmp[81];
#ifdef JP
-prt("¹Ô: ", 23, 0);
+prt("¹Ô: ", hgt - 1, 0);
#else
- prt("Goto Line: ", 23, 0);
+ prt("Goto Line: ", hgt - 1, 0);
#endif
strcpy(tmp, "0");
{
char tmp[81];
#ifdef JP
-prt("¥Õ¥¡¥¤¥ë¡¦¥Í¡¼¥à: ", 23, 0);
+prt("¥Õ¥¡¥¤¥ë¡¦¥Í¡¼¥à: ", hgt - 1, 0);
strcpy(tmp, "jhelp.hlp");
#else
- prt("Goto File: ", 23, 0);
+ prt("Goto File: ", hgt - 1, 0);
strcpy(tmp, "help.hlp");
#endif
}
}
- /* Hack -- Allow backing up */
+ /* Allow backing up */
if (k == '-')
{
- line = line + (reverse ? 20 : -20);
- if (line < 0) line = ((size-1)/20)*20;
+ line = line + (reverse ? rows : -rows);
+ if (line < 0) line = 0;
}
- /* Hack -- Advance a single line */
+ /* Advance a single line */
if ((k == '\n') || (k == '\r'))
{
line = line + (reverse ? -1 : 1);
- if (line < 0) line = ((size-1)/20)*20;
+ if (line < 0) line = 0;
}
- /* Advance one page */
- if (k == ' ')
+
+ /* Move up / down */
+ if (k == '8')
{
- line = line + (reverse ? -20 : 20);
- if (line < 0) line = ((size-1)/20)*20;
+ line--;
+ if (line < 0) line = 0;
}
-#ifdef JP_FALSE
- /* ÆüËܸìÈǤÇÄɲ䵤줿¥Ø¥ë¥×¤Îɽ¼¨ */
- /* ¤¢¤Þ¤ê¤è¤¤½èÍý¤Î»ÅÊý¤È¤Ï»×¤¨¤Ê¤¤¡¦¡¦¡¦¤¹¤Þ¤ó */
+ if (k == '2') line++;
- /* ´Ê°×¥³¥Þ¥ó¥É°ìÍ÷ */
- if (menu && (k == 'c' || k == 'C'))
+ /* Advance one page */
+ if (k == ' ')
{
- char tmp[80];
- switch (rogue_like_commands)
- {
- case TRUE:
- {
- strcpy(tmp, "j_com_r.txt");
- if(!show_file(TRUE, tmp, NULL, 0, mode)) k = 'q';
- break;
- }
- case FALSE:
- {
- strcpy(tmp, "j_com_o.txt");
- if(!show_file(TRUE, tmp, NULL, 0, mode)) k = 'q';
- break;
- }
- }
+ line = line + (reverse ? -rows : rows);
+ if (line < 0) line = ((size-1)/rows)*rows;
}
-#endif
/* Recurse on numbers */
if (menu)
{
int key = -1;
- if (isdigit(k)) key = D2I(k);
- else if (isalpha(k)) key = k - 'A' + 10;
+ if (isalpha(k))
+ key = k - 'A';
if ((key > -1) && hook[key][0])
{
strcpy (xtmp, "");
#ifdef JP
-if (get_string("¥Õ¥¡¥¤¥ë̾: ", xtmp, 80))
+ if (!get_string("¥Õ¥¡¥¤¥ë̾: ", xtmp, 80))
#else
- if (get_string("File name: ", xtmp, 80))
+ if (!get_string("File name: ", xtmp, 80))
#endif
-
- {
- if (xtmp[0] && (xtmp[0] != ' '))
- {
- }
- }
- else
{
continue;
}
-
- /* Build the filename */
- path_build(buff, 1024, ANGBAND_DIR_USER, xtmp);
-
+
/* Close it */
my_fclose(fff);
+ /* Drop priv's */
+ safe_setuid_drop();
+
+ /* Build the filename */
+ path_build(buff, sizeof(buff), ANGBAND_DIR_USER, xtmp);
+
/* Hack -- Re-Open the file */
fff = my_fopen(path, "r");
if (!(fff && ffp))
{
#ifdef JP
-msg_print("¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£");
+msg_print("¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£");
#else
msg_print("Failed to open file.");
#endif
my_fputs(ffp, xtmp, 80);
my_fputs(ffp, "\n", 80);
- while (!my_fgets(fff, buff, 80))
+ while (!my_fgets(fff, buff, sizeof(buff)))
my_fputs(ffp, buff, 80);
/* Close it */
my_fclose(fff);
my_fclose(ffp);
+ /* Grab priv's */
+ safe_setuid_grab();
+
/* Hack -- Re-Open the file */
fff = my_fopen(path, "r");
}
#endif
-#if defined(WINDOWS) || defined(MSDOS)
+#if defined(MSDOS)
/* Hack -- max length */
if (k > 8) k = 8;
#endif /* VM */
/* Build the filename */
- path_build(savefile, 1024, ANGBAND_DIR_SAVE, temp);
+ path_build(savefile, sizeof(savefile), ANGBAND_DIR_SAVE, temp);
}
}
strcat(tmp,player_name);
/* Re-Draw the name (in light blue) */
+ Term_erase(34, 1, 255);
c_put_str(TERM_L_BLUE, tmp, 1, 34);
/* Erase the prompt, etc */
flush();
/* Verify Retirement */
- if (total_winner)
+ if (p_ptr->total_winner)
{
/* Verify */
#ifdef JP
-if (!get_check("°úÂष¤Þ¤¹¤«? ")) return;
+if (!get_check_strict("°úÂष¤Þ¤¹¤«? ", CHECK_NO_HISTORY)) return;
#else
- if (!get_check("Do you want to retire? ")) return;
+ if (!get_check_strict("Do you want to retire? ", CHECK_NO_HISTORY)) return;
#endif
}
}
- if (!noscore)
+ if (!p_ptr->noscore)
{
/* Special Verification for suicide */
#ifdef JP
}
/* Stop playing */
- alive = FALSE;
+ p_ptr->playing = FALSE;
/* Kill the player */
- death = TRUE;
+ p_ptr->is_dead = TRUE;
/* Leaving */
p_ptr->leaving = TRUE;
- if (!total_winner)
+ if (!p_ptr->total_winner)
{
#ifdef JP
do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "¥À¥ó¥¸¥ç¥ó¤Îõº÷¤ËÀä˾¤·¤Æ¼«»¦¤·¤¿¡£");
/* Cause of death */
#ifdef JP
-(void)strcpy(died_from, "ÅÓÃ潪λ");
+(void)strcpy(p_ptr->died_from, "ÅÓÃ潪λ");
#else
- (void)strcpy(died_from, "Quitting");
+ (void)strcpy(p_ptr->died_from, "Quitting");
#endif
}
/* The player is not dead */
#ifdef JP
-(void)strcpy(died_from, "(¥»¡¼¥Ö)");
+(void)strcpy(p_ptr->died_from, "(¥»¡¼¥Ö)");
#else
- (void)strcpy(died_from, "(saved)");
+ (void)strcpy(p_ptr->died_from, "(saved)");
#endif
/* Note that the player is not dead */
#ifdef JP
-(void)strcpy(died_from, "(¸µµ¤¤ËÀ¸¤¤Æ¤¤¤ë)");
+(void)strcpy(p_ptr->died_from, "(¸µµ¤¤ËÀ¸¤¤Æ¤¤¤ë)");
#else
- (void)strcpy(died_from, "(alive and well)");
+ (void)strcpy(p_ptr->died_from, "(alive and well)");
#endif
}
*/
void do_cmd_save_and_exit(void)
{
- alive = FALSE;
+ p_ptr->playing = FALSE;
/* Leaving */
p_ptr->leaving = TRUE;
if ((p_ptr->pseikaku == SEIKAKU_MUNCHKIN) && point)
{
point = 1;
- if (total_winner) point = 2;
+ if (p_ptr->total_winner) point = 2;
}
if (easy_band) point = (0 - point);
/* Ignore wizards and borgs */
- if (!(noscore & 0x00FF))
+ if (!(p_ptr->noscore & 0x00FF))
{
/* Ignore people who die in town */
if (dun_level)
sprintf(tmp, "bone.%03d", dun_level);
/* Build the filename */
- path_build(str, 1024, ANGBAND_DIR_BONE, tmp);
+ path_build(str, sizeof(str), ANGBAND_DIR_BONE, tmp);
/* Attempt to open the bones file */
fp = my_fopen(str, "r");
/* Build the filename */
#ifdef JP
- path_build(buf, 1024, ANGBAND_DIR_FILE, "dead_j.txt");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "dead_j.txt");
#else
- path_build(buf, 1024, ANGBAND_DIR_FILE, "dead.txt");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "dead.txt");
#endif
int i = 0;
/* Dump the file to the screen */
- while (0 == my_fgets(fp, buf, 1024))
+ while (0 == my_fgets(fp, buf, sizeof(buf)))
{
/* Display and advance */
put_str(buf, i++, 0);
/* King or Queen */
- if (total_winner || (p_ptr->lev > PY_MAX_LEVEL))
+ if (p_ptr->total_winner || (p_ptr->lev > PY_MAX_LEVEL))
{
#ifdef JP
/* ±ÑÆüÀÚ¤êÂؤ¨ */
#ifdef JP
/* Êè¤Ë¹ï¤à¸ÀÍÕ¤ò¥ª¥ê¥¸¥Ê¥ë¤è¤êºÙ¤«¤¯É½¼¨ */
- if (streq(died_from, "ÅÓÃ潪λ"))
+ if (streq(p_ptr->died_from, "ÅÓÃ潪λ"))
{
strcpy(tmp, "<¼«»¦>");
}
else
{
- if (streq(died_from, "ripe"))
+ if (streq(p_ptr->died_from, "ripe"))
{
strcpy(tmp, "°úÂà¸å¤ËÅ·¼÷¤òÁ´¤¦");
}
- else if (streq(died_from, "Seppuku"))
+ else if (streq(p_ptr->died_from, "Seppuku"))
{
strcpy(tmp, "¾¡Íø¤Î¸å¡¢ÀÚÊ¢");
}
else
{
- strcpy(tmp, died_from);
+ strcpy(tmp, p_ptr->died_from);
}
}
center_string(buf, tmp);
put_str(buf, 14, 11);
- if(!streq(died_from, "ripe") && !streq(died_from, "Seppuku"))
+ if(!streq(p_ptr->died_from, "ripe") && !streq(p_ptr->died_from, "Seppuku"))
{
if( dun_level == 0 )
{
cptr town = (p_ptr->town_num ? "³¹" : "¹ÓÌî");
- if(streq(died_from, "ÅÓÃ潪λ"))
+ if(streq(p_ptr->died_from, "ÅÓÃ潪λ"))
{
sprintf(tmp, "%s¤Ç»à¤ó¤À", town);
}
}
else
{
- if(streq(died_from, "ÅÓÃ潪λ"))
+ if(streq(p_ptr->died_from, "ÅÓÃ潪λ"))
{
sprintf(tmp, "Ãϲ¼ %d ³¬¤Ç»à¤ó¤À", dun_level);
}
put_str(buf, 14, 11);
- if (strlen(died_from) > 24)
+ if (strlen(p_ptr->died_from) > 24)
{
- strncpy(dummy, died_from, 24);
+ strncpy(dummy, p_ptr->died_from, 24);
dummy[24] = '\0';
(void)sprintf(tmp, "by %s.", dummy);
}
else
- (void)sprintf(tmp, "by %s.", died_from);
+ (void)sprintf(tmp, "by %s.", p_ptr->died_from);
center_string(buf, tmp);
put_str(buf, 15, 11);
#ifndef SCORE_WIZARDS
/* Wizard-mode pre-empts scoring */
- if (noscore & 0x000F)
+ if (p_ptr->noscore & 0x000F)
{
#ifdef JP
msg_print("¥¦¥£¥¶¡¼¥É¡¦¥â¡¼¥É¤Ç¤Ï¥¹¥³¥¢¤¬µÏ¿¤µ¤ì¤Þ¤»¤ó¡£");
#ifndef SCORE_BORGS
/* Borg-mode pre-empts scoring */
- if (noscore & 0x00F0)
+ if (p_ptr->noscore & 0x00F0)
{
#ifdef JP
msg_print("¥Ü¡¼¥°¡¦¥â¡¼¥É¤Ç¤Ï¥¹¥³¥¢¤¬µÏ¿¤µ¤ì¤Þ¤»¤ó¡£");
#ifndef SCORE_CHEATERS
/* Cheaters are not scored */
- if (noscore & 0xFF00)
+ if (p_ptr->noscore & 0xFF00)
{
#ifdef JP
msg_print("º¾µ½¤ò¤ä¤Ã¤¿¿Í¤Ï¥¹¥³¥¢¤¬µÏ¿¤µ¤ì¤Þ¤»¤ó¡£");
/* Interupted */
#ifdef JP
-if (!total_winner && streq(died_from, "¶¯À©½ªÎ»"))
+if (!p_ptr->total_winner && streq(p_ptr->died_from, "¶¯À©½ªÎ»"))
#else
- if (!total_winner && streq(died_from, "Interrupting"))
+ if (!p_ptr->total_winner && streq(p_ptr->died_from, "Interrupting"))
#endif
{
/* Quitter */
#ifdef JP
-if (!total_winner && streq(died_from, "ÅÓÃ潪λ"))
+if (!p_ptr->total_winner && streq(p_ptr->died_from, "ÅÓÃ潪λ"))
#else
- if (!total_winner && streq(died_from, "Quitting"))
+ if (!p_ptr->total_winner && streq(p_ptr->died_from, "Quitting"))
#endif
{
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_APEX, "scores.raw");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_APEX, "scores.raw");
/* Open the high score file, for reading/writing */
highscore_fd = fd_open(buf, O_RDWR);
/* Handle death */
- if (death)
+ if (p_ptr->is_dead)
{
/* Handle retirement */
- if (total_winner) kingly();
+ if (p_ptr->total_winner) kingly();
/* Save memories */
#ifdef JP
if ((!send_world_score(do_send)))
{
#ifdef JP
- if (get_check("¸å¤Ç¥¹¥³¥¢¤òÅÐÏ¿¤¹¤ë¤¿¤á¤ËÂÔµ¡¤·¤Þ¤¹¤«¡©"))
+ if (get_check_strict("¸å¤Ç¥¹¥³¥¢¤òÅÐÏ¿¤¹¤ë¤¿¤á¤ËÂÔµ¡¤·¤Þ¤¹¤«¡©", (CHECK_NO_ESCAPE | CHECK_NO_HISTORY)))
#else
- if (get_check("Stand by for later score registration? "))
+ if (get_check_strict("Stand by for later score registration? ", (CHECK_NO_ESCAPE | CHECK_NO_HISTORY)))
#endif
{
- wait_report_score = TRUE;
- death = FALSE;
+ p_ptr->wait_report_score = TRUE;
+ p_ptr->is_dead = FALSE;
#ifdef JP
if (!save_player()) msg_print("¥»¡¼¥Ö¼ºÇÔ¡ª");
#else
#endif
}
}
- if (!wait_report_score)
+ if (!p_ptr->wait_report_score)
(void)top_twenty();
}
else if (highscore_fd >= 0)
disturb(1, 0);
/* Mega-Hack -- Delay death */
- if (p_ptr->chp < 0) death = FALSE;
+ if (p_ptr->chp < 0) p_ptr->is_dead = FALSE;
/* Hardcode panic save */
- panic_save = 1;
+ p_ptr->panic_save = 1;
/* Forbid suspend */
signals_ignore_tstp();
/* Indicate panic save */
#ifdef JP
-(void)strcpy(died_from, "(¶ÛµÞ¥»¡¼¥Ö)");
+(void)strcpy(p_ptr->died_from, "(¶ÛµÞ¥»¡¼¥Ö)");
#else
- (void)strcpy(died_from, "(panic save)");
+ (void)strcpy(p_ptr->died_from, "(panic save)");
#endif
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_FILE, file_name);
+ path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, file_name);
/* Open the file */
fp = my_fopen(buf, "r");
while (TRUE)
{
/* Get a line from the file */
- if (my_fgets(fp, buf, 1024) == 0)
+ if (my_fgets(fp, buf, sizeof(buf)) == 0)
{
/* Count the lines */
line_num++;
while (TRUE)
{
/* Get the line */
- if (my_fgets(fp, buf, 1024) == 0)
+ if (my_fgets(fp, buf, sizeof(buf)) == 0)
{
/* Count the lines */
line_num++;
if (numentries > 0)
{
/* Grab an appropriate line number */
- line = rand_int(numentries);
+ line = randint0(numentries);
/* Get the random line */
for (counter = 0; counter <= line; counter++)
while(TRUE)
{
- test = my_fgets(fp, buf, 1024);
+ test = my_fgets(fp, buf, sizeof(buf));
if(test || buf[0] != '#')
break;
}
errr err = 0;
+ /* Drop priv's */
+ safe_setuid_drop();
+
/* Build the filename */
- path_build(buf, 1024, ANGBAND_DIR_USER, name);
+ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, name);
err = process_pref_file_aux(buf, TRUE);
+ /* Grab priv's */
+ safe_setuid_grab();
+
/* Result */
return (err);
}
char buf[1024];
#ifdef JP
- path_build(buf, 1024, ANGBAND_DIR_DATA, "z_info_j.raw");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "z_info_j.raw");
#else
- path_build(buf, 1024, ANGBAND_DIR_DATA, "z_info.raw");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "z_info.raw");
#endif
fd = fd_open(buf, O_RDONLY);
char buf[1024];
#ifdef JP
- path_build(buf, 1024, ANGBAND_DIR_DATA, "z_info_j.raw");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "z_info_j.raw");
#else
- path_build(buf, 1024, ANGBAND_DIR_DATA, "z_info.raw");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "z_info.raw");
#endif
fd = fd_open(buf, O_RDWR);
if (fd < 0)
/* Terminate dead characters */
- if (death)
+ if (p_ptr->is_dead)
{
/* Mark the savefile */
#ifdef JP
-(void)strcpy(died_from, "¶¯À©½ªÎ»");
+(void)strcpy(p_ptr->died_from, "¶¯À©½ªÎ»");
#else
- (void)strcpy(died_from, "Abortion");
+ (void)strcpy(p_ptr->died_from, "Abortion");
#endif
forget_lite();
{
/* Cause of "death" */
#ifdef JP
-(void)strcpy(died_from, "¶¯À©½ªÎ»Ãæ");
+(void)strcpy(p_ptr->died_from, "¶¯À©½ªÎ»Ãæ");
#else
- (void)strcpy(died_from, "Interrupting");
+ (void)strcpy(p_ptr->died_from, "Interrupting");
#endif
clear_mon_lite();
/* Stop playing */
- alive = FALSE;
+ p_ptr->playing = FALSE;
/* Suicide */
- death = TRUE;
+ p_ptr->is_dead = TRUE;
/* Leaving */
p_ptr->leaving = TRUE;
*/
static void handle_signal_abort(int sig)
{
+ int wid, hgt, rows;
+
+ Term_get_size(&wid, &hgt);
+ rows = hgt - 4;
+
/* Disable handler */
(void)signal(sig, SIG_IGN);
clear_mon_lite();
/* Clear the bottom line */
- Term_erase(0, 23, 255);
+ Term_erase(0, hgt - 1, 255);
/* Give a warning */
- Term_putstr(0, 23, -1, TERM_RED,
+ Term_putstr(0, hgt - 1, -1, TERM_RED,
#ifdef JP
"¶²¤í¤·¤¤¥½¥Õ¥È¤Î¥Ð¥°¤¬Èô¤Ó¤«¤«¤Ã¤Æ¤¤¿¡ª");
#else
/* Message */
#ifdef JP
-Term_putstr(45, 23, -1, TERM_RED, "¶ÛµÞ¥»¡¼¥Ö...");
+Term_putstr(45, hgt - 1, -1, TERM_RED, "¶ÛµÞ¥»¡¼¥Ö...");
#else
- Term_putstr(45, 23, -1, TERM_RED, "Panic save...");
+ Term_putstr(45, hgt - 1, -1, TERM_RED, "Panic save...");
#endif
Term_fresh();
/* Panic Save */
- panic_save = 1;
+ p_ptr->panic_save = 1;
/* Panic save */
#ifdef JP
-(void)strcpy(died_from, "(¶ÛµÞ¥»¡¼¥Ö)");
+(void)strcpy(p_ptr->died_from, "(¶ÛµÞ¥»¡¼¥Ö)");
#else
- (void)strcpy(died_from, "(panic save)");
+ (void)strcpy(p_ptr->died_from, "(panic save)");
#endif
if (save_player())
{
#ifdef JP
-Term_putstr(45, 23, -1, TERM_RED, "¶ÛµÞ¥»¡¼¥ÖÀ®¸ù¡ª");
+Term_putstr(45, hgt - 1, -1, TERM_RED, "¶ÛµÞ¥»¡¼¥ÖÀ®¸ù¡ª");
#else
- Term_putstr(45, 23, -1, TERM_RED, "Panic save succeeded!");
+ Term_putstr(45, hgt - 1, -1, TERM_RED, "Panic save succeeded!");
#endif
}
else
{
#ifdef JP
-Term_putstr(45, 23, -1, TERM_RED, "¶ÛµÞ¥»¡¼¥Ö¼ºÇÔ¡ª");
+Term_putstr(45, hgt - 1, -1, TERM_RED, "¶ÛµÞ¥»¡¼¥Ö¼ºÇÔ¡ª");
#else
- Term_putstr(45, 23, -1, TERM_RED, "Panic save failed!");
+ Term_putstr(45, hgt - 1, -1, TERM_RED, "Panic save failed!");
#endif
}