--- deliantra/server/common/button.C 2006/12/25 11:25:49 1.19 +++ deliantra/server/common/button.C 2006/12/26 08:54:58 1.20 @@ -69,8 +69,7 @@ case GATE: case HOLE: tmp->value = tmp->stats.maxsp ? !state : state; - tmp->speed = 0.5; - update_ob_speed (tmp); + tmp->set_speed (0.5); break; case CF_HANDLE: @@ -105,21 +104,19 @@ break; case TIMED_GATE: - tmp->speed = tmp->arch->clone.speed; - update_ob_speed (tmp); /* original values */ + tmp->set_speed (tmp->arch->clone.speed); tmp->value = tmp->arch->clone.value; tmp->stats.sp = 1; tmp->stats.hp = tmp->stats.maxhp; /* Handle multipart gates. We copy the value for the other parts * from the head - this ensures that the data will consistent */ - for (tmp = tmp->more; tmp != NULL; tmp = tmp->more) + for (tmp = tmp->more; tmp; tmp = tmp->more) { - tmp->speed = tmp->head->speed; tmp->value = tmp->head->value; tmp->stats.sp = tmp->head->stats.sp; tmp->stats.hp = tmp->head->stats.hp; - update_ob_speed (tmp); + tmp->set_speed (tmp->head->speed); } break; @@ -416,18 +413,13 @@ if (state) { use_trigger (op); - if (op->stats.exp > 0) /* check sanity */ - op->speed = 1.0 / op->stats.exp; - else - op->speed = 1.0; - update_ob_speed (op); + op->set_speed (op->stats.exp > 0 ? 1. / op->stats.exp : 1.); op->speed_left = -1; } else { use_trigger (op); - op->speed = 0; - update_ob_speed (op); + op->set_speed (0); } } @@ -572,8 +564,7 @@ { op->stats.wc = 0; op->value = !op->value; - op->speed = 0; - update_ob_speed (op); + op->set_speed (0); } } return 0; @@ -583,13 +574,16 @@ { if (in_movement) return 0; + push = 1; } + if (NUM_ANIMATIONS (op) > 1) { SET_ANIMATION (op, push); update_object (op, UP_OBJ_FACE); } + trigger_move (op, push); return 1;