2 #include "cmd/cmd-visuals.h"
3 #include "cmd/cmd-draw.h"
4 #include "cmd/cmd-dump.h" // 暫定。後で消す.
6 #include "objectkind.h"
7 #include "object-flavor.h"
9 #include "cmd/lighting-level-table.h"
10 #include "io/read-pref-file.h"
11 #include "view-mainwindow.h" // 暫定。後で消す.
14 * @brief キャラクタのビジュアルIDを変更する際の対象指定関数
15 * @param i 指定対象となるキャラクタコード
16 * @param num 指定されたビジュアルIDを返す参照ポインタ
17 * @param max ビジュアルIDの最大数
18 * @return 指定が実際に行われた場合TRUE、キャンセルされた場合FALSE
20 static bool cmd_visuals_aux(int i, IDX *num, IDX max)
25 sprintf(str, "%d", *num);
26 if (!get_string(format("Input new number(0-%d): ", max - 1), str, 4))
29 IDX tmp = (IDX)strtol(str, NULL, 0);
30 if (tmp >= 0 && tmp < max)
34 *num = (*num + max - 1) % max;
36 *num = (*num + 1) % max;
42 * @brief キャラクタの変更メニュー表示
43 * @param choice_msg 選択メッセージ
46 static void print_visuals_menu(concptr choice_msg)
48 prt(_("[ 画面表示の設定 ]", "Interact with Visuals"), 1, 0);
49 prt(_("(0) ユーザー設定ファイルのロード", "(0) Load a user pref file"), 3, 5);
50 prt(_("(1) モンスターの 色/文字 をファイルに書き出す", "(1) Dump monster attr/chars"), 4, 5);
51 prt(_("(2) アイテムの 色/文字 をファイルに書き出す", "(2) Dump object attr/chars"), 5, 5);
52 prt(_("(3) 地形の 色/文字 をファイルに書き出す", "(3) Dump feature attr/chars"), 6, 5);
53 prt(_("(4) モンスターの 色/文字 を変更する (数値操作)", "(4) Change monster attr/chars (numeric operation)"), 7, 5);
54 prt(_("(5) アイテムの 色/文字 を変更する (数値操作)", "(5) Change object attr/chars (numeric operation)"), 8, 5);
55 prt(_("(6) 地形の 色/文字 を変更する (数値操作)", "(6) Change feature attr/chars (numeric operation)"), 9, 5);
56 prt(_("(7) モンスターの 色/文字 を変更する (シンボルエディタ)", "(7) Change monster attr/chars (visual mode)"), 10, 5);
57 prt(_("(8) アイテムの 色/文字 を変更する (シンボルエディタ)", "(8) Change object attr/chars (visual mode)"), 11, 5);
58 prt(_("(9) 地形の 色/文字 を変更する (シンボルエディタ)", "(9) Change feature attr/chars (visual mode)"), 12, 5);
59 prt(_("(R) 画面表示方法の初期化", "(R) Reset visuals"), 13, 5);
60 prt(format("コマンド: %s", choice_msg ? choice_msg : _("", "")), 15, 0);
65 * Interact with "visuals"
67 void do_cmd_visuals(player_type *creature_ptr)
71 bool need_redraw = FALSE;
72 concptr empty_symbol = "<< ? >>";
73 if (use_bigtile) empty_symbol = "<< ?? >>";
75 FILE_TYPE(FILE_TYPE_TEXT);
80 print_visuals_menu(NULL);
82 if (i == ESCAPE) break;
88 prt(_("コマンド: ユーザー設定ファイルのロード", "Command: Load a user pref file"), 15, 0);
89 prt(_("ファイル: ", "File: "), 17, 0);
90 sprintf(tmp, "%s.prf", creature_ptr->base_name);
91 if (!askfor(tmp, 70)) continue;
93 (void)process_pref_file(creature_ptr, tmp);
99 static concptr mark = "Monster attr/chars";
100 prt(_("コマンド: モンスターの[色/文字]をファイルに書き出します", "Command: Dump monster attr/chars"), 15, 0);
101 prt(_("ファイル: ", "File: "), 17, 0);
102 sprintf(tmp, "%s.prf", creature_ptr->base_name);
103 if (!askfor(tmp, 70)) continue;
105 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
106 if (!open_auto_dump(buf, mark)) continue;
108 auto_dump_printf(_("\n# モンスターの[色/文字]の設定\n\n", "\n# Monster attr/char definitions\n\n"));
109 for (i = 0; i < max_r_idx; i++)
111 monster_race *r_ptr = &r_info[i];
112 if (!r_ptr->name) continue;
114 auto_dump_printf("# %s\n", (r_name + r_ptr->name));
115 auto_dump_printf("R:%d:0x%02X/0x%02X\n\n", i,
116 (byte)(r_ptr->x_attr), (byte)(r_ptr->x_char));
120 msg_print(_("モンスターの[色/文字]をファイルに書き出しました。", "Dumped monster attr/chars."));
125 static concptr mark = "Object attr/chars";
126 prt(_("コマンド: アイテムの[色/文字]をファイルに書き出します", "Command: Dump object attr/chars"), 15, 0);
127 prt(_("ファイル: ", "File: "), 17, 0);
128 sprintf(tmp, "%s.prf", creature_ptr->base_name);
129 if (!askfor(tmp, 70)) continue;
131 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
132 if (!open_auto_dump(buf, mark)) continue;
134 auto_dump_printf(_("\n# アイテムの[色/文字]の設定\n\n", "\n# Object attr/char definitions\n\n"));
135 for (KIND_OBJECT_IDX k_idx = 0; k_idx < max_k_idx; k_idx++)
137 GAME_TEXT o_name[MAX_NLEN];
138 object_kind *k_ptr = &k_info[k_idx];
139 if (!k_ptr->name) continue;
143 strip_name(o_name, k_idx);
148 object_prep(&forge, k_idx);
149 object_desc(creature_ptr, o_name, &forge, OD_FORCE_FLAVOR);
152 auto_dump_printf("# %s\n", o_name);
153 auto_dump_printf("K:%d:0x%02X/0x%02X\n\n", (int)k_idx,
154 (byte)(k_ptr->x_attr), (byte)(k_ptr->x_char));
158 msg_print(_("アイテムの[色/文字]をファイルに書き出しました。", "Dumped object attr/chars."));
163 static concptr mark = "Feature attr/chars";
164 prt(_("コマンド: 地形の[色/文字]をファイルに書き出します", "Command: Dump feature attr/chars"), 15, 0);
165 prt(_("ファイル: ", "File: "), 17, 0);
166 sprintf(tmp, "%s.prf", creature_ptr->base_name);
167 if (!askfor(tmp, 70)) continue;
169 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
170 if (!open_auto_dump(buf, mark)) continue;
172 auto_dump_printf(_("\n# 地形の[色/文字]の設定\n\n", "\n# Feature attr/char definitions\n\n"));
173 for (i = 0; i < max_f_idx; i++)
175 feature_type *f_ptr = &f_info[i];
176 if (!f_ptr->name) continue;
177 if (f_ptr->mimic != i) continue;
179 auto_dump_printf("# %s\n", (f_name + f_ptr->name));
180 auto_dump_printf("F:%d:0x%02X/0x%02X:0x%02X/0x%02X:0x%02X/0x%02X\n\n", i,
181 (byte)(f_ptr->x_attr[F_LIT_STANDARD]), (byte)(f_ptr->x_char[F_LIT_STANDARD]),
182 (byte)(f_ptr->x_attr[F_LIT_LITE]), (byte)(f_ptr->x_char[F_LIT_LITE]),
183 (byte)(f_ptr->x_attr[F_LIT_DARK]), (byte)(f_ptr->x_char[F_LIT_DARK]));
187 msg_print(_("地形の[色/文字]をファイルに書き出しました。", "Dumped feature attr/chars."));
192 static concptr choice_msg = _("モンスターの[色/文字]を変更します", "Change monster attr/chars");
193 static MONRACE_IDX r = 0;
194 prt(format(_("コマンド: %s", "Command: %s"), choice_msg), 15, 0);
197 monster_race *r_ptr = &r_info[r];
201 TERM_COLOR da = r_ptr->d_attr;
202 byte dc = r_ptr->d_char;
203 TERM_COLOR ca = r_ptr->x_attr;
204 byte cc = r_ptr->x_char;
206 Term_putstr(5, 17, -1, TERM_WHITE,
207 format(_("モンスター = %d, 名前 = %-40.40s", "Monster = %d, Name = %-40.40s"), r, (r_name + r_ptr->name)));
208 Term_putstr(10, 19, -1, TERM_WHITE,
209 format(_("初期値 色 / 文字 = %3u / %3u", "Default attr/char = %3u / %3u"), da, dc));
210 Term_putstr(40, 19, -1, TERM_WHITE, empty_symbol);
211 Term_queue_bigchar(43, 19, da, dc, 0, 0);
212 Term_putstr(10, 20, -1, TERM_WHITE,
213 format(_("現在値 色 / 文字 = %3u / %3u", "Current attr/char = %3u / %3u"), ca, cc));
214 Term_putstr(40, 20, -1, TERM_WHITE, empty_symbol);
215 Term_queue_bigchar(43, 20, ca, cc, 0, 0);
216 Term_putstr(0, 22, -1, TERM_WHITE,
217 _("コマンド (n/N/^N/a/A/^A/c/C/^C/v/V/^V): ", "Command (n/N/^N/a/A/^A/c/C/^C/v/V/^V): "));
219 if (i == ESCAPE) break;
221 if (iscntrl(i)) c = 'a' + i - KTRL('A');
222 else if (isupper(i)) c = 'a' + i - 'A';
232 if (!cmd_visuals_aux(i, &r, max_r_idx))
237 } while (!r_info[r].name);
242 t = (int)r_ptr->x_attr;
243 (void)cmd_visuals_aux(i, &t, 256);
244 r_ptr->x_attr = (byte)t;
248 t = (int)r_ptr->x_char;
249 (void)cmd_visuals_aux(i, &t, 256);
250 r_ptr->x_char = (byte)t;
254 do_cmd_knowledge_monsters(creature_ptr, &need_redraw, TRUE, r);
256 print_visuals_menu(choice_msg);
265 static concptr choice_msg = _("アイテムの[色/文字]を変更します", "Change object attr/chars");
267 prt(format(_("コマンド: %s", "Command: %s"), choice_msg), 15, 0);
270 object_kind *k_ptr = &k_info[k];
274 TERM_COLOR da = k_ptr->d_attr;
275 SYMBOL_CODE dc = k_ptr->d_char;
276 TERM_COLOR ca = k_ptr->x_attr;
277 SYMBOL_CODE cc = k_ptr->x_char;
279 Term_putstr(5, 17, -1, TERM_WHITE,
280 format(_("アイテム = %d, 名前 = %-40.40s", "Object = %d, Name = %-40.40s"),
281 k, k_name + (!k_ptr->flavor ? k_ptr->name : k_ptr->flavor_name)));
282 Term_putstr(10, 19, -1, TERM_WHITE,
283 format(_("初期値 色 / 文字 = %3d / %3d", "Default attr/char = %3d / %3d"), da, dc));
284 Term_putstr(40, 19, -1, TERM_WHITE, empty_symbol);
285 Term_queue_bigchar(43, 19, da, dc, 0, 0);
286 Term_putstr(10, 20, -1, TERM_WHITE,
287 format(_("現在値 色 / 文字 = %3d / %3d", "Current attr/char = %3d / %3d"), ca, cc));
288 Term_putstr(40, 20, -1, TERM_WHITE, empty_symbol);
289 Term_queue_bigchar(43, 20, ca, cc, 0, 0);
290 Term_putstr(0, 22, -1, TERM_WHITE,
291 _("コマンド (n/N/^N/a/A/^A/c/C/^C/v/V/^V): ", "Command (n/N/^N/a/A/^A/c/C/^C/v/V/^V): "));
294 if (i == ESCAPE) break;
296 if (iscntrl(i)) c = 'a' + i - KTRL('A');
297 else if (isupper(i)) c = 'a' + i - 'A';
307 if (!cmd_visuals_aux(i, &k, max_k_idx))
312 } while (!k_info[k].name);
317 t = (int)k_ptr->x_attr;
318 (void)cmd_visuals_aux(i, &t, 256);
319 k_ptr->x_attr = (byte)t;
323 t = (int)k_ptr->x_char;
324 (void)cmd_visuals_aux(i, &t, 256);
325 k_ptr->x_char = (byte)t;
329 do_cmd_knowledge_objects(creature_ptr, &need_redraw, TRUE, k);
331 print_visuals_menu(choice_msg);
340 static concptr choice_msg = _("地形の[色/文字]を変更します", "Change feature attr/chars");
342 static IDX lighting_level = F_LIT_STANDARD;
343 prt(format(_("コマンド: %s", "Command: %s"), choice_msg), 15, 0);
346 feature_type *f_ptr = &f_info[f];
350 TERM_COLOR da = f_ptr->d_attr[lighting_level];
351 byte dc = f_ptr->d_char[lighting_level];
352 TERM_COLOR ca = f_ptr->x_attr[lighting_level];
353 byte cc = f_ptr->x_char[lighting_level];
356 Term_putstr(5, 17, -1, TERM_WHITE,
357 format(_("地形 = %d, 名前 = %s, 明度 = %s", "Terrain = %d, Name = %s, Lighting = %s"),
358 f, (f_name + f_ptr->name), lighting_level_str[lighting_level]));
359 Term_putstr(10, 19, -1, TERM_WHITE,
360 format(_("初期値 色 / 文字 = %3d / %3d", "Default attr/char = %3d / %3d"), da, dc));
361 Term_putstr(40, 19, -1, TERM_WHITE, empty_symbol);
362 Term_queue_bigchar(43, 19, da, dc, 0, 0);
363 Term_putstr(10, 20, -1, TERM_WHITE,
364 format(_("現在値 色 / 文字 = %3d / %3d", "Current attr/char = %3d / %3d"), ca, cc));
365 Term_putstr(40, 20, -1, TERM_WHITE, empty_symbol);
366 Term_queue_bigchar(43, 20, ca, cc, 0, 0);
367 Term_putstr(0, 22, -1, TERM_WHITE,
368 _("コマンド (n/N/^N/a/A/^A/c/C/^C/l/L/^L/d/D/^D/v/V/^V): ", "Command (n/N/^N/a/A/^A/c/C/^C/l/L/^L/d/D/^D/v/V/^V): "));
371 if (i == ESCAPE) break;
373 if (iscntrl(i)) c = 'a' + i - KTRL('A');
374 else if (isupper(i)) c = 'a' + i - 'A';
384 if (!cmd_visuals_aux(i, &f, max_f_idx))
389 } while (!f_info[f].name || (f_info[f].mimic != f));
394 t = (int)f_ptr->x_attr[lighting_level];
395 (void)cmd_visuals_aux(i, &t, 256);
396 f_ptr->x_attr[lighting_level] = (byte)t;
400 t = (int)f_ptr->x_char[lighting_level];
401 (void)cmd_visuals_aux(i, &t, 256);
402 f_ptr->x_char[lighting_level] = (byte)t;
406 (void)cmd_visuals_aux(i, &lighting_level, F_LIT_MAX);
409 apply_default_feat_lighting(f_ptr->x_attr, f_ptr->x_char);
413 do_cmd_knowledge_features(&need_redraw, TRUE, f, &lighting_level);
415 print_visuals_menu(choice_msg);
423 do_cmd_knowledge_monsters(creature_ptr, &need_redraw, TRUE, -1);
426 do_cmd_knowledge_objects(creature_ptr, &need_redraw, TRUE, -1);
430 IDX lighting_level = F_LIT_STANDARD;
431 do_cmd_knowledge_features(&need_redraw, TRUE, -1, &lighting_level);
436 reset_visuals(creature_ptr);
437 msg_print(_("画面上の[色/文字]を初期値にリセットしました。", "Visual attr/char tables reset."));
449 if (need_redraw) do_cmd_redraw(creature_ptr);