1 #include "info-reader/kind-reader.h"
2 #include "info-reader/kind-info-tokens-table.h"
3 #include "object-enchant/tr-types.h"
4 #include "object/object-kind.h"
5 #include "term/gameterm.h"
8 * @brief
\83e
\83L
\83X
\83g
\83g
\81[
\83N
\83\93\82ð
\91\96\8d¸
\82µ
\82Ä
\83t
\83\89\83O
\82ð
\88ê
\82Â
\93¾
\82é(
\83x
\81[
\83X
\83A
\83C
\83e
\83\80\97p) /
9 * Grab one flag in an object_kind from a textual string
10 * @param k_ptr
\95Û
\8aÇ
\90æ
\82Ì
\83x
\81[
\83X
\83A
\83C
\83e
\83\80\8d\
\91¢
\91Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
11 * @param what
\8eQ
\8fÆ
\8c³
\82Ì
\95¶
\8e\9a\97ñ
\83|
\83C
\83\93\83^
12 * @return
\83G
\83\89\81[
\83R
\81[
\83h
14 static errr grab_one_kind_flag(object_kind *k_ptr, concptr what)
16 for (int i = 0; i < TR_FLAG_MAX; i++) {
17 if (streq(what, k_info_flags[i])) {
18 add_flag(k_ptr->flags, i);
23 if (grab_one_flag(&k_ptr->gen_flags, k_info_gen_flags, what) == 0)
26 msg_format(_("
\96¢
\92m
\82Ì
\83A
\83C
\83e
\83\80\81E
\83t
\83\89\83O '%s'
\81B", "Unknown object flag '%s'."), what);
31 * @brief
\83x
\81[
\83X
\83A
\83C
\83e
\83\80(k_info)
\82Ì
\83p
\81[
\83X
\8aÖ
\90\94 /
32 * Initialize the "k_info" array, by parsing an ascii "template" file
33 * @param buf
\83e
\83L
\83X
\83g
\97ñ
34 * @param head
\83w
\83b
\83_
\8d\
\91¢
\91Ì
35 * @return
\83G
\83\89\81[
\83R
\81[
\83h
37 errr parse_k_info(char *buf, angband_header *head)
39 static object_kind *k_ptr = NULL;
46 s = my_strchr(buf + 2, ':');
51 int i = atoi(buf + 2);
55 if (i >= head->info_num)
65 flavor = my_strchr(s, ':');
68 if (!add_name(&k_ptr->flavor_name, head, flavor))
72 if (!add_name(&k_ptr->name, head, s))
79 /*
\89p
\8cê
\96¼
\82ð
\93Ç
\82Þ
\83\8b\81[
\83`
\83\93\82ð
\92Ç
\89Á */
80 /* 'E'
\82©
\82ç
\8en
\82Ü
\82é
\8ds
\82Í
\89p
\8cê
\96¼
\82Æ
\82µ
\82Ä
\82¢
\82é */
81 else if (buf[0] == 'E') {
85 else if (buf[0] == 'E') {
88 flavor = my_strchr(s, ':');
91 if (!add_name(&k_ptr->flavor_name, head, flavor))
95 if (!add_name(&k_ptr->name, head, s))
99 else if (buf[0] == 'D') {
109 if (!add_text(&k_ptr->text, head, s, TRUE))
111 } else if (buf[0] == 'G') {
124 tmp = color_char_to_attr(buf[4]);
130 } else if (buf[0] == 'I') {
131 int tval, sval, pval;
132 if (3 != sscanf(buf + 2, "%d:%d:%d", &tval, &sval, &pval))
135 k_ptr->tval = (tval_type)tval;
136 k_ptr->sval = (OBJECT_SUBTYPE_VALUE)sval;
137 k_ptr->pval = (PARAMETER_VALUE)pval;
138 } else if (buf[0] == 'W') {
139 int level, extra, wgt;
141 if (4 != sscanf(buf + 2, "%d:%d:%d:%ld", &level, &extra, &wgt, &cost))
144 k_ptr->level = (DEPTH)level;
145 k_ptr->extra = (BIT_FLAGS8)extra;
146 k_ptr->weight = (WEIGHT)wgt;
147 k_ptr->cost = (PRICE)cost;
148 } else if (buf[0] == 'A') {
150 for (s = buf + 1; s && (s[0] == ':') && s[1]; ++i) {
151 k_ptr->chance[i] = 1;
152 k_ptr->locale[i] = atoi(s + 1);
153 t = my_strchr(s + 1, '/');
154 s = my_strchr(s + 1, ':');
155 if (t && (!s || t < s)) {
156 int chance = atoi(t + 1);
158 k_ptr->chance[i] = (PROB)chance;
161 } else if (buf[0] == 'P') {
162 int ac, hd1, hd2, th, td, ta;
163 if (6 != sscanf(buf + 2, "%d:%dd%d:%d:%d:%d", &ac, &hd1, &hd2, &th, &td, &ta))
166 k_ptr->ac = (ARMOUR_CLASS)ac;
167 k_ptr->dd = (DICE_NUMBER)hd1;
168 k_ptr->ds = (DICE_SID)hd2;
169 k_ptr->to_h = (HIT_PROB)th;
170 k_ptr->to_d = (HIT_POINT)td;
171 k_ptr->to_a = (ARMOUR_CLASS)ta;
172 } else if (buf[0] == 'U') {
174 n = grab_one_activation_flag(buf + 2);
180 } else if (buf[0] == 'F') {
181 for (s = buf + 2; *s;) {
183 for (t = s; *t && (*t != ' ') && (*t != '|'); ++t)
188 while (*t == ' ' || *t == '|')
192 if (0 != grab_one_kind_flag(k_ptr, s))