1 #include "save/item-writer.h"
2 #include "load/savedata-flag-types.h"
3 #include "object/object-kind.h"
4 #include "save/save-util.h"
5 #include "system/object-type-definition.h"
6 #include "util/quarks.h"
8 static void write_item_flags(object_type *o_ptr, BIT_FLAGS *flags)
11 *flags |= SAVE_ITEM_PVAL;
14 *flags |= SAVE_ITEM_DISCOUNT;
16 if (o_ptr->number != 1)
17 *flags |= SAVE_ITEM_NUMBER;
20 *flags |= SAVE_ITEM_NAME1;
23 *flags |= SAVE_ITEM_NAME2;
26 *flags |= SAVE_ITEM_TIMEOUT;
29 *flags |= SAVE_ITEM_TO_H;
32 *flags |= SAVE_ITEM_TO_D;
35 *flags |= SAVE_ITEM_TO_A;
38 *flags |= SAVE_ITEM_AC;
41 *flags |= SAVE_ITEM_DD;
44 *flags |= SAVE_ITEM_DS;
47 *flags |= SAVE_ITEM_IDENT;
50 *flags |= SAVE_ITEM_MARKED;
52 if (o_ptr->art_flags[0])
53 *flags |= SAVE_ITEM_ART_FLAGS0;
55 if (o_ptr->art_flags[1])
56 *flags |= SAVE_ITEM_ART_FLAGS1;
58 if (o_ptr->art_flags[2])
59 *flags |= SAVE_ITEM_ART_FLAGS2;
61 if (o_ptr->art_flags[3])
62 *flags |= SAVE_ITEM_ART_FLAGS3;
64 if (o_ptr->art_flags[4])
65 *flags |= SAVE_ITEM_ART_FLAGS4;
67 if (o_ptr->curse_flags)
68 *flags |= SAVE_ITEM_CURSE_FLAGS;
70 if (o_ptr->held_m_idx)
71 *flags |= SAVE_ITEM_HELD_M_IDX;
74 *flags |= SAVE_ITEM_XTRA1;
77 *flags |= SAVE_ITEM_XTRA2;
80 *flags |= SAVE_ITEM_XTRA3;
83 *flags |= SAVE_ITEM_XTRA4;
86 *flags |= SAVE_ITEM_XTRA5;
89 *flags |= SAVE_ITEM_FEELING;
91 if (o_ptr->inscription)
92 *flags |= SAVE_ITEM_INSCRIPTION;
95 *flags |= SAVE_ITEM_ART_NAME;
100 static void write_item_info(object_type *o_ptr, const BIT_FLAGS flags)
102 wr_s16b((s16b)o_ptr->weight);
103 if (flags & SAVE_ITEM_NAME1)
104 wr_byte((byte)o_ptr->name1);
106 if (flags & SAVE_ITEM_NAME2)
107 wr_byte((byte)o_ptr->name2);
109 if (flags & SAVE_ITEM_TIMEOUT)
110 wr_s16b(o_ptr->timeout);
112 if (flags & SAVE_ITEM_TO_H)
113 wr_s16b(o_ptr->to_h);
115 if (flags & SAVE_ITEM_TO_D)
116 wr_s16b((s16b)o_ptr->to_d);
118 if (flags & SAVE_ITEM_TO_A)
119 wr_s16b(o_ptr->to_a);
121 if (flags & SAVE_ITEM_AC)
124 if (flags & SAVE_ITEM_DD)
125 wr_byte((byte)o_ptr->dd);
127 if (flags & SAVE_ITEM_DS)
128 wr_byte((byte)o_ptr->ds);
130 if (flags & SAVE_ITEM_IDENT)
131 wr_byte(o_ptr->ident);
133 if (flags & SAVE_ITEM_MARKED)
134 wr_byte(o_ptr->marked);
136 if (flags & SAVE_ITEM_ART_FLAGS0)
137 wr_u32b(o_ptr->art_flags[0]);
139 if (flags & SAVE_ITEM_ART_FLAGS1)
140 wr_u32b(o_ptr->art_flags[1]);
142 if (flags & SAVE_ITEM_ART_FLAGS2)
143 wr_u32b(o_ptr->art_flags[2]);
145 if (flags & SAVE_ITEM_ART_FLAGS3)
146 wr_u32b(o_ptr->art_flags[3]);
148 if (flags & SAVE_ITEM_ART_FLAGS4)
149 wr_u32b(o_ptr->art_flags[4]);
151 if (flags & SAVE_ITEM_CURSE_FLAGS)
152 wr_u32b(o_ptr->curse_flags);
154 if (flags & SAVE_ITEM_HELD_M_IDX)
155 wr_s16b(o_ptr->held_m_idx);
157 if (flags & SAVE_ITEM_XTRA1)
158 wr_byte(o_ptr->xtra1);
160 if (flags & SAVE_ITEM_XTRA2)
161 wr_byte(o_ptr->xtra2);
163 if (flags & SAVE_ITEM_XTRA3)
164 wr_byte(o_ptr->xtra3);
166 if (flags & SAVE_ITEM_XTRA4)
167 wr_s16b(o_ptr->xtra4);
169 if (flags & SAVE_ITEM_XTRA5)
170 wr_s16b(o_ptr->xtra5);
172 if (flags & SAVE_ITEM_FEELING)
173 wr_byte(o_ptr->feeling);
177 * @brief アイテムオブジェクトを書き込む / Write an "item" record
178 * @param o_ptr アイテムオブジェクト保存元ポインタ
181 void wr_item(object_type *o_ptr)
183 BIT_FLAGS flags = 0x00000000;
184 write_item_flags(o_ptr, &flags);
186 wr_s16b(o_ptr->k_idx);
187 wr_byte((byte)o_ptr->iy);
188 wr_byte((byte)o_ptr->ix);
189 if (flags & SAVE_ITEM_PVAL)
190 wr_s16b(o_ptr->pval);
192 if (flags & SAVE_ITEM_DISCOUNT)
193 wr_byte(o_ptr->discount);
195 if (flags & SAVE_ITEM_NUMBER)
196 wr_byte((byte)o_ptr->number);
198 write_item_info(o_ptr, flags);
199 if (flags & SAVE_ITEM_INSCRIPTION)
200 wr_string(quark_str(o_ptr->inscription));
202 if (flags & SAVE_ITEM_ART_NAME)
203 wr_string(quark_str(o_ptr->art_name));
207 * @brief セーブデータにアイテムの鑑定情報を書き込む / Write an "perception" record
208 * @param k_idx ベースアイテムのID
211 void wr_perception(KIND_OBJECT_IDX k_idx)
214 object_kind *k_ptr = &k_info[k_idx];