… | |
… | |
140 | |
140 | |
141 | INTERFACE_CLASS (object) |
141 | INTERFACE_CLASS (object) |
142 | // these are being copied |
142 | // these are being copied |
143 | struct object_copy : attachable |
143 | struct object_copy : attachable |
144 | { |
144 | { |
145 | typedef bitset<NUM_FLAGS> flags_t; |
|
|
146 | |
|
|
147 | sint16 ACC (RW, x), ACC (RW, y); /* Position in the map for this object */ |
145 | sint16 ACC (RW, x), ACC (RW, y); /* Position in the map for this object */ |
148 | |
146 | |
149 | uint8 ACC (RW, type); /* PLAYER, BULLET, etc. See define.h */ |
147 | uint8 ACC (RW, type); /* PLAYER, BULLET, etc. See define.h */ |
150 | uint8 ACC (RW, subtype); /* subtype of object */ |
148 | uint8 ACC (RW, subtype); /* subtype of object */ |
151 | sint8 ACC (RW, direction); /* Means the object is moving that way. */ |
149 | sint8 ACC (RW, direction); /* Means the object is moving that way. */ |
… | |
… | |
155 | shstr ACC (RW, name_pl); /* The plural name of the object */ |
153 | shstr ACC (RW, name_pl); /* The plural name of the object */ |
156 | shstr ACC (RW, title); /* Of foo, etc */ |
154 | shstr ACC (RW, title); /* Of foo, etc */ |
157 | shstr ACC (RW, race); /* human, goblin, dragon, etc */ |
155 | shstr ACC (RW, race); /* human, goblin, dragon, etc */ |
158 | shstr ACC (RW, slaying); /* Which race to do double damage to */ |
156 | shstr ACC (RW, slaying); /* Which race to do double damage to */ |
159 | /* If this is an exit, this is the filename */ |
157 | /* If this is an exit, this is the filename */ |
160 | shstr ACC (RW, tag); // a tag used to tracking this object |
158 | |
|
|
159 | typedef bitset<NUM_FLAGS> flags_t; |
|
|
160 | flags_t flag; /* various flags */ |
|
|
161 | #if FOR_PERL |
|
|
162 | bool ACC (RW, flag[NUM_FLAGS]); |
|
|
163 | #endif |
|
|
164 | |
|
|
165 | shstr ACC (RW, materialname); /* specific material name */ |
161 | shstr ACC (RW, skill); /* Name of the skill this object uses/grants */ |
166 | shstr ACC (RW, skill); /* Name of the skill this object uses/grants */ |
162 | shstr ACC (RW, msg); /* If this is a book/sign/magic mouth/etc */ |
|
|
163 | shstr ACC (RW, lore); /* Obscure information about this object, */ |
|
|
164 | /* To get put into books and the like. */ |
|
|
165 | shstr ACC (RW, materialname); /* specific material name */ |
|
|
166 | shstr ACC (RW, custom_name); /* Custom name assigned by player */ |
|
|
167 | // materialtype_t *ACC (RW, material); /* What material this object consists of */ |
167 | // materialtype_t *ACC (RW, material); /* What material this object consists of */ |
168 | object_ptr ACC (RW, owner); /* Pointer to the object which controls this one */ |
168 | object_ptr ACC (RW, owner); /* Pointer to the object which controls this one */ |
169 | object_ptr ACC (RW, enemy); /* Monster/player to follow even if not closest */ |
169 | object_ptr ACC (RW, enemy); /* Monster/player to follow even if not closest */ |
170 | object_ptr ACC (RW, attacked_by); /* This object start to attack us! only player & monster */ |
170 | object_ptr ACC (RW, attacked_by); /* This object start to attack us! only player & monster */ |
171 | object_ptr ACC (RW, chosen_skill); /* the skill chosen to use */ |
171 | object_ptr ACC (RW, chosen_skill); /* the skill chosen to use */ |
… | |
… | |
179 | float ACC (RW, speed_left); /* How much speed is left to spend this round */ |
179 | float ACC (RW, speed_left); /* How much speed is left to spend this round */ |
180 | sint32 ACC (RW, nrof); /* How many of the objects */ |
180 | sint32 ACC (RW, nrof); /* How many of the objects */ |
181 | |
181 | |
182 | /* This next big block is basically used for monsters and equipment */ |
182 | /* This next big block is basically used for monsters and equipment */ |
183 | uint16 ACC (RW, client_type); /* Public type information. see doc/Developers/objects */ |
183 | uint16 ACC (RW, client_type); /* Public type information. see doc/Developers/objects */ |
184 | |
|
|
185 | sint16 ACC (RW, resist[NROFATTACKS]); /* Resistance adjustments for attacks */ |
184 | sint16 ACC (RW, resist[NROFATTACKS]); /* Resistance adjustments for attacks */ |
|
|
185 | |
186 | uint32 ACC (RW, attacktype); /* Bitmask of attacks this object does */ |
186 | uint32 ACC (RW, attacktype); /* Bitmask of attacks this object does */ |
187 | uint32 ACC (RW, path_attuned);/* Paths the object is attuned to */ |
187 | uint32 ACC (RW, path_attuned);/* Paths the object is attuned to */ |
188 | uint32 ACC (RW, path_repelled); /* Paths the object is repelled from */ |
188 | uint32 ACC (RW, path_repelled); /* Paths the object is repelled from */ |
189 | uint32 ACC (RW, path_denied); /* Paths the object is denied access to */ |
189 | uint32 ACC (RW, path_denied); /* Paths the object is denied access to */ |
|
|
190 | |
190 | uint16 ACC (RW, materials); /* What materials this object consists of */ |
191 | uint16 ACC (RW, materials); /* What materials this object consists of */ |
191 | sint8 ACC (RW, magic); /* Any magical bonuses to this item */ |
192 | sint8 ACC (RW, magic); /* Any magical bonuses to this item */ |
192 | uint8 ACC (RW, state); /* How the object was last drawn (animation) */ |
193 | uint8 ACC (RW, state); /* How the object was last drawn (animation) */ |
|
|
194 | |
193 | sint32 ACC (RW, value); /* How much money it is worth (or contains) */ |
195 | sint32 ACC (RW, value); /* How much money it is worth (or contains) */ |
194 | /* Note that the last_.. values are sometimes used for non obvious |
196 | /* Note that the last_.. values are sometimes used for non obvious |
195 | * meanings by some objects, eg, sp penalty, permanent exp. |
197 | * meanings by some objects, eg, sp penalty, permanent exp. |
196 | */ |
198 | */ |
197 | sint32 ACC (RW, last_heal); /* Last healed. Depends on constitution */ |
199 | sint32 ACC (RW, last_heal); /* Last healed. Depends on constitution */ |
198 | sint32 ACC (RW, last_sp); /* As last_heal, but for spell points */ |
200 | sint32 ACC (RW, last_sp); /* As last_heal, but for spell points */ |
199 | sint16 ACC (RW, last_grace); /* as last_sp, except for grace */ |
201 | sint16 ACC (RW, last_grace); /* as last_sp, except for grace */ |
200 | sint16 ACC (RW, last_eat); /* How long since we last ate */ |
202 | sint16 ACC (RW, last_eat); /* How long since we last ate */ |
201 | sint16 ACC (RW, invisible); /* How much longer the object will be invis */ |
203 | sint16 ACC (RW, invisible); /* How much longer the object will be invis */ |
202 | sint16 ACC (RW, level); /* Level of creature or object */ |
204 | sint16 ACC (RW, level); /* Level of creature or object */ |
|
|
205 | |
203 | uint8 ACC (RW, pick_up); /* See crossfire.doc */ |
206 | uint8 ACC (RW, pick_up); /* See crossfire.doc */ |
204 | sint8 ACC (RW, item_power); /* power rating of the object */ |
|
|
205 | sint8 ACC (RW, gen_sp_armour);/* sp regen penalty this object has (was last_heal) */ |
207 | sint8 ACC (RW, gen_sp_armour);/* sp regen penalty this object has (was last_heal) */ |
206 | sint8 ACC (RW, glow_radius); /* indicates the glow radius of the object */ |
208 | sint8 ACC (RW, glow_radius); /* indicates the glow radius of the object */ |
|
|
209 | uint8 ACC (RW, weapontype); /* type of weapon */ |
|
|
210 | |
|
|
211 | faceidx ACC (RW, face); /* the graphical face */ |
|
|
212 | |
|
|
213 | faceidx ACC (RW, sound); /* the sound face */ |
|
|
214 | faceidx ACC (RW, sound_destroy); /* played on destroy */ |
|
|
215 | |
|
|
216 | body_slot slot [NUM_BODY_LOCATIONS]; |
|
|
217 | |
207 | sint32 ACC (RW, weight); /* Attributes of the object */ |
218 | sint32 ACC (RW, weight); /* Attributes of the object */ |
208 | sint32 ACC (RW, weight_limit);/* Weight-limit of object */ |
219 | sint32 ACC (RW, weight_limit);/* Weight-limit of object */ |
209 | sint32 ACC (RW, carrying); /* How much weight this object contains, must be 0 if nrof == 0 */ |
220 | sint32 ACC (RW, carrying); /* How much weight this object contains, must be 0 if nrof == 0 */ |
210 | sint64 ACC (RW, perm_exp); /* Permanent exp */ |
221 | sint64 ACC (RW, perm_exp); /* Permanent exp */ |
211 | uint32 ACC (RW, weapontype); /* type of weapon */ |
|
|
212 | uint32 ACC (RW, tooltype); /* type of tool or build facility */ |
|
|
213 | body_slot slot [NUM_BODY_LOCATIONS]; |
|
|
214 | faceidx ACC (RW, face); /* the graphical face */ |
|
|
215 | faceidx ACC (RW, sound); /* the sound face */ |
|
|
216 | faceidx ACC (RW, sound_destroy); /* played on destroy */ |
|
|
217 | living ACC (RO, stats); /* Str, Con, Dex, etc */ |
222 | living ACC (RO, stats); /* Str, Con, Dex, etc */ |
218 | /* See the pod/objects.pod for more info about body locations */ |
223 | /* See the pod/objects.pod for more info about body locations */ |
219 | |
224 | |
220 | /* Following mostly refers to fields only used for monsters */ |
225 | /* Following mostly refers to fields only used for monsters */ |
221 | uint32 ACC (RW, hide); /* The object is hidden, not invisible */ |
|
|
222 | |
226 | |
223 | /* allows different movement patterns for attackers */ |
227 | /* allows different movement patterns for attackers */ |
224 | sint32 ACC (RW, move_status); /* What stage in attack mode */ |
228 | sint32 ACC (RW, move_status); /* What stage in attack mode */ |
225 | uint16 ACC (RW, attack_movement); /* What kind of attack movement */ |
229 | uint16 ACC (RW, attack_movement); /* What kind of attack movement */ |
226 | uint16 ACC (RW, run_away); /* Monster runs away if it's hp goes below this percentage. */ |
230 | uint16 ACC (RW, run_away); /* Monster runs away if it's hp goes below this percentage. */ |
… | |
… | |
232 | * only used in spells. |
236 | * only used in spells. |
233 | */ |
237 | */ |
234 | sint16 ACC (RW, duration); /* How long the spell lasts */ |
238 | sint16 ACC (RW, duration); /* How long the spell lasts */ |
235 | sint16 ACC (RW, casting_time);/* time left before spell goes off */ |
239 | sint16 ACC (RW, casting_time);/* time left before spell goes off */ |
236 | |
240 | |
237 | uint16 ACC (RW, start_holding); |
|
|
238 | uint8 ACC (RW, duration_modifier); /* how level modifies duration */ |
241 | uint8 ACC (RW, duration_modifier); /* how level modifies duration */ |
239 | uint8 ACC (RW, dam_modifier); /* How going up in level effects damage */ |
242 | uint8 ACC (RW, dam_modifier); /* How going up in level effects damage */ |
240 | |
|
|
241 | sint8 ACC (RW, range); /* Range of the spell */ |
243 | sint8 ACC (RW, range); /* Range of the spell */ |
242 | uint8 ACC (RW, range_modifier); /* How going up in level effects range */ |
244 | uint8 ACC (RW, range_modifier); /* How going up in level effects range */ |
|
|
245 | |
243 | MoveType ACC (RW, move_type); /* Type of movement this object uses */ |
246 | MoveType ACC (RW, move_type); /* Type of movement this object uses */ |
244 | MoveType ACC (RW, move_block);/* What movement types this blocks */ |
247 | MoveType ACC (RW, move_block);/* What movement types this blocks */ |
245 | |
|
|
246 | MoveType ACC (RW, move_allow);/* What movement types explicitly allowd */ |
248 | MoveType ACC (RW, move_allow);/* What movement types explicitly allowd */ |
247 | MoveType ACC (RW, move_on); /* Move types affected moving on to this space */ |
249 | MoveType ACC (RW, move_on); /* Move types affected moving on to this space */ |
|
|
250 | |
248 | MoveType ACC (RW, move_off); /* Move types affected moving off this space */ |
251 | MoveType ACC (RW, move_off); /* Move types affected moving off this space */ |
249 | MoveType ACC (RW, move_slow); /* Movement types this slows down */ |
252 | MoveType ACC (RW, move_slow); /* Movement types this slows down */ |
250 | |
253 | |
|
|
254 | sint8 ACC (RW, item_power); /* power rating of the object */ |
|
|
255 | // 8 free bits |
|
|
256 | |
251 | float ACC (RW, move_slow_penalty); /* How much this slows down the object */ |
257 | float ACC (RW, move_slow_penalty); /* How much this slows down the object */ |
252 | |
|
|
253 | char *ACC (RW, spellarg); |
258 | char *ACC (RW, spellarg); |
254 | |
259 | |
255 | /* Following are values used by any object */ |
260 | /* Following are values used by any object */ |
256 | /* this objects turns into or what this object creates */ |
261 | /* this objects turns into or what this object creates */ |
257 | treasurelist *ACC (RW, randomitems); /* Items to be generated */ |
262 | treasurelist *ACC (RW, randomitems); /* Items to be generated */ |
258 | flags_t flag; /* various flags */ |
263 | |
259 | #if FOR_PERL |
|
|
260 | bool ACC (RW, flag[NUM_FLAGS]); |
|
|
261 | #endif |
|
|
262 | uint16 ACC (RW, animation_id);/* An index into the animation array */ |
264 | uint16 ACC (RW, animation_id);/* An index into the animation array */ |
263 | uint8 ACC (RW, anim_speed); /* ticks between animation-frames */ |
265 | uint8 ACC (RW, anim_speed); /* ticks between animation-frames */ |
264 | uint8 ACC (RW, last_anim); /* last sequence used to draw face */ |
266 | uint8 ACC (RW, last_anim); /* last sequence used to draw face */ |
|
|
267 | |
265 | uint8 ACC (RW, smoothlevel); /* how to smooth this square around */ |
268 | uint8 ACC (RW, smoothlevel); /* how to smooth this square around */ |
266 | uint8 ACC (RW, will_apply); /* See crossfire.doc */ |
269 | uint8 ACC (RW, will_apply); /* See crossfire.doc */ |
267 | uint16 ACC (RW, cached_sp); /* cached spell points used for a spell, used by esrv_update_spells */ |
270 | uint16 ACC (RW, cached_sp); /* cached spell points used for a spell, used by esrv_update_spells */ |
|
|
271 | |
268 | uint16 ACC (RW, cached_grace);/* cached grace points used for a spell, used by esrv_update_spells */ |
272 | uint16 ACC (RW, cached_grace);/* cached grace points used for a spell, used by esrv_update_spells */ |
269 | uint16 ACC (RW, cached_eat); /* cached food, used by esrv_update_spells */ |
273 | uint16 ACC (RW, cached_eat); /* cached food, used by esrv_update_spells */ |
|
|
274 | |
|
|
275 | // rarely-accessed members should be at the end |
|
|
276 | shstr ACC (RW, tag); // a tag used to tracking this object |
|
|
277 | shstr ACC (RW, msg); /* If this is a book/sign/magic mouth/etc */ |
|
|
278 | shstr ACC (RW, lore); /* Obscure information about this object, */ |
|
|
279 | /* To get put into books and the like. */ |
|
|
280 | shstr ACC (RW, custom_name); /* Custom name assigned by player */ |
270 | }; |
281 | }; |
271 | |
282 | |
272 | struct object : zero_initialised, object_copy |
283 | struct object : zero_initialised, object_copy |
273 | { |
284 | { |
274 | // These variables are not changed by ->copy_to |
285 | // These variables are not changed by ->copy_to |