ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/time.C
(Generate patch)

Comparing deliantra/server/server/time.C (file contents):
Revision 1.105 by root, Fri Mar 26 01:04:45 2010 UTC vs.
Revision 1.106 by root, Sun Apr 11 00:34:06 2010 UTC

107 return; 107 return;
108 108
109 object *op; 109 object *op;
110 int dir; 110 int dir;
111 111
112 if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN)) 112 if (gen->flag [FLAG_CONTENT_ON_GEN])
113 { 113 {
114 // either copy one item from the inventory... 114 // either copy one item from the inventory...
115 if (!gen->inv) 115 if (!gen->inv)
116 return; 116 return;
117 117
125 if (dir < 0) 125 if (dir < 0)
126 return; 126 return;
127 127
128 op = op->deep_clone (); 128 op = op->deep_clone ();
129 129
130 CLEAR_FLAG (op, FLAG_IS_A_TEMPLATE); 130 op->clr_flag (FLAG_IS_A_TEMPLATE);
131 unflag_inv (op, FLAG_IS_A_TEMPLATE); 131 unflag_inv (op, FLAG_IS_A_TEMPLATE);
132 } 132 }
133 else if (gen->other_arch) 133 else if (gen->other_arch)
134 { 134 {
135 // ...or use other_arch 135 // ...or use other_arch
168 168
169 if (op->env) 169 if (op->env)
170 switch (op->subtype) 170 switch (op->subtype)
171 { 171 {
172 case FORCE_CONFUSION: 172 case FORCE_CONFUSION:
173 CLEAR_FLAG (op->env, FLAG_CONFUSED); 173 op->env->clr_flag (FLAG_CONFUSED);
174 new_draw_info (NDI_UNIQUE, 0, op->env, "You regain your senses.\n"); 174 new_draw_info (NDI_UNIQUE, 0, op->env, "You regain your senses.\n");
175 175
176 default: 176 default:
177 CLEAR_FLAG (op, FLAG_APPLIED); 177 op->clr_flag (FLAG_APPLIED);
178 change_abil (op->env, op); 178 change_abil (op->env, op);
179 op->env->update_stats (); 179 op->env->update_stats ();
180 } 180 }
181 181
182 op->destroy (); 182 op->destroy ();
186remove_blindness (object *op) 186remove_blindness (object *op)
187{ 187{
188 if (--op->stats.food > 0) 188 if (--op->stats.food > 0)
189 return; 189 return;
190 190
191 CLEAR_FLAG (op, FLAG_APPLIED); 191 op->clr_flag (FLAG_APPLIED);
192 192
193 if (op->env) 193 if (op->env)
194 { 194 {
195 change_abil (op->env, op); 195 change_abil (op->env, op);
196 op->env->update_stats (); 196 op->env->update_stats ();
200} 200}
201 201
202static void 202static void
203poison_more (object *op) 203poison_more (object *op)
204{ 204{
205 if (op->env == NULL || !QUERY_FLAG (op->env, FLAG_ALIVE) || op->env->stats.hp < 0) 205 if (op->env == NULL || !op->env->flag [FLAG_ALIVE] || op->env->stats.hp < 0)
206 { 206 {
207 op->destroy (); 207 op->destroy ();
208 return; 208 return;
209 } 209 }
210 210
213 /* need to unapply the object before update_stats is called, else fix_player 213 /* need to unapply the object before update_stats is called, else fix_player
214 * will not do anything. 214 * will not do anything.
215 */ 215 */
216 if (op->env->type == PLAYER) 216 if (op->env->type == PLAYER)
217 { 217 {
218 CLEAR_FLAG (op, FLAG_APPLIED); 218 op->clr_flag (FLAG_APPLIED);
219 op->env->update_stats (); 219 op->env->update_stats ();
220 new_draw_info (NDI_UNIQUE, 0, op->env, "You feel much better now."); 220 new_draw_info (NDI_UNIQUE, 0, op->env, "You feel much better now.");
221 } 221 }
222 222
223 op->destroy (); 223 op->destroy ();
258 } 258 }
259 259
260 if ((int) op->stats.wc < (NUM_ANIMATIONS (op) / 2 + 1)) 260 if ((int) op->stats.wc < (NUM_ANIMATIONS (op) / 2 + 1))
261 { 261 {
262 op->move_block = 0; 262 op->move_block = 0;
263 CLEAR_FLAG (op, FLAG_BLOCKSVIEW); 263 op->clr_flag (FLAG_BLOCKSVIEW);
264 update_all_los (op->map, op->x, op->y); 264 update_all_los (op->map, op->x, op->y);
265 } 265 }
266 266
267 SET_ANIMATION (op, op->stats.wc); 267 SET_ANIMATION (op, op->stats.wc);
268 update_object (op, UP_OBJ_CHANGE); 268 update_object (op, UP_OBJ_CHANGE);
280 * otherwise, we fall through to the code below which should lower 280 * otherwise, we fall through to the code below which should lower
281 * the gate slightly. 281 * the gate slightly.
282 */ 282 */
283 283
284 for (tmp = op->above; tmp; tmp = tmp->above) 284 for (tmp = op->above; tmp; tmp = tmp->above)
285 if (!QUERY_FLAG (tmp, FLAG_NO_PICK) || QUERY_FLAG (tmp, FLAG_CAN_ROLL) || QUERY_FLAG (tmp, FLAG_ALIVE)) 285 if (!tmp->flag [FLAG_NO_PICK] || tmp->flag [FLAG_CAN_ROLL] || tmp->flag [FLAG_ALIVE])
286 break; 286 break;
287 287
288 if (!tmp) 288 if (!tmp)
289 { 289 {
290 if (op->arch->has_active_speed ()) 290 if (op->arch->has_active_speed ())
321 for (tmp = op->above; tmp && tmp->above; tmp = tmp->above) 321 for (tmp = op->above; tmp && tmp->above; tmp = tmp->above)
322 ; 322 ;
323 323
324 if (tmp) 324 if (tmp)
325 { 325 {
326 if (QUERY_FLAG (tmp, FLAG_ALIVE)) 326 if (tmp->flag [FLAG_ALIVE])
327 { 327 {
328 hit_player (tmp, random_roll (0, op->stats.dam, tmp, PREFER_LOW), op, AT_PHYSICAL, 1); 328 hit_player (tmp, random_roll (0, op->stats.dam, tmp, PREFER_LOW), op, AT_PHYSICAL, 1);
329 op->play_sound (sound_find ("blocked_gate")); 329 op->play_sound (sound_find ("blocked_gate"));
330 330
331 if (tmp->type == PLAYER) 331 if (tmp->type == PLAYER)
333 } 333 }
334 /* If the object is not alive, and the object either can 334 /* If the object is not alive, and the object either can
335 * be picked up or the object rolls, move the object 335 * be picked up or the object rolls, move the object
336 * off the gate. 336 * off the gate.
337 */ 337 */
338 else if (!QUERY_FLAG (tmp, FLAG_ALIVE) && (!QUERY_FLAG (tmp, FLAG_NO_PICK) || QUERY_FLAG (tmp, FLAG_CAN_ROLL))) 338 else if (!tmp->flag [FLAG_ALIVE] && (!tmp->flag [FLAG_NO_PICK] || tmp->flag [FLAG_CAN_ROLL]))
339 { 339 {
340 /* If it has speed, it should move itself, otherwise: */ 340 /* If it has speed, it should move itself, otherwise: */
341 int i = find_free_spot (tmp, op->map, op->x, op->y, 1, SIZEOFFREE1 + 1); 341 int i = find_free_spot (tmp, op->map, op->x, op->y, 1, SIZEOFFREE1 + 1);
342 342
343 /* If there is a free spot, move the object someplace */ 343 /* If there is a free spot, move the object someplace */
351 } 351 }
352 } 352 }
353 353
354 /* See if there is still anything blocking the gate */ 354 /* See if there is still anything blocking the gate */
355 for (tmp = op->above; tmp; tmp = tmp->above) 355 for (tmp = op->above; tmp; tmp = tmp->above)
356 if (!QUERY_FLAG (tmp, FLAG_NO_PICK) || QUERY_FLAG (tmp, FLAG_CAN_ROLL) || QUERY_FLAG (tmp, FLAG_ALIVE)) 356 if (!tmp->flag [FLAG_NO_PICK] || tmp->flag [FLAG_CAN_ROLL] || tmp->flag [FLAG_ALIVE])
357 break; 357 break;
358 358
359 /* IF there is, start putting the gate down */ 359 /* IF there is, start putting the gate down */
360 if (tmp) 360 if (tmp)
361 op->stats.food = 1; 361 op->stats.food = 1;
362 else 362 else
363 { 363 {
364 op->move_block = MOVE_ALL; 364 op->move_block = MOVE_ALL;
365 365
366 if (!op->arch->stats.ac) 366 if (!op->arch->stats.ac)
367 SET_FLAG (op, FLAG_BLOCKSVIEW); 367 op->set_flag (FLAG_BLOCKSVIEW);
368 update_all_los (op->map, op->x, op->y); 368 update_all_los (op->map, op->x, op->y);
369 } 369 }
370 } /* gate is halfway up */ 370 } /* gate is halfway up */
371 371
372 SET_ANIMATION (op, op->stats.wc); 372 SET_ANIMATION (op, op->stats.wc);
573fix_stopped_item (object *op, maptile *map, object *originator) 573fix_stopped_item (object *op, maptile *map, object *originator)
574{ 574{
575 if (map == NULL) 575 if (map == NULL)
576 return; 576 return;
577 577
578 if (QUERY_FLAG (op, FLAG_REMOVED)) 578 if (op->flag [FLAG_REMOVED])
579 insert_ob_in_map (op, map, originator, 0); 579 insert_ob_in_map (op, map, originator, 0);
580 else if (op->type == ARROW) 580 else if (op->type == ARROW)
581 merge_ob (op, NULL); /* only some arrows actually need this */ 581 merge_ob (op, NULL); /* only some arrows actually need this */
582} 582}
583 583
709 if (pos->flags () & P_IS_ALIVE) 709 if (pos->flags () & P_IS_ALIVE)
710 { 710 {
711 object *tmp; 711 object *tmp;
712 712
713 for (tmp = pos->bot; tmp; tmp = tmp->above) 713 for (tmp = pos->bot; tmp; tmp = tmp->above)
714 if (QUERY_FLAG (tmp, FLAG_ALIVE)) 714 if (tmp->flag [FLAG_ALIVE])
715 break; 715 break;
716 716
717 /* Not really fair, but don't let monsters hit themselves with 717 /* Not really fair, but don't let monsters hit themselves with
718 * their own arrow - this can be because they fire it then 718 * their own arrow - this can be because they fire it then
719 * move into it. 719 * move into it.
722 { 722 {
723 /* Found living object, but it is reflecting the missile. Update 723 /* Found living object, but it is reflecting the missile. Update
724 * as below. (Note that for living creatures there is a small 724 * as below. (Note that for living creatures there is a small
725 * chance that reflect_missile fails.) 725 * chance that reflect_missile fails.)
726 */ 726 */
727 if (QUERY_FLAG (tmp, FLAG_REFL_MISSILE) && (rndm (0, 99)) < (90 - op->level / 10)) 727 if (tmp->flag [FLAG_REFL_MISSILE] && (rndm (0, 99)) < (90 - op->level / 10))
728 { 728 {
729 int number = op->face; 729 int number = op->face;
730 730
731 op->direction = absdir (op->direction + 4); 731 op->direction = absdir (op->direction + 4);
732 update_turn_face (op); 732 update_turn_face (op);
751 * note that this code will now catch cases where a monster is 751 * note that this code will now catch cases where a monster is
752 * on a wall but has reflecting - the arrow won't reflect. 752 * on a wall but has reflecting - the arrow won't reflect.
753 * Mapmakers shouldn't put monsters on top of wall in the first 753 * Mapmakers shouldn't put monsters on top of wall in the first
754 * place, so I don't consider that a problem. 754 * place, so I don't consider that a problem.
755 */ 755 */
756 if (!QUERY_FLAG (op, FLAG_REFLECTING) || !(rndm (0, 19))) 756 if (!op->flag [FLAG_REFLECTING] || !(rndm (0, 19)))
757 { 757 {
758 stop_arrow (op); 758 stop_arrow (op);
759 return; 759 return;
760 } 760 }
761 else 761 else
834 LOG (llevError, "Change object (%s) without other_arch error.\n", op->debug_desc ()); 834 LOG (llevError, "Change object (%s) without other_arch error.\n", op->debug_desc ());
835 return; 835 return;
836 } 836 }
837 837
838 /* In non-living items only change when food value is 0 */ 838 /* In non-living items only change when food value is 0 */
839 if (!QUERY_FLAG (op, FLAG_ALIVE)) 839 if (!op->flag [FLAG_ALIVE])
840 { 840 {
841 if (op->stats.food-- > 0) 841 if (op->stats.food-- > 0)
842 return; 842 return;
843 843
844 op->stats.food = 1; /* so 1 other_arch is made */ 844 op->stats.food = 1; /* so 1 other_arch is made */
891 891
892 if (op->head) 892 if (op->head)
893 head = op->head; 893 head = op->head;
894 894
895 for (tmp = op->above; tmp; tmp = tmp->above) 895 for (tmp = op->above; tmp; tmp = tmp->above)
896 if (!QUERY_FLAG (tmp, FLAG_IS_FLOOR)) 896 if (!tmp->flag [FLAG_IS_FLOOR])
897 break; 897 break;
898 898
899 /* If nothing above us to move, nothing to do */ 899 /* If nothing above us to move, nothing to do */
900 if (!tmp || QUERY_FLAG (tmp, FLAG_WIZPASS)) 900 if (!tmp || tmp->flag [FLAG_WIZPASS])
901 return; 901 return;
902 902
903 if (EXIT_PATH (head)) 903 if (EXIT_PATH (head))
904 { 904 {
905 if (tmp->type == PLAYER) 905 if (tmp->type == PLAYER)
1026 if (!dir) 1026 if (!dir)
1027 dir = rndm (1, 8); 1027 dir = rndm (1, 8);
1028 1028
1029 for (object *victim = op->ms ().bot; victim; victim = victim->above) 1029 for (object *victim = op->ms ().bot; victim; victim = victim->above)
1030 { 1030 {
1031 if (QUERY_FLAG (victim, FLAG_ALIVE) && !QUERY_FLAG (victim, FLAG_WIZPASS) && 1031 if (victim->flag [FLAG_ALIVE] && !victim->flag [FLAG_WIZPASS] &&
1032 (victim->move_type & op->move_type || !victim->move_type)) 1032 (victim->move_type & op->move_type || !victim->move_type))
1033 { 1033 {
1034 1034
1035 if (victim->head) 1035 if (victim->head)
1036 victim = victim->head; 1036 victim = victim->head;
1037 1037
1038 if (QUERY_FLAG (op, FLAG_LIFESAVE) && op->stats.hp-- < 0) 1038 if (op->flag [FLAG_LIFESAVE] && op->stats.hp-- < 0)
1039 { 1039 {
1040 op->remove (); 1040 op->remove ();
1041 return; 1041 return;
1042 } 1042 }
1043 1043
1056 for (object *nextmover = m->at (nx, ny).bot; nextmover; nextmover = nextmover->above) 1056 for (object *nextmover = m->at (nx, ny).bot; nextmover; nextmover = nextmover->above)
1057 { 1057 {
1058 if (nextmover->type == PLAYERMOVER) 1058 if (nextmover->type == PLAYERMOVER)
1059 nextmover->speed_left = -.99f; 1059 nextmover->speed_left = -.99f;
1060 1060
1061 if (QUERY_FLAG (nextmover, FLAG_ALIVE)) 1061 if (nextmover->flag [FLAG_ALIVE])
1062 op->speed_left = -1.1f; /* wait until the next thing gets out of the way */ 1062 op->speed_left = -1.1f; /* wait until the next thing gets out of the way */
1063 } 1063 }
1064 1064
1065 if (victim->type == PLAYER) 1065 if (victim->type == PLAYER)
1066 { 1066 {
1151void 1151void
1152move_creator (object *creator) 1152move_creator (object *creator)
1153{ 1153{
1154 object *new_ob; 1154 object *new_ob;
1155 1155
1156 if (!QUERY_FLAG (creator, FLAG_LIFESAVE) && --creator->stats.hp < 0) 1156 if (!creator->flag [FLAG_LIFESAVE] && --creator->stats.hp < 0)
1157 { 1157 {
1158 creator->stats.hp = -1; 1158 creator->stats.hp = -1;
1159 return; 1159 return;
1160 } 1160 }
1161 1161
1173 { 1173 {
1174 ob_to_copy = ob; 1174 ob_to_copy = ob;
1175 } 1175 }
1176 } 1176 }
1177 new_ob = ob_to_copy->deep_clone (); 1177 new_ob = ob_to_copy->deep_clone ();
1178 CLEAR_FLAG (new_ob, FLAG_IS_A_TEMPLATE); 1178 new_ob->clr_flag (FLAG_IS_A_TEMPLATE);
1179 unflag_inv (new_ob, FLAG_IS_A_TEMPLATE); 1179 unflag_inv (new_ob, FLAG_IS_A_TEMPLATE);
1180 } 1180 }
1181 else 1181 else
1182 { 1182 {
1183 if (!creator->other_arch) 1183 if (!creator->other_arch)
1198 return; 1198 return;
1199 } 1199 }
1200 1200
1201 // for now lets try to identify everything generated here, it mostly 1201 // for now lets try to identify everything generated here, it mostly
1202 // happens automated, so this will at least fix many identify-experience holes 1202 // happens automated, so this will at least fix many identify-experience holes
1203 SET_FLAG (new_ob, FLAG_IDENTIFIED); 1203 new_ob->set_flag (FLAG_IDENTIFIED);
1204 1204
1205 insert_ob_in_map_at (new_ob, creator->map, creator, 0, creator->x, creator->y); 1205 insert_ob_in_map_at (new_ob, creator->map, creator, 0, creator->x, creator->y);
1206 if (QUERY_FLAG (new_ob, FLAG_FREED)) 1206 if (new_ob->flag [FLAG_FREED])
1207 return; 1207 return;
1208 1208
1209 if (creator->slaying) 1209 if (creator->slaying)
1210 new_ob->name = new_ob->title = creator->slaying; 1210 new_ob->name = new_ob->title = creator->slaying;
1211} 1211}
1296} 1296}
1297 1297
1298void 1298void
1299process_object (object *op) 1299process_object (object *op)
1300{ 1300{
1301 if (expect_false (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE))) 1301 if (expect_false (op->flag [FLAG_IS_A_TEMPLATE]))
1302 return; 1302 return;
1303 1303
1304 if (expect_false (INVOKE_OBJECT (TICK, op))) 1304 if (expect_false (INVOKE_OBJECT (TICK, op)))
1305 return; 1305 return;
1306 1306
1307 if (QUERY_FLAG (op, FLAG_MONSTER)) 1307 if (op->flag [FLAG_MONSTER])
1308 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED)) 1308 if (move_monster (op) || op->flag [FLAG_FREED])
1309 return; 1309 return;
1310 1310
1311 if (QUERY_FLAG (op, FLAG_ANIMATE) && op->anim_speed == 0) 1311 if (op->flag [FLAG_ANIMATE] && op->anim_speed == 0)
1312 { 1312 {
1313 animate_object (op, op->contr ? op->facing : op->direction); 1313 animate_object (op, op->contr ? op->facing : op->direction);
1314 1314
1315 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1315 if (op->flag [FLAG_SEE_ANYWHERE])
1316 make_sure_seen (op); 1316 make_sure_seen (op);
1317 } 1317 }
1318 1318
1319 if (expect_false ( 1319 if (expect_false (
1320 op->flag [FLAG_GENERATOR] 1320 op->flag [FLAG_GENERATOR]
1321 || op->flag [FLAG_CHANGING] 1321 || op->flag [FLAG_CHANGING]
1322 || op->flag [FLAG_IS_USED_UP] 1322 || op->flag [FLAG_IS_USED_UP]
1323 )) 1323 ))
1324 { 1324 {
1325 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) 1325 if (op->flag [FLAG_CHANGING] && !op->state)
1326 { 1326 {
1327 change_object (op); 1327 change_object (op);
1328 return; 1328 return;
1329 } 1329 }
1330 1330
1331 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY)) 1331 if (op->flag [FLAG_GENERATOR] && !op->flag [FLAG_FRIENDLY])
1332 generate_monster (op); 1332 generate_monster (op);
1333 1333
1334 if (QUERY_FLAG (op, FLAG_IS_USED_UP) && --op->stats.food <= 0) 1334 if (op->flag [FLAG_IS_USED_UP] && --op->stats.food <= 0)
1335 { 1335 {
1336 if (QUERY_FLAG (op, FLAG_APPLIED)) 1336 if (op->flag [FLAG_APPLIED])
1337 remove_force (op); 1337 remove_force (op);
1338 else 1338 else
1339 { 1339 {
1340 op->remove (); // TODO: really necessary? 1340 op->remove (); // TODO: really necessary?
1341 1341
1342 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1342 if (op->flag [FLAG_SEE_ANYWHERE])
1343 make_sure_not_seen (op); 1343 make_sure_not_seen (op);
1344 1344
1345 op->drop_and_destroy (); 1345 op->drop_and_destroy ();
1346 } 1346 }
1347 1347

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines