… | |
… | |
1075 | void |
1075 | void |
1076 | mapspace::update_ () |
1076 | mapspace::update_ () |
1077 | { |
1077 | { |
1078 | object *tmp, *last = 0; |
1078 | object *tmp, *last = 0; |
1079 | uint8 flags = P_UPTODATE, light = 0, anywhere = 0; |
1079 | uint8 flags = P_UPTODATE, light = 0, anywhere = 0; |
1080 | facetile *top, *floor, *middle; |
1080 | faceidx top, floor, middle; |
1081 | object *top_obj, *floor_obj, *middle_obj; |
1081 | object *top_obj, *floor_obj, *middle_obj; |
1082 | MoveType move_block = 0, move_slow = 0, move_on = 0, move_off = 0, move_allow = 0; |
1082 | MoveType move_block = 0, move_slow = 0, move_on = 0, move_off = 0, move_allow = 0; |
1083 | |
1083 | |
1084 | middle = blank_face; |
1084 | middle = blank_face; |
1085 | top = blank_face; |
1085 | top = blank_face; |
… | |
… | |
1134 | } |
1134 | } |
1135 | /* Find the highest visible face around. If equal |
1135 | /* Find the highest visible face around. If equal |
1136 | * visibilities, we still want the one nearer to the |
1136 | * visibilities, we still want the one nearer to the |
1137 | * top |
1137 | * top |
1138 | */ |
1138 | */ |
1139 | else if (middle == blank_face || (tmp->face->visibility > middle->visibility && !anywhere)) |
1139 | else if (middle == blank_face || (::faces [tmp->face].visibility > ::faces [middle].visibility && !anywhere)) |
1140 | { |
1140 | { |
1141 | middle = tmp->face; |
1141 | middle = tmp->face; |
1142 | middle_obj = tmp; |
1142 | middle_obj = tmp; |
1143 | } |
1143 | } |
1144 | } |
1144 | } |
… | |
… | |
1669 | return default_region; |
1669 | return default_region; |
1670 | |
1670 | |
1671 | return ::region::default_region (); |
1671 | return ::region::default_region (); |
1672 | } |
1672 | } |
1673 | |
1673 | |
|
|
1674 | /* picks a random object from a style map. |
|
|
1675 | * Redone by MSW so it should be faster and not use static |
|
|
1676 | * variables to generate tables. |
|
|
1677 | */ |
|
|
1678 | object * |
|
|
1679 | maptile::pick_random_object () const |
|
|
1680 | { |
|
|
1681 | /* while returning a null object will result in a crash, that |
|
|
1682 | * is actually preferable to an infinite loop. That is because |
|
|
1683 | * most servers will automatically restart in case of crash. |
|
|
1684 | * Change the logic on getting the random space - shouldn't make |
|
|
1685 | * any difference, but this seems clearer to me. |
|
|
1686 | */ |
|
|
1687 | for (int i = 1000; --i;) |
|
|
1688 | { |
|
|
1689 | object *pick = at (rndm (width), rndm (height)).bot; |
1674 | |
1690 | |
|
|
1691 | // do not prefer big monsters just because they are big. |
|
|
1692 | if (pick && pick->head_ () == pick) |
|
|
1693 | return pick->head_ (); |
|
|
1694 | } |
|
|
1695 | |
|
|
1696 | // instead of crashing in the unlikely(?) case, try to return *something* |
|
|
1697 | return get_archetype ("blocked"); |
|
|
1698 | } |
|
|
1699 | |