This file is part of Lugaru.
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
+Lugaru is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
-This program is distributed in the hope that it will be useful,
+Lugaru is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+along with Lugaru. If not, see <http://www.gnu.org/licenses/>.
*/
/**> HEADER FILES <**/
extern bool visibleloading;
-/* convenience functions
- */
-Joint& Skeleton::joint(int bodypart)
-{
- return joints[jointlabels[bodypart]];
-}
-XYZ& Skeleton::jointPos(int bodypart)
-{
- return joint(bodypart).position;
-}
-XYZ& Skeleton::jointVel(int bodypart)
-{
- return joint(bodypart).velocity;
-}
-
-
/* EFFECT
*/
void dealloc2(void* param)
{
free(param);
- param = 0; // FIXME: does this *do* anything???
}
enum {boneconnect, constraint, muscle};
XYZ bounceness;
const int numrepeats = 3;
float groundlevel = .15;
- int i, j, k, l, m;
+ int i, j, k, m;
XYZ temp;
XYZ terrainnormal;
int whichhit;
if (tutoriallevel != 1 || id == 0)
if (findLengthfast(&bounceness) > 8000 && breaking) {
- objects.model[k].MakeDecal(breakdecal, DoRotation(temp - objects.position[k], 0, -objects.yaw[k], 0), .4, .5, Random() % 360);
+ // FIXME: this crashes because k is not initialized!
+ // to reproduce, type 'wolfie' in console and play a while
+ // I'll just comment it out for now
+ //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 = false;
camerashake += .6;
{
static int i;
for (i = 0; i < num_joints; i++) {
- if (((joints[i].label != leftknee && joints[i].label != rightknee) || lowforward.y > -.1 || joints[i].mass < 5) && ((joints[i].label != rightelbow && joints[i].label != rightelbow) || forward.y < .3))
+ if (
+ (
+ ((joints[i].label != leftknee) && (joints[i].label != rightknee)) ||
+ (lowforward.y > -.1) ||
+ (joints[i].mass < 5)
+ ) && (
+ ((joints[i].label != leftelbow) && (joints[i].label != rightelbow)) ||
+ (forward.y < .3)
+ )
+ )
joints[i].velocity.y += gravity * multiplier / (*scale);
}
}
int parentID;
FILE *tfile;
float lSize;
- int i, j, tempmuscle;
-
- int newload;
+ int i, j;
int edit;
LOGFUNC;
-
- newload = 0;
-
num_models = 7;
// load various models
}
// read num_muscles
- tempmuscle = num_muscles;
funpackf(tfile, "Bi", &num_muscles);
// allocate memory
delete [] muscles; //dealloc2(muscles);
muscles = (Muscle*)new Muscle[num_muscles]; //malloc(sizeof(Muscle)*num_muscles);
- newload = 1;
-
// for each muscle...
for (i = 0; i < num_muscles; i++) {
// read info
- tempmuscle = muscles[i].numvertices;
funpackf(tfile, "Bf Bf Bf Bf Bf Bi Bi", &muscles[i].length, &muscles[i].targetlength, &muscles[i].minlength, &muscles[i].maxlength, &muscles[i].strength, &muscles[i].type, &muscles[i].numvertices);
// allocate memory for vertices
fseek(tfile, lSize, SEEK_CUR);
// read numverticeslow
- tempmuscle = muscles[i].numverticeslow;
funpackf(tfile, "Bi", &muscles[i].numverticeslow);
if (muscles[i].numverticeslow) {
fseek ( tfile, lSize, SEEK_CUR);
}
- // ???
- lSize = sizeof(int);
for (j = 0; j < num_muscles; j++) {
for (i = 0; i < muscles[j].numverticeslow; i++) {
- if (muscles[j].numverticeslow && muscles[j].verticeslow[i] < modellow.vertexNum)
+ if (muscles[j].verticeslow[i] < modellow.vertexNum)
modellow.owner[muscles[j].verticeslow[i]] = j;
}
}
fseek(tfile, lSize, SEEK_CUR);
// read numverticesclothes
- tempmuscle = muscles[i].numverticesclothes;
funpackf(tfile, "Bi", &muscles[i].numverticesclothes);
// read verticesclothes
selected = 0;
memset(forwardjoints, 0, sizeof(forwardjoints));
- // XYZ forward;
+ // XYZ forward;
id = 0;
memset(lowforwardjoints, 0, sizeof(lowforwardjoints));
- // XYZ lowforward;
+ // XYZ lowforward;
- // XYZ specialforward[5];
+ // XYZ specialforward[5];
memset(jointlabels, 0, sizeof(jointlabels));
- // Model model[7];
- // Model modellow;
- // Model modelclothes;
+ // Model model[7];
+ // Model modellow;
+ // Model modelclothes;
num_models = 0;
- // Model drawmodel;
- // Model drawmodellow;
- // Model drawmodelclothes;
+ // Model drawmodel;
+ // Model drawmodellow;
+ // Model drawmodelclothes;
clothes = 0;
spinny = 0;
{
int i = 0;
- bool allocate = true;
-
- allocate = ((ani.numframes != numframes) || (ani.joints != joints));
+ bool allocate = ((ani.numframes != numframes) || (ani.joints != joints));
if (allocate)
deallocate();
attack = ani.attack;
joints = ani.joints;
weapontargetnum = ani.weapontargetnum;
+ offset = ani.offset;
if (allocate)
position = (XYZ**)malloc(sizeof(XYZ*)*ani.joints);