ent_bonereset_all + end_blendpose

Posted By: Superku

ent_bonereset_all + end_blendpose - 05/02/17 14:46

Hello!
1) Apparently ent_bonereset_all() is not working in the sense of updating the visible mesh of an entity (at least when not GPU animated) when it's the only bone operation called that frame.

Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////

void main()
{
	fps_max = 60;
	video_mode = 10;
	level_load(NULL);
	ENTITY* ent_minitest = ent_create("minitest.mdl",vector(256,0,0),NULL);
	ent_minitest.pan = 180;
	while(1)
	{
		if(key_1) ent_animate(ent_minitest,"testB",100,0);
		if(key_2) ent_bonereset_all(ent_minitest);
		if(key_3) ent_bonereset(ent_minitest,"Bone1");
		wait(1);
	}
}


Download code + model

A workaround: Resetting a random other bone that frame. This will update the rest of the mesh as well.


EDIT:
2) Back to my original problem from which the first one originated:
I cannot copy to (or from?) another entity.pose than pose 1 unless I've used ent_animate with pose != 1 at least once:
Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////

void main()
{
	fps_max = 60;
	video_mode = 10;
	level_load(NULL);
	ENTITY* ent_minitest = ent_create("minitest.mdl",vector(256,0,0),NULL);
	ent_minitest.pan = 180;
	while(1)
	{
		if(key_w) // first press [s]
		{
			ent_minitest.pose = 2;
			ent_animate(ent_minitest,"testA",100,0);
		}
		if(key_s) // press this first, then [space] -> no effect
		{
			ent_minitest.pose = 1;
			ent_animate(ent_minitest,"testA",100,0);
			int i;
			for(i = 1; i <= 4; i++) ent_bonerotate(ent_minitest,str_printf(NULL,"Bone%d",i),vector(sinv(total_ticks*5)*15*(1-2*(i > 2)),0,0));
			ent_blendpose(ent_minitest,2,1,100); // has no effect, or the subsequent ent_blendpose call
		}
		ent_minitest.pose = 1;
		ent_animate(ent_minitest,"testB",100,0);
		if(key_space) ent_blendpose(ent_minitest,1,2,100);
		
		wait(1);
	}
}


Press [S] first. This should copy the animation to pose 2 (I use stuff like that to save an old animation state for a couple of frames, which normally works quite good - the code here is just to demonstrate the issue).
When you now press [Space] it should show that animation instead of "testB". This only happens though when you press [W] at least once.
Posted By: jcl

Re: ent_bonereset_all + end_blendpose - 05/10/17 10:50

Ent_bonereset resets the bones, but does indeed not update the mesh. I've added this to our list of things to check and fix.
© 2024 lite-C Forums