void StopMoving(int chaa) { Character_StopMoving(&game.chars[chaa]); }
void CharacterInfo::update_character_moving(int &char_index, CharacterExtras *chex, int &doing_nothing) { if ((walking > 0) && (room == displayed_room)) { if (walkwait > 0) walkwait--; else { flags &= ~CHF_AWAITINGMOVE; // Move the character int numSteps = wantMoveNow(this, chex); if ((numSteps) && (chex->xwas != INVALID_X)) { // if the zoom level changed mid-move, the walkcounter // might not have come round properly - so sort it out x = chex->xwas; y = chex->ywas; chex->xwas = INVALID_X; } int oldxp = x, oldyp = y; for (int ff = 0; ff < abs(numSteps); ff++) { if (doNextCharMoveStep (this, char_index, chex)) break; if ((walking == 0) || (walking >= TURNING_AROUND)) break; } if (numSteps < 0) { // very small scaling, intersperse the movement // to stop it being jumpy chex->xwas = x; chex->ywas = y; x = ((x) - oldxp) / 2 + oldxp; y = ((y) - oldyp) / 2 + oldyp; } else if (numSteps > 0) chex->xwas = INVALID_X; if ((flags & CHF_ANTIGLIDE) == 0) walkwaitcounter++; } if (loop >= views[view].numLoops) quitprintf("Unable to render character %d (%s) because loop %d does not exist in view %d", index_id, name, loop, view + 1); // check don't overflow loop int framesInLoop = views[view].loops[loop].numFrames; if (frame > framesInLoop) { frame = 1; if (framesInLoop < 2) frame = 0; if (framesInLoop < 1) quitprintf("Unable to render character %d (%s) because there are no frames in loop %d", index_id, name, loop); } if (walking<1) { chex->process_idle_this_time = 1; doing_nothing=1; walkwait=0; chex->animwait = 0; // use standing pic Character_StopMoving(this); frame = 0; CheckViewFrameForCharacter(this); } else if (chex->animwait > 0) chex->animwait--; else { if (flags & CHF_ANTIGLIDE) walkwaitcounter++; if ((flags & CHF_MOVENOTWALK) == 0) { frame++; if (frame >= views[view].loops[loop].numFrames) { // end of loop, so loop back round skipping the standing frame frame = 1; if (views[view].loops[loop].numFrames < 2) frame = 0; } chex->animwait = views[view].loops[loop].frames[frame].speed + animspeed; if (flags & CHF_ANTIGLIDE) walkwait = chex->animwait; else walkwait = 0; CheckViewFrameForCharacter(this); } } doing_nothing = 0; } }