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.any())
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;
98 *flags |= SAVE_ITEM_STACK_IDX;
103 static void write_item_info(object_type *o_ptr, const BIT_FLAGS flags)
105 wr_s16b((s16b)o_ptr->weight);
106 if (flags & SAVE_ITEM_NAME1)
107 wr_s16b(o_ptr->name1);
109 if (flags & SAVE_ITEM_NAME2)
110 wr_byte((byte)o_ptr->name2);
112 if (flags & SAVE_ITEM_TIMEOUT)
113 wr_s16b(o_ptr->timeout);
115 if (flags & SAVE_ITEM_TO_H)
116 wr_s16b(o_ptr->to_h);
118 if (flags & SAVE_ITEM_TO_D)
119 wr_s16b((s16b)o_ptr->to_d);
121 if (flags & SAVE_ITEM_TO_A)
122 wr_s16b(o_ptr->to_a);
124 if (flags & SAVE_ITEM_AC)
127 if (flags & SAVE_ITEM_DD)
128 wr_byte((byte)o_ptr->dd);
130 if (flags & SAVE_ITEM_DS)
131 wr_byte((byte)o_ptr->ds);
133 if (flags & SAVE_ITEM_IDENT)
134 wr_byte(o_ptr->ident);
136 if (flags & SAVE_ITEM_MARKED)
137 wr_byte(o_ptr->marked);
139 if (flags & SAVE_ITEM_ART_FLAGS0)
140 wr_u32b(o_ptr->art_flags[0]);
142 if (flags & SAVE_ITEM_ART_FLAGS1)
143 wr_u32b(o_ptr->art_flags[1]);
145 if (flags & SAVE_ITEM_ART_FLAGS2)
146 wr_u32b(o_ptr->art_flags[2]);
148 if (flags & SAVE_ITEM_ART_FLAGS3)
149 wr_u32b(o_ptr->art_flags[3]);
151 if (flags & SAVE_ITEM_ART_FLAGS4)
152 wr_u32b(o_ptr->art_flags[4]);
154 if (flags & SAVE_ITEM_CURSE_FLAGS)
155 wr_FlagGroup(o_ptr->curse_flags, wr_byte);
157 if (flags & SAVE_ITEM_HELD_M_IDX)
158 wr_s16b(o_ptr->held_m_idx);
160 if (flags & SAVE_ITEM_XTRA1)
161 wr_byte(o_ptr->xtra1);
163 if (flags & SAVE_ITEM_XTRA2)
164 wr_s16b(o_ptr->xtra2);
166 if (flags & SAVE_ITEM_XTRA3)
167 wr_byte(o_ptr->xtra3);
169 if (flags & SAVE_ITEM_XTRA4)
170 wr_s16b(o_ptr->xtra4);
172 if (flags & SAVE_ITEM_XTRA5)
173 wr_s16b(o_ptr->xtra5);
175 if (flags & SAVE_ITEM_FEELING)
176 wr_byte(o_ptr->feeling);
178 if (flags & SAVE_ITEM_STACK_IDX)
179 wr_s16b(o_ptr->stack_idx);
183 * @brief アイテムオブジェクトを書き込む / Write an "item" record
184 * @param o_ptr アイテムオブジェクト保存元ポインタ
186 void wr_item(object_type *o_ptr)
188 BIT_FLAGS flags = 0x00000000;
189 write_item_flags(o_ptr, &flags);
191 wr_s16b(o_ptr->k_idx);
192 wr_byte((byte)o_ptr->iy);
193 wr_byte((byte)o_ptr->ix);
194 if (flags & SAVE_ITEM_PVAL)
195 wr_s16b(o_ptr->pval);
197 if (flags & SAVE_ITEM_DISCOUNT)
198 wr_byte(o_ptr->discount);
200 if (flags & SAVE_ITEM_NUMBER)
201 wr_byte((byte)o_ptr->number);
203 write_item_info(o_ptr, flags);
204 if (flags & SAVE_ITEM_INSCRIPTION)
205 wr_string(quark_str(o_ptr->inscription));
207 if (flags & SAVE_ITEM_ART_NAME)
208 wr_string(quark_str(o_ptr->art_name));
212 * @brief セーブデータにアイテムの鑑定情報を書き込む / Write an "perception" record
213 * @param k_idx ベースアイテムのID
215 void wr_perception(KIND_OBJECT_IDX k_idx)
218 object_kind *k_ptr = &k_info[k_idx];