1 | |
1 | |
2 | /* |
2 | /* |
3 | * static char *rcsid_time_c = |
3 | * static char *rcsid_time_c = |
4 | * "$Id: time.C,v 1.9 2006/09/10 15:59:58 root Exp $"; |
4 | * "$Id: time.C,v 1.10 2006/09/11 20:26:41 root Exp $"; |
5 | */ |
5 | */ |
6 | |
6 | |
7 | /* |
7 | /* |
8 | CrossFire, A Multiplayer game for X-windows |
8 | CrossFire, A Multiplayer game for X-windows |
9 | |
9 | |
… | |
… | |
211 | if (--op->duration > 0) |
211 | if (--op->duration > 0) |
212 | return; |
212 | return; |
213 | |
213 | |
214 | switch (op->subtype) |
214 | switch (op->subtype) |
215 | { |
215 | { |
216 | case FORCE_CONFUSION: |
216 | case FORCE_CONFUSION: |
217 | if (op->env != NULL) |
217 | if (op->env != NULL) |
218 | { |
218 | { |
219 | CLEAR_FLAG (op->env, FLAG_CONFUSED); |
219 | CLEAR_FLAG (op->env, FLAG_CONFUSED); |
220 | new_draw_info (NDI_UNIQUE, 0, op->env, "You regain your senses.\n"); |
220 | new_draw_info (NDI_UNIQUE, 0, op->env, "You regain your senses.\n"); |
221 | } |
221 | } |
222 | |
222 | |
223 | default: |
223 | default: |
224 | if (op->env != NULL) |
224 | if (op->env != NULL) |
225 | { |
225 | { |
226 | CLEAR_FLAG (op, FLAG_APPLIED); |
226 | CLEAR_FLAG (op, FLAG_APPLIED); |
227 | change_abil (op->env, op); |
227 | change_abil (op->env, op); |
228 | fix_player (op->env); |
228 | fix_player (op->env); |
229 | } |
229 | } |
230 | } |
230 | } |
231 | remove_ob (op); |
231 | remove_ob (op); |
232 | free_object (op); |
232 | free_object (op); |
233 | } |
233 | } |
234 | |
234 | |
… | |
… | |
593 | if (op->map == NULL) |
593 | if (op->map == NULL) |
594 | return op; |
594 | return op; |
595 | |
595 | |
596 | switch (op->type) |
596 | switch (op->type) |
597 | { |
597 | { |
598 | case THROWN_OBJ: |
598 | case THROWN_OBJ: |
599 | { |
599 | { |
600 | object *payload = op->inv; |
600 | object *payload = op->inv; |
601 | |
601 | |
602 | if (payload == NULL) |
602 | if (payload == NULL) |
603 | return NULL; |
603 | return NULL; |
604 | remove_ob (payload); |
604 | remove_ob (payload); |
605 | remove_ob (op); |
605 | remove_ob (op); |
606 | free_object (op); |
606 | free_object (op); |
607 | return payload; |
607 | return payload; |
608 | } |
608 | } |
609 | |
609 | |
610 | case ARROW: |
610 | case ARROW: |
611 | if (op->speed >= MIN_ACTIVE_SPEED) |
611 | if (op->speed >= MIN_ACTIVE_SPEED) |
612 | op = fix_stopped_arrow (op); |
612 | op = fix_stopped_arrow (op); |
613 | return op; |
613 | return op; |
614 | |
614 | |
615 | default: |
615 | default: |
616 | return op; |
616 | return op; |
617 | } |
617 | } |
618 | } |
618 | } |
619 | |
619 | |
620 | /* fix_stopped_item() - put stopped item where stop_item() had found it. |
620 | /* fix_stopped_item() - put stopped item where stop_item() had found it. |
621 | * Inserts item into the old map, or merges it if it already is on the map. |
621 | * Inserts item into the old map, or merges it if it already is on the map. |
… | |
… | |
1423 | animate_object (op, op->direction); |
1423 | animate_object (op, op->direction); |
1424 | |
1424 | |
1425 | if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) |
1425 | if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) |
1426 | make_sure_seen (op); |
1426 | make_sure_seen (op); |
1427 | } |
1427 | } |
|
|
1428 | |
1428 | if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) |
1429 | if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) |
1429 | { |
1430 | { |
1430 | change_object (op); |
1431 | change_object (op); |
1431 | return 1; |
1432 | return 1; |
1432 | } |
1433 | } |
|
|
1434 | |
1433 | if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY)) |
1435 | if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY)) |
1434 | generate_monster (op); |
1436 | generate_monster (op); |
1435 | |
1437 | |
1436 | if (QUERY_FLAG (op, FLAG_IS_USED_UP) && --op->stats.food <= 0) |
1438 | if (QUERY_FLAG (op, FLAG_IS_USED_UP) && --op->stats.food <= 0) |
1437 | { |
1439 | { |
… | |
… | |
1442 | /* IF necessary, delete the item from the players inventory */ |
1444 | /* IF necessary, delete the item from the players inventory */ |
1443 | object *pl = is_player_inv (op); |
1445 | object *pl = is_player_inv (op); |
1444 | |
1446 | |
1445 | if (pl) |
1447 | if (pl) |
1446 | esrv_del_item (pl->contr, op->count); |
1448 | esrv_del_item (pl->contr, op->count); |
|
|
1449 | |
1447 | remove_ob (op); |
1450 | remove_ob (op); |
|
|
1451 | |
1448 | if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) |
1452 | if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) |
1449 | make_sure_not_seen (op); |
1453 | make_sure_not_seen (op); |
|
|
1454 | |
1450 | free_object (op); |
1455 | free_object (op); |
1451 | } |
1456 | } |
|
|
1457 | |
1452 | return 1; |
1458 | return 1; |
1453 | } |
1459 | } |
1454 | switch (op->type) |
1460 | switch (op->type) |
1455 | { |
1461 | { |
1456 | |
|
|
1457 | case SPELL_EFFECT: |
1462 | case SPELL_EFFECT: |
1458 | move_spell_effect (op); |
1463 | move_spell_effect (op); |
1459 | return 1; |
1464 | return 1; |
1460 | |
1465 | |
1461 | case ROD: |
1466 | case ROD: |
1462 | case HORN: |
1467 | case HORN: |
1463 | regenerate_rod (op); |
1468 | regenerate_rod (op); |
1464 | return 1; |
1469 | return 1; |
1465 | |
1470 | |
1466 | case FORCE: |
1471 | case FORCE: |
1467 | case POTION_EFFECT: |
1472 | case POTION_EFFECT: |
1468 | remove_force (op); |
1473 | remove_force (op); |
1469 | return 1; |
1474 | return 1; |
1470 | |
1475 | |
1471 | case BLINDNESS: |
1476 | case BLINDNESS: |
1472 | remove_blindness (op); |
1477 | remove_blindness (op); |
1473 | return 0; |
1478 | return 0; |
1474 | |
1479 | |
1475 | case POISONING: |
1480 | case POISONING: |
1476 | poison_more (op); |
1481 | poison_more (op); |
1477 | return 0; |
1482 | return 0; |
1478 | |
1483 | |
1479 | case DISEASE: |
1484 | case DISEASE: |
1480 | move_disease (op); |
1485 | move_disease (op); |
1481 | return 0; |
1486 | return 0; |
1482 | |
1487 | |
1483 | case SYMPTOM: |
1488 | case SYMPTOM: |
1484 | move_symptom (op); |
1489 | move_symptom (op); |
1485 | return 0; |
1490 | return 0; |
1486 | |
1491 | |
1487 | case THROWN_OBJ: |
1492 | case THROWN_OBJ: |
1488 | case ARROW: |
1493 | case ARROW: |
1489 | move_arrow (op); |
1494 | move_arrow (op); |
1490 | return 0; |
1495 | return 0; |
1491 | |
1496 | |
1492 | case LIGHTNING: /* It now moves twice as fast */ |
1497 | case LIGHTNING: /* It now moves twice as fast */ |
1493 | move_bolt (op); |
1498 | move_bolt (op); |
1494 | return 0; |
1499 | return 0; |
1495 | |
1500 | |
1496 | case DOOR: |
1501 | case DOOR: |
1497 | remove_door (op); |
1502 | remove_door (op); |
1498 | return 0; |
1503 | return 0; |
1499 | |
1504 | |
1500 | case LOCKED_DOOR: |
1505 | case LOCKED_DOOR: |
1501 | remove_door2 (op); |
1506 | remove_door2 (op); |
1502 | return 0; |
1507 | return 0; |
1503 | |
1508 | |
1504 | case TELEPORTER: |
1509 | case TELEPORTER: |
1505 | move_teleporter (op); |
1510 | move_teleporter (op); |
1506 | return 0; |
1511 | return 0; |
1507 | |
1512 | |
1508 | case GOLEM: |
1513 | case GOLEM: |
1509 | move_golem (op); |
1514 | move_golem (op); |
1510 | return 0; |
1515 | return 0; |
1511 | |
1516 | |
1512 | case EARTHWALL: |
1517 | case EARTHWALL: |
1513 | hit_player (op, 2, op, AT_PHYSICAL, 1); |
1518 | hit_player (op, 2, op, AT_PHYSICAL, 1); |
1514 | return 0; |
1519 | return 0; |
1515 | |
1520 | |
1516 | case FIREWALL: |
1521 | case FIREWALL: |
1517 | move_firewall (op); |
1522 | move_firewall (op); |
1518 | if (op->stats.maxsp) |
1523 | if (op->stats.maxsp) |
1519 | animate_turning (op); |
1524 | animate_turning (op); |
1520 | return 0; |
1525 | return 0; |
1521 | |
1526 | |
1522 | case MOOD_FLOOR: |
1527 | case MOOD_FLOOR: |
1523 | do_mood_floor (op); |
1528 | do_mood_floor (op); |
1524 | return 0; |
1529 | return 0; |
1525 | |
1530 | |
1526 | case GATE: |
1531 | case GATE: |
1527 | move_gate (op); |
1532 | move_gate (op); |
1528 | return 0; |
1533 | return 0; |
1529 | |
1534 | |
1530 | case TIMED_GATE: |
1535 | case TIMED_GATE: |
1531 | move_timed_gate (op); |
1536 | move_timed_gate (op); |
1532 | return 0; |
1537 | return 0; |
1533 | |
1538 | |
1534 | case TRIGGER: |
1539 | case TRIGGER: |
1535 | case TRIGGER_BUTTON: |
1540 | case TRIGGER_BUTTON: |
1536 | case TRIGGER_PEDESTAL: |
1541 | case TRIGGER_PEDESTAL: |
1537 | case TRIGGER_ALTAR: |
1542 | case TRIGGER_ALTAR: |
1538 | animate_trigger (op); |
1543 | animate_trigger (op); |
1539 | return 0; |
1544 | return 0; |
1540 | |
1545 | |
1541 | case DETECTOR: |
1546 | case DETECTOR: |
1542 | move_detector (op); |
1547 | move_detector (op); |
1543 | |
1548 | |
1544 | case DIRECTOR: |
1549 | case DIRECTOR: |
1545 | if (op->stats.maxsp) |
1550 | if (op->stats.maxsp) |
1546 | animate_turning (op); |
1551 | animate_turning (op); |
1547 | return 0; |
1552 | return 0; |
1548 | |
1553 | |
1549 | case HOLE: |
1554 | case HOLE: |
1550 | move_hole (op); |
1555 | move_hole (op); |
1551 | return 0; |
1556 | return 0; |
1552 | |
1557 | |
1553 | case DEEP_SWAMP: |
1558 | case DEEP_SWAMP: |
1554 | move_deep_swamp (op); |
1559 | move_deep_swamp (op); |
1555 | return 0; |
1560 | return 0; |
1556 | |
1561 | |
1557 | case RUNE: |
1562 | case RUNE: |
1558 | case TRAP: |
1563 | case TRAP: |
1559 | move_rune (op); |
1564 | move_rune (op); |
1560 | return 0; |
1565 | return 0; |
1561 | |
1566 | |
1562 | case PLAYERMOVER: |
1567 | case PLAYERMOVER: |
1563 | move_player_mover (op); |
1568 | move_player_mover (op); |
1564 | return 0; |
1569 | return 0; |
1565 | |
1570 | |
1566 | case CREATOR: |
1571 | case CREATOR: |
1567 | move_creator (op); |
1572 | move_creator (op); |
1568 | return 0; |
1573 | return 0; |
1569 | |
1574 | |
1570 | case MARKER: |
1575 | case MARKER: |
1571 | move_marker (op); |
1576 | move_marker (op); |
1572 | return 0; |
1577 | return 0; |
1573 | |
1578 | |
1574 | case PLAYER_CHANGER: |
1579 | case PLAYER_CHANGER: |
1575 | move_player_changer (op); |
1580 | move_player_changer (op); |
1576 | return 0; |
1581 | return 0; |
1577 | |
1582 | |
1578 | case PEACEMAKER: |
1583 | case PEACEMAKER: |
1579 | move_peacemaker (op); |
1584 | move_peacemaker (op); |
1580 | return 0; |
1585 | return 0; |
1581 | } |
1586 | } |
1582 | |
1587 | |
1583 | return 0; |
1588 | return 0; |
1584 | } |
1589 | } |