[CF-Devel] synchronizing multipart animation

crossfire-devel-admin at archives.real-time.com crossfire-devel-admin at archives.real-time.com
Sun May 25 11:44:31 CDT 2003


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]
    
 

-- 
+++ GMX - Mail, Messaging & more  
     
     http://www.gmx.net
     
      +++
Bitte lächeln! Fotogalerie online mit GMX ohne eigene Homepage!


_______________________________________________
crossfire-devel mailing list
     
     crossfire-devel at lists.real-time.com
     
     
     https://mailman.real-time.com/mailman/listinfo/crossfire-devel
     
     
    


More information about the crossfire mailing list