*/
static bool activate_artifact(player_type *user_ptr, object_type *o_ptr)
{
- concptr name = k_name + k_info[o_ptr->k_idx].name;
+ concptr name = k_info[o_ptr->k_idx].name.c_str();
const activation_type *const act_ptr = find_activation_info(user_ptr, o_ptr);
if (!act_ptr) {
msg_print("Activation information is not found.");
/* Allow moving */
} else if (has_flag(f_ptr->flags, FF_WATER) && !(riding_r_ptr->flags7 & RF7_AQUATIC)
&& (has_flag(f_ptr->flags, FF_DEEP) || (riding_r_ptr->flags2 & RF2_AURA_FIRE))) {
- msg_format(_("%sの上に行けない。", "Can't swim."), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sの上に行けない。", "Can't swim."), f_info[get_feat_mimic(g_ptr)].name.c_str());
free_turn(creature_ptr);
can_move = FALSE;
disturb(creature_ptr, FALSE, TRUE);
} else if (!has_flag(f_ptr->flags, FF_WATER) && (riding_r_ptr->flags7 & RF7_AQUATIC)) {
- msg_format(_("%sから上がれない。", "Can't land."), f_name + f_info[get_feat_mimic(&floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name);
+ msg_format(_("%sから上がれない。", "Can't land."), f_info[get_feat_mimic(&floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str());
free_turn(creature_ptr);
can_move = FALSE;
disturb(creature_ptr, FALSE, TRUE);
} else if (has_flag(f_ptr->flags, FF_LAVA) && !(riding_r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)) {
- msg_format(_("%sの上に行けない。", "Too hot to go through."), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sの上に行けない。", "Too hot to go through."), f_info[get_feat_mimic(g_ptr)].name.c_str());
free_turn(creature_ptr);
can_move = FALSE;
disturb(creature_ptr, FALSE, TRUE);
if (!can_move) {
} else if (!has_flag(f_ptr->flags, FF_MOVE) && has_flag(f_ptr->flags, FF_CAN_FLY) && !creature_ptr->levitation) {
- msg_format(_("空を飛ばないと%sの上には行けない。", "You need to fly to go through the %s."), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("空を飛ばないと%sの上には行けない。", "You need to fly to go through the %s."), f_info[get_feat_mimic(g_ptr)].name.c_str());
free_turn(creature_ptr);
creature_ptr->running = 0;
can_move = FALSE;
} else if (!p_can_enter && !p_can_kill_walls) {
FEAT_IDX feat = get_feat_mimic(g_ptr);
feature_type *mimic_f_ptr = &f_info[feat];
- concptr name = f_name + mimic_f_ptr->name;
+ concptr name = mimic_f_ptr->name.c_str();
can_move = FALSE;
if (!(g_ptr->info & CAVE_MARK) && !player_can_see_bold(creature_ptr, y, x)) {
if (boundary_floor(g_ptr, f_ptr, mimic_f_ptr))
feature_type *f_ptr = &f_info[g_ptr->feat];
take_turn(creature_ptr, 100);
if (!has_flag(f_ptr->flags, FF_OPEN)) {
- msg_format(_("%sはがっちりと閉じられているようだ。", "The %s appears to be stuck."), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sはがっちりと閉じられているようだ。", "The %s appears to be stuck."), f_info[get_feat_mimic(g_ptr)].name.c_str());
return FALSE;
}
return FALSE;
if (!has_flag(f_ptr->flags, FF_OPEN)) {
- msg_format(_("%sはがっちりと閉じられているようだ。", "The %s appears to be stuck."), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sはがっちりと閉じられているようだ。", "The %s appears to be stuck."), f_info[get_feat_mimic(g_ptr)].name.c_str());
} else if (f_ptr->power) {
i = creature_ptr->skill_dis;
if (creature_ptr->blind || no_lite(creature_ptr))
{
grid_type *g_ptr = &creature_ptr->current_floor_ptr->grid_array[y][x];
feature_type *f_ptr = &f_info[g_ptr->feat];
- concptr name = (f_name + f_ptr->name);
+ concptr name = f_ptr->name.c_str();
int power = f_ptr->power;
bool more = FALSE;
int i = creature_ptr->skill_dis;
int bash = adj_str_blow[creature_ptr->stat_index[A_STR]];
int temp = f_ptr->power;
bool more = FALSE;
- concptr name = f_name + f_info[get_feat_mimic(g_ptr)].name;
+ concptr name = f_info[get_feat_mimic(g_ptr)].name.c_str();
take_turn(creature_ptr, 100);
msg_format(_("%sに体当たりをした!", "You smash into the %s!"), name);
temp = (bash - (temp * 10));
f_ptr = &f_info[g_ptr->feat];
power = f_ptr->power;
mimic_f_ptr = &f_info[get_feat_mimic(g_ptr)];
- name = f_name + mimic_f_ptr->name;
+ name = mimic_f_ptr->name.c_str();
sound(SOUND_DIG);
if (has_flag(f_ptr->flags, FF_PERMANENT)) {
if (has_flag(mimic_f_ptr->flags, FF_PERMANENT))
bool create_named_art(player_type *player_ptr, ARTIFACT_IDX a_idx, POSITION y, POSITION x)
{
artifact_type *a_ptr = &a_info[a_idx];
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
return FALSE;
KIND_OBJECT_IDX i = lookup_kind(a_ptr->tval, a_ptr->sval);
for (ARTIFACT_IDX i = 0; i < max_a_idx; i++) {
artifact_type *a_ptr = &a_info[i];
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
continue;
if (a_ptr->cur_num)
artifact_type *a_ptr = &a_info[i];
/*! @note アーティファクト名が空の不正なデータは除外する / Skip "empty" artifacts */
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
continue;
/*! @note 既に生成回数がカウントされたアーティファクト、QUESTITEMと非INSTA_ARTは除外 / Cannot make an artifact twice */
ego_item_type *e_ptr = &e_info[o_ptr->name2];
#ifdef JP
/* エゴ銘には「^」マークが使える */
- sprintf(name_str, "^%s", e_name + e_ptr->name);
+ sprintf(name_str, "^%s", e_ptr->name.c_str());
#else
/* We ommit the basename and cannot use the ^ mark */
- strcpy(name_str, e_name + e_ptr->name);
+ strcpy(name_str, e_ptr->name.c_str());
#endif
name = FALSE;
if (!object_is_rare(o_ptr))
}
if (!max_dlv[target_dungeon]) {
- msg_format(_("ここには%sの入り口(%d階相当)があります", "There is the entrance of %s (Danger level: %d)"), d_name + d_info[target_dungeon].name,
+ msg_format(_("ここには%sの入り口(%d階相当)があります", "There is the entrance of %s (Danger level: %d)"), d_info[target_dungeon].name.c_str(),
d_info[target_dungeon].mindepth);
if (!get_check(_("本当にこのダンジョンに入りますか?", "Do you really get in this dungeon? ")))
return;
msg_print(_("わざと落とし戸に落ちた。", "You deliberately jump through the trap door."));
} else {
if (target_dungeon) {
- msg_format(_("%sへ入った。", "You entered %s."), d_text + d_info[creature_ptr->dungeon_idx].text);
+ msg_format(_("%sへ入った。", "You entered %s."), d_info[creature_ptr->dungeon_idx].text.c_str());
} else {
if (is_echizen(creature_ptr))
msg_print(_("なんだこの階段は!", "What's this STAIRWAY!"));
do_cmd_attack(creature_ptr, y, x, HISSATSU_NONE);
} else {
take_turn(creature_ptr, 100);
- msg_format(_("%sにくさびを打ち込んだ。", "You jam the %s with a spike."), f_name + f_info[feat].name);
+ msg_format(_("%sにくさびを打ち込んだ。", "You jam the %s with a spike."), f_info[feat].name.c_str());
cave_alter_feat(creature_ptr, y, x, FF_SPIKE);
vary_item(creature_ptr, item, -1);
}
/* Feature code (applying "mimic" field) */
feature_type *f_ptr = &f_info[get_feat_mimic(g_ptr)];
#ifdef JP
- msg_format("そのモンスターは%sの%sにいる。", f_name + f_ptr->name,
+ msg_format("そのモンスターは%sの%sにいる。", f_ptr->name.c_str(),
((!has_flag(f_ptr->flags, FF_MOVE) && !has_flag(f_ptr->flags, FF_CAN_FLY))
|| (!has_flag(f_ptr->flags, FF_LOS) && !has_flag(f_ptr->flags, FF_TREE)))
? "中"
|| (!has_flag(f_ptr->flags, FF_LOS) && !has_flag(f_ptr->flags, FF_TREE)))
? "in"
: "on",
- f_name + f_ptr->name);
+ f_ptr->name.c_str());
#endif
return FALSE;
#ifdef JP
sprintf(target_buf, "ペットのターゲットを指定 (現在:%s)",
(creature_ptr->pet_t_m_idx
- ? (creature_ptr->image ? "何か奇妙な物" : (r_name + r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->pet_t_m_idx].ap_r_idx].name))
+ ? (creature_ptr->image ? "何か奇妙な物" : r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->pet_t_m_idx].ap_r_idx].name.c_str())
: "指定なし"));
#else
sprintf(target_buf, "specify a target of pet (now:%s)",
(creature_ptr->pet_t_m_idx ? (
- creature_ptr->image ? "something strange" : (r_name + r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->pet_t_m_idx].ap_r_idx].name))
+ creature_ptr->image ? "something strange" : r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->pet_t_m_idx].ap_r_idx].name.c_str())
: "nothing"));
#endif
power_desc[num] = target_buf;
}
#ifdef JP
- strcpy(temp2, r_name + r_ptr->E_name);
+ strcpy(temp2, r_ptr->E_name.c_str());
#else
- strcpy(temp2, r_name + r_ptr->name);
+ strcpy(temp2, r_ptr->name.c_str());
#endif
for (xx = 0; temp2[xx] && xx < MAX_MONSTER_NAME; xx++)
if (isupper(temp2[xx]))
temp2[xx] = (char)tolower(temp2[xx]);
#ifdef JP
- if (angband_strstr(temp2, temp) || angband_strstr(r_name + r_ptr->name, temp))
+ if (angband_strstr(temp2, temp) || angband_strstr(r_ptr->name.c_str(), temp))
#else
if (angband_strstr(temp2, temp))
#endif
{
strcat(dummy, format(
_(" %-22.22s 充填:%2d/%2d%3d%%", " %-22.22s (%2d/%2d) %3d%%"),
- k_name + k_info[k_idx].name,
+ k_info[k_idx].name.c_str(),
creature_ptr->magic_num1[ctr+ext] ?
(creature_ptr->magic_num1[ctr+ext] - 1) / (EATER_ROD_CHARGE * k_info[k_idx].pval) +1 : 0,
creature_ptr->magic_num2[ctr+ext], chance));
}
else
{
- strcat(dummy, format(" %-22.22s %2d/%2d %3d%%", k_name + k_info[k_idx].name, (s16b)(creature_ptr->magic_num1[ctr+ext]/EATER_CHARGE), creature_ptr->magic_num2[ctr+ext], chance));
+ strcat(dummy, format(" %-22.22s %2d/%2d %3d%%", k_info[k_idx].name.c_str(), (s16b)(creature_ptr->magic_num1[ctr+ext]/EATER_CHARGE), creature_ptr->magic_num2[ctr+ext], chance));
if (creature_ptr->magic_num1[ctr+ext] < EATER_CHARGE) col = TERM_RED;
}
}
char tmp_val[160];
/* Prompt */
- (void) strnfmt(tmp_val, 78, _("%sを使いますか? ", "Use %s?"), k_name + k_info[lookup_kind(tval ,i)].name);
+ (void) strnfmt(tmp_val, 78, _("%sを使いますか? ", "Use %s?"), k_info[lookup_kind(tval ,i)].name.c_str());
/* Belay that order */
if (!get_check(tmp_val)) continue;
term_erase(7, 21, 255);
term_erase(7, 20, 255);
- shape_buffer(k_text + k_info[lookup_kind(tval, i)].text, 62, temp, sizeof(temp));
+ shape_buffer(k_info[lookup_kind(tval, i)].text.c_str(), 62, temp, sizeof(temp));
for (j = 0, line = 21; temp[j]; j += 1 + strlen(&temp[j]))
{
prt(&temp[j], line, 10);
auto_dump_printf(auto_dump_stream, _("\n# モンスターの[色/文字]の設定\n\n", "\n# Monster attr/char definitions\n\n"));
for (i = 0; i < max_r_idx; i++) {
monster_race *r_ptr = &r_info[i];
- if (!r_ptr->name)
+ if (r_ptr->name.empty())
continue;
- auto_dump_printf(auto_dump_stream, "# %s\n", (r_name + r_ptr->name));
+ auto_dump_printf(auto_dump_stream, "# %s\n", r_ptr->name.c_str());
auto_dump_printf(auto_dump_stream, "R:%d:0x%02X/0x%02X\n\n", i, (byte)(r_ptr->x_attr), (byte)(r_ptr->x_char));
}
for (KIND_OBJECT_IDX k_idx = 0; k_idx < max_k_idx; k_idx++) {
GAME_TEXT o_name[MAX_NLEN];
object_kind *k_ptr = &k_info[k_idx];
- if (!k_ptr->name)
+ if (k_ptr->name.empty())
continue;
if (!k_ptr->flavor) {
auto_dump_printf(auto_dump_stream, _("\n# 地形の[色/文字]の設定\n\n", "\n# Feature attr/char definitions\n\n"));
for (i = 0; i < max_f_idx; i++) {
feature_type *f_ptr = &f_info[i];
- if (!f_ptr->name)
+ if (f_ptr->name.empty())
continue;
if (f_ptr->mimic != i)
continue;
- auto_dump_printf(auto_dump_stream, "# %s\n", (f_name + f_ptr->name));
+ auto_dump_printf(auto_dump_stream, "# %s\n", (f_ptr->name.c_str()));
auto_dump_printf(auto_dump_stream, "F:%d:0x%02X/0x%02X:0x%02X/0x%02X:0x%02X/0x%02X\n\n", i, (byte)(f_ptr->x_attr[F_LIT_STANDARD]),
(byte)(f_ptr->x_char[F_LIT_STANDARD]), (byte)(f_ptr->x_attr[F_LIT_LITE]), (byte)(f_ptr->x_char[F_LIT_LITE]),
(byte)(f_ptr->x_attr[F_LIT_DARK]), (byte)(f_ptr->x_char[F_LIT_DARK]));
TERM_COLOR ca = r_ptr->x_attr;
byte cc = r_ptr->x_char;
- term_putstr(5, 17, -1, TERM_WHITE, format(_("モンスター = %d, 名前 = %-40.40s", "Monster = %d, Name = %-40.40s"), r, (r_name + r_ptr->name)));
+ term_putstr(5, 17, -1, TERM_WHITE, format(_("モンスター = %d, 名前 = %-40.40s", "Monster = %d, Name = %-40.40s"), r, r_ptr->name.c_str()));
term_putstr(10, 19, -1, TERM_WHITE, format(_("初期値 色 / 文字 = %3u / %3u", "Default attr/char = %3u / %3u"), da, dc));
term_putstr(40, 19, -1, TERM_WHITE, empty_symbol);
term_queue_bigchar(43, 19, da, dc, 0, 0);
r = prev_r;
break;
}
- } while (!r_info[r].name);
+ } while (r_info[r].name.empty());
}
break;
term_putstr(5, 17, -1, TERM_WHITE,
format(
- _("アイテム = %d, 名前 = %-40.40s", "Object = %d, Name = %-40.40s"), k, k_name + (!k_ptr->flavor ? k_ptr->name : k_ptr->flavor_name)));
+ _("アイテム = %d, 名前 = %-40.40s", "Object = %d, Name = %-40.40s"), k, (!k_ptr->flavor ? k_ptr->name : k_ptr->flavor_name).c_str()));
term_putstr(10, 19, -1, TERM_WHITE, format(_("初期値 色 / 文字 = %3d / %3d", "Default attr/char = %3d / %3d"), da, dc));
term_putstr(40, 19, -1, TERM_WHITE, empty_symbol);
term_queue_bigchar(43, 19, da, dc, 0, 0);
k = prev_k;
break;
}
- } while (!k_info[k].name);
+ } while (k_info[k].name.empty());
}
break;
prt("", 17, 5);
term_putstr(5, 17, -1, TERM_WHITE,
- format(_("地形 = %d, 名前 = %s, 明度 = %s", "Terrain = %d, Name = %s, Lighting = %s"), f, (f_name + f_ptr->name),
+ format(_("地形 = %d, 名前 = %s, 明度 = %s", "Terrain = %d, Name = %s, Lighting = %s"), f, (f_ptr->name.c_str()),
lighting_level_str[lighting_level]));
term_putstr(10, 19, -1, TERM_WHITE, format(_("初期値 色 / 文字 = %3d / %3d", "Default attr/char = %3d / %3d"), da, dc));
term_putstr(40, 19, -1, TERM_WHITE, empty_symbol);
f = prev_f;
break;
}
- } while (!f_info[f].name || (f_info[f].mimic != f));
+ } while (f_info[f].name.empty() || (f_info[f].mimic != f));
}
break;
msg_print(_("熱で火傷した!", "The heat burns you!"));
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage,
format(_("%sの上に浮遊したダメージ", "flying over %s"),
- f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name),
+ f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str()),
-1);
} else {
- concptr name = f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name;
+ concptr name = f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str();
msg_format(_("%sで火傷した!", "The %s burns you!"), name);
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage, name, -1);
}
msg_print(_("冷気に覆われた!", "The cold engulfs you!"));
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage,
format(_("%sの上に浮遊したダメージ", "flying over %s"),
- f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name),
+ f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str()),
-1);
} else {
- concptr name = f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name;
+ concptr name = f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str();
msg_format(_("%sに凍えた!", "The %s frostbites you!"), name);
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage, name, -1);
}
msg_print(_("電撃を受けた!", "The electricity shocks you!"));
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage,
format(_("%sの上に浮遊したダメージ", "flying over %s"),
- f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name),
+ f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str()),
-1);
} else {
- concptr name = f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name;
+ concptr name = f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str();
msg_format(_("%sに感電した!", "The %s shocks you!"), name);
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage, name, -1);
}
msg_print(_("酸が飛び散った!", "The acid melts you!"));
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage,
format(_("%sの上に浮遊したダメージ", "flying over %s"),
- f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name),
+ f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str()),
-1);
} else {
- concptr name = f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name;
+ concptr name = f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str();
msg_format(_("%sに溶かされた!", "The %s melts you!"), name);
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage, name, -1);
}
msg_print(_("毒気を吸い込んだ!", "The gas poisons you!"));
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage,
format(_("%sの上に浮遊したダメージ", "flying over %s"),
- f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name),
+ f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str()),
-1);
if (!has_resist_pois(creature_ptr))
(void)set_poisoned(creature_ptr, creature_ptr->poisoned + damage);
} else {
- concptr name = f_name + f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name;
+ concptr name = f_info[get_feat_mimic(&creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x])].name.c_str();
msg_format(_("%sに毒された!", "The %s poisons you!"), name);
take_hit(creature_ptr, DAMAGE_NOESCAPE, damage, name, -1);
if (!has_resist_pois(creature_ptr))
if ((floor_ptr->dun_level == d_info[player_ptr->dungeon_idx].maxdepth) && d_info[player_ptr->dungeon_idx].final_guardian) {
if (r_info[d_info[player_ptr->dungeon_idx].final_guardian].max_num)
#ifdef JP
- msg_format("この階には%sの主である%sが棲んでいる。", d_name + d_info[player_ptr->dungeon_idx].name,
- r_name + r_info[d_info[player_ptr->dungeon_idx].final_guardian].name);
+ msg_format("この階には%sの主である%sが棲んでいる。", d_info[player_ptr->dungeon_idx].name.c_str(),
+ r_info[d_info[player_ptr->dungeon_idx].final_guardian].name.c_str());
#else
- msg_format("%^s lives in this level as the keeper of %s.", r_name + r_info[d_info[player_ptr->dungeon_idx].final_guardian].name,
- d_name + d_info[player_ptr->dungeon_idx].name);
+ msg_format("%^s lives in this level as the keeper of %s.", r_info[d_info[player_ptr->dungeon_idx].final_guardian].name.c_str(),
+ d_info[player_ptr->dungeon_idx].name.c_str());
#endif
}
* The dungeon arrays
*/
dungeon_type *d_info;
-char *d_name;
-char *d_text;
/*
* Maximum number of dungeon in d_info.txt
if (max_dlv[DUNGEON_ANGBAND]) return DUNGEON_ANGBAND;
else
{
- msg_format(_("まだ%sに入ったことはない。", "You haven't entered %s yet."), d_name + d_info[DUNGEON_ANGBAND].name);
+ msg_format(_("まだ%sに入ったことはない。", "You haven't entered %s yet."), d_info[DUNGEON_ANGBAND].name.c_str());
msg_print(NULL);
return 0;
}
else if (max_dlv[i] == d_info[i].maxdepth) seiha = TRUE;
sprintf(buf, _(" %c) %c%-12s : 最大 %d 階", " %c) %c%-16s : Max level %d"),
- 'a' + num, seiha ? '!' : ' ', d_name + d_info[i].name, (int)max_dlv[i]);
+ 'a' + num, seiha ? '!' : ' ', d_info[i].name.c_str(), (int)max_dlv[i]);
prt(buf, y + num, x);
dun[num++] = i;
}
#include "system/angband.h"
#include "grid/feature.h"
+#include <string>
#define DUNGEON_FEAT_PROB_NUM 3
typedef struct dungeon_type dungeon_type;
struct dungeon_type {
- STR_OFFSET name; /* Name */
- STR_OFFSET text; /* Description */
-
- POSITION dy;
- POSITION dx;
-
- feat_prob floor[DUNGEON_FEAT_PROB_NUM]; /* Floor probability */
- feat_prob fill[DUNGEON_FEAT_PROB_NUM]; /* Cave wall probability */
- FEAT_IDX outer_wall; /* Outer wall tile */
- FEAT_IDX inner_wall; /* Inner wall tile */
- FEAT_IDX stream1; /* stream tile */
- FEAT_IDX stream2; /* stream tile */
-
- DEPTH mindepth; /* Minimal depth */
- DEPTH maxdepth; /* Maximal depth */
- PLAYER_LEVEL min_plev; /* Minimal plev needed to enter -- it's an anti-cheating mesure */
- BIT_FLAGS16 pit;
- BIT_FLAGS16 nest;
- BIT_FLAGS8 mode; /* Mode of combinaison of the monster flags */
-
- int min_m_alloc_level; /* Minimal number of monsters per level */
- int max_m_alloc_chance; /* There is a 1/max_m_alloc_chance chance per round of creating a new monster */
-
- BIT_FLAGS flags1; /* Flags 1 */
-
- BIT_FLAGS mflags1; /* The monster flags that are allowed */
- BIT_FLAGS mflags2;
- BIT_FLAGS mflags3;
- BIT_FLAGS mflags4;
- BIT_FLAGS mflags7;
- BIT_FLAGS mflags8;
- BIT_FLAGS mflags9;
- BIT_FLAGS mflagsr;
-
- BIT_FLAGS m_a_ability_flags1;
- BIT_FLAGS m_a_ability_flags2;
- BIT_FLAGS m_a_ability_flags3;
- BIT_FLAGS m_a_ability_flags4;
-
- char r_char[5]; /* Monster race allowed */
- KIND_OBJECT_IDX final_object; /* The object you'll find at the bottom */
- ARTIFACT_IDX final_artifact; /* The artifact you'll find at the bottom */
- MONRACE_IDX final_guardian; /* The artifact's guardian. If an artifact is specified, then it's NEEDED */
-
- PROB special_div; /* % of monsters affected by the flags/races allowed, to add some variety */
- int tunnel_percent;
- int obj_great;
- int obj_good;
+ std::string name; /* Name */
+ std::string text; /* Description */
+
+ POSITION dy{};
+ POSITION dx{};
+
+ feat_prob floor[DUNGEON_FEAT_PROB_NUM]{}; /* Floor probability */
+ feat_prob fill[DUNGEON_FEAT_PROB_NUM]{}; /* Cave wall probability */
+ FEAT_IDX outer_wall{}; /* Outer wall tile */
+ FEAT_IDX inner_wall{}; /* Inner wall tile */
+ FEAT_IDX stream1{}; /* stream tile */
+ FEAT_IDX stream2{}; /* stream tile */
+
+ DEPTH mindepth{}; /* Minimal depth */
+ DEPTH maxdepth{}; /* Maximal depth */
+ PLAYER_LEVEL min_plev{}; /* Minimal plev needed to enter -- it's an anti-cheating mesure */
+ BIT_FLAGS16 pit{};
+ BIT_FLAGS16 nest{};
+ BIT_FLAGS8 mode{}; /* Mode of combinaison of the monster flags */
+
+ int min_m_alloc_level{}; /* Minimal number of monsters per level */
+ int max_m_alloc_chance{}; /* There is a 1/max_m_alloc_chance chance per round of creating a new monster */
+
+ BIT_FLAGS flags1{}; /* Flags 1 */
+
+ BIT_FLAGS mflags1{}; /* The monster flags that are allowed */
+ BIT_FLAGS mflags2{};
+ BIT_FLAGS mflags3{};
+ BIT_FLAGS mflags4{};
+ BIT_FLAGS mflags7{};
+ BIT_FLAGS mflags8{};
+ BIT_FLAGS mflags9{};
+ BIT_FLAGS mflagsr{};
+
+ BIT_FLAGS m_a_ability_flags1{};
+ BIT_FLAGS m_a_ability_flags2{};
+ BIT_FLAGS m_a_ability_flags3{};
+ BIT_FLAGS m_a_ability_flags4{};
+
+ char r_char[5]{}; /* Monster race allowed */
+ KIND_OBJECT_IDX final_object{}; /* The object you'll find at the bottom */
+ ARTIFACT_IDX final_artifact{}; /* The artifact you'll find at the bottom */
+ MONRACE_IDX final_guardian{}; /* The artifact's guardian. If an artifact is specified, then it's NEEDED */
+
+ PROB special_div{}; /* % of monsters affected by the flags/races allowed, to add some variety */
+ int tunnel_percent{};
+ int obj_great{};
+ int obj_good{};
};
extern DEPTH *max_dlv;
extern dungeon_type *d_info;
-extern char *d_name;
-extern char *d_text;
extern DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x);
return;
GAME_TEXT name[MAX_NLEN];
- strcpy(name, (r_name + r_ptr->name));
+ strcpy(name, (r_ptr->name.c_str()));
msg_print(find_quest[rand_range(0, 4)]);
msg_print(NULL);
if (!known || !has_flag(mimic_f_ptr->flags, FF_OPEN))
break;
- msg_format(_("%sに何かがつっかえて開かなくなった。", "The %s seems stuck."), f_name + mimic_f_ptr->name);
+ msg_format(_("%sに何かがつっかえて開かなくなった。", "The %s seems stuck."), mimic_f_ptr->name.c_str());
obvious = TRUE;
break;
}
break;
if (known && (g_ptr->info & (CAVE_MARK))) {
- msg_format(_("%sが溶けて泥になった!", "The %s turns into mud!"), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sが溶けて泥になった!", "The %s turns into mud!"), f_info[get_feat_mimic(g_ptr)].name.c_str());
obvious = TRUE;
}
break;
if (known && (g_ptr->info & CAVE_MARK)) {
- msg_format(_("%sが割れた!", "The %s crumbled!"), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sが割れた!", "The %s crumbled!"), f_info[get_feat_mimic(g_ptr)].name.c_str());
sound(SOUND_GLASS);
}
break;
if (known && (g_ptr->info & CAVE_MARK)) {
- msg_format(_("%sが割れた!", "The %s crumbled!"), f_name + f_info[get_feat_mimic(g_ptr)].name);
+ msg_format(_("%sが割れた!", "The %s crumbled!"), f_info[get_feat_mimic(g_ptr)].name.c_str());
sound(SOUND_GLASS);
}
flavor_ptr->buf = buf;
flavor_ptr->o_ptr = o_ptr;
flavor_ptr->mode = mode;
- flavor_ptr->kindname = k_name + k_info[o_ptr->k_idx].name;
+ flavor_ptr->kindname = k_info[o_ptr->k_idx].name.c_str();
flavor_ptr->basenm = flavor_ptr->kindname;
flavor_ptr->modstr = "";
flavor_ptr->aware = FALSE;
if (!flavor_ptr->aware || !has_flag(flavor_ptr->tr_flags, TR_FULL_NAME))
return;
- flavor_ptr->basenm = (flavor_ptr->known && (flavor_ptr->o_ptr->name1 != 0)) ? a_name + a_info[flavor_ptr->o_ptr->name1].name : flavor_ptr->kindname;
+ flavor_ptr->basenm = (flavor_ptr->known && (flavor_ptr->o_ptr->name1 != 0)) ? a_info[flavor_ptr->o_ptr->name1].name.c_str() : flavor_ptr->kindname;
}
#ifdef JP
if (flavor_ptr->o_ptr->name1 && !has_flag(flavor_ptr->tr_flags, TR_FULL_NAME)) {
artifact_type *a_ptr = &a_info[flavor_ptr->o_ptr->name1];
/* '『' から始まらない伝説のアイテムの名前は最初に付加する */
- if (strncmp(a_name + a_ptr->name, "『", 2) != 0)
- flavor_ptr->t = object_desc_str(flavor_ptr->t, a_name + a_ptr->name);
+ if (a_ptr->name.find("『", 0, 2) != 0)
+ flavor_ptr->t = object_desc_str(flavor_ptr->t, a_ptr->name.c_str());
return;
}
if (object_is_ego(flavor_ptr->o_ptr)) {
ego_item_type *e_ptr = &e_info[flavor_ptr->o_ptr->name2];
- flavor_ptr->t = object_desc_str(flavor_ptr->t, e_name + e_ptr->name);
+ flavor_ptr->t = object_desc_str(flavor_ptr->t, e_ptr->name.c_str());
}
}
if (object_is_fixed_artifact(flavor_ptr->o_ptr)) {
artifact_type *a_ptr = &a_info[flavor_ptr->o_ptr->name1];
- if (strncmp(a_name + a_ptr->name, "『", 2) == 0)
- flavor_ptr->t = object_desc_str(flavor_ptr->t, a_name + a_ptr->name);
+ if (a_ptr->name.find("『", 0, 2) == 0)
+ flavor_ptr->t = object_desc_str(flavor_ptr->t, a_ptr->name.c_str());
return;
}
if (object_is_fixed_artifact(flavor_ptr->o_ptr)) {
artifact_type *a_ptr = &a_info[flavor_ptr->o_ptr->name1];
flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
- flavor_ptr->t = object_desc_str(flavor_ptr->t, a_name + a_ptr->name);
+ flavor_ptr->t = object_desc_str(flavor_ptr->t, a_ptr->name.c_str());
return;
}
if (object_is_ego(flavor_ptr->o_ptr)) {
ego_item_type *e_ptr = &e_info[flavor_ptr->o_ptr->name2];
flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
- flavor_ptr->t = object_desc_str(flavor_ptr->t, e_name + e_ptr->name);
+ flavor_ptr->t = object_desc_str(flavor_ptr->t, e_ptr->name.c_str());
}
if (flavor_ptr->o_ptr->inscription && angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '#')) {
Rand_state_set(current_world_ptr->seed_flavor);
for (KIND_OBJECT_IDX i = 0; i < max_k_idx; i++) {
object_kind *k_ptr = &k_info[i];
- if (!k_ptr->flavor_name)
+ if (k_ptr->flavor_name.empty())
continue;
k_ptr->flavor = i;
Rand_state_restore(state_backup);
for (KIND_OBJECT_IDX i = 1; i < max_k_idx; i++) {
object_kind *k_ptr = &k_info[i];
- if (!k_ptr->name)
+ if (k_ptr->name.empty())
continue;
if (!k_ptr->flavor)
void strip_name(char *buf, KIND_OBJECT_IDX k_idx)
{
object_kind *k_ptr = &k_info[k_idx];
- concptr str = (k_name + k_ptr->name);
+ concptr str = k_ptr->name.c_str();
while ((*str == ' ') || (*str == '&'))
str++;
}
#ifdef JP
- sprintf(flavor_ptr->tmp_val2, " (%s)", r_name + r_ptr->name);
+ sprintf(flavor_ptr->tmp_val2, " (%s)", r_ptr->name.c_str());
flavor_ptr->modstr = flavor_ptr->tmp_val2;
#else
- flavor_ptr->t = r_name + r_ptr->name;
+ flavor_ptr->t = format("%s", r_ptr->name.c_str());
if (!(r_ptr->flags1 & RF1_UNIQUE)) {
sprintf(flavor_ptr->tmp_val2, " (%s%s)", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
flavor_ptr->modstr = flavor_ptr->tmp_val2;
{
monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
#ifdef JP
- flavor_ptr->modstr = r_name + r_ptr->name;
+ flavor_ptr->modstr = r_ptr->name.c_str();
#else
- flavor_ptr->t = r_name + r_ptr->name;
+ flavor_ptr->t = format("%s", r_ptr->name.c_str());
if (!(r_ptr->flags1 & RF1_UNIQUE)) {
sprintf(flavor_ptr->tmp_val2, "%s%s", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
flavor_ptr->modstr = flavor_ptr->tmp_val2;
static void describe_corpse(flavor_type *flavor_ptr)
{
monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
- flavor_ptr->modstr = r_name + r_ptr->name;
+ flavor_ptr->modstr = r_ptr->name.c_str();
#ifdef JP
flavor_ptr->basenm = "#%";
#else
if (flavor_ptr->aware && (object_is_fixed_artifact(flavor_ptr->o_ptr) || flavor_ptr->k_ptr->gen_flags.has(TRG::INSTA_ART)))
return;
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%のアミュレット", "& Amulet~ of %");
else if (flavor_ptr->aware)
if (flavor_ptr->aware && (object_is_fixed_artifact(flavor_ptr->o_ptr) || flavor_ptr->k_ptr->gen_flags.has(TRG::INSTA_ART)))
return;
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%の指輪", "& Ring~ of %");
else if (flavor_ptr->aware)
static void describe_staff(flavor_type *flavor_ptr)
{
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%の杖", "& Staff~ of %");
else if (flavor_ptr->aware)
static void describe_wand(flavor_type *flavor_ptr)
{
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%の魔法棒", "& Wand~ of %");
else if (flavor_ptr->aware)
static void describe_rod(flavor_type *flavor_ptr)
{
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%のロッド", "& Rod~ of %");
else if (flavor_ptr->aware)
static void describe_scroll(flavor_type *flavor_ptr)
{
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%の巻物", "& Scroll~ of %");
else if (flavor_ptr->aware)
static void describe_potion(flavor_type *flavor_ptr)
{
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%の薬", "& Potion~ of %");
else if (flavor_ptr->aware)
static void describe_food(flavor_type *flavor_ptr)
{
- if (!flavor_ptr->k_ptr->flavor_name)
+ if (flavor_ptr->k_ptr->flavor_name.empty())
return;
- flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
+ flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
if (!flavor_ptr->flavor)
flavor_ptr->basenm = _("%のキノコ", "& Mushroom~ of %");
else if (flavor_ptr->aware)
else if (!floor_ptr->dun_level && creature_ptr->town_num)
return town_info[creature_ptr->town_num].name;
else
- return d_name + d_info[creature_ptr->dungeon_idx].name;
+ return d_info[creature_ptr->dungeon_idx].name.c_str();
}
/* The terrain feature arrays */
feature_type *f_info;
-char *f_name;
-char *f_tag;
/* Nothing */
FEAT_IDX feat_none;
#include "grid/feature-flag-types.h"
#include "system/angband.h"
+#include <string>
/* Number of feats we change to (Excluding default). Used in f_info.txt. */
#define MAX_FEAT_STATES 8
* @brief 地形状態変化指定構造体 / Feature state structure
*/
typedef struct feature_state {
- FF_FLAGS_IDX action; /*!< 変化条件をFF_*のIDで指定 / Action (FF_*) */
- STR_OFFSET result_tag; /*!< 変化先ID / Result (f_info ID) */
- FEAT_IDX result; /*!< 変化先ID / Result (f_info ID) */
+ FF_FLAGS_IDX action{}; /*!< 変化条件をFF_*のIDで指定 / Action (FF_*) */
+ std::string result_tag{}; /*!< 変化先ID / Result (f_info ID) */
+ FEAT_IDX result{}; /*!< 変化先ID / Result (f_info ID) */
} feature_state;
typedef struct feat_prob {
- FEAT_IDX feat; /* Feature tile */
- PERCENTAGE percent; /* Chance of type */
+ FEAT_IDX feat{}; /* Feature tile */
+ PERCENTAGE percent{}; /* Chance of type */
} feat_prob;
/*!
* @brief 地形情報の構造体 / Information about terrain "features"
*/
typedef struct feature_type {
- STR_OFFSET name; /*!< 地形名参照のためのネームバッファオフセット値 / Name (offset) */
- STR_OFFSET text; /*!< 地形説明参照のためのネームバッファオフセット値 / Text (offset) */
- STR_OFFSET tag; /*!< 地形特性タグ参照のためのネームバッファオフセット値 / Tag (offset) */
- STR_OFFSET mimic_tag;
- STR_OFFSET destroyed_tag;
- FEAT_IDX mimic; /*!< 未確定時の外形地形ID / Feature to mimic */
- FEAT_IDX destroyed; /*!< *破壊*に巻き込まれた時の地形移行先(未実装?) / Default destroyed state */
- BIT_FLAGS flags[FF_FLAG_SIZE]; /*!< 地形の基本特性ビット配列 / Flags */
- FEAT_PRIORITY priority; /*!< 縮小表示で省略する際の表示優先度 / Map priority */
- feature_state state[MAX_FEAT_STATES]; /*!< feature_state テーブル */
- FEAT_SUBTYPE subtype; /*!< 副特性値 */
- FEAT_POWER power; /*!< 地形強度 */
- TERM_COLOR d_attr[F_LIT_MAX]; /*!< デフォルトの地形シンボルカラー / Default feature attribute */
- SYMBOL_CODE d_char[F_LIT_MAX]; /*!< デフォルトの地形シンボルアルファベット / Default feature character */
- TERM_COLOR x_attr[F_LIT_MAX]; /*!< 設定変更後の地形シンボルカラー / Desired feature attribute */
- SYMBOL_CODE x_char[F_LIT_MAX]; /*!< 設定変更後の地形シンボルアルファベット / Desired feature character */
+ std::string name; /*!< 地形名参照のためのネームバッファオフセット値 / Name (offset) */
+ std::string text; /*!< 地形説明参照のためのネームバッファオフセット値 / Text (offset) */
+ std::string tag; /*!< 地形特性タグ参照のためのネームバッファオフセット値 / Tag (offset) */
+ std::string mimic_tag;
+ std::string destroyed_tag;
+ FEAT_IDX mimic{}; /*!< 未確定時の外形地形ID / Feature to mimic */
+ FEAT_IDX destroyed{}; /*!< *破壊*に巻き込まれた時の地形移行先(未実装?) / Default destroyed state */
+ BIT_FLAGS flags[FF_FLAG_SIZE]{}; /*!< 地形の基本特性ビット配列 / Flags */
+ FEAT_PRIORITY priority{}; /*!< 縮小表示で省略する際の表示優先度 / Map priority */
+ feature_state state[MAX_FEAT_STATES]{}; /*!< feature_state テーブル */
+ FEAT_SUBTYPE subtype{}; /*!< 副特性値 */
+ FEAT_POWER power{}; /*!< 地形強度 */
+ TERM_COLOR d_attr[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルカラー / Default feature attribute */
+ SYMBOL_CODE d_char[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルアルファベット / Default feature character */
+ TERM_COLOR x_attr[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルカラー / Desired feature attribute */
+ SYMBOL_CODE x_char[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルアルファベット / Desired feature character */
} feature_type;
extern FEAT_IDX max_f_idx;
extern feature_type *f_info;
-extern char *f_name;
-extern char *f_tag;
/*** Terrain feature variables ***/
extern FEAT_IDX feat_none;
#include "util/bit-flags-calculator.h"
#include "util/string-processor.h"
#include "view/display-messages.h"
+#include <string>
/*!
* @brief テキストトークンを走査してフラグを一つ得る(アーティファクト用) /
add_flag(a_ptr->flags, TR_IGNORE_FIRE);
add_flag(a_ptr->flags, TR_IGNORE_COLD);
#ifdef JP
- if (!add_name(&a_ptr->name, head, s))
- return 7;
+ a_ptr->name = std::string(s);
#endif
} else if (!a_ptr) {
return 3;
#else
else if (buf[0] == 'E') {
s = buf + 2;
- if (!add_name(&a_ptr->name, head, s))
- return 7;
+ a_ptr->name = std::string(s);
}
#endif
else if (buf[0] == 'D') {
return 0;
s = buf + 3;
#endif
- if (!add_text(&a_ptr->text, head, s, TRUE))
- return 7;
+ a_ptr->text.append(s);
} else if (buf[0] == 'I') {
int tval, sval, pval;
if (3 != sscanf(buf + 2, "%d:%d:%d", &tval, &sval, &pval))
#include "main/angband-headers.h"
#include "util/string-processor.h"
#include "view/display-messages.h"
+#include <string>
/*!
* @brief テキストトークンを走査してフラグを一つ得る(ダンジョン用) /
error_idx = i;
d_ptr = &d_info[i];
#ifdef JP
- if (!add_name(&d_ptr->name, head, s))
- return 7;
+ d_ptr->name = std::string(s);
#endif
}
#ifdef JP
s = buf + 2;
/* Store the name */
- if (!add_name(&d_ptr->name, head, s))
- return 7;
+ d_ptr->name = std::string(s);
}
#endif
else if (buf[0] == 'D') {
return 0;
s = buf + 3;
#endif
- if (!add_text(&d_ptr->text, head, s, TRUE))
- return 7;
+ d_ptr->text.append(s);
} else if (buf[0] == 'W') {
int min_lev, max_lev;
int min_plev, mode;
#include "util/bit-flags-calculator.h"
#include "util/string-processor.h"
#include "view/display-messages.h"
+#include <string>
/*!
* @brief テキストトークンを走査してフラグを一つ得る(エゴ用) /
error_idx = i;
e_ptr = &e_info[i];
#ifdef JP
- if (!add_name(&e_ptr->name, head, s))
- return 7;
+ e_ptr->name = std::string(s);
#endif
} else if (!e_ptr) {
return 3;
#else
else if (buf[0] == 'E') {
s = buf + 2;
- if (!add_name(&e_ptr->name, head, s))
- return 7;
+ e_ptr->name = std::string(s);
}
#endif
else if (buf[0] == 'X') {
#include "util/bit-flags-calculator.h"
#include "util/string-processor.h"
#include "view/display-messages.h"
+#include <string>
+#include <string_view>
/*! 地形タグ情報から地形IDを得られなかった場合にTRUEを返す */
static bool feat_tag_is_not_found = FALSE;
error_idx = i;
f_ptr = &f_info[i];
if (s) {
- if (!add_tag(&f_ptr->tag, head, s))
- return 7;
+ f_ptr->tag = std::string(s);
}
f_ptr->mimic = (FEAT_IDX)i;
}
#ifdef JP
else if (buf[0] == 'J') {
- if (!add_name(&f_ptr->name, head, buf + 2))
- return 7;
+ f_ptr->name = std::string(buf + 2);
} else if (buf[0] == 'E') {
}
#else
else if (buf[0] == 'J') {
} else if (buf[0] == 'E') {
- s = buf + 2;
- if (!add_name(&f_ptr->name, head, s))
- return 7;
+ f_ptr->name = std::string(buf + 2);
}
#endif
else if (buf[0] == 'M') {
- STR_OFFSET offset;
- if (!add_tag(&offset, head, buf + 2))
- return PARSE_ERROR_OUT_OF_MEMORY;
-
- f_ptr->mimic_tag = offset;
+ f_ptr->mimic_tag = std::string(buf + 2);
} else if (buf[0] == 'G') {
int j;
byte s_attr;
return (PARSE_ERROR_GENERIC);
f_ptr->priority = (FEAT_PRIORITY)priority;
} else if (buf[0] == 'K') {
- STR_OFFSET offset;
for (i = 0; i < MAX_FEAT_STATES; i++)
if (f_ptr->state[i].action == FF_FLAG_MAX)
break;
*t++ = '\0';
if (streq(s, "DESTROYED")) {
- if (!add_tag(&offset, head, t))
- return PARSE_ERROR_OUT_OF_MEMORY;
-
- f_ptr->destroyed_tag = offset;
+ f_ptr->destroyed_tag = std::string(t);
} else {
f_ptr->state[i].action = 0;
if (0 != grab_one_feat_action(f_ptr, s, i))
return PARSE_ERROR_INVALID_FLAG;
- if (!add_tag(&offset, head, t))
- return PARSE_ERROR_OUT_OF_MEMORY;
- f_ptr->state[i].result_tag = offset;
+ f_ptr->state[i].result_tag = std::string(t);
}
} else {
return 6;
s16b f_tag_to_index(concptr str)
{
for (u16b i = 0; i < f_head.info_num; i++) {
- if (streq(f_tag + f_info[i].tag, str)) {
+ if (streq(f_info[i].tag.c_str(), str)) {
return (s16b)i;
}
}
* @param feat タグ文字列のオフセット
* @return 地形ID。該当がないなら-1
*/
-static FEAT_IDX search_real_feat(STR_OFFSET feat)
+static FEAT_IDX search_real_feat(std::string feat)
{
- if (feat <= 0) {
+ if (feat.empty()) {
return -1;
}
for (FEAT_IDX i = 0; i < f_head.info_num; i++) {
- if (feat == f_info[i].tag) {
+ if (feat.compare(f_info[i].tag) == 0) {
return i;
}
}
- msg_format(_("未定義のタグ '%s'。", "%s is undefined."), f_tag + feat);
+ msg_format(_("未定義のタグ '%s'。", "%s is undefined."), feat.c_str());
return -1;
}
error_idx = -1;
error_line = 0;
- head->name_size = 0;
- head->text_size = 0;
- head->tag_size = 0;
-
errr err;
while (angband_fgets(fp, buf, 1024) == 0) {
error_line++;
return (err);
}
- if (head->name_size)
- head->name_size++;
- if (head->text_size)
- head->text_size++;
-
return 0;
}
int error_line; /*!< データ読み込み/初期化時に汎用的にエラー行数を保存するグローバル変数 */
/*!
- * @brief データの可変文字列情報をテキストとして保管する /
- * Add a text to the text-storage and store offset to it.
- * @param offset 文字列保管ポインタからのオフセット
- * @param head テキスト保管ヘッダ情報の構造体参照ポインタ
- * @param buf 保管文字列
- * @param normal_text テキストの正規化を行う
- * @return
- * 無事保管ができたらTRUEを返す。
- * Returns FALSE when there isn't enough space available to store
- * the text.
- */
-bool add_text(u32b *offset, angband_header *head, concptr buf, bool normal_text)
-{
- if (head->text_size + strlen(buf) + 8 > FAKE_TEXT_SIZE)
- return FALSE;
-
- if (*offset == 0) {
- *offset = ++head->text_size;
- } else if (normal_text) {
- /*
- * If neither the end of the last line nor
- * the beginning of current line is not a space,
- * fill up a space as a correct separator of two words.
- */
- if (head->text_size > 0 &&
-#ifdef JP
- (*(head->text_ptr + head->text_size - 1) != ' ') && ((head->text_size == 1) || !iskanji(*(head->text_ptr + head->text_size - 2))) && (buf[0] != ' ')
- && !iskanji(buf[0])
-#else
- (*(head->text_ptr + head->text_size - 1) != ' ') && (buf[0] != ' ')
-#endif
- ) {
- *(head->text_ptr + head->text_size) = ' ';
- head->text_size++;
- }
- }
-
- strcpy(head->text_ptr + head->text_size, buf);
- head->text_size += strlen(buf);
- return TRUE;
-}
-
-/*!
- * @brief データの可変文字列情報を名前として保管する /
- * Add a name to the name-storage and return an offset to it.
- * @param offset 文字列保管ポインタからのオフセット
- * @param head テキスト保管ヘッダ情報の構造体参照ポインタ
- * @param buf 保管文字列
- * @return
- * 無事保管ができたらTRUEを返す。
- * Returns FALSE when there isn't enough space available to store
- * the text.
- */
-bool add_name(u32b *offset, angband_header *head, concptr buf)
-{
- if (head->name_size + strlen(buf) + 8 > FAKE_NAME_SIZE)
- return FALSE;
-
- if (*offset == 0) {
- *offset = ++head->name_size;
- }
-
- strcpy(head->name_ptr + head->name_size, buf);
- head->name_size += strlen(buf);
- return TRUE;
-}
-
-/*!
- * @brief データの可変文字列情報をタグとして保管する /
- * Add a tag to the tag-storage and return an offset to it.
- * @param offset 文字列保管ポインタからのオフセット
- * @param head テキスト保管ヘッダ情報の構造体参照ポインタ
- * @param buf 保管文字列
- * @return
- * 無事保管ができたらTRUEを返す。
- * Returns FALSE when there isn't enough space available to store
- * the text.
- */
-bool add_tag(STR_OFFSET *offset, angband_header *head, concptr buf)
-{
- u32b i;
- for (i = 1; i < head->tag_size; i += strlen(&head->tag_ptr[i]) + 1) {
- if (streq(&head->tag_ptr[i], buf))
- break;
- }
-
- if (i >= head->tag_size) {
- if (head->tag_size + strlen(buf) + 8 > FAKE_TAG_SIZE)
- return FALSE;
-
- strcpy(head->tag_ptr + head->tag_size, buf);
- i = head->tag_size;
- head->tag_size += strlen(buf) + 1;
- }
-
- *offset = (s16b)i;
- return TRUE;
-}
-
-/*!
* @brief テキストトークンを走査してフラグを一つ得る(汎用) /
* Grab one flag from a textual string
* @param flags ビットフラグを追加する先の参照ポインタ
/*
* Size of memory reserved for initialization of some arrays
*/
-#define FAKE_NAME_SIZE 100 * 1024L /*!< ゲーム情報の種別毎に用意される名前用バッファの容量 */
-#define FAKE_TEXT_SIZE 150 * 1024L /*!< ゲーム情報の種別毎に用意されるテキスト用バッファの容量 */
-#define FAKE_TAG_SIZE 10 * 1024L /*!< ゲーム情報の種別毎に用意されるタグ用バッファの容量 */
-
extern int error_idx;
extern int error_line;
typedef struct angband_header angband_header;
-bool add_text(u32b *offset, angband_header *head, concptr buf, bool normal_text);
-bool add_name(u32b *offset, angband_header *head, concptr buf);
-bool add_tag(STR_OFFSET *offset, angband_header *head, concptr buf);
errr grab_one_flag(u32b *flags, concptr names[], concptr what);
byte grab_one_activation_flag(concptr what);
#include "util/bit-flags-calculator.h"
#include "util/string-processor.h"
#include "view/display-messages.h"
+#include <string>
/*!
* @brief テキストトークンを走査してフラグを一つ得る(ベースアイテム用) /
flavor = angband_strchr(s, ':');
if (flavor) {
*flavor++ = '\0';
- if (!add_name(&k_ptr->flavor_name, head, flavor))
- return 7;
+ k_ptr->flavor_name = std::string(flavor);
}
- if (!add_name(&k_ptr->name, head, s))
- return 7;
+ k_ptr->name = std::string(s);
#endif
} else if (!k_ptr) {
return 3;
flavor = angband_strchr(s, ':');
if (flavor) {
*flavor++ = '\0';
- if (!add_name(&k_ptr->flavor_name, head, flavor))
- return 7;
+ k_ptr->flavor_name = std::string(flavor);
}
- if (!add_name(&k_ptr->name, head, s))
- return 7;
+ k_ptr->name = std::string(s);
}
#endif
else if (buf[0] == 'D') {
return 0;
s = buf + 3;
#endif
- if (!add_text(&k_ptr->text, head, s, TRUE))
- return 7;
+ k_ptr->text.append(s);
} else if (buf[0] == 'G') {
char sym;
byte tmp;
error_idx = i;
r_ptr = &r_info[i];
#ifdef JP
- if (!add_name(&r_ptr->name, head, s))
- return PARSE_ERROR_OUT_OF_MEMORY;
+ r_ptr->name = std::string(s);
#endif
} else if (!r_ptr) {
return PARSE_ERROR_MISSING_RECORD_HEADER;
/* 英語名を読むルーチンを追加 */
/* 'E' から始まる行は英語名 */
else if (buf[0] == 'E') {
- s = buf + 2;
- if (!add_name(&r_ptr->E_name, head, s))
- return PARSE_ERROR_OUT_OF_MEMORY;
+ r_ptr->E_name = std::string(buf + 2);
}
#else
else if (buf[0] == 'E') {
- s = buf + 2;
- if (!add_name(&r_ptr->name, head, s))
- return PARSE_ERROR_OUT_OF_MEMORY;
+ r_ptr->name = std::string(buf + 2);
}
#endif
else if (buf[0] == 'D') {
return PARSE_ERROR_NONE;
s = buf + 3;
#endif
- if (!add_text(&r_ptr->text, head, s, TRUE))
- return PARSE_ERROR_OUT_OF_MEMORY;
+ r_ptr->text.append(s);
} else if (buf[0] == 'G') {
if ((buf[1] != ':') || !buf[2] || (buf[3] != ':') || !buf[4])
return PARSE_ERROR_GENERIC;
#include "main/angband-headers.h"
#include "room/rooms-vault.h"
#include "util/string-processor.h"
+#include <string>
/*!
* @brief Vault情報(v_info)のパース関数 /
error_idx = i;
v_ptr = &v_info[i];
- if (!add_name(&v_ptr->name, head, s))
- return 7;
+ v_ptr->name = std::string(s);
} else if (!v_ptr)
return 3;
else if (buf[0] == 'D') {
- s = buf + 2;
- if (!add_text(&v_ptr->text, head, s, FALSE))
- return 7;
+ v_ptr->text.append(buf + 2);
} else if (buf[0] == 'X') {
EFFECT_ID typ, rat, hgt, wid;
if (4 != sscanf(buf + 2, "%d:%d:%d:%d", &typ, &rat, &hgt, &wid))
} else if (max_dlv[y] == d_info[y].maxdepth)
seiha = TRUE;
- fprintf(fff, _(" %c%-12s: %3d 階\n", " %c%-16s: level %3d\n"), seiha ? '!' : ' ', d_name + d_info[y].name, (int)max_dlv[y]);
+ fprintf(fff, _(" %c%-12s: %3d 階\n", " %c%-16s: level %3d\n"), seiha ? '!' : ' ', d_info[y].name.c_str(), (int)max_dlv[y]);
}
}
} else {
#ifdef JP
fprintf(
- fff, "\n 闘技場: %d回戦で%sの前に敗北\n", -creature_ptr->arena_number, r_name + r_info[arena_info[-1 - creature_ptr->arena_number].r_idx].name);
+ fff, "\n 闘技場: %d回戦で%sの前に敗北\n", -creature_ptr->arena_number, r_info[arena_info[-1 - creature_ptr->arena_number].r_idx].name.c_str());
#else
- fprintf(fff, "\n Arena: Defeated by %s in the %d%s fight\n", r_name + r_info[arena_info[-1 - creature_ptr->arena_number].r_idx].name,
+ fprintf(fff, "\n Arena: Defeated by %s in the %d%s fight\n", r_info[arena_info[-1 - creature_ptr->arena_number].r_idx].name.c_str(),
-creature_ptr->arena_number, get_ordinal_number_suffix(-creature_ptr->arena_number));
#endif
}
for (MONRACE_IDX k = 1; k < max_r_idx; k++) {
/* Ignore unused index */
monster_race *r_ptr = &r_info[k];
- if (!r_ptr->name)
+ if (r_ptr->name.empty())
continue;
if (r_ptr->flags1 & RF1_UNIQUE) {
for (MONRACE_IDX k = uniq_total - 1; k >= 0 && k >= uniq_total - 10; k--) {
monster_race *r_ptr = &r_info[who[k]];
- fprintf(fff, _(" %-40s (レベル%3d)\n", " %-40s (level %3d)\n"), (r_name + r_ptr->name), (int)r_ptr->level);
+ fprintf(fff, _(" %-40s (レベル%3d)\n", " %-40s (level %3d)\n"), r_ptr->name.c_str(), (int)r_ptr->level);
}
C_KILL(who, max_r_idx, s16b);
KIND_OBJECT_IDX k_idx = lookup_kind(tval, i);
if (!k_idx)
continue;
- sprintf(s[eat_num], "%23s (%2d)", (k_name + k_info[k_idx].name), magic_num);
+ sprintf(s[eat_num], "%23s (%2d)", k_info[k_idx].name.c_str(), magic_num);
eat_num++;
}
else
{
#ifdef JP
- sprintf(note_level_buf, "%d階(%s):", (int)floor_ptr->dun_level, d_name + d_info[creature_ptr->dungeon_idx].name);
+ sprintf(note_level_buf, "%d階(%s):", (int)floor_ptr->dun_level, d_info[creature_ptr->dungeon_idx].name.c_str());
#else
- sprintf(note_level_buf, "%s L%d:", d_name + d_info[creature_ptr->dungeon_idx].name, (int)floor_ptr->dun_level);
+ sprintf(note_level_buf, "%s L%d:", d_info[creature_ptr->dungeon_idx].name.c_str(), (int)floor_ptr->dun_level);
#endif
*note_level = note_level_buf;
}
case DIARY_RAND_QUEST_C:
{
GAME_TEXT name[MAX_NLEN];
- strcpy(name, r_name + r_info[quest[num].r_idx].name);
+ strcpy(name, r_info[quest[num].r_idx].name.c_str());
fprintf(fff, _(" %2d:%02d %20s ランダムクエスト(%s)を達成した。\n",
" %2d:%02d %20s completed random quest '%s'\n"), hour, min, note_level, name);
break;
case DIARY_RAND_QUEST_F:
{
GAME_TEXT name[MAX_NLEN];
- strcpy(name, r_name + r_info[quest[num].r_idx].name);
+ strcpy(name, r_info[quest[num].r_idx].name.c_str());
fprintf(fff, _(" %2d:%02d %20s ランダムクエスト(%s)から逃げ出した。\n",
" %2d:%02d %20s ran away from quest '%s'.\n"), hour, min, note_level, name);
break;
{
fprintf(fff, _(" %2d:%02d %20s %sの最深階%d階に到達した。\n",
" %2d:%02d %20s reached level %d of %s for the first time.\n"), hour, min, note_level,
- _(d_name + d_info[creature_ptr->dungeon_idx].name, num),
- _(num, d_name + d_info[creature_ptr->dungeon_idx].name));
+ _(d_info[creature_ptr->dungeon_idx].name.c_str(), num),
+ _(num, d_info[creature_ptr->dungeon_idx].name.c_str()));
break;
}
case DIARY_TRUMP:
{
fprintf(fff, _(" %2d:%02d %20s %s%sの最深階を%d階にセットした。\n",
" %2d:%02d %20s reset recall level of %s to %d %s.\n"), hour, min, note_level, note,
- _(d_name + d_info[num].name, (int)max_dlv[num]),
- _((int)max_dlv[num], d_name + d_info[num].name));
+ _(d_info[num].name.c_str(), (int)max_dlv[num]),
+ _((int)max_dlv[num], d_info[num].name.c_str()));
break;
}
case DIARY_STAIR:
{
if (!num)
fprintf(fff, _(" %2d:%02d %20s 帰還を使って%sの%d階へ下りた。\n", " %2d:%02d %20s recalled to dungeon level %d of %s.\n"),
- hour, min, note_level, _(d_name + d_info[creature_ptr->dungeon_idx].name, (int)max_dlv[creature_ptr->dungeon_idx]),
- _((int)max_dlv[creature_ptr->dungeon_idx], d_name + d_info[creature_ptr->dungeon_idx].name));
+ hour, min, note_level, _(d_info[creature_ptr->dungeon_idx].name.c_str(), (int)max_dlv[creature_ptr->dungeon_idx]),
+ _((int)max_dlv[creature_ptr->dungeon_idx], d_info[creature_ptr->dungeon_idx].name.c_str()));
else
fprintf(fff, _(" %2d:%02d %20s 帰還を使って地上へと戻った。\n", " %2d:%02d %20s recalled from dungeon to surface.\n"), hour, min, note_level);
{
concptr to = !is_in_dungeon(creature_ptr)
? _("地上", "the surface")
- : format(_("%d階(%s)", "level %d of %s"), creature_ptr->current_floor_ptr->dun_level, d_name + d_info[creature_ptr->dungeon_idx].name);
+ : format(_("%d階(%s)", "level %d of %s"), creature_ptr->current_floor_ptr->dun_level, d_info[creature_ptr->dungeon_idx].name.c_str());
fprintf(fff, _(" %2d:%02d %20s %sへとウィザード・テレポートで移動した。\n",
" %2d:%02d %20s wizard-teleported to %s.\n"), hour, min, note_level, to);
break;
{
concptr to = !is_in_dungeon(creature_ptr)
? _("地上", "the surface")
- : format(_("%d階(%s)", "level %d of %s"), creature_ptr->current_floor_ptr->dun_level, d_name + d_info[creature_ptr->dungeon_idx].name);
+ : format(_("%d階(%s)", "level %d of %s"), creature_ptr->current_floor_ptr->dun_level, d_info[creature_ptr->dungeon_idx].name.c_str());
fprintf(fff, _(" %2d:%02d %20s %sへとパターンの力で移動した。\n",
" %2d:%02d %20s used Pattern to teleport to %s.\n"), hour, min, note_level, to);
break;
FEAT_IDX feat_cnt = 0;
for (FEAT_IDX i = 0; i < max_f_idx; i++) {
feature_type *f_ptr = &f_info[i];
- if (!f_ptr->name)
+ if (f_ptr->name.empty())
continue;
if (f_ptr->mimic != i)
continue;
feature_type *f_ptr = &f_info[f_idx];
int row_i = row + i;
attr = ((i + feat_top == feat_cur) ? TERM_L_BLUE : TERM_WHITE);
- c_prt(attr, f_name + f_ptr->name, row_i, col);
+ c_prt(attr, f_ptr->name.c_str(), row_i, col);
if (per_page == 1) {
- c_prt(attr, format("(%s)", lighting_level_str[lighting_level]), row_i, col + 1 + strlen(f_name + f_ptr->name));
+ c_prt(attr, format("(%s)", lighting_level_str[lighting_level]), row_i, col + 1 + f_ptr->name.size());
c_prt(attr, format("%02x/%02x", f_ptr->x_attr[lighting_level], f_ptr->x_char[lighting_level]), row_i,
f_idx_col - ((current_world_ptr->wizard || visual_only) ? 6 : 2));
}
} else if (max_dlv[i] == d_info[i].maxdepth)
seiha = TRUE;
- fprintf(fff, _("%c%-12s : %3d 階\n", "%c%-16s : level %3d\n"), seiha ? '!' : ' ', d_name + d_info[i].name, (int)max_dlv[i]);
+ fprintf(fff, _("%c%-12s : %3d 階\n", "%c%-16s : level %3d\n"), seiha ? '!' : ' ', d_info[i].name.c_str(), (int)max_dlv[i]);
}
angband_fclose(fff);
for (ARTIFACT_IDX k = 0; k < max_a_idx; k++) {
artifact_type *a_ptr = &a_info[k];
okay[k] = FALSE;
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
continue;
if (!a_ptr->cur_num)
continue;
byte group_tval = object_group_tval[grp_cur];
for (KIND_OBJECT_IDX i = 0; i < max_k_idx; i++) {
object_kind *k_ptr = &k_info[i];
- if (!k_ptr->name)
+ if (k_ptr->name.empty())
continue;
if (!(mode & 0x02)) {
if (!k_ptr->flavor || (!visual_only && k_ptr->aware)) {
strip_name(o_name, k_idx);
} else {
- strcpy(o_name, k_name + flavor_k_ptr->flavor_name);
+ strcpy(o_name, flavor_k_ptr->flavor_name.c_str());
}
c_prt(attr, o_name, row + i, col);
IDX mon_cnt = 0;
for (IDX i = 0; i < max_r_idx; i++) {
monster_race *r_ptr = &r_info[i];
- if (!r_ptr->name)
+ if (r_ptr->name.empty())
continue;
if (((mode != MONSTER_LORE_DEBUG) && (mode != MONSTER_LORE_RESEARCH)) && !cheat_know && !r_ptr->r_sights)
continue;
int n = 0;
for (MONRACE_IDX i = 1; i < max_r_idx; i++) {
monster_race *r_ptr = &r_info[i];
- if (r_ptr->name)
+ if (!r_ptr->name.empty())
who[n++] = i;
}
if (any_bits(r_ptr->flags1, RF1_UNIQUE)) {
bool dead = (r_ptr->max_num == 0);
if (dead) {
- fprintf(fff, " %s\n", (r_name + r_ptr->name));
+ fprintf(fff, " %s\n", r_ptr->name.c_str());
total++;
}
#ifdef JP
concptr number_of_kills = angband_strchr("pt", r_ptr->d_char) ? "人" : "体";
- fprintf(fff, " %3d %sの %s\n", (int)this_monster, number_of_kills, r_name + r_ptr->name);
+ fprintf(fff, " %3d %sの %s\n", (int)this_monster, number_of_kills, r_ptr->name.c_str());
#else
if (this_monster < 2) {
- if (angband_strstr(r_name + r_ptr->name, "coins")) {
- fprintf(fff, " 1 pile of %s\n", (r_name + r_ptr->name));
+ if (angband_strstr(r_ptr->name.c_str(), "coins")) {
+ fprintf(fff, " 1 pile of %s\n", r_ptr->name.c_str());
} else {
- fprintf(fff, " 1 %s\n", (r_name + r_ptr->name));
+ fprintf(fff, " 1 %s\n", r_ptr->name.c_str());
}
} else {
char ToPlural[80];
- strcpy(ToPlural, (r_name + r_ptr->name));
+ strcpy(ToPlural, r_ptr->name.c_str());
plural_aux(ToPlural);
fprintf(fff, " %d %s\n", this_monster, ToPlural);
}
MONRACE_IDX r_idx = mon_idx[mon_top + i];
monster_race *r_ptr = &r_info[r_idx];
attr = ((i + mon_top == mon_cur) ? TERM_L_BLUE : TERM_WHITE);
- c_prt(attr, (r_name + r_ptr->name), row + i, col);
+ c_prt(attr, (r_ptr->name.c_str()), row + i, col);
if (per_page == 1)
c_prt(attr, format("%02x/%02x", r_ptr->x_attr, r_ptr->x_char), row + i, (current_world_ptr->wizard || visual_only) ? 56 : 61);
return;
fprintf(fff, _("今日のターゲット : %s\n", "Today's target : %s\n"),
- (creature_ptr->today_mon ? r_name + r_info[creature_ptr->today_mon].name : _("不明", "unknown")));
+ (creature_ptr->today_mon ? r_info[creature_ptr->today_mon].name.c_str() : _("不明", "unknown")));
fprintf(fff, "\n");
fprintf(fff, _("賞金首リスト\n", "List of wanted monsters\n"));
fprintf(fff, "----------------------------------------------\n");
bool listed = FALSE;
for (int i = 0; i < MAX_BOUNTY; i++) {
if (current_world_ptr->bounty_r_idx[i] <= 10000) {
- fprintf(fff, "%s\n", r_name + r_info[current_world_ptr->bounty_r_idx[i]].name);
+ fprintf(fff, "%s\n", r_info[current_world_ptr->bounty_r_idx[i]].name.c_str());
listed = TRUE;
}
}
case QUEST_TYPE_KILL_LEVEL:
case QUEST_TYPE_KILL_ANY_LEVEL:
r_ptr = &r_info[quest[i].r_idx];
- strcpy(name, r_name + r_ptr->name);
+ strcpy(name, r_ptr->name.c_str());
if (quest[i].max_num > 1) {
#ifdef JP
sprintf(note, " - %d 体の%sを倒す。(あと %d 体)", (int)quest[i].max_num, name, (int)(quest[i].max_num - quest[i].cur_num));
continue;
r_ptr = &r_info[quest[i].r_idx];
- strcpy(name, r_name + r_ptr->name);
+ strcpy(name, r_ptr->name.c_str());
if (quest[i].max_num <= 1) {
sprintf(rand_tmp_str, _(" %s (%d 階) - %sを倒す。\n", " %s (Dungeon level: %d)\n Kill %s.\n"), quest[i].name, (int)quest[i].level, name);
continue;
if (q_ptr->complev == 0) {
sprintf(tmp_str, _(" %-35s (%3d階) - 不戦勝 - %s\n", " %-35s (Dungeon level: %3d) - Unearned - %s\n"),
- r_name + r_info[q_ptr->r_idx].name, (int)q_ptr->level, playtime_str);
+ r_info[q_ptr->r_idx].name.c_str(), (int)q_ptr->level, playtime_str);
fputs(tmp_str, fff);
return TRUE;
}
- sprintf(tmp_str, _(" %-35s (%3d階) - レベル%2d - %s\n", " %-35s (Dungeon level: %3d) - level %2d - %s\n"), r_name + r_info[q_ptr->r_idx].name,
+ sprintf(tmp_str, _(" %-35s (%3d階) - レベル%2d - %s\n", " %-35s (Dungeon level: %3d) - level %2d - %s\n"), r_info[q_ptr->r_idx].name.c_str(),
(int)q_ptr->level, q_ptr->complev, playtime_str);
fputs(tmp_str, fff);
return TRUE;
if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QUEST_STATUS_TAKEN)) {
total++;
- sprintf(tmp_str, _(" %s (%d階, %s)\n", " %s (%d, %s)\n"), quest[i].name, (int)quest[i].level, r_name + r_info[quest[i].r_idx].name);
+ sprintf(tmp_str, _(" %s (%d階, %s)\n", " %s (%d, %s)\n"), quest[i].name, (int)quest[i].level, r_info[quest[i].r_idx].name.c_str());
fputs(tmp_str, fff);
}
}
*/
static bool sweep_uniques(monster_race *r_ptr, bool is_alive)
{
- if (!r_ptr->name)
+ if (r_ptr->name.empty())
return FALSE;
if (!(r_ptr->flags1 & RF1_UNIQUE))
for (int k = 0; k < unique_list_ptr->n; k++) {
monster_race *r_ptr = &r_info[unique_list_ptr->who[k]];
- fprintf(fff, _(" %s (レベル%d)\n", " %s (level %d)\n"), r_name + r_ptr->name, (int)r_ptr->level);
+ fprintf(fff, _(" %s (レベル%d)\n", " %s (level %d)\n"), r_ptr->name.c_str(), (int)r_ptr->level);
}
}
if (object_is_fixed_artifact(o_ptr)) {
artifact_type *a_ptr;
a_ptr = &a_info[o_ptr->name1];
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
o_ptr->name1 = 0;
}
if (object_is_ego(o_ptr)) {
ego_item_type *e_ptr;
e_ptr = &e_info[o_ptr->name2];
- if (!e_ptr->name)
+ if (e_ptr->name.empty())
o_ptr->name2 = 0;
}
}
set_flags1(lore_ptr);
set_race_flags(lore_ptr);
display_kill_numbers(lore_ptr);
- concptr tmp = r_text + lore_ptr->r_ptr->text;
+ concptr tmp = lore_ptr->r_ptr->text.c_str();
if (tmp[0]) {
hooked_roff(tmp);
hooked_roff("\n");
typedef errr (*parse_info_txt_func)(char *buf, angband_header *head);
struct angband_header {
- byte v_major; //!< Major version
- byte v_minor; //!< Minor version
- byte v_patch; //!< Patch version
byte checksum; //!< Checksum of "info" records
-
u16b info_num; //!< このinfoのデータ数
- int info_len; //!< このinfoの総サイズ
- u16b head_size; //!< このinfoのヘッダサイズ
-
- STR_OFFSET info_size; //!< info配列サイズ
- STR_OFFSET name_size; //!< 名前文字列群サイズ(総文字長)
- STR_OFFSET text_size; //!< フレーバー文字列群サイズ(総文字長)
- STR_OFFSET tag_size; //!< タグ文字列群サイズ(総文字長)
-
- void *info_ptr; //!< info配列へのポインタ
- char *name_ptr; //!< 名前文字列群へのポインタ
- char *text_ptr; //!< フレーバー文字列群へのポインタ
- char *tag_ptr; //!< タグ文字列群へのポインタ
-
- parse_info_txt_func parse_info_txt; //!< Pointer to parser callback function
-
- void (*retouch)(angband_header *head); //!< 設定再読み込み用?
-
- byte v_extra; ///< Extra version for Alpha, Beta
- byte v_savefile; ///< Savefile version
};
extern angband_header f_head;
quit(_("その他の変数を初期化できません", "Cannot initialize misc. values"));
init_note(_("[データの初期化中... (地形)]", "[Initializing arrays... (features)]"));
- if (init_f_info(player_ptr))
+ if (init_f_info())
quit(_("地形初期化不能", "Cannot initialize features"));
if (init_feat_variables())
quit(_("地形初期化不能", "Cannot initialize features"));
init_note(_("[データの初期化中... (アイテム)]", "[Initializing arrays... (objects)]"));
- if (init_k_info(player_ptr))
+ if (init_k_info())
quit(_("アイテム初期化不能", "Cannot initialize objects"));
init_note(_("[データの初期化中... (伝説のアイテム)]", "[Initializing arrays... (artifacts)]"));
- if (init_a_info(player_ptr))
+ if (init_a_info())
quit(_("伝説のアイテム初期化不能", "Cannot initialize artifacts"));
init_note(_("[データの初期化中... (名のあるアイテム)]", "[Initializing arrays... (ego-items)]"));
- if (init_e_info(player_ptr))
+ if (init_e_info())
quit(_("名のあるアイテム初期化不能", "Cannot initialize ego-items"));
init_note(_("[データの初期化中... (モンスター)]", "[Initializing arrays... (monsters)]"));
- if (init_r_info(player_ptr))
+ if (init_r_info())
quit(_("モンスター初期化不能", "Cannot initialize monsters"));
init_note(_("[データの初期化中... (ダンジョン)]", "[Initializing arrays... (dungeon)]"));
- if (init_d_info(player_ptr))
+ if (init_d_info())
quit(_("ダンジョン初期化不能", "Cannot initialize dungeon"));
for (int i = 1; i < current_world_ptr->max_d_idx; i++)
r_info[d_info[i].final_guardian].flags7 |= RF7_GUARDIAN;
init_note(_("[データの初期化中... (魔法)]", "[Initializing arrays... (magic)]"));
- if (init_m_info(player_ptr))
+ if (init_m_info())
quit(_("魔法初期化不能", "Cannot initialize magic"));
init_note(_("[データの初期化中... (熟練度)]", "[Initializing arrays... (skill)]"));
- if (init_s_info(player_ptr))
+ if (init_s_info())
quit(_("熟練度初期化不能", "Cannot initialize skill"));
init_note(_("[配列を初期化しています... (荒野)]", "[Initializing arrays... (wilderness)]"));
if (init_quests())
quit(_("クエストを初期化できません", "Cannot initialize quests"));
- if (init_v_info(player_ptr))
+ if (init_v_info())
quit(_("vault 初期化不能", "Cannot initialize vaults"));
init_note(_("[データの初期化中... (その他)]", "[Initializing arrays... (other)]"));
errr init_misc(player_type *player_ptr) { return parse_fixed_map(player_ptr, "misc.txt", 0, 0, 0, 0); }
/*!
- * @brief rawファイルからのデータの読み取り処理
- * Initialize the "*_info" array, by parsing a binary "image" file
- * @param fd ファイルディスクリプタ
- * @param head rawファイルのヘッダ
- * @return エラーコード
- */
-static errr init_info_raw(int fd, angband_header *head)
-{
- angband_header test;
- if (fd_read(fd, (char *)(&test), sizeof(angband_header))
- || (test.v_major != head->v_major) || (test.v_minor != head->v_minor) || (test.v_patch != head->v_patch)
- || (test.v_extra != head->v_extra) || (test.v_savefile != head->v_savefile)
- || (test.head_size != head->head_size) || (test.info_size != head->info_size)
- || (test.info_num != head->info_num) || (test.info_len != head->info_len))
- return -1;
-
- *head = test;
- C_MAKE(head->info_ptr, head->info_size, char);
- fd_read(fd, static_cast<char*>(head->info_ptr), head->info_size);
- if (head->name_size) {
- C_MAKE(head->name_ptr, head->name_size, char);
- fd_read(fd, head->name_ptr, head->name_size);
- }
-
- if (head->text_size) {
- C_MAKE(head->text_ptr, head->text_size, char);
- fd_read(fd, head->text_ptr, head->text_size);
- }
-
- if (head->tag_size) {
- C_MAKE(head->tag_ptr, head->tag_size, char);
- fd_read(fd, head->tag_ptr, head->tag_size);
- }
-
- return 0;
-}
-
-static void update_header(angband_header *head, void **info, char **name, char **text, char **tag)
-{
- if (info)
- *info = static_cast<char*>(head->info_ptr);
-
- if (name)
- *name = head->name_ptr;
-
- if (text)
- *text = head->text_ptr;
-
- if (tag)
- *tag = head->tag_ptr;
-}
-
-/*!
* @brief ヘッダ構造体の更新
* Initialize the header of an *_info.raw file.
* @param head rawファイルのヘッダ
* @param len データの長さ
* @return エラーコード
*/
-static void init_header(angband_header *head, IDX num, int len)
+static void init_header(angband_header *head, IDX num)
{
- head->v_major = FAKE_VER_MAJOR;
- head->v_minor = FAKE_VER_MINOR;
- head->v_patch = FAKE_VER_PATCH;
head->checksum = 0;
-
head->info_num = (IDX)num;
- head->info_len = len;
-
- head->head_size = sizeof(angband_header);
- head->info_size = head->info_num * head->info_len;
-
- head->v_extra = FAKE_VER_EXTRA;
- head->v_savefile = SAVEFILE_VERSION;
-}
-
-/*!
- * @brief テキストファイルとrawファイルの更新時刻を比較する
- * Find the default paths to all of our important sub-directories.
- * @param fd ファイルディスクリプタ
- * @param template_file ファイル名
- * @return テキストの方が新しいか、rawファイルがなく更新の必要がある場合-1、更新の必要がない場合0。
- */
-static errr check_modification_date(int fd, concptr template_file)
-{
- struct stat txt_stat, raw_stat;
- char buf[1024];
- path_build(buf, sizeof(buf), ANGBAND_DIR_EDIT, template_file);
- if (stat(buf, &txt_stat))
- return 0;
-
- if (fstat(fd, &raw_stat))
- return -1;
-
- if (txt_stat.st_mtime > raw_stat.st_mtime)
- return -1;
-
- return 0;
}
/*!
- * @brief ヘッダ構造体の更新
+ * @brief 各種設定データをlib/edit/のテキストから読み込み
* Initialize the "*_info" array
- * @param filename ファイル名(拡張子txt/raw)
+ * @param filename ファイル名(拡張子txt)
* @param head 処理に用いるヘッダ構造体
* @param info データ保管先の構造体ポインタ
- * @param name 名称用可変文字列の保管先
- * @param text テキスト用可変文字列の保管先
- * @param tag タグ用可変文字列の保管先
* @return エラーコード
* @note
* Note that we let each entry have a unique "name" and "text" string,
* even if the string happens to be empty (everyone has a unique '\0').
*/
-static errr init_info(player_type *player_ptr, concptr filename, angband_header *head, void **info, char **name, char **text, char **tag)
+template <typename InfoType>
+static errr init_info(concptr filename, angband_header& head, InfoType*& info, parse_info_txt_func parser, void(*retouch)(angband_header *head))
{
char buf[1024];
- path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, format(_("%s_j.raw", "%s.raw"), filename));
- int fd = fd_open(buf, O_RDONLY);
- errr err = 1;
- if (fd >= 0) {
- err = check_modification_date(fd, format("%s.txt", filename));
- if (!err)
- err = init_info_raw(fd, head);
-
- (void)fd_close(fd);
- }
-
- BIT_FLAGS file_permission = 0644;
- if (err == 0) {
- update_header(head, info, name, text, tag);
- return 0;
- }
-
- C_MAKE(head->info_ptr, head->info_size, char);
- if (name)
- C_MAKE(head->name_ptr, FAKE_NAME_SIZE, char);
-
- if (text)
- C_MAKE(head->text_ptr, FAKE_TEXT_SIZE, char);
-
- if (tag)
- C_MAKE(head->tag_ptr, FAKE_TAG_SIZE, char);
-
- if (info)
- *info = static_cast<char*>(head->info_ptr);
-
- if (name)
- *name = head->name_ptr;
-
- if (text)
- *text = head->text_ptr;
+ path_build(buf, sizeof(buf), ANGBAND_DIR_EDIT, format("%s.txt", filename));
- if (tag)
- *tag = head->tag_ptr;
+ FILE *fp = angband_fopen(buf, "r");
- path_build(buf, sizeof(buf), ANGBAND_DIR_EDIT, format("%s.txt", filename));
- FILE *fp;
- fp = angband_fopen(buf, "r");
if (!fp)
quit(format(_("'%s.txt'ファイルをオープンできません。", "Cannot open '%s.txt' file."), filename));
- err = init_info_txt(fp, buf, head, head->parse_info_txt);
+ C_MAKE(info, head.info_num, InfoType);
+
+ errr err = init_info_txt(fp, buf, &head, parser);
angband_fclose(fp);
+
if (err) {
concptr oops = (((err > 0) && (err < PARSE_ERROR_MAX)) ? err_str[err] : _("未知の", "unknown"));
#ifdef JP
quit(format(_("'%s.txt'ファイルにエラー", "Error in '%s.txt' file."), filename));
}
- if (head->retouch)
- (*head->retouch)(head);
-
- path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, format(_("%s_j.raw", "%s.raw"), filename));
- safe_setuid_grab(player_ptr);
- (void)fd_kill(buf);
- fd = fd_make(buf, file_permission);
- safe_setuid_drop();
- if (fd >= 0) {
- fd_write(fd, (concptr)(head), head->head_size);
- fd_write(fd, static_cast<concptr>(head->info_ptr), head->info_size);
- fd_write(fd, head->name_ptr, head->name_size);
- fd_write(fd, head->text_ptr, head->text_size);
- fd_write(fd, head->tag_ptr, head->tag_size);
- (void)fd_close(fd);
- }
-
- C_FREE(static_cast<char *>(head->info_ptr), head->info_size, char);
- head->info_ptr = nullptr;
- if (name)
- C_KILL(head->name_ptr, FAKE_NAME_SIZE, char);
-
- if (text)
- C_KILL(head->text_ptr, FAKE_TEXT_SIZE, char);
-
- if (tag)
- C_KILL(head->tag_ptr, FAKE_TAG_SIZE, char);
-
- path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, format(_("%s_j.raw", "%s.raw"), filename));
- fd = fd_open(buf, O_RDONLY);
- if (fd < 0)
- quit(format(_("'%s_j.raw'ファイルをロードできません。", "Cannot load '%s.raw' file."), filename));
-
- err = init_info_raw(fd, head);
- (void)fd_close(fd);
- if (err)
- quit(format(_("'%s_j.raw'ファイルを解析できません。", "Cannot parse '%s.raw' file."), filename));
+ if (retouch)
+ (*retouch)(&head);
- update_header(head, info, name, text, tag);
return 0;
}
* Initialize the "f_info" array
* @return エラーコード
*/
-errr init_f_info(player_type *player_ptr)
+errr init_f_info()
{
- init_header(&f_head, max_f_idx, sizeof(feature_type));
- f_head.parse_info_txt = parse_f_info;
- f_head.retouch = retouch_f_info;
- return init_info(player_ptr, "f_info", &f_head, reinterpret_cast<void**>(&f_info), &f_name, NULL, &f_tag);
+ init_header(&f_head, max_f_idx);
+ return init_info("f_info", f_head, f_info, parse_f_info, retouch_f_info);
}
/*!
* Initialize the "k_info" array
* @return エラーコード
*/
-errr init_k_info(player_type *player_ptr)
+errr init_k_info()
{
- init_header(&k_head, max_k_idx, sizeof(object_kind));
- k_head.parse_info_txt = parse_k_info;
- return init_info(player_ptr, "k_info", &k_head, reinterpret_cast<void**>(&k_info), &k_name, &k_text, NULL);
+ init_header(&k_head, max_k_idx);
+ return init_info("k_info", k_head, k_info, parse_k_info, NULL);
}
/*!
* Initialize the "a_info" array
* @return エラーコード
*/
-errr init_a_info(player_type *player_ptr)
+errr init_a_info()
{
- init_header(&a_head, max_a_idx, sizeof(artifact_type));
- a_head.parse_info_txt = parse_a_info;
- return init_info(player_ptr, "a_info", &a_head, reinterpret_cast<void**>(&a_info), &a_name, &a_text, NULL);
+ init_header(&a_head, max_a_idx);
+ return init_info("a_info", a_head, a_info, parse_a_info, NULL);
}
/*!
* Initialize the "e_info" array
* @return エラーコード
*/
-errr init_e_info(player_type *player_ptr)
+errr init_e_info()
{
- init_header(&e_head, max_e_idx, sizeof(ego_item_type));
- e_head.parse_info_txt = parse_e_info;
- return init_info(player_ptr, "e_info", &e_head, reinterpret_cast<void**>(&e_info), &e_name, &e_text, NULL);
+ init_header(&e_head, max_e_idx);
+ return init_info("e_info", e_head, e_info, parse_e_info, NULL);
}
/*!
* Initialize the "r_info" array
* @return エラーコード
*/
-errr init_r_info(player_type *player_ptr)
+errr init_r_info()
{
- init_header(&r_head, max_r_idx, sizeof(monster_race));
- r_head.parse_info_txt = parse_r_info;
- return init_info(player_ptr, "r_info", &r_head, reinterpret_cast<void**>(&r_info), &r_name, &r_text, NULL);
+ init_header(&r_head, max_r_idx);
+ return init_info("r_info", r_head, r_info, parse_r_info, NULL);
}
/*!
* Initialize the "d_info" array
* @return エラーコード
*/
-errr init_d_info(player_type *player_ptr)
+errr init_d_info()
{
- init_header(&d_head, current_world_ptr->max_d_idx, sizeof(dungeon_type));
- d_head.parse_info_txt = parse_d_info;
- return init_info(player_ptr, "d_info", &d_head, reinterpret_cast<void**>(&d_info), &d_name, &d_text, NULL);
+ init_header(&d_head, current_world_ptr->max_d_idx);
+ return init_info("d_info", d_head, d_info, parse_d_info, NULL);
}
/*!
* Note that we let each entry have a unique "name" and "text" string,
* even if the string happens to be empty (everyone has a unique '\0').
*/
-errr init_v_info(player_type *player_ptr)
+errr init_v_info()
{
- init_header(&v_head, max_v_idx, sizeof(vault_type));
- v_head.parse_info_txt = parse_v_info;
- return init_info(player_ptr, "v_info", &v_head, reinterpret_cast<void**>(&v_info), &v_name, &v_text, NULL);
+ init_header(&v_head, max_v_idx);
+ return init_info("v_info", v_head, v_info, parse_v_info, NULL);
}
/*!
* Initialize the "s_info" array
* @return エラーコード
*/
-errr init_s_info(player_type *player_ptr)
+errr init_s_info()
{
- init_header(&s_head, MAX_CLASS, sizeof(skill_table));
- s_head.parse_info_txt = parse_s_info;
- return init_info(player_ptr, "s_info", &s_head, reinterpret_cast<void**>(&s_info), NULL, NULL, NULL);
+ init_header(&s_head, MAX_CLASS);
+ return init_info("s_info", s_head, s_info, parse_s_info, NULL);
}
/*!
* Initialize the "m_info" array
* @return エラーコード
*/
-errr init_m_info(player_type *player_ptr)
+errr init_m_info()
{
- init_header(&m_head, MAX_CLASS, sizeof(player_magic));
- m_head.parse_info_txt = parse_m_info;
- return init_info(player_ptr, "m_info", &m_head, reinterpret_cast<void**>(&m_info), NULL, NULL, NULL);
+ init_header(&m_head, MAX_CLASS);
+ return init_info("m_info", m_head, m_info, parse_m_info, NULL);
}
-#pragma once
+#pragma once
#include "system/angband.h"
errr init_misc(player_type *player_ptr);
-errr init_f_info(player_type *player_ptr);
-errr init_k_info(player_type *player_ptr);
-errr init_a_info(player_type *player_ptr);
-errr init_e_info(player_type *player_ptr);
-errr init_r_info(player_type *player_ptr);
-errr init_d_info(player_type *player_ptr);
-errr init_v_info(player_type *player_ptr);
-errr init_s_info(player_type *player_ptr);
-errr init_m_info(player_type *player_ptr);
+errr init_f_info();
+errr init_k_info();
+errr init_a_info();
+errr init_e_info();
+errr init_r_info();
+errr init_d_info();
+errr init_v_info();
+errr init_s_info();
+errr init_m_info();
monster_race *r_ptr;
r_ptr = &r_info[arena_info[player_ptr->arena_number].r_idx];
- concptr name = (r_name + r_ptr->name);
+ concptr name = r_ptr->name.c_str();
msg_format(_("%s に挑戦するものはいないか?", "Do I hear any challenges against: %s"), name);
player_ptr->monster_race_idx = arena_info[player_ptr->arena_number].r_idx;
monster_race *r_ptr = &r_info[battle_mon[i]];
sprintf(buf, _("%d) %-58s %4ld.%02ld倍", "%d) %-58s %4ld.%02ld"), i + 1,
- _(format("%s%s", r_name + r_ptr->name, (r_ptr->flags1 & RF1_UNIQUE) ? "もどき" : " "),
- format("%s%s", (r_ptr->flags1 & RF1_UNIQUE) ? "Fake " : "", r_name + r_ptr->name)),
+ _(format("%s%s", r_ptr->name.c_str(), (r_ptr->flags1 & RF1_UNIQUE) ? "もどき" : " "),
+ format("%s%s", (r_ptr->flags1 & RF1_UNIQUE) ? "Fake " : "", r_ptr->name.c_str())),
(long int)mon_odds[i] / 100, (long int)mon_odds[i] % 100);
prt(buf, 5 + i, 1);
}
screen_load();
return TRUE;
-}
\ No newline at end of file
+}
for (INVENTORY_IDX i = 0; i < INVEN_PACK; i++) {
o_ptr = &player_ptr->inventory_list[i];
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE)
- && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[current_world_ptr->today_mon].name))) {
+ && (streq(r_info[o_ptr->pval].name.c_str(), r_info[current_world_ptr->today_mon].name.c_str()))) {
char buf[MAX_NLEN + 32];
describe_flavor(player_ptr, o_name, o_ptr, 0);
sprintf(buf, _("%s を換金しますか?", "Convert %s into money? "), o_name);
o_ptr = &player_ptr->inventory_list[i];
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)
- && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[current_world_ptr->today_mon].name))) {
+ && (streq(r_info[o_ptr->pval].name.c_str(), r_info[current_world_ptr->today_mon].name.c_str()))) {
char buf[MAX_NLEN + 32];
describe_flavor(player_ptr, o_name, o_ptr, 0);
sprintf(buf, _("%s を換金しますか?", "Convert %s into money? "), o_name);
clear_bldg(4, 18);
c_put_str(TERM_YELLOW, _("本日の賞金首", "Wanted monster that changes from day to day"), 5, 10);
- sprintf(buf, _("ターゲット: %s", "target: %s"), r_name + r_ptr->name);
+ sprintf(buf, _("ターゲット: %s", "target: %s"), r_ptr->name.c_str());
c_put_str(TERM_YELLOW, buf, 6, 10);
sprintf(buf, _("死体 ---- $%d", "corpse ---- $%d"), (int)r_ptr->level * 50 + 100);
prt(buf, 8, 10);
done_mark = "";
}
- c_prt(color, format("%s %s", r_name + r_ptr->name, done_mark), y + 7, 10);
+ c_prt(color, format("%s %s", r_ptr->name.c_str(), done_mark), y + 7, 10);
y = (y + 1) % 10;
if (!y && (i < MAX_BOUNTY - 1)) {
r_ptr = &r_info[current_world_ptr->today_mon];
if (cheat_hear) {
- msg_format("日替わり候補: %s ", r_ptr->name + r_name);
+ msg_format("日替わり候補: %s ", r_ptr->name.c_str());
}
if (r_ptr->flags1 & RF1_UNIQUE)
monster_race *r_ptr = &r_info[i];
/* Empty monster */
- if (!r_ptr->name)
+ if (r_ptr->name.empty())
continue;
/* XTRA HACK WHATSEARCH */
char temp2[MAX_MONSTER_NAME];
#ifdef JP
- strcpy(temp2, r_name + r_ptr->E_name);
+ strcpy(temp2, r_ptr->E_name.c_str());
#else
- strcpy(temp2, r_name + r_ptr->name);
+ strcpy(temp2, r_ptr->name.c_str());
#endif
for (int xx = 0; temp2[xx] && xx < 80; xx++) {
if (isupper(temp2[xx]))
}
#ifdef JP
- if (angband_strstr(temp2, temp) || angband_strstr(r_name + r_ptr->name, temp))
+ if (angband_strstr(temp2, temp) || angband_strstr(r_ptr->name.c_str(), temp))
#else
if (angband_strstr(temp2, temp))
#endif
}
q_ptr->cur_num = 0;
- concptr name = (r_name + r_ptr->name);
+ concptr name = r_ptr->name.c_str();
#ifdef JP
msg_format("クエスト: %sを %d体倒す", name, q_ptr->max_num);
#else
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
- msg_format(_("あなたは%sを制覇した!", "You have conquered %s!"), d_name + d_info[player_ptr->dungeon_idx].name);
+ msg_format(_("あなたは%sを制覇した!", "You have conquered %s!"), d_info[player_ptr->dungeon_idx].name.c_str());
}
static void decide_drop_quality(monster_death_type *md_ptr)
floor_type *floor_ptr = player_ptr->current_floor_ptr;
grid_type *g_ptr = &floor_ptr->grid_array[y][x];
monster_race *r_ptr = &r_info[r_idx];
- concptr name = (r_name + r_ptr->name);
+ concptr name = r_ptr->name.c_str();
- if (player_ptr->wild_mode || !in_bounds(floor_ptr, y, x) || (r_idx == 0) || (r_ptr->name == 0))
+ if (player_ptr->wild_mode || !in_bounds(floor_ptr, y, x) || (r_idx == 0) || r_ptr->name.empty())
return FALSE;
if (((mode & PM_IGNORE_TERRAIN) == 0) && (pattern_tile(floor_ptr, y, x) || !monster_can_enter(player_ptr, y, x, r_ptr, 0)))
/* The monster race arrays */
monster_race *r_info;
-/* The monster race names */
-char *r_name;
-
-char *r_text;
-
/* Maximum number of monsters in r_info.txt */
MONRACE_IDX max_r_idx;
#include "system/monster-race-definition.h"
extern monster_race *r_info;
-extern char *r_name;
-extern char *r_text;
-
extern MONRACE_IDX max_r_idx;
{
monster_race *r_ptr;
r_ptr = &r_info[m_ptr->ap_r_idx];
- concptr name = (mode & MD_TRUE_NAME) ? (r_name + real_r_ptr(m_ptr)->name) : (r_name + r_ptr->name);
+ concptr name = (mode & MD_TRUE_NAME) ? real_r_ptr(m_ptr)->name.c_str() : r_ptr->name.c_str();
GAME_TEXT silly_name[1024];
bool named = FALSE;
if (player_ptr->image && !(mode & MD_IGNORE_HALLU)) {
do {
hallu_race = &r_info[randint1(max_r_idx - 1)];
- } while (!hallu_race->name || (hallu_race->flags1 & RF1_UNIQUE));
+ } while (hallu_race->name.empty() || (hallu_race->flags1 & RF1_UNIQUE));
- strcpy(silly_name, (r_name + hallu_race->name));
+ strcpy(silly_name, (hallu_race->name.c_str()));
}
name = silly_name;
}
if ((mode & MD_IGNORE_HALLU) && !is_original_ap(m_ptr)) {
- strcat(desc, format("(%s)", r_name + r_info[m_ptr->r_idx].name));
+ strcat(desc, format("(%s)", r_info[m_ptr->r_idx].name.c_str()));
}
/* Handle the Possessive as a special afterthought */
do {
hallu_race = &r_info[randint1(max_r_idx - 1)];
- } while (!hallu_race->name || (hallu_race->flags1 & RF1_UNIQUE));
- msg_format(_("%sは%sに進化した。", "%^s evolved into %s."), m_name, r_name + hallu_race->name);
+ } while (hallu_race->name.empty() || (hallu_race->flags1 & RF1_UNIQUE));
+ msg_format(_("%sは%sに進化した。", "%^s evolved into %s."), m_name, hallu_race->name.c_str());
} else {
- msg_format(_("%sは%sに進化した。", "%^s evolved into %s."), m_name, r_name + r_ptr->name);
+ msg_format(_("%sは%sに進化した。", "%^s evolved into %s."), m_name, r_ptr->name.c_str());
}
}
if ((r_ptr->flags1 & RF1_UNIQUE) && record_destroy_uniq) {
char note_buf[160];
- sprintf(note_buf, "%s%s", r_name + r_ptr->name, m_ptr->mflag2.has(MFLAG2::CLONED) ? _("(クローン)", "(Clone)") : "");
+ sprintf(note_buf, "%s%s", r_ptr->name.c_str(), m_ptr->mflag2.has(MFLAG2::CLONED) ? _("(クローン)", "(Clone)") : "");
exe_write_diary(target_ptr, DIARY_UNIQUE, 0, note_buf);
}
if (!has_flag(mimic_f_ptr->flags, FF_HURT_ROCK)) {
msg_print(_("この地形は食べられない。", "You cannot eat this feature."));
} else if (has_flag(f_ptr->flags, FF_PERMANENT)) {
- msg_format(_("いてっ!この%sはあなたの歯より硬い!", "Ouch! This %s is harder than your teeth!"), f_name + mimic_f_ptr->name);
+ msg_format(_("いてっ!この%sはあなたの歯より硬い!", "Ouch! This %s is harder than your teeth!"), mimic_f_ptr->name.c_str());
} else if (g_ptr->m_idx) {
monster_type *m_ptr = &caster_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
msg_print(_("何かが邪魔しています!", "There's something in the way!"));
} else if (has_flag(f_ptr->flags, FF_MAY_HAVE_GOLD) || has_flag(f_ptr->flags, FF_HAS_GOLD)) {
(void)set_food(caster_ptr, caster_ptr->food + 5000);
} else {
- msg_format(_("この%sはとてもおいしい!", "This %s is very filling!"), f_name + mimic_f_ptr->name);
+ msg_format(_("この%sはとてもおいしい!", "This %s is very filling!"), mimic_f_ptr->name.c_str());
(void)set_food(caster_ptr, caster_ptr->food + 10000);
}
r_ptr = &r_info[m_ptr->r_idx];
if (r_ptr->flags1 & RF1_UNIQUE)
- msg_format(_("%s. ", "%s. "), r_name + r_ptr->name);
+ msg_format(_("%s. ", "%s. "), r_ptr->name.c_str());
if (m_ptr->r_idx == MON_DIO)
msg_print(_("きさま! 見ているなッ!", "You bastard! You're watching me, well watch this!"));
o_ptr->pval = i;
if (cheat_peek) {
- msg_format(_("%sの像", "Statue of %s"), r_name + r_ptr->name);
+ msg_format(_("%sの像", "Statue of %s"), r_ptr->name.c_str());
}
object_aware(owner_ptr, o_ptr);
* The ego-item arrays
*/
ego_item_type *e_info;
-char *e_name;
-char *e_text;
/*
* Maximum number of ego-items in e_info.txt
#pragma once
-#include "system/angband.h"
#include "object-enchant/trg-types.h"
-#include "util/flag-group.h"
+#include "system/angband.h"
#include "system/object-type-definition.h"
+#include "util/flag-group.h"
+#include <string>
/* Body Armor */
#define EGO_A_MORGUL 4
* Information about "ego-items".
*/
typedef struct ego_item_type {
- STR_OFFSET name; /* Name (offset) */
- STR_OFFSET text; /* Text (offset) */
+ std::string name; /* Name (offset) */
+ std::string text; /* Text (offset) */
- INVENTORY_IDX slot; /*!< 装備部位 / Standard slot value */
- PRICE rating; /*!< ベースアイテムからの価値加速 / Rating boost */
+ INVENTORY_IDX slot{}; /*!< 装備部位 / Standard slot value */
+ PRICE rating{}; /*!< ベースアイテムからの価値加速 / Rating boost */
- DEPTH level; /* Minimum level */
- RARITY rarity; /* Object rarity */
+ DEPTH level{}; /* Minimum level */
+ RARITY rarity{}; /* Object rarity */
- HIT_PROB max_to_h; /* Maximum to-hit bonus */
- HIT_POINT max_to_d; /* Maximum to-dam bonus */
- ARMOUR_CLASS max_to_a; /* Maximum to-ac bonus */
+ HIT_PROB max_to_h{}; /* Maximum to-hit bonus */
+ HIT_POINT max_to_d{}; /* Maximum to-dam bonus */
+ ARMOUR_CLASS max_to_a{}; /* Maximum to-ac bonus */
- PARAMETER_VALUE max_pval; /* Maximum pval */
+ PARAMETER_VALUE max_pval{}; /* Maximum pval */
- PRICE cost; /* Ego-item "cost" */
+ PRICE cost{}; /* Ego-item "cost" */
- BIT_FLAGS flags[TR_FLAG_SIZE]; /* Ego-Item Flags */
- FlagGroup<TRG> gen_flags; /* flags for generate */
+ BIT_FLAGS flags[TR_FLAG_SIZE]{}; /* Ego-Item Flags */
+ FlagGroup<TRG> gen_flags; /* flags for generate */
- IDX act_idx; /* Activative ability index */
+ IDX act_idx{}; /* Activative ability index */
} ego_item_type;
extern EGO_IDX max_e_idx;
extern ego_item_type *e_info;
-extern char *e_name;
-extern char *e_text;
byte get_random_ego(byte slot, bool good);
if (vanilla_town)
return FALSE;
- if (player_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[current_world_ptr->today_mon].name)))
+ if (player_ptr->today_mon > 0 && (streq(r_info[o_ptr->pval].name.c_str(), r_info[current_world_ptr->today_mon].name.c_str())))
return TRUE;
if (o_ptr->pval == MON_TSUCHINOKO)
* The object kind arrays
*/
object_kind *k_info;
-char *k_name;
-char *k_text;
/*
* Maximum number of items in k_info.txt
#pragma once
-#include "system/angband.h"
#include "object-enchant/trg-types.h"
-#include "util/flag-group.h"
+#include "system/angband.h"
#include "system/object-type-definition.h"
+#include "util/flag-group.h"
+#include <string>
typedef struct object_kind {
- STR_OFFSET name; /*!< ベースアイテム名参照のためのネームバッファオフセット値 / Name (offset) */
- STR_OFFSET text; /*!< 解説テキスト参照のためのネームバッファオフセット値 / Text (offset) */
- STR_OFFSET flavor_name; /*!< 未確定名参照のためのネームバッファオフセット値 / Flavor name (offset) */
-
- tval_type tval; /*!< ベースアイテム種別の大項目値 Object type */
- OBJECT_SUBTYPE_VALUE sval; /*!< ベースアイテム種別の小項目値 Object sub type */
-
- PARAMETER_VALUE pval; /*!< ベースアイテムのpval(能力修正共通値) Object extra info */
-
- HIT_PROB to_h; /*!< ベースアイテムの命中修正値 / Bonus to hit */
- HIT_POINT to_d; /*!< ベースアイテムのダメージ修正値 / Bonus to damage */
- ARMOUR_CLASS to_a; /*!< ベースアイテムのAC修正値 / Bonus to armor */
+ std::string name; /*!< ベースアイテム名参照のためのネームバッファオフセット値 / Name (offset) */
+ std::string text; /*!< 解説テキスト参照のためのネームバッファオフセット値 / Text (offset) */
+ std::string flavor_name; /*!< 未確定名参照のためのネームバッファオフセット値 / Flavor name (offset) */
- ARMOUR_CLASS ac; /*!< ベースアイテムのAC基本値 / Base armor */
+ tval_type tval{}; /*!< ベースアイテム種別の大項目値 Object type */
+ OBJECT_SUBTYPE_VALUE sval{}; /*!< ベースアイテム種別の小項目値 Object sub type */
- DICE_NUMBER dd;
- DICE_SID ds; /*!< ダメージダイスの数と大きさ / Damage dice/sides */
+ PARAMETER_VALUE pval{}; /*!< ベースアイテムのpval(能力修正共通値) Object extra info */
- WEIGHT weight; /*!< ベースアイテムの重量 / Weight */
+ HIT_PROB to_h{}; /*!< ベースアイテムの命中修正値 / Bonus to hit */
+ HIT_POINT to_d{}; /*!< ベースアイテムのダメージ修正値 / Bonus to damage */
+ ARMOUR_CLASS to_a{}; /*!< ベースアイテムのAC修正値 / Bonus to armor */
- PRICE cost; /*!< ベースアイテムの基本価値 / Object "base cost" */
+ ARMOUR_CLASS ac{}; /*!< ベースアイテムのAC基本値 / Base armor */
- BIT_FLAGS flags[TR_FLAG_SIZE]; /*!< ベースアイテムの基本特性ビット配列 / Flags */
+ DICE_NUMBER dd{};
+ DICE_SID ds{}; /*!< ダメージダイスの数と大きさ / Damage dice/sides */
- FlagGroup<TRG> gen_flags; /*!< ベースアイテムの生成特性ビット配列 / flags for generate */
+ WEIGHT weight{}; /*!< ベースアイテムの重量 / Weight */
- DEPTH locale[4]; /*!< ベースアイテムの生成階テーブル / Allocation level(s) */
- PROB chance[4]; /*!< ベースアイテムの生成確率テーブル / Allocation chance(s) */
+ PRICE cost{}; /*!< ベースアイテムの基本価値 / Object "base cost" */
- DEPTH level; /*!< ベースアイテムの基本生成階 / Level */
- BIT_FLAGS8 extra; /*!< その他色々のビットフラグ配列 / Something */
+ BIT_FLAGS flags[TR_FLAG_SIZE]{}; /*!< ベースアイテムの基本特性ビット配列 / Flags */
- TERM_COLOR d_attr; /*!< デフォルトのアイテムシンボルカラー / Default object attribute */
- SYMBOL_CODE d_char; /*!< デフォルトのアイテムシンボルアルファベット / Default object character */
+ FlagGroup<TRG> gen_flags; /*!< ベースアイテムの生成特性ビット配列 / flags for generate */
- TERM_COLOR x_attr; /*!< 設定変更後のアイテムシンボルカラー / Desired object attribute */
- SYMBOL_CODE x_char; /*!< 設定変更後のアイテムシンボルアルファベット / Desired object character */
+ DEPTH locale[4]{}; /*!< ベースアイテムの生成階テーブル / Allocation level(s) */
+ PROB chance[4]{}; /*!< ベースアイテムの生成確率テーブル / Allocation chance(s) */
- IDX flavor; /*!< 調査中(TODO) / Special object flavor (or zero) */
+ DEPTH level{}; /*!< ベースアイテムの基本生成階 / Level */
+ BIT_FLAGS8 extra{}; /*!< その他色々のビットフラグ配列 / Something */
- bool easy_know; /*!< ベースアイテムが初期からベース名を判断可能かどうか / This object is always known (if aware) */
+ TERM_COLOR d_attr{}; /*!< デフォルトのアイテムシンボルカラー / Default object attribute */
+ SYMBOL_CODE d_char{}; /*!< デフォルトのアイテムシンボルアルファベット / Default object character */
- bool aware; /*!< ベースアイテムが鑑定済かどうか / The player is "aware" of the item's effects */
+ TERM_COLOR x_attr{}; /*!< 設定変更後のアイテムシンボルカラー / Desired object attribute */
+ SYMBOL_CODE x_char{}; /*!< 設定変更後のアイテムシンボルアルファベット / Desired object character */
- bool tried; /*!< ベースアイテムを未鑑定のまま試したことがあるか / The player has "tried" one of the items */
+ IDX flavor{}; /*!< 未鑑定名の何番目を当てるか(0は未鑑定名なし) / Special object flavor (or zero) */
+ bool easy_know{}; /*!< ベースアイテムが初期からベース名を判断可能かどうか / This object is always known (if aware) */
+ bool aware{}; /*!< ベースアイテムが鑑定済かどうか / The player is "aware" of the item's effects */
+ bool tried{}; /*!< ベースアイテムを未鑑定のまま試したことがあるか / The player has "tried" one of the items */
- ACTIVATION_IDX act_idx; /*!< 発動能力のID / Activative ability index */
+ ACTIVATION_IDX act_idx{}; /*!< 発動能力のID / Activative ability index */
} object_kind;
extern object_kind *k_info;
-extern char *k_name;
-extern char *k_text;
extern KIND_OBJECT_IDX max_k_idx;
SYMBOL_CODE object_char(object_type *o_ptr);
int trivial_info = 0;
object_flags(player_ptr, o_ptr, flgs);
- shape_buffer(o_ptr->name1 ? (a_text + a_info[o_ptr->name1].text) : (k_text + k_info[o_ptr->k_idx].text), 77 - 15, temp, sizeof(temp));
+ shape_buffer(o_ptr->name1 ? a_info[o_ptr->name1].text.c_str() : k_info[o_ptr->k_idx].text.c_str(), 77 - 15, temp, sizeof(temp));
int i = 0;
for (int j = 0; temp[j]; j += 1 + strlen(&temp[j])) {
if ((o_ptr->tval == TV_STATUE) && (o_ptr->sval == SV_PHOTO)) {
monster_race *r_ptr = &r_info[o_ptr->pval];
- int namelen = strlen(r_name + r_ptr->name);
- prt(format("%s: '", r_name + r_ptr->name), 1, 15);
+ int namelen = strlen(r_ptr->name.c_str());
+ prt(format("%s: '", r_ptr->name.c_str()), 1, 15);
term_queue_bigchar(18 + namelen, 1, r_ptr->x_attr, r_ptr->x_char, 0, 0);
prt("'", 1, (use_bigtile ? 20 : 19) + namelen);
} else {
get_mon_num_prep(creature_ptr, get_nightmare, NULL);
r_ptr = &r_info[get_mon_num(creature_ptr, 0, MAX_DEPTH, 0)];
power = r_ptr->level + 10;
- desc = r_name + r_ptr->name;
+ desc = r_ptr->name.c_str();
get_mon_num_prep(creature_ptr, NULL, NULL);
#ifdef JP
#else
#include "realm/realm-types.h"
#include "system/angband.h"
#include "spell/technic-info-table.h"
+#include <string>
/** m_info.txtでMPの無い職業に設定される */
#define SPELL_FIRST_NO_SPELL 99
*/
typedef struct player_magic {
- tval_type spell_book; /* Tval of spell books (if any) */
- int spell_xtra; /* Something for later */
+ tval_type spell_book{}; /* Tval of spell books (if any) */
+ int spell_xtra{}; /* Something for later */
- int spell_stat; /* Stat for spells (if any) */
- int spell_type; /* Spell type (mage/priest) */
+ int spell_stat{}; /* Stat for spells (if any) */
+ int spell_type{}; /* Spell type (mage/priest) */
- int spell_first; /* Level of first spell */
- int spell_weight; /* Weight that hurts spells */
+ int spell_first{}; /* Level of first spell */
+ int spell_weight{}; /* Weight that hurts spells */
- magic_type info[MAX_MAGIC][32]; /* The available spells */
+ magic_type info[MAX_MAGIC][32]{}; /* The available spells */
} player_magic;
extern player_magic *m_info;
creature_ptr->leaving = TRUE;
creature_ptr->is_dead = TRUE;
if (creature_ptr->current_floor_ptr->inside_arena) {
- concptr m_name = r_name + r_info[arena_info[creature_ptr->arena_number].r_idx].name;
+ concptr m_name = r_info[arena_info[creature_ptr->arena_number].r_idx].name.c_str();
msg_format(_("あなたは%sの前に敗れ去った。", "You are beaten by %s."), m_name);
msg_print(NULL);
if (record_arena)
#pragma once
#include "system/angband.h"
+#include <string>
#define GINOU_SUDE 0
#define GINOU_NITOURYU 1
* Information about "skill"
*/
typedef struct skill_table {
- SUB_EXP w_start[5][64]; /* start weapon exp */
- SUB_EXP w_max[5][64]; /* max weapon exp */
- SUB_EXP s_start[10]; /* start skill */
- SUB_EXP s_max[10]; /* max skill */
+ SUB_EXP w_start[5][64]{}; /* start weapon exp */
+ SUB_EXP w_max[5][64]{}; /* max weapon exp */
+ SUB_EXP s_start[10]{}; /* start skill */
+ SUB_EXP s_max[10]{}; /* max skill */
} skill_table;
extern skill_table *s_info;
if (nest) {
switch (type) {
case NEST_TYPE_CLONE:
- sprintf(inner_buf, "(%s)", r_name + r_info[vault_aux_race].name);
+ sprintf(inner_buf, "(%s)", r_info[vault_aux_race].name.c_str());
break;
case NEST_TYPE_SYMBOL_GOOD:
case NEST_TYPE_SYMBOL_EVIL:
break;
}
- msg_format_wizard(player_ptr, CHEAT_DUNGEON, "Nest構成モンスターNo.%d:%s", i, r_name + r_info[nest_mon_info[i].r_idx].name);
+ msg_format_wizard(player_ptr, CHEAT_DUNGEON, "Nest構成モンスターNo.%d:%s", i, r_info[nest_mon_info[i].r_idx].name.c_str());
}
}
for (i = 0; i < 8; i++) {
/* Every other entry */
what[i] = what[i * 2];
- msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("Nest構成モンスター選択No.%d:%s", "Nest Monster Select No.%d:%s"), i, r_name + r_info[what[i]].name);
+ msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("Nest構成モンスター選択No.%d:%s", "Nest Monster Select No.%d:%s"), i, r_info[what[i]].name.c_str());
}
/* Top and bottom rows */
what[i] = what[i * 2];
if (cheat_hear) {
- msg_print(r_name + r_info[what[i]].name);
+ msg_print(r_info[what[i]].name.c_str());
}
}
g_ptr->mimic = g_ptr->feat;
g_ptr->feat = trap;
- msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("%sの部屋が生成されました。", "Room of %s was generated."), f_name + f_info[trap].name);
+ msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("%sの部屋が生成されました。", "Room of %s was generated."), f_info[trap].name.c_str());
return TRUE;
}
* The vault generation arrays
*/
vault_type *v_info;
-char *v_name;
-char *v_text;
/*
* Maximum number of vaults in v_info.txt
if (!find_space(player_ptr, dd_ptr, &yval, &xval, abs(y), abs(x)))
return FALSE;
- msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("小型Vault(%s)を生成しました。", "Lesser vault (%s)."), v_name + v_ptr->name);
+ msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("小型Vault(%s)を生成しました。", "Lesser vault (%s)."), v_ptr->name.c_str());
/* Hack -- Build the vault */
- build_vault(player_ptr, yval, xval, v_ptr->hgt, v_ptr->wid, v_text + v_ptr->text, xoffset, yoffset, transno);
+ build_vault(player_ptr, yval, xval, v_ptr->hgt, v_ptr->wid, v_ptr->text.c_str(), xoffset, yoffset, transno);
return TRUE;
}
if (!find_space(player_ptr, dd_ptr, &yval, &xval, (POSITION)(abs(y) + 2), (POSITION)(abs(x) + 2)))
return FALSE;
- msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("大型固定Vault(%s)を生成しました。", "Greater vault (%s)."), v_name + v_ptr->name);
+ msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("大型固定Vault(%s)を生成しました。", "Greater vault (%s)."), v_ptr->name.c_str());
/* Hack -- Build the vault */
- build_vault(player_ptr, yval, xval, v_ptr->hgt, v_ptr->wid, v_text + v_ptr->text, xoffset, yoffset, transno);
+ build_vault(player_ptr, yval, xval, v_ptr->hgt, v_ptr->wid, v_ptr->text.c_str(), xoffset, yoffset, transno);
return TRUE;
}
if (!find_space(player_ptr, dd_ptr, &yval, &xval, abs(y), abs(x)))
return FALSE;
- msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("特殊固定部屋(%s)を生成しました。", "Special Fixed Room (%s)."), v_name + v_ptr->name);
+ msg_format_wizard(player_ptr, CHEAT_DUNGEON, _("特殊固定部屋(%s)を生成しました。", "Special Fixed Room (%s)."), v_ptr->name.c_str());
/* Hack -- Build the vault */
- build_vault(player_ptr, yval, xval, v_ptr->hgt, v_ptr->wid, v_text + v_ptr->text, xoffset, yoffset, transno);
+ build_vault(player_ptr, yval, xval, v_ptr->hgt, v_ptr->wid, v_ptr->text.c_str(), xoffset, yoffset, transno);
return TRUE;
}
-#pragma once
+#pragma once
#include "system/angband.h"
+#include <string>
typedef struct vault_type {
- STR_OFFSET name; /* Name (offset) */
- STR_OFFSET text; /* Text (offset) */
+ std::string name; /* Name (offset) */
+ std::string text; /* Text (offset) */
- ROOM_IDX typ; /* Vault type */
- PROB rat; /* Vault rating (unused) */
- POSITION hgt; /* Vault height */
- POSITION wid; /* Vault width */
+ ROOM_IDX typ{}; /* Vault type */
+ PROB rat{}; /* Vault rating (unused) */
+ POSITION hgt{}; /* Vault height */
+ POSITION wid{}; /* Vault width */
} vault_type;
extern vault_type *v_info;
-extern char *v_name;
-extern char *v_text;
extern VAULT_IDX max_v_idx;
typedef struct dun_data_type dun_data_type;
inkey();
term_erase(0, 0, 255);
if (lore_do_probe(caster_ptr, m_ptr->r_idx)) {
- strcpy(buf, (r_name + r_ptr->name));
+ strcpy(buf, (r_ptr->name.c_str()));
#ifdef JP
msg_format("%sについてさらに詳しくなった気がする。", buf);
#else
}
QUANTITY amt = get_quantity(
- format(_("%sの何階にテレポートしますか?", "Teleport to which level of %s? "), d_name + d_info[select_dungeon].name), (QUANTITY)max_depth);
+ format(_("%sの何階にテレポートしますか?", "Teleport to which level of %s? "), d_info[select_dungeon].name.c_str()), (QUANTITY)max_depth);
if (amt <= 0) {
return FALSE;
}
if (record_maxdepth)
exe_write_diary(caster_ptr, DIARY_TRUMP, select_dungeon, _("フロア・リセットで", "using a scroll of reset recall"));
#ifdef JP
- msg_format("%sの帰還レベルを %d 階にセット。", d_name + d_info[select_dungeon].name, dummy, dummy * 50);
+ msg_format("%sの帰還レベルを %d 階にセット。", d_info[select_dungeon].name.c_str(), dummy, dummy * 50);
#else
msg_format("Recall depth set to level %d (%d').", dummy, dummy * 50);
#endif
prt("", 3, 0);
sprintf(buf, "%s (%s)", ot_ptr->owner_name, race_info[ot_ptr->owner_race].title);
put_str(buf, 3, 10);
- sprintf(buf, "%s (%ld)", (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost));
+ sprintf(buf, "%s (%ld)", f_info[cur_store_feat].name.c_str(), (long)(ot_ptr->max_cost));
prt(buf, 3, 50);
}
a_idx = rumor_num(zz[1], max_a_idx);
a_ptr = &a_info[a_idx];
- if (a_ptr->name)
+ if (!a_ptr->name.empty())
break;
}
while (TRUE) {
MONRACE_IDX r_idx = rumor_num(zz[1], max_r_idx);
r_ptr = &r_info[r_idx];
- if (r_ptr->name)
+ if (!r_ptr->name.empty())
break;
}
- strcpy(fullname, r_name + r_ptr->name);
+ strcpy(fullname, r_ptr->name.c_str());
if (!r_ptr->r_sights) {
r_ptr->r_sights++;
while (TRUE) {
d_idx = rumor_num(zz[1], current_world_ptr->max_d_idx);
d_ptr = &d_info[d_idx];
- if (d_ptr->name)
+ if (!d_ptr->name.empty())
break;
}
- strcpy(fullname, d_name + d_ptr->name);
+ strcpy(fullname, d_ptr->name.c_str());
if (!max_dlv[d_idx]) {
max_dlv[d_idx] = d_ptr->mindepth;
* The artifact arrays
*/
artifact_type *a_info;
-char *a_name;
-char *a_text;
/*
* Maximum number of artifacts in a_info.txt
#include "object-enchant/trg-types.h"
#include "util/flag-group.h"
#include "system/object-type-definition.h"
+#include <string>
/*!
* @struct artifact_type
* "max_num" is always "1" (if that artifact "exists")
*/
typedef struct artifact_type {
- STR_OFFSET name; /*!< アーティファクト名(headerオフセット参照) / Name (offset) */
- STR_OFFSET text; /*!< アーティファクト解説(headerオフセット参照) / Text (offset) */
- tval_type tval; /*!< ベースアイテム大項目ID / Artifact type */
- OBJECT_SUBTYPE_VALUE sval; /*!< ベースアイテム小項目ID / Artifact sub type */
- PARAMETER_VALUE pval; /*!< pval修正値 / Artifact extra info */
- HIT_PROB to_h; /*!< 命中ボーナス値 / Bonus to hit */
- HIT_POINT to_d; /*!< ダメージボーナス値 / Bonus to damage */
- ARMOUR_CLASS to_a; /*!< ACボーナス値 / Bonus to armor */
- ARMOUR_CLASS ac; /*!< 上書きベースAC値 / Base armor */
- DICE_NUMBER dd;
- DICE_SID ds; /*!< ダイス値 / Damage when hits */
- WEIGHT weight; /*!< 重量 / Weight */
- PRICE cost; /*!< 基本価格 / Artifact "cost" */
- BIT_FLAGS flags[TR_FLAG_SIZE]; /*! アイテムフラグ / Artifact Flags */
+ std::string name; /*!< アーティファクト名(headerオフセット参照) / Name (offset) */
+ std::string text; /*!< アーティファクト解説(headerオフセット参照) / Text (offset) */
+ tval_type tval{}; /*!< ベースアイテム大項目ID / Artifact type */
+ OBJECT_SUBTYPE_VALUE sval{}; /*!< ベースアイテム小項目ID / Artifact sub type */
+ PARAMETER_VALUE pval{}; /*!< pval修正値 / Artifact extra info */
+ HIT_PROB to_h{}; /*!< 命中ボーナス値 / Bonus to hit */
+ HIT_POINT to_d{}; /*!< ダメージボーナス値 / Bonus to damage */
+ ARMOUR_CLASS to_a{}; /*!< ACボーナス値 / Bonus to armor */
+ ARMOUR_CLASS ac{}; /*!< 上書きベースAC値 / Base armor */
+ DICE_NUMBER dd{};
+ DICE_SID ds{}; /*!< ダイス値 / Damage when hits */
+ WEIGHT weight{}; /*!< 重量 / Weight */
+ PRICE cost{}; /*!< 基本価格 / Artifact "cost" */
+ BIT_FLAGS flags[TR_FLAG_SIZE]{}; /*! アイテムフラグ / Artifact Flags */
FlagGroup<TRG> gen_flags; /*! アイテム生成フラグ / flags for generate */
- DEPTH level; /*! 基本生成階 / Artifact level */
- RARITY rarity; /*! レアリティ / Artifact rarity */
- byte cur_num; /*! 現在の生成数 / Number created (0 or 1) */
- byte max_num; /*! (未使用)最大生成数 / Unused (should be "1") */
- FLOOR_IDX floor_id; /*! アイテムを落としたフロアのID / Leaved on this location last time */
- byte act_idx; /*! 発動能力ID / Activative ability index */
+ DEPTH level{}; /*! 基本生成階 / Artifact level */
+ RARITY rarity{}; /*! レアリティ / Artifact rarity */
+ byte cur_num{}; /*! 現在の生成数 / Number created (0 or 1) */
+ byte max_num{}; /*! (未使用)最大生成数 / Unused (should be "1") */
+ FLOOR_IDX floor_id{}; /*! アイテムを落としたフロアのID / Leaved on this location last time */
+ byte act_idx{}; /*! 発動能力ID / Activative ability index */
} artifact_type;
extern artifact_type *a_info;
-extern char *a_name;
-extern char *a_text;
extern ARTIFACT_IDX max_a_idx;
#include "monster-attack/monster-attack-effect.h"
#include "monster-attack/monster-attack-types.h"
#include "system/angband.h"
+#include <string>
/*! モンスターが1ターンに攻撃する最大回数 (射撃を含む) / The maximum number of times a monster can attack in a turn (including SHOOT) */
#define MAX_NUM_BLOWS 4
* - Damage Sides
*/
typedef struct monster_blow {
- rbm_type method;
- rbe_type effect;
- DICE_NUMBER d_dice;
- DICE_SID d_side;
+ rbm_type method{};
+ rbe_type effect{};
+ DICE_NUMBER d_dice{};
+ DICE_SID d_side{};
} monster_blow;
/*
*/
typedef struct monster_race {
- STR_OFFSET name; /*!< 名前データのオフセット(日本語) / Name offset(Japanese) */
+ std::string name; /*!< 名前データのオフセット(日本語) / Name offset(Japanese) */
#ifdef JP
- STR_OFFSET E_name; /*!< 名前データのオフセット(英語) / Name offset(English) */
+ std::string E_name; /*!< 名前データのオフセット(英語) / Name offset(English) */
#endif
- STR_OFFSET text; /*!< 思い出テキストのオフセット / Lore text offset */
- DICE_NUMBER hdice; /*!< HPのダイス数 / Creatures hit dice count */
- DICE_SID hside; /*!< HPのダイス面数 / Creatures hit dice sides */
- ARMOUR_CLASS ac; /*!< アーマークラス / Armour Class */
- SLEEP_DEGREE sleep; /*!< 睡眠値 / Inactive counter (base) */
- POSITION aaf; /*!< 感知範囲(1-100スクエア) / Area affect radius (1-100) */
- SPEED speed; /*!< 加速(110で+0) / Speed (normally 110) */
- EXP mexp; /*!< 殺害時基本経験値 / Exp value for kill */
- BIT_FLAGS16 extra; /*!< 未使用 / Unused (for now) */
- RARITY freq_spell; /*!< 魔法&特殊能力仕様頻度(1/n) / Spell frequency */
- BIT_FLAGS flags1; /* Flags 1 (general) */
- BIT_FLAGS flags2; /* Flags 2 (abilities) */
- BIT_FLAGS flags3; /* Flags 3 (race/resist) */
- BIT_FLAGS flags4; /* Flags 4 (inate/breath) */
- BIT_FLAGS flags7; /* Flags 7 (movement related abilities) */
- BIT_FLAGS flags8; /* Flags 8 (wilderness info) */
- BIT_FLAGS flags9; /* Flags 9 (drops info) */
- BIT_FLAGS flagsr; /* Flags R (resistances info) */
- BIT_FLAGS a_ability_flags1; /* Activate Ability Flags 5 (normal spells) */
- BIT_FLAGS a_ability_flags2; /* Activate Ability Flags 6 (special spells) */
- BIT_FLAGS a_ability_flags3; /* Activate Ability Flags 7 (implementing) */
- BIT_FLAGS a_ability_flags4; /* Activate Ability Flags 8 (implementing) */
- monster_blow blow[MAX_NUM_BLOWS]; /* Up to four blows per round */
- MONRACE_IDX reinforce_id[6];
- DICE_NUMBER reinforce_dd[6];
- DICE_SID reinforce_ds[6];
- ARTIFACT_IDX artifact_id[4]; /* 特定アーティファクトドロップID */
- RARITY artifact_rarity[4]; /* 特定アーティファクトレア度 */
- PERCENTAGE artifact_percent[4]; /* 特定アーティファクトドロップ率 */
- PERCENTAGE arena_ratio; /* モンスター闘技場の掛け金倍率修正値(%基準 / 0=100%) / The adjustment ratio for gambling monster */
- MONRACE_IDX next_r_idx;
- EXP next_exp;
- DEPTH level; /* Level of creature */
- RARITY rarity; /* Rarity of creature */
- TERM_COLOR d_attr; /* Default monster attribute */
- SYMBOL_CODE d_char; /* Default monster character */
- TERM_COLOR x_attr; /* Desired monster attribute */
- SYMBOL_CODE x_char; /* Desired monster character */
- MONSTER_NUMBER max_num; /* Maximum population allowed per level */
- MONSTER_NUMBER cur_num; /* Monster population on current level */
- FLOOR_IDX floor_id; /* Location of unique monster */
- MONSTER_NUMBER r_sights; /* Count sightings of this monster */
- MONSTER_NUMBER r_deaths; /* Count deaths from this monster */
- MONSTER_NUMBER r_pkills; /* Count visible monsters killed in this life */
- MONSTER_NUMBER r_akills; /* Count all monsters killed in this life */
- MONSTER_NUMBER r_tkills; /* Count monsters killed in all lives */
- byte r_wake; /* Number of times woken up (?) */
- byte r_ignore; /* Number of times ignored (?) */
+ std::string text; /*!< 思い出テキストのオフセット / Lore text offset */
+ DICE_NUMBER hdice{}; /*!< HPのダイス数 / Creatures hit dice count */
+ DICE_SID hside{}; /*!< HPのダイス面数 / Creatures hit dice sides */
+ ARMOUR_CLASS ac{}; /*!< アーマークラス / Armour Class */
+ SLEEP_DEGREE sleep{}; /*!< 睡眠値 / Inactive counter (base) */
+ POSITION aaf{}; /*!< 感知範囲(1-100スクエア) / Area affect radius (1-100) */
+ SPEED speed{}; /*!< 加速(110で+0) / Speed (normally 110) */
+ EXP mexp{}; /*!< 殺害時基本経験値 / Exp value for kill */
+ BIT_FLAGS16 extra{}; /*!< 未使用 / Unused (for now) */
+ RARITY freq_spell{}; /*!< 魔法&特殊能力仕様頻度(1/n) / Spell frequency */
+ BIT_FLAGS flags1{}; /* Flags 1 (general) */
+ BIT_FLAGS flags2{}; /* Flags 2 (abilities) */
+ BIT_FLAGS flags3{}; /* Flags 3 (race/resist) */
+ BIT_FLAGS flags4{}; /* Flags 4 (inate/breath) */
+ BIT_FLAGS flags7{}; /* Flags 7 (movement related abilities) */
+ BIT_FLAGS flags8{}; /* Flags 8 (wilderness info) */
+ BIT_FLAGS flags9{}; /* Flags 9 (drops info) */
+ BIT_FLAGS flagsr{}; /* Flags R (resistances info) */
+ BIT_FLAGS a_ability_flags1{}; /* Activate Ability Flags 5 (normal spells) */
+ BIT_FLAGS a_ability_flags2{}; /* Activate Ability Flags 6 (special spells) */
+ BIT_FLAGS a_ability_flags3{}; /* Activate Ability Flags 7 (implementing) */
+ BIT_FLAGS a_ability_flags4{}; /* Activate Ability Flags 8 (implementing) */
+ monster_blow blow[MAX_NUM_BLOWS]{}; /* Up to four blows per round */
+ MONRACE_IDX reinforce_id[6]{};
+ DICE_NUMBER reinforce_dd[6]{};
+ DICE_SID reinforce_ds[6]{};
+ ARTIFACT_IDX artifact_id[4]{}; /* 特定アーティファクトドロップID */
+ RARITY artifact_rarity[4]{}; /* 特定アーティファクトレア度 */
+ PERCENTAGE artifact_percent[4]{}; /* 特定アーティファクトドロップ率 */
+ PERCENTAGE arena_ratio{}; /* モンスター闘技場の掛け金倍率修正値(%基準 / 0=100%) / The adjustment ratio for gambling monster */
+ MONRACE_IDX next_r_idx{};
+ EXP next_exp{};
+ DEPTH level{}; /* Level of creature */
+ RARITY rarity{}; /* Rarity of creature */
+ TERM_COLOR d_attr{}; /* Default monster attribute */
+ SYMBOL_CODE d_char{}; /* Default monster character */
+ TERM_COLOR x_attr{}; /* Desired monster attribute */
+ SYMBOL_CODE x_char{}; /* Desired monster character */
+ MONSTER_NUMBER max_num{}; /* Maximum population allowed per level */
+ MONSTER_NUMBER cur_num{}; /* Monster population on current level */
+ FLOOR_IDX floor_id{}; /* Location of unique monster */
+ MONSTER_NUMBER r_sights{}; /* Count sightings of this monster */
+ MONSTER_NUMBER r_deaths{}; /* Count deaths from this monster */
+ MONSTER_NUMBER r_pkills{}; /* Count visible monsters killed in this life */
+ MONSTER_NUMBER r_akills{}; /* Count all monsters killed in this life */
+ MONSTER_NUMBER r_tkills{}; /* Count monsters killed in all lives */
+ byte r_wake{}; /* Number of times woken up (?) */
+ byte r_ignore{}; /* Number of times ignored (?) */
#define MR1_EVOLUTION 0x01
- byte r_xtra1; /* Something */
- byte r_xtra2; /* Something (unused) */
- ITEM_NUMBER r_drop_gold; /*!< これまでに撃破時に落とした財宝の数 / Max number of gold dropped at once */
- ITEM_NUMBER r_drop_item; /*!< これまでに撃破時に落としたアイテムの数 / Max number of item dropped at once */
- byte r_cast_spell; /* Max number of other spells seen */
- byte r_blows[MAX_NUM_BLOWS]; /* Number of times each blow type was seen */
- u32b r_flags1; /* Observed racial flags */
- u32b r_flags2; /* Observed racial flags */
- u32b r_flags3; /* Observed racial flags */
- u32b r_flags4; /* Observed racial flags */
- u32b r_flags5; /* Observed racial flags */
- u32b r_flags6; /* Observed racial flags */
- u32b r_flagsr; /* Observed racial resistance flags */
+ byte r_xtra1{}; /* Something */
+ byte r_xtra2{}; /* Something (unused) */
+ ITEM_NUMBER r_drop_gold{}; /*!< これまでに撃破時に落とした財宝の数 / Max number of gold dropped at once */
+ ITEM_NUMBER r_drop_item{}; /*!< これまでに撃破時に落としたアイテムの数 / Max number of item dropped at once */
+ byte r_cast_spell{}; /* Max number of other spells seen */
+ byte r_blows[MAX_NUM_BLOWS]{}; /* Number of times each blow type was seen */
+ u32b r_flags1{}; /* Observed racial flags */
+ u32b r_flags2{}; /* Observed racial flags */
+ u32b r_flags3{}; /* Observed racial flags */
+ u32b r_flags4{}; /* Observed racial flags */
+ u32b r_flags5{}; /* Observed racial flags */
+ u32b r_flags6{}; /* Observed racial flags */
+ u32b r_flagsr{}; /* Observed racial resistance flags */
} monster_race;
return building[eg_ptr->f_ptr->subtype].name;
if (has_flag(eg_ptr->f_ptr->flags, FF_ENTRANCE))
- return format(_("%s(%d階相当)", "%s(level %d)"), d_text + d_info[eg_ptr->g_ptr->special].text, d_info[eg_ptr->g_ptr->special].mindepth);
+ return format(_("%s(%d階相当)", "%s(level %d)"), d_info[eg_ptr->g_ptr->special].text.c_str(), d_info[eg_ptr->g_ptr->special].mindepth);
if (has_flag(eg_ptr->f_ptr->flags, FF_TOWN))
return town_info[eg_ptr->g_ptr->special].name;
if (subject_ptr->wild_mode && (eg_ptr->feat == feat_floor))
return _("道", "road");
- return f_name + eg_ptr->f_ptr->name;
+ return eg_ptr->f_ptr->name.c_str();
}
static void describe_grid_monster_all(eg_type *eg_ptr)
if (lore_ptr->r_ptr->next_r_idx) {
hooked_roff(format(_("%^sは経験を積むと、", "%^s will evolve into "), Who::who(lore_ptr->msex)));
- hook_c_roff(TERM_YELLOW, format("%s", r_name + r_info[lore_ptr->r_ptr->next_r_idx].name));
+ hook_c_roff(TERM_YELLOW, format("%s", r_info[lore_ptr->r_ptr->next_r_idx].name.c_str()));
hooked_roff(_(format("に進化する。"), format(" when %s gets enough experience. ", Who::who(lore_ptr->msex))));
} else if (!(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
}
#endif
- term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
+ term_addstr(-1, TERM_WHITE, (r_ptr->name.c_str()));
term_addstr(-1, TERM_WHITE, " ('");
term_add_bigch(a1, c1);
monster_race *rf_ptr = &r_info[lore_ptr->r_ptr->reinforce_id[n]];
if (rf_ptr->flags1 & RF1_UNIQUE) {
- hooked_roff(format(_("、%s", ", %s"), r_name + rf_ptr->name));
+ hooked_roff(format(_("、%s", ", %s"), rf_ptr->name.c_str()));
continue;
}
#ifdef JP
- hooked_roff(format("、 %dd%d 体の%s", lore_ptr->r_ptr->reinforce_dd[n], lore_ptr->r_ptr->reinforce_ds[n], r_name + rf_ptr->name));
+ hooked_roff(format("、 %dd%d 体の%s", lore_ptr->r_ptr->reinforce_dd[n], lore_ptr->r_ptr->reinforce_ds[n], rf_ptr->name.c_str()));
#else
bool plural = (lore_ptr->r_ptr->reinforce_dd[n] * lore_ptr->r_ptr->reinforce_ds[n] > 1);
GAME_TEXT name[MAX_NLEN];
- strcpy(name, r_name + rf_ptr->name);
+ strcpy(name, rf_ptr->name.c_str());
if (plural)
plural_aux(name);
hooked_roff(format(",%dd%d %s", lore_ptr->r_ptr->reinforce_dd[n], lore_ptr->r_ptr->reinforce_ds[n], name));
return;
}
- concptr store_name = (f_name + f_info[cur_store_feat].name);
+ concptr store_name = f_info[cur_store_feat].name.c_str();
concptr owner_name = (ot_ptr->owner_name);
concptr race_name = race_info[ot_ptr->owner_race].title;
char buf[80];
term_addstr(-1, TERM_WHITE, buf);
- sprintf(buf, " %s ", r_name + r_ptr->name);
+ sprintf(buf, " %s ", r_ptr->name.c_str());
term_addstr(-1, TERM_WHITE, buf);
}
sprintf(line, _("(X:%03d Y:%03d) 奇妙な物体の足元のアイテム一覧", "Items at (%03d,%03d) under an odd object"), x, y);
else {
const monster_race *const r_ptr = &r_info[m_ptr->r_idx];
- sprintf(line, _("(X:%03d Y:%03d) %sの足元の発見済みアイテム一覧", "Found items at (%03d,%03d) under %s"), x, y, (r_name + r_ptr->name));
+ sprintf(line, _("(X:%03d Y:%03d) %sの足元の発見済みアイテム一覧", "Found items at (%03d,%03d) under %s"), x, y, r_ptr->name.c_str());
}
} else {
const feature_type *const f_ptr = &f_info[g_ptr->feat];
- concptr fn = f_name + f_ptr->name;
+ concptr fn = f_ptr->name.c_str();
char buf[512];
if (has_flag(f_ptr->flags, FF_STORE) || (has_flag(f_ptr->flags, FF_BLDG) && !floor_ptr->inside_arena))
static bool make_fake_artifact(player_type *player_ptr, object_type *o_ptr, ARTIFACT_IDX name1)
{
artifact_type *a_ptr = &a_info[name1];
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
return FALSE;
OBJECT_IDX i = lookup_kind(a_ptr->tval, a_ptr->sval);
int n = 0;
for (int i = 1; i < max_r_idx; i++) {
monster_race *r_ptr = &r_info[i];
- if (r_ptr->name)
+ if (!r_ptr->name.empty())
who[n++] = (s16b)i;
}
ang_sort(&dummy, who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
for (int i = 0; i < n; i++) {
monster_race *r_ptr = &r_info[who[i]];
- concptr name = (r_name + r_ptr->name);
+ concptr name = r_ptr->name.c_str();
if (filter_monster && !filter_monster(r_ptr))
continue;
int n = 0;
for (int i = 1; i < max_r_idx; i++) {
monster_race *r_ptr = &r_info[i];
- if (r_ptr->name)
+ if (!r_ptr->name.empty())
who[n++] = (s16b)i;
}
#endif
}
- sprintf(buf, _("%s/%s (", "%s%s ("), (r_name + r_ptr->name), _(r_name + r_ptr->E_name, "")); /* ---)--- */
+ sprintf(buf, _("%s/%s (", "%s%s ("), r_ptr->name.c_str(), _(r_ptr->E_name.c_str(), "")); /* ---)--- */
spoil_out(buf);
spoil_out(attr_to_text(r_ptr));
sprintf(buf, " '%c')\n", r_ptr->d_char);
}
monster_race *r_ptr = &r_info[r_idx];
- if (!r_ptr->name) {
+ if (r_ptr->name.empty()) {
msg_print("そのモンスターは存在しません。");
msg_print(NULL);
return;
r_ptr->r_akills = 0;
std::stringstream ss;
- std::string name(r_name + r_ptr->name);
- ss << name << _("の出現数を復元しました。", " can appear again now.");
+ ss << r_ptr->name << _("の出現数を復元しました。", " can appear again now.");
msg_print(ss.str().c_str());
msg_print(NULL);
}
int max_len = 0;
for (KIND_OBJECT_IDX k = 1; k < max_k_idx; k++) {
object_kind *k_ptr = &k_info[k];
- if (!k_ptr->name)
+ if (k_ptr->name.empty())
continue;
object_prep(caster_ptr, o_ptr, k);
for (EGO_IDX k = 1; k < max_e_idx; k++) {
ego_item_type *e_ptr = &e_info[k];
- if (!e_ptr->name)
+ if (e_ptr->name.empty())
continue;
- strcpy(o_name, (e_name + e_ptr->name));
+ strcpy(o_name, e_ptr->name.c_str());
#ifndef JP
str_tolower(o_name);
#endif
int mlen = 0;
for (ARTIFACT_IDX i = 1; i < max_a_idx; i++) {
artifact_type *a_ptr = &a_info[i];
- if (!a_ptr->name)
+ if (a_ptr->name.empty())
continue;
KIND_OBJECT_IDX k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
str_tolower(o_name);
#endif
a_str = a_desc;
- strcpy(a_desc, a_name + a_ptr->name);
+ strcpy(a_desc, a_ptr->name.c_str());
if (*a_str == '$')
a_str++;
if (cheat_xtra)
msg_format("Matching artifact No.%d %s(%s)", i, a_desc, _(&o_name[2], o_name));
- std::vector<char *> l = { a_str, a_name + a_ptr->name, _(&o_name[2], o_name) };
+ std::vector<const char *> l = { a_str, a_ptr->name.c_str(), _(&o_name[2], o_name) };
for (size_t c = 0; c < l.size(); c++) {
if (!strcmp(str, l.at(c))) {
len = strlen(l.at(c));
continue;
r_ptr = &r_info[r_idx];
- fprintf(spoiler_file, _("[%d]: %s (レベル%d, '%c')\n", "[%d]: %s (Level %d, '%c')\n"), r_idx, r_name + r_ptr->name, (int)r_ptr->level, r_ptr->d_char);
+ fprintf(spoiler_file, _("[%d]: %s (レベル%d, '%c')\n", "[%d]: %s (Level %d, '%c')\n"), r_idx, r_ptr->name.c_str(), (int)r_ptr->level, r_ptr->d_char);
for (n = 1; r_ptr->next_exp; n++) {
fprintf(spoiler_file, "%*s-(%ld)-> ", n * 2, "", (long int)r_ptr->next_exp);
fprintf(spoiler_file, "[%d]: ", r_ptr->next_r_idx);
r_ptr = &r_info[r_ptr->next_r_idx];
- fprintf(spoiler_file, _("%s (レベル%d, '%c')\n", "%s (Level %d, '%c')\n"), r_name + r_ptr->name, (int)r_ptr->level, r_ptr->d_char);
+ fprintf(spoiler_file, _("%s (レベル%d, '%c')\n", "%s (Level %d, '%c')\n"), r_ptr->name.c_str(), (int)r_ptr->level, r_ptr->d_char);
}
fputc('\n', spoiler_file);
for (FEAT_IDX i = 1; i < max_f_idx; i++) {
feature_type *f_ptr = &f_info[i];
- if (!f_ptr->name)
+ if (f_ptr->name.empty())
continue;
if (!has_flag(f_ptr->flags, FF_STORE))
continue;
if (f_ptr->subtype == n) {
if (cheat_xtra)
- msg_format(_("%sの店主をシャッフルします。", "Shuffle a Shopkeeper of %s."), f_name + f_ptr->name);
+ msg_format(_("%sの店主をシャッフルします。", "Shuffle a Shopkeeper of %s."), f_ptr->name.c_str());
store_shuffle(player_ptr, n);
break;