I put the below change into CVS. Andreas Vogl wrote: > There is an age-old bug in the Crossfire server which causes > multi-part animations to ge out of sunchronization. > I have noticed that it happens a lot more often nowadays, > to the point where it really gets annoying. > I manage to reproduce it reliably when I enter scorn zoo > (downstairs) repeadedly and run around there. > > I have no idea what is really causing the sync error, > but the root problems is obvious: Multi part animations > start in the same state, but they don't run synchronized. > > I've written a trivial change which makes all multi-tails > copy the animation state from their head, instead of > running their own animation cycles. > I've tested it and have never again seen multi-parts getting > out of synchronization. > > > AndreasV > > Below is the new, modified code from the animate_object() > function of "common/anim.c": > > > void animate_object(object *op, int dir) { > int max_state; /* Max animation state object should be drawn in */ > int base_state; /* starting index # to draw from */ > > if(!op->animation_id || !NUM_ANIMATIONS(op)) { > LOG(llevError,"Object lacks animation.\n"); > dump_object(op); > return; > } > > if (op->head && op->head != op) { > /* all multi-tail parts run synchronized with their head */ > dir = op->head->direction; > > if (NUM_ANIMATIONS(op) == NUM_ANIMATIONS(op->head)) > op->state = op->head->state; > else > ++op->state; > } > else { > ++op->state; /* increase draw state */ > } > > /* If object is turning, then max animation state is half through the > * animations. Otherwise, we can use all the animations. > */ > max_state=NUM_ANIMATIONS(op)/ NUM_FACINGS(op); > base_state=0; > ... > ... > [rest of the funtion stay the same] > > > _______________________________________________ crossfire-devel mailing list crossfire-devel at lists.real-time.com https://mailman.real-time.com/mailman/listinfo/crossfire-devel