… | |
… | |
338 | if (!on_same_map (ob, owner) && !owner->flag [FLAG_REMOVED]) |
338 | if (!on_same_map (ob, owner) && !owner->flag [FLAG_REMOVED]) |
339 | { |
339 | { |
340 | follow_owner (ob, owner); |
340 | follow_owner (ob, owner); |
341 | return; |
341 | return; |
342 | } |
342 | } |
|
|
343 | |
343 | /* Calculate Direction */ |
344 | /* Calculate Direction */ |
344 | if (owner->type == PLAYER && owner->contr->petmode == pet_sad) |
345 | if (owner->type == PLAYER && owner->contr->petmode == pet_sad) |
345 | { |
346 | { |
346 | /* in S&D mode, if we have no enemy, run randomly about. */ |
347 | /* in S&D mode, if we have no enemy, run randomly about. */ |
347 | for (i = 0; i < 15; i++) |
348 | for (i = 0; i < 15; i++) |
… | |
… | |
363 | struct rv_vector rv; |
364 | struct rv_vector rv; |
364 | |
365 | |
365 | get_rangevector (ob, ob->owner, &rv, 0); |
366 | get_rangevector (ob, ob->owner, &rv, 0); |
366 | dir = rv.direction; |
367 | dir = rv.direction; |
367 | } |
368 | } |
|
|
369 | |
368 | ob->direction = dir; |
370 | ob->direction = dir; |
369 | |
371 | |
370 | /* move_ob returns 0 if the object couldn't move. If that is the |
372 | /* move_ob returns 0 if the object couldn't move. If that is the |
371 | * case, lets do some other work. |
373 | * case, lets do some other work. |
372 | */ |
374 | */ |
… | |
… | |
389 | for (ob2 = GET_MAP_OB (m, dx, dy); ob2 != NULL; ob2 = ob2->above) |
391 | for (ob2 = GET_MAP_OB (m, dx, dy); ob2 != NULL; ob2 = ob2->above) |
390 | { |
392 | { |
391 | object *new_ob; |
393 | object *new_ob; |
392 | |
394 | |
393 | new_ob = ob2->head ? ob2->head : ob2; |
395 | new_ob = ob2->head ? ob2->head : ob2; |
|
|
396 | |
394 | if (new_ob == ob) |
397 | if (new_ob == ob) |
395 | break; |
398 | break; |
|
|
399 | |
396 | if (new_ob == ob->owner) |
400 | if (new_ob == ob->owner) |
397 | return; |
401 | return; |
|
|
402 | |
398 | if (new_ob->owner == ob->owner) |
403 | if (new_ob->owner == ob->owner) |
399 | break; |
404 | break; |
400 | |
405 | |
401 | /* Hmm. Did we try to move into an enemy monster? If so, |
406 | /* Hmm. Did we try to move into an enemy monster? If so, |
402 | * make it our enemy. |
407 | * make it our enemy. |
… | |
… | |
417 | } |
422 | } |
418 | } |
423 | } |
419 | } |
424 | } |
420 | /* Try a different course */ |
425 | /* Try a different course */ |
421 | dir = absdir (dir + 4 - (rndm (5)) - (rndm (5))); |
426 | dir = absdir (dir + 4 - (rndm (5)) - (rndm (5))); |
422 | (void) move_ob (ob, dir, ob); |
427 | move_ob (ob, dir, ob); |
423 | } |
428 | } |
424 | return; |
|
|
425 | } |
429 | } |
426 | |
430 | |
427 | /**************************************************************************** |
431 | /**************************************************************************** |
428 | * |
432 | * |
429 | * GOLEM SPELL CODE |
433 | * GOLEM SPELL CODE |