extern float gravity;
extern Skeleton testskeleton;
extern Terrain terrain;
-extern int channels[100];
extern Objects objects;
extern int environment;
-extern float terraindetail;
extern float camerashake;
extern bool freeze;
extern int detail;
extern int whichjointstartarray[26];
extern int whichjointendarray[26];
-extern Game * pgame;
extern bool visibleloading;
void dealloc2(void* param){
param=0;
}
+enum {boneconnect, constraint, muscle};
+
void Muscle::DoConstraint(bool spinny)
{
static XYZ vel;
if(free){
freetime+=multiplier;
- whichpatchx=coords->x/(terrain.size/subdivision*terrain.scale*terraindetail);
- whichpatchz=coords->z/(terrain.size/subdivision*terrain.scale*terraindetail);
+ whichpatchx=coords->x/(terrain.size/subdivision*terrain.scale);
+ whichpatchz=coords->z/(terrain.size/subdivision*terrain.scale);
terrainlight=*coords;
objects.SphereCheckPossible(&terrainlight, 1);
if(tutoriallevel!=1||id==0)
if(findLengthfast(&bounceness)>8000&&breaking){
- objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.rotation[k],0),.4,.5,Random()%360);
+ objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.yaw[k],0),.4,.5,Random()%360);
Sprite::MakeSprite(cloudsprite, joints[i].position*(*scale)+*coords,joints[i].velocity*.06, 1,1,1, 4, .2);
//Sprite::MakeSprite(cloudsprite, joints[i].position*(*scale)+*coords,joints[i].velocity*.06, 1,1,1, 1, .2);
breaking=0;
friction=objects.friction[k];
start=joints[i].realoldposition;
end=joints[i].position*(*scale)+*coords;
- whichhit=objects.model[k].LineCheckPossible(&start,&end,&temp,&objects.position[k],&objects.rotation[k]);
+ whichhit=objects.model[k].LineCheckPossible(&start,&end,&temp,&objects.position[k],&objects.yaw[k]);
if(whichhit!=-1){
if(joints[i].label==groin&&!joints[i].locked&&joints[i].delay<=0){
joints[i].locked=1;
}
}
- terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0)*-1;
+ terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.yaw[k],0)*-1;
if(terrainnormal.y>.8)freefall=0;
bounceness=terrainnormal*findLength(&joints[i].velocity)*(abs(normaldotproduct(joints[i].velocity,terrainnormal)));
if(findLengthfast(&joints[i].velocity)>findLengthfast(&joints[i].oldvelocity)){
}
if(tutoriallevel!=1||id==0)
if(findLengthfast(&bounceness)>4000&&breaking){
- objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.rotation[k],0),.4,.5,Random()%360);
+ objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.yaw[k],0),.4,.5,Random()%360);
Sprite::MakeSprite(cloudsprite, joints[i].position*(*scale)+*coords,joints[i].velocity*.06, 1,1,1, 4, .2);
breaking=0;
camerashake+=.6;
//Make this less stupid
start=joints[jointlabels[whichjointstartarray[i]]].position*(*scale)+*coords;
end=joints[jointlabels[whichjointendarray[i]]].position*(*scale)+*coords;
- whichhit=objects.model[k].LineCheckSlidePossible(&start,&end,&temp,&objects.position[k],&objects.rotation[k]);
+ whichhit=objects.model[k].LineCheckSlidePossible(&start,&end,&temp,&objects.position[k],&objects.yaw[k]);
if(whichhit!=-1){
joints[jointlabels[whichjointendarray[i]]].position=(end-*coords)/(*scale);
for(j=0; j<num_muscles; j++){
void Skeleton::AddMuscle(int attach1,int attach2,float minlength,float maxlength,int type)
{
+ const int max_muscles = 100; // FIXME: Probably can be dropped
if(num_muscles<max_muscles-1&&attach1<num_joints&&attach1>=0&&attach2<num_joints&&attach2>=0&&attach1!=attach2){
muscles[num_muscles].parent1=&joints[attach1];
muscles[num_muscles].parent2=&joints[attach2];
height=aheight;
attack=aattack;
- if(visibleloading)pgame->LoadingScreen();
+ if(visibleloading) Game::LoadingScreen();
tfile=fopen( fixedFN, "rb" );
if(tfile){