I think the issue is the script after "/////////////// GIVING NEW SCOPE FOR PLAYER" only runs level.friendly2's upper torso animation, not his legs.
Running "setmotionanim idle" should include idling his legs too, but I haven't tested this for myself yet.
If that doesn't work, you may have to do a separate mini thread to force him to stay at one origin for a few seconds (stayhere thread).
Or try using just "anim idle" instead. The proper "waittill" anim format is at the bottom.
Code:
/////////////// GIVING NEW SCOPE FOR PLAYER
level.friendly2.avoidplayer = 0
level.friendly2 exec global/disable_ai.scr
level.friendly2 lookat $player
level.friendly2 runto $player
level.friendly2 waittill movedone
level.friendly2 exec global/stand.scr
level.friendly2 say medic_heal1
// level.friendly2 thread stayhere
level.friendly2 setmotionanim idle
level.friendly2 waittill flaggedanimdone
// freezeplayer
// $player safeholster 1
// wait 0.1
$player take weapons/springfield.tik
level.friendly2 upperanim pass_canteen_start
level.friendly2 waittill upperanimdone
$player item weapons/springfield2.tik
$player playsound springfield_snd_pickup
level.friendly2 upperanim pass_canteen_end
level.friendly2 waittill upperanimdone
iprintlnbold "Sergeant Hammon gave you a more powerfull scope for your sniper."
// releaseplayer $player
level.friendly2 exec global/enable_ai.scr
level.friendly2.avoidplayer = 1
wait 0.1
$player useweaponclass rifle
Code:
stayhere:
local.origin = self.origin
local.c = 0
while(self != NULL && local.c < 3) // 3 seconds
{
wait 0.1
self.origin = local.origin
local.c = local.c + 0.1
}
end
Code:
(anim idle --> waittill animdone), (setmotionanim --> waittill flaggedanimdone), (upperanim or setupperanim --> waittill upperanimdone).
using "upperanim" for some animations won't look right unless "setmotionanim" is used; same applies for some "setmotionanim"s unless "upperanim" is used.