int mapvers;
FILE *tfile;
errno = 0;
- tfile = fopen( Folders::getResourcePath("Maps/"+name).c_str(), "rb" );
- if (tfile) {
- pause_sound(stream_firesound);
- scoreadded = 0;
- windialogue = false;
- hostiletime = 0;
- won = 0;
+ tfile = Folders::openMandatoryFile( Folders::getResourcePath("Maps/"+name), "rb" );
- animation[bounceidleanim].Load((char *)"Idle", middleheight, neutral);
-
- Dialog::dialogs.clear();
+ pause_sound(stream_firesound);
+ scoreadded = 0;
+ windialogue = false;
+ hostiletime = 0;
+ won = 0;
+
+ animation[bounceidleanim].Load((char *)"Idle", middleheight, neutral);
+
+ Dialog::dialogs.clear();
+
+ Dialog::indialogue = -1;
+ cameramode = 0;
+
+ damagedealt = 0;
+ damagetaken = 0;
+
+ if (accountactive)
+ difficulty = accountactive->getDifficulty();
+
+ numhotspots = 0;
+ currenthotspot = -1;
+ bonustime = 1;
+
+ skyboxtexture = 1;
+ skyboxr = 1;
+ skyboxg = 1;
+ skyboxb = 1;
+
+ freeze = 0;
+ winfreeze = 0;
+
+ for (int i = 0; i < 100; i++)
+ bonusnum[i] = 0;
+
+ numfalls = 0;
+ numflipfail = 0;
+ numseen = 0;
+ numstaffattack = 0;
+ numswordattack = 0;
+ numknifeattack = 0;
+ numunarmedattack = 0;
+ numescaped = 0;
+ numflipped = 0;
+ numwallflipped = 0;
+ numthrowkill = 0;
+ numafterkill = 0;
+ numreversals = 0;
+ numattacks = 0;
+ maxalarmed = 0;
+ numresponded = 0;
+
+ bonustotal = startbonustotal;
+ bonus = 0;
+ gameon = 1;
+ changedelay = 0;
+ if (console) {
+ emit_sound_np(consolesuccesssound);
+ freeze = 0;
+ console = false;
+ }
- Dialog::indialogue = -1;
- cameramode = 0;
+ if (!stealthloading) {
+ terrain.numdecals = 0;
+ Sprite::deleteSprites();
+ for (int i = 0; i < objects.numobjects; i++)
+ objects.model[i].numdecals = 0;
- damagedealt = 0;
- damagetaken = 0;
+ int j = objects.numobjects;
+ for (int i = 0; i < j; i++) {
+ objects.DeleteObject(0);
+ if (visibleloading)
+ LoadingScreen();
+ }
- if (accountactive)
- difficulty = accountactive->getDifficulty();
+ for (int i = 0; i < subdivision; i++)
+ for (int j = 0; j < subdivision; j++)
+ terrain.patchobjectnum[i][j] = 0;
+ if (visibleloading)
+ LoadingScreen();
+ }
- numhotspots = 0;
- currenthotspot = -1;
- bonustime = 1;
+ weapons.clear();
+ Person::players.resize(1);
+ funpackf(tfile, "Bi", &mapvers);
+ if (mapvers >= 15)
+ funpackf(tfile, "Bi", &indemo);
+ else
+ indemo = 0;
+ if (mapvers >= 5)
+ funpackf(tfile, "Bi", &maptype);
+ else
+ maptype = mapkilleveryone;
+ if (mapvers >= 6)
+ funpackf(tfile, "Bi", &hostile);
+ else
+ hostile = 1;
+ if (mapvers >= 4)
+ funpackf(tfile, "Bf Bf", &viewdistance, &fadestart);
+ else {
+ viewdistance = 100;
+ fadestart = .6;
+ }
+ if (mapvers >= 2)
+ funpackf(tfile, "Bb Bf Bf Bf", &skyboxtexture, &skyboxr, &skyboxg, &skyboxb);
+ else {
skyboxtexture = 1;
skyboxr = 1;
skyboxg = 1;
skyboxb = 1;
-
- freeze = 0;
- winfreeze = 0;
-
- for (int i = 0; i < 100; i++)
- bonusnum[i] = 0;
-
- numfalls = 0;
- numflipfail = 0;
- numseen = 0;
- numstaffattack = 0;
- numswordattack = 0;
- numknifeattack = 0;
- numunarmedattack = 0;
- numescaped = 0;
- numflipped = 0;
- numwallflipped = 0;
- numthrowkill = 0;
- numafterkill = 0;
- numreversals = 0;
- numattacks = 0;
- maxalarmed = 0;
- numresponded = 0;
-
- bonustotal = startbonustotal;
- bonus = 0;
- gameon = 1;
- changedelay = 0;
- if (console) {
- emit_sound_np(consolesuccesssound);
- freeze = 0;
- console = false;
+ }
+ if (mapvers >= 10)
+ funpackf(tfile, "Bf Bf Bf", &skyboxlightr, &skyboxlightg, &skyboxlightb);
+ else {
+ skyboxlightr = skyboxr;
+ skyboxlightg = skyboxg;
+ skyboxlightb = skyboxb;
+ }
+ if (!stealthloading)
+ funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &Person::players[0]->coords.x, &Person::players[0]->coords.y, &Person::players[0]->coords.z, &Person::players[0]->yaw, &Person::players[0]->targetyaw, &Person::players[0]->num_weapons);
+ if (stealthloading)
+ funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat, &lamefloat, &lamefloat, &lamefloat, &lamefloat, &Person::players[0]->num_weapons);
+ if (Person::players[0]->num_weapons > 0 && Person::players[0]->num_weapons < 5)
+ for (int j = 0; j < Person::players[0]->num_weapons; j++) {
+ Person::players[0]->weaponids[j] = weapons.size();
+ int type;
+ funpackf(tfile, "Bi", &type);
+ weapons.push_back(Weapon(type, 0));
}
- if (!stealthloading) {
- terrain.numdecals = 0;
- Sprite::deleteSprites();
- for (int i = 0; i < objects.numobjects; i++)
- objects.model[i].numdecals = 0;
-
- int j = objects.numobjects;
- for (int i = 0; i < j; i++) {
- objects.DeleteObject(0);
- if (visibleloading)
- LoadingScreen();
- }
+ if (visibleloading)
+ LoadingScreen();
- for (int i = 0; i < subdivision; i++)
- for (int j = 0; j < subdivision; j++)
- terrain.patchobjectnum[i][j] = 0;
- if (visibleloading)
- LoadingScreen();
- }
+ funpackf(tfile, "Bf Bf Bf", &Person::players[0]->armorhead, &Person::players[0]->armorhigh, &Person::players[0]->armorlow);
+ funpackf(tfile, "Bf Bf Bf", &Person::players[0]->protectionhead, &Person::players[0]->protectionhigh, &Person::players[0]->protectionlow);
+ funpackf(tfile, "Bf Bf Bf", &Person::players[0]->metalhead, &Person::players[0]->metalhigh, &Person::players[0]->metallow);
+ funpackf(tfile, "Bf Bf", &Person::players[0]->power, &Person::players[0]->speedmult);
- weapons.clear();
- Person::players.resize(1);
+ funpackf(tfile, "Bi", &Person::players[0]->numclothes);
- funpackf(tfile, "Bi", &mapvers);
- if (mapvers >= 15)
- funpackf(tfile, "Bi", &indemo);
- else
- indemo = 0;
- if (mapvers >= 5)
- funpackf(tfile, "Bi", &maptype);
- else
- maptype = mapkilleveryone;
- if (mapvers >= 6)
- funpackf(tfile, "Bi", &hostile);
- else
- hostile = 1;
- if (mapvers >= 4)
- funpackf(tfile, "Bf Bf", &viewdistance, &fadestart);
- else {
- viewdistance = 100;
- fadestart = .6;
- }
- if (mapvers >= 2)
- funpackf(tfile, "Bb Bf Bf Bf", &skyboxtexture, &skyboxr, &skyboxg, &skyboxb);
- else {
- skyboxtexture = 1;
- skyboxr = 1;
- skyboxg = 1;
- skyboxb = 1;
- }
- if (mapvers >= 10)
- funpackf(tfile, "Bf Bf Bf", &skyboxlightr, &skyboxlightg, &skyboxlightb);
- else {
- skyboxlightr = skyboxr;
- skyboxlightg = skyboxg;
- skyboxlightb = skyboxb;
- }
- if (!stealthloading)
- funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &Person::players[0]->coords.x, &Person::players[0]->coords.y, &Person::players[0]->coords.z, &Person::players[0]->yaw, &Person::players[0]->targetyaw, &Person::players[0]->num_weapons);
- if (stealthloading)
- funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat, &lamefloat, &lamefloat, &lamefloat, &lamefloat, &Person::players[0]->num_weapons);
- if (Person::players[0]->num_weapons > 0 && Person::players[0]->num_weapons < 5)
- for (int j = 0; j < Person::players[0]->num_weapons; j++) {
- Person::players[0]->weaponids[j] = weapons.size();
- int type;
- funpackf(tfile, "Bi", &type);
- weapons.push_back(Weapon(type, 0));
- }
-
- if (visibleloading)
- LoadingScreen();
+ if (mapvers >= 9)
+ funpackf(tfile, "Bi Bi", &Person::players[0]->whichskin, &Person::players[0]->creature);
+ else {
+ Person::players[0]->whichskin = 0;
+ Person::players[0]->creature = rabbittype;
+ }
- funpackf(tfile, "Bf Bf Bf", &Person::players[0]->armorhead, &Person::players[0]->armorhigh, &Person::players[0]->armorlow);
- funpackf(tfile, "Bf Bf Bf", &Person::players[0]->protectionhead, &Person::players[0]->protectionhigh, &Person::players[0]->protectionlow);
- funpackf(tfile, "Bf Bf Bf", &Person::players[0]->metalhead, &Person::players[0]->metalhigh, &Person::players[0]->metallow);
- funpackf(tfile, "Bf Bf", &Person::players[0]->power, &Person::players[0]->speedmult);
+ Person::players[0]->lastattack = -1;
+ Person::players[0]->lastattack2 = -1;
+ Person::players[0]->lastattack3 = -1;
- funpackf(tfile, "Bi", &Person::players[0]->numclothes);
+ //dialogues
+ if (mapvers >= 8) {
+ Dialog::loadDialogs(tfile);
+ }
- if (mapvers >= 9)
- funpackf(tfile, "Bi Bi", &Person::players[0]->whichskin, &Person::players[0]->creature);
- else {
- Person::players[0]->whichskin = 0;
- Person::players[0]->creature = rabbittype;
- }
+ for (int k = 0; k < Person::players[0]->numclothes; k++) {
+ funpackf(tfile, "Bi", &templength);
+ for (int l = 0; l < templength; l++)
+ funpackf(tfile, "Bb", &Person::players[0]->clothes[k][l]);
+ Person::players[0]->clothes[k][templength] = '\0';
+ funpackf(tfile, "Bf Bf Bf", &Person::players[0]->clothestintr[k], &Person::players[0]->clothestintg[k], &Person::players[0]->clothestintb[k]);
+ }
- Person::players[0]->lastattack = -1;
- Person::players[0]->lastattack2 = -1;
- Person::players[0]->lastattack3 = -1;
+ funpackf(tfile, "Bi", &environment);
- //dialogues
- if (mapvers >= 8) {
- Dialog::loadDialogs(tfile);
- }
+ funpackf(tfile, "Bi", &objects.numobjects);
+ for (int i = 0; i < objects.numobjects; i++) {
+ funpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", &objects.type[i], &objects.yaw[i], &objects.pitch[i], &objects.position[i].x, &objects.position[i].y, &objects.position[i].z, &objects.scale[i]);
+ if (objects.type[i] == treeleavestype)
+ objects.scale[i] = objects.scale[i - 1];
+ }
- for (int k = 0; k < Person::players[0]->numclothes; k++) {
+ if (mapvers >= 7) {
+ funpackf(tfile, "Bi", &numhotspots);
+ for (int i = 0; i < numhotspots; i++) {
+ funpackf(tfile, "Bi Bf Bf Bf Bf", &hotspottype[i], &hotspotsize[i], &hotspot[i].x, &hotspot[i].y, &hotspot[i].z);
funpackf(tfile, "Bi", &templength);
- for (int l = 0; l < templength; l++)
- funpackf(tfile, "Bb", &Person::players[0]->clothes[k][l]);
- Person::players[0]->clothes[k][templength] = '\0';
- funpackf(tfile, "Bf Bf Bf", &Person::players[0]->clothestintr[k], &Person::players[0]->clothestintg[k], &Person::players[0]->clothestintb[k]);
+ if (templength)
+ for (int l = 0; l < templength; l++)
+ funpackf(tfile, "Bb", &hotspottext[i][l]);
+ hotspottext[i][templength] = '\0';
+ if (hotspottype[i] == -111)
+ indemo = 1;
}
+ } else
+ numhotspots = 0;
- funpackf(tfile, "Bi", &environment);
+ if (visibleloading)
+ LoadingScreen();
- funpackf(tfile, "Bi", &objects.numobjects);
- for (int i = 0; i < objects.numobjects; i++) {
- funpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", &objects.type[i], &objects.yaw[i], &objects.pitch[i], &objects.position[i].x, &objects.position[i].y, &objects.position[i].z, &objects.scale[i]);
- if (objects.type[i] == treeleavestype)
- objects.scale[i] = objects.scale[i - 1];
- }
+ if (!stealthloading) {
+ objects.center = 0;
+ for (int i = 0; i < objects.numobjects; i++)
+ objects.center += objects.position[i];
+ objects.center /= objects.numobjects;
- if (mapvers >= 7) {
- funpackf(tfile, "Bi", &numhotspots);
- for (int i = 0; i < numhotspots; i++) {
- funpackf(tfile, "Bi Bf Bf Bf Bf", &hotspottype[i], &hotspotsize[i], &hotspot[i].x, &hotspot[i].y, &hotspot[i].z);
- funpackf(tfile, "Bi", &templength);
- if (templength)
- for (int l = 0; l < templength; l++)
- funpackf(tfile, "Bb", &hotspottext[i][l]);
- hotspottext[i][templength] = '\0';
- if (hotspottype[i] == -111)
- indemo = 1;
- }
- } else
- numhotspots = 0;
if (visibleloading)
LoadingScreen();
- if (!stealthloading) {
- objects.center = 0;
- for (int i = 0; i < objects.numobjects; i++)
- objects.center += objects.position[i];
- objects.center /= objects.numobjects;
-
-
- if (visibleloading)
- LoadingScreen();
-
- float maxdistance = 0;
- float tempdist;
- for (int i = 0; i < objects.numobjects; i++) {
- tempdist = distsq(&objects.center, &objects.position[i]);
- if (tempdist > maxdistance) {
- maxdistance = tempdist;
- }
+ float maxdistance = 0;
+ float tempdist;
+ for (int i = 0; i < objects.numobjects; i++) {
+ tempdist = distsq(&objects.center, &objects.position[i]);
+ if (tempdist > maxdistance) {
+ maxdistance = tempdist;
}
- objects.radius = fast_sqrt(maxdistance);
}
+ objects.radius = fast_sqrt(maxdistance);
+ }
- if (visibleloading)
- LoadingScreen();
+ if (visibleloading)
+ LoadingScreen();
- int numplayers;
- funpackf(tfile, "Bi", &numplayers);
- if (numplayers > maxplayers) {
- cout << "Warning: this level contains more players than allowed" << endl;
- }
- for (int i = 1; i < numplayers; i++) {
- unsigned j = 1;
- try {
- Person::players.push_back(shared_ptr<Person>(new Person(tfile, mapvers, j)));
- j++;
- } catch (InvalidPersonException e) {
- }
+ int numplayers;
+ funpackf(tfile, "Bi", &numplayers);
+ if (numplayers > maxplayers) {
+ cout << "Warning: this level contains more players than allowed" << endl;
+ }
+ for (int i = 1; i < numplayers; i++) {
+ unsigned j = 1;
+ try {
+ Person::players.push_back(shared_ptr<Person>(new Person(tfile, mapvers, j)));
+ j++;
+ } catch (InvalidPersonException e) {
}
- if (visibleloading)
- LoadingScreen();
-
- funpackf(tfile, "Bi", &numpathpoints);
- if (numpathpoints > 30 || numpathpoints < 0)
- numpathpoints = 0;
- for (int j = 0; j < numpathpoints; j++) {
- funpackf(tfile, "Bf Bf Bf Bi", &pathpoint[j].x, &pathpoint[j].y, &pathpoint[j].z, &numpathpointconnect[j]);
- for (int k = 0; k < numpathpointconnect[j]; k++) {
- funpackf(tfile, "Bi", &pathpointconnect[j][k]);
- }
+ }
+ if (visibleloading)
+ LoadingScreen();
+
+ funpackf(tfile, "Bi", &numpathpoints);
+ if (numpathpoints > 30 || numpathpoints < 0)
+ numpathpoints = 0;
+ for (int j = 0; j < numpathpoints; j++) {
+ funpackf(tfile, "Bf Bf Bf Bi", &pathpoint[j].x, &pathpoint[j].y, &pathpoint[j].z, &numpathpointconnect[j]);
+ for (int k = 0; k < numpathpointconnect[j]; k++) {
+ funpackf(tfile, "Bi", &pathpointconnect[j][k]);
}
- if (visibleloading)
- LoadingScreen();
+ }
+ if (visibleloading)
+ LoadingScreen();
- funpackf(tfile, "Bf Bf Bf Bf", &mapcenter.x, &mapcenter.y, &mapcenter.z, &mapradius);
+ funpackf(tfile, "Bf Bf Bf Bf", &mapcenter.x, &mapcenter.y, &mapcenter.z, &mapradius);
- SetUpLighting();
- if (environment != oldenvironment)
- Setenvironment(environment);
- oldenvironment = environment;
-
- if (!stealthloading) {
- int j = objects.numobjects;
- objects.numobjects = 0;
- for (int i = 0; i < j; i++) {
- objects.MakeObject(objects.type[i], objects.position[i], objects.yaw[i], objects.pitch[i], objects.scale[i]);
- if (visibleloading)
- LoadingScreen();
- }
+ SetUpLighting();
+ if (environment != oldenvironment)
+ Setenvironment(environment);
+ oldenvironment = environment;
- terrain.DoShadows();
- if (visibleloading)
- LoadingScreen();
- objects.DoShadows();
+ if (!stealthloading) {
+ int j = objects.numobjects;
+ objects.numobjects = 0;
+ for (int i = 0; i < j; i++) {
+ objects.MakeObject(objects.type[i], objects.position[i], objects.yaw[i], objects.pitch[i], objects.scale[i]);
if (visibleloading)
LoadingScreen();
}
- fclose(tfile);
+ terrain.DoShadows();
+ if (visibleloading)
+ LoadingScreen();
+ objects.DoShadows();
+ if (visibleloading)
+ LoadingScreen();
+ }
- for (unsigned i = 0; i < Person::players.size(); i++) {
- if (visibleloading)
- LoadingScreen();
- Person::players[i]->burnt = 0;
- Person::players[i]->bled = 0;
- Person::players[i]->onfire = 0;
- if (i == 0 || Person::players[i]->scale < 0)
- Person::players[i]->scale = .2;
- Person::players[i]->skeleton.free = 0;
- Person::players[i]->skeleton.id = i;
- if (i == 0 && mapvers < 9)
- Person::players[i]->creature = rabbittype;
+ fclose(tfile);
+
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ if (visibleloading)
+ LoadingScreen();
+ Person::players[i]->burnt = 0;
+ Person::players[i]->bled = 0;
+ Person::players[i]->onfire = 0;
+ if (i == 0 || Person::players[i]->scale < 0)
+ Person::players[i]->scale = .2;
+ Person::players[i]->skeleton.free = 0;
+ Person::players[i]->skeleton.id = i;
+ if (i == 0 && mapvers < 9)
+ Person::players[i]->creature = rabbittype;
+ if (Person::players[i]->creature != wolftype) {
+ Person::players[i]->skeleton.Load(
+ (char *)"Skeleton/BasicFigure",
+ (char *)"Skeleton/BasicFigureLow",
+ (char *)"Skeleton/RabbitBelt",
+ (char *)"Models/Body.solid",
+ (char *)"Models/Body2.solid",
+ (char *)"Models/Body3.solid",
+ (char *)"Models/Body4.solid",
+ (char *)"Models/Body5.solid",
+ (char *)"Models/Body6.solid",
+ (char *)"Models/Body7.solid",
+ (char *)"Models/BodyLow.solid",
+ (char *)"Models/Belt.solid", 0);
+ } else {
if (Person::players[i]->creature != wolftype) {
Person::players[i]->skeleton.Load(
(char *)"Skeleton/BasicFigure",
(char *)"Models/Body6.solid",
(char *)"Models/Body7.solid",
(char *)"Models/BodyLow.solid",
- (char *)"Models/Belt.solid", 0);
- } else {
- if (Person::players[i]->creature != wolftype) {
- Person::players[i]->skeleton.Load(
- (char *)"Skeleton/BasicFigure",
- (char *)"Skeleton/BasicFigureLow",
- (char *)"Skeleton/RabbitBelt",
- (char *)"Models/Body.solid",
- (char *)"Models/Body2.solid",
- (char *)"Models/Body3.solid",
- (char *)"Models/Body4.solid",
- (char *)"Models/Body5.solid",
- (char *)"Models/Body6.solid",
- (char *)"Models/Body7.solid",
- (char *)"Models/BodyLow.solid",
- (char *)"Models/Belt.solid", 1);
- Person::players[i]->skeleton.drawmodelclothes.textureptr.load("Textures/Belt.png", 1);
- }
- if (Person::players[i]->creature == wolftype) {
- Person::players[i]->skeleton.Load(
- (char *)"Skeleton/BasicFigureWolf",
- (char *)"Skeleton/BasicFigureWolfLow",
- (char *)"Skeleton/RabbitBelt",
- (char *)"Models/Wolf.solid",
- (char *)"Models/Wolf2.solid",
- (char *)"Models/Wolf3.solid",
- (char *)"Models/Wolf4.solid",
- (char *)"Models/Wolf5.solid",
- (char *)"Models/Wolf6.solid",
- (char *)"Models/Wolf7.solid",
- (char *)"Models/WolfLow.solid",
- (char *)"Models/Belt.solid", 0);
- }
+ (char *)"Models/Belt.solid", 1);
+ Person::players[i]->skeleton.drawmodelclothes.textureptr.load("Textures/Belt.png", 1);
}
-
- Person::players[i]->skeleton.drawmodel.textureptr.load(creatureskin[Person::players[i]->creature][Person::players[i]->whichskin], 1, &Person::players[i]->skeleton.skinText[0], &Person::players[i]->skeleton.skinsize);
-
- Person::players[i]->addClothes();
-
- Person::players[i]->animCurrent = bounceidleanim;
- Person::players[i]->animTarget = bounceidleanim;
- Person::players[i]->frameCurrent = 0;
- Person::players[i]->frameTarget = 1;
- Person::players[i]->target = 0;
- Person::players[i]->speed = 1 + (float)(Random() % 100) / 1000;
- if (difficulty == 0)
- Person::players[i]->speed -= .2;
- if (difficulty == 1)
- Person::players[i]->speed -= .1;
-
- Person::players[i]->velocity = 0;
- Person::players[i]->oldcoords = Person::players[i]->coords;
- Person::players[i]->realoldcoords = Person::players[i]->coords;
-
- Person::players[i]->id = i;
- Person::players[i]->skeleton.id = i;
- Person::players[i]->updatedelay = 0;
- Person::players[i]->normalsupdatedelay = 0;
-
- Person::players[i]->aitype = passivetype;
-
- if (i == 0) {
- Person::players[i]->proportionhead = 1.2;
- Person::players[i]->proportionbody = 1.05;
- Person::players[i]->proportionarms = 1.00;
- Person::players[i]->proportionlegs = 1.1;
- Person::players[i]->proportionlegs.y = 1.05;
- }
- Person::players[i]->headless = 0;
- Person::players[i]->currentoffset = 0;
- Person::players[i]->targetoffset = 0;
-
- Person::players[i]->damagetolerance = 200;
-
if (Person::players[i]->creature == wolftype) {
- if (i == 0 || Person::players[i]->scale < 0)
- Person::players[i]->scale = .23;
- Person::players[i]->damagetolerance = 300;
- }
-
- if (visibleloading)
- LoadingScreen();
- if (cellophane) {
- Person::players[i]->proportionhead.z = 0;
- Person::players[i]->proportionbody.z = 0;
- Person::players[i]->proportionarms.z = 0;
- Person::players[i]->proportionlegs.z = 0;
+ Person::players[i]->skeleton.Load(
+ (char *)"Skeleton/BasicFigureWolf",
+ (char *)"Skeleton/BasicFigureWolfLow",
+ (char *)"Skeleton/RabbitBelt",
+ (char *)"Models/Wolf.solid",
+ (char *)"Models/Wolf2.solid",
+ (char *)"Models/Wolf3.solid",
+ (char *)"Models/Wolf4.solid",
+ (char *)"Models/Wolf5.solid",
+ (char *)"Models/Wolf6.solid",
+ (char *)"Models/Wolf7.solid",
+ (char *)"Models/WolfLow.solid",
+ (char *)"Models/Belt.solid", 0);
}
+ }
- Person::players[i]->tempanimation.Load((char *)"Tempanim", 0, 0);
-
- Person::players[i]->headmorphness = 0;
- Person::players[i]->targetheadmorphness = 1;
- Person::players[i]->headmorphstart = 0;
- Person::players[i]->headmorphend = 0;
-
- Person::players[i]->pausetime = 0;
+ Person::players[i]->skeleton.drawmodel.textureptr.load(creatureskin[Person::players[i]->creature][Person::players[i]->whichskin], 1, &Person::players[i]->skeleton.skinText[0], &Person::players[i]->skeleton.skinsize);
+
+ Person::players[i]->addClothes();
+
+ Person::players[i]->animCurrent = bounceidleanim;
+ Person::players[i]->animTarget = bounceidleanim;
+ Person::players[i]->frameCurrent = 0;
+ Person::players[i]->frameTarget = 1;
+ Person::players[i]->target = 0;
+ Person::players[i]->speed = 1 + (float)(Random() % 100) / 1000;
+ if (difficulty == 0)
+ Person::players[i]->speed -= .2;
+ if (difficulty == 1)
+ Person::players[i]->speed -= .1;
+
+ Person::players[i]->velocity = 0;
+ Person::players[i]->oldcoords = Person::players[i]->coords;
+ Person::players[i]->realoldcoords = Person::players[i]->coords;
+
+ Person::players[i]->id = i;
+ Person::players[i]->skeleton.id = i;
+ Person::players[i]->updatedelay = 0;
+ Person::players[i]->normalsupdatedelay = 0;
+
+ Person::players[i]->aitype = passivetype;
+
+ if (i == 0) {
+ Person::players[i]->proportionhead = 1.2;
+ Person::players[i]->proportionbody = 1.05;
+ Person::players[i]->proportionarms = 1.00;
+ Person::players[i]->proportionlegs = 1.1;
+ Person::players[i]->proportionlegs.y = 1.05;
+ }
+ Person::players[i]->headless = 0;
+ Person::players[i]->currentoffset = 0;
+ Person::players[i]->targetoffset = 0;
- Person::players[i]->dead = 0;
- Person::players[i]->jumppower = 5;
- Person::players[i]->damage = 0;
- Person::players[i]->permanentdamage = 0;
- Person::players[i]->superpermanentdamage = 0;
+ Person::players[i]->damagetolerance = 200;
- Person::players[i]->forwardkeydown = 0;
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->jumpkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->throwkeydown = 0;
-
- Person::players[i]->collided = -10;
- Person::players[i]->loaded = 1;
- Person::players[i]->bloodloss = 0;
- Person::players[i]->weaponactive = -1;
- Person::players[i]->weaponstuck = -1;
- Person::players[i]->bleeding = 0;
- Person::players[i]->deathbleeding = 0;
- Person::players[i]->stunned = 0;
- Person::players[i]->hasvictim = 0;
- Person::players[i]->wentforweapon = 0;
+ if (Person::players[i]->creature == wolftype) {
+ if (i == 0 || Person::players[i]->scale < 0)
+ Person::players[i]->scale = .23;
+ Person::players[i]->damagetolerance = 300;
}
- Person::players[0]->aitype = playercontrolled;
- Person::players[0]->weaponactive = -1;
-
- if (difficulty == 1) {
- Person::players[0]->power = 1 / .9;
- Person::players[0]->damagetolerance = 250;
- } else if (difficulty == 0) {
- Person::players[0]->power = 1 / .8;
- Person::players[0]->damagetolerance = 300;
- Person::players[0]->armorhead *= 1.5;
- Person::players[0]->armorhigh *= 1.5;
- Person::players[0]->armorlow *= 1.5;
+ if (visibleloading)
+ LoadingScreen();
+ if (cellophane) {
+ Person::players[i]->proportionhead.z = 0;
+ Person::players[i]->proportionbody.z = 0;
+ Person::players[i]->proportionarms.z = 0;
+ Person::players[i]->proportionlegs.z = 0;
}
- cameraloc = Person::players[0]->coords;
- cameraloc.y += 5;
- yaw = Person::players[0]->yaw;
+ Person::players[i]->tempanimation.Load((char *)"Tempanim", 0, 0);
+
+ Person::players[i]->headmorphness = 0;
+ Person::players[i]->targetheadmorphness = 1;
+ Person::players[i]->headmorphstart = 0;
+ Person::players[i]->headmorphend = 0;
+
+ Person::players[i]->pausetime = 0;
+
+ Person::players[i]->dead = 0;
+ Person::players[i]->jumppower = 5;
+ Person::players[i]->damage = 0;
+ Person::players[i]->permanentdamage = 0;
+ Person::players[i]->superpermanentdamage = 0;
+
+ Person::players[i]->forwardkeydown = 0;
+ Person::players[i]->leftkeydown = 0;
+ Person::players[i]->backkeydown = 0;
+ Person::players[i]->rightkeydown = 0;
+ Person::players[i]->jumpkeydown = 0;
+ Person::players[i]->crouchkeydown = 0;
+ Person::players[i]->throwkeydown = 0;
+
+ Person::players[i]->collided = -10;
+ Person::players[i]->loaded = 1;
+ Person::players[i]->bloodloss = 0;
+ Person::players[i]->weaponactive = -1;
+ Person::players[i]->weaponstuck = -1;
+ Person::players[i]->bleeding = 0;
+ Person::players[i]->deathbleeding = 0;
+ Person::players[i]->stunned = 0;
+ Person::players[i]->hasvictim = 0;
+ Person::players[i]->wentforweapon = 0;
+ }
- hawkcoords = Person::players[0]->coords;
- hawkcoords.y += 30;
+ Person::players[0]->aitype = playercontrolled;
+ Person::players[0]->weaponactive = -1;
+
+ if (difficulty == 1) {
+ Person::players[0]->power = 1 / .9;
+ Person::players[0]->damagetolerance = 250;
+ } else if (difficulty == 0) {
+ Person::players[0]->power = 1 / .8;
+ Person::players[0]->damagetolerance = 300;
+ Person::players[0]->armorhead *= 1.5;
+ Person::players[0]->armorhigh *= 1.5;
+ Person::players[0]->armorlow *= 1.5;
+ }
- if (visibleloading)
- LoadingScreen();
+ cameraloc = Person::players[0]->coords;
+ cameraloc.y += 5;
+ yaw = Person::players[0]->yaw;
- LOG("Starting background music...");
+ hawkcoords = Person::players[0]->coords;
+ hawkcoords.y += 30;
- OPENAL_StopSound(OPENAL_ALL);
- if (ambientsound) {
- if (environment == snowyenvironment) {
- emit_stream_np(stream_wind);
- } else if (environment == desertenvironment) {
- emit_stream_np(stream_desertambient);
- } else if (environment == grassyenvironment) {
- emit_stream_np(stream_wind, 100.);
- }
- }
- oldmusicvolume[0] = 0;
- oldmusicvolume[1] = 0;
- oldmusicvolume[2] = 0;
- oldmusicvolume[3] = 0;
+ if (visibleloading)
+ LoadingScreen();
- if (!firstload)
- firstload = 1;
- } else {
- perror("Problem");
+ LOG("Starting background music...");
+
+ OPENAL_StopSound(OPENAL_ALL);
+ if (ambientsound) {
+ if (environment == snowyenvironment) {
+ emit_stream_np(stream_wind);
+ } else if (environment == desertenvironment) {
+ emit_stream_np(stream_desertambient);
+ } else if (environment == grassyenvironment) {
+ emit_stream_np(stream_wind, 100.);
+ }
}
+ oldmusicvolume[0] = 0;
+ oldmusicvolume[1] = 0;
+ oldmusicvolume[2] = 0;
+ oldmusicvolume[3] = 0;
+
+ if (!firstload)
+ firstload = 1;
+
leveltime = 0;
visibleloading = 0;
}
Game::LoadingScreen();
// read file in binary mode
- tfile = fopen( filepath.c_str(), "rb" );
- if (tfile) {
- // read numframes, joints to know how much memory to allocate
- funpackf(tfile, "Bi Bi", &numframes, &joints);
+ tfile = Folders::openMandatoryFile( filepath, "rb" );
- // allocate memory for everything
+ // read numframes, joints to know how much memory to allocate
+ funpackf(tfile, "Bi Bi", &numframes, &joints);
- position = (XYZ**)malloc(sizeof(XYZ*) * joints);
- for (i = 0; i < joints; i++)
- position[i] = (XYZ*)malloc(sizeof(XYZ) * numframes);
+ // allocate memory for everything
- twist = (float**)malloc(sizeof(float*) * joints);
- for (i = 0; i < joints; i++)
- twist[i] = (float*)malloc(sizeof(float) * numframes);
+ position = (XYZ**)malloc(sizeof(XYZ*) * joints);
+ for (i = 0; i < joints; i++)
+ position[i] = (XYZ*)malloc(sizeof(XYZ) * numframes);
- twist2 = (float**)malloc(sizeof(float*) * joints);
- for (i = 0; i < joints; i++)
- twist2[i] = (float*)malloc(sizeof(float) * numframes);
+ twist = (float**)malloc(sizeof(float*) * joints);
+ for (i = 0; i < joints; i++)
+ twist[i] = (float*)malloc(sizeof(float) * numframes);
- speed = (float*)malloc(sizeof(float) * numframes);
+ twist2 = (float**)malloc(sizeof(float*) * joints);
+ for (i = 0; i < joints; i++)
+ twist2[i] = (float*)malloc(sizeof(float) * numframes);
- onground = (bool**)malloc(sizeof(bool*) * joints);
- for (i = 0; i < joints; i++)
- onground[i] = (bool*)malloc(sizeof(bool) * numframes);
+ speed = (float*)malloc(sizeof(float) * numframes);
- forward = (XYZ*)malloc(sizeof(XYZ) * numframes);
- weapontarget = (XYZ*)malloc(sizeof(XYZ) * numframes);
- label = (int*)malloc(sizeof(int) * numframes);
+ onground = (bool**)malloc(sizeof(bool*) * joints);
+ for (i = 0; i < joints; i++)
+ onground[i] = (bool*)malloc(sizeof(bool) * numframes);
- // read binary data as animation
+ forward = (XYZ*)malloc(sizeof(XYZ) * numframes);
+ weapontarget = (XYZ*)malloc(sizeof(XYZ) * numframes);
+ label = (int*)malloc(sizeof(int) * numframes);
- // for each frame...
- for (i = 0; i < numframes; i++) {
- // for each joint in the skeleton...
- for (j = 0; j < joints; j++) {
- // read joint position
- funpackf(tfile, "Bf Bf Bf", &position[j][i].x, &position[j][i].y, &position[j][i].z);
- }
- for (j = 0; j < joints; j++) {
- // read twist
- funpackf(tfile, "Bf", &twist[j][i]);
- }
- for (j = 0; j < joints; j++) {
- // read onground (boolean)
- unsigned char uch;
- funpackf(tfile, "Bb", &uch);
- onground[j][i] = (uch != 0);
- }
- // read frame speed (?)
- funpackf(tfile, "Bf", &speed[i]);
+ // read binary data as animation
+
+ // for each frame...
+ for (i = 0; i < numframes; i++) {
+ // for each joint in the skeleton...
+ for (j = 0; j < joints; j++) {
+ // read joint position
+ funpackf(tfile, "Bf Bf Bf", &position[j][i].x, &position[j][i].y, &position[j][i].z);
}
- // read twist2 for whole animation
- for (i = 0; i < numframes; i++) {
- for (j = 0; j < joints; j++) {
- funpackf(tfile, "Bf", &twist2[j][i]);
- }
+ for (j = 0; j < joints; j++) {
+ // read twist
+ funpackf(tfile, "Bf", &twist[j][i]);
}
- // read label for each frame
- for (i = 0; i < numframes; i++) {
- funpackf(tfile, "Bf", &label[i]);
+ for (j = 0; j < joints; j++) {
+ // read onground (boolean)
+ unsigned char uch;
+ funpackf(tfile, "Bb", &uch);
+ onground[j][i] = (uch != 0);
}
- // read weapontargetnum
- funpackf(tfile, "Bi", &weapontargetnum);
- // read weapontarget positions for each frame
- for (i = 0; i < numframes; i++) {
- funpackf(tfile, "Bf Bf Bf", &weapontarget[i].x, &weapontarget[i].y, &weapontarget[i].z);
+ // read frame speed (?)
+ funpackf(tfile, "Bf", &speed[i]);
+ }
+ // read twist2 for whole animation
+ for (i = 0; i < numframes; i++) {
+ for (j = 0; j < joints; j++) {
+ funpackf(tfile, "Bf", &twist2[j][i]);
}
-
- fclose(tfile);
}
+ // read label for each frame
+ for (i = 0; i < numframes; i++) {
+ funpackf(tfile, "Bf", &label[i]);
+ }
+ // read weapontargetnum
+ funpackf(tfile, "Bi", &weapontargetnum);
+ // read weapontarget positions for each frame
+ for (i = 0; i < numframes; i++) {
+ funpackf(tfile, "Bf Bf Bf", &weapontarget[i].x, &weapontarget[i].y, &weapontarget[i].z);
+ }
+
+ fclose(tfile);
endoffset = 0;
// find average position of certain joints on last frames
// load skeleton
- tfile = fopen( Folders::getResourcePath(filename).c_str(), "rb" );
+ tfile = Folders::openMandatoryFile( Folders::getResourcePath(filename), "rb" );
- if (1) { // FIXME: should this be if(tfile) ?
- // read num_joints
- funpackf(tfile, "Bi", &num_joints);
+ // read num_joints
+ funpackf(tfile, "Bi", &num_joints);
- // allocate memory
- if (joints)
- delete [] joints; //dealloc2(joints);
- joints = (Joint*)new Joint[num_joints];
+ // allocate memory
+ if (joints)
+ delete [] joints; //dealloc2(joints);
+ joints = (Joint*)new Joint[num_joints];
- // read info for each joint
- for (i = 0; i < num_joints; i++) {
- funpackf(tfile, "Bf Bf Bf Bf Bf", &joints[i].position.x, &joints[i].position.y, &joints[i].position.z, &joints[i].length, &joints[i].mass);
- funpackf(tfile, "Bb Bb", &joints[i].hasparent, &joints[i].locked);
- funpackf(tfile, "Bi", &joints[i].modelnum);
- funpackf(tfile, "Bb Bb", &joints[i].visible, &joints[i].sametwist);
- funpackf(tfile, "Bi Bi", &joints[i].label, &joints[i].hasgun);
- funpackf(tfile, "Bb", &joints[i].lower);
- funpackf(tfile, "Bi", &parentID);
- if (joints[i].hasparent)
- joints[i].parent = &joints[parentID];
- joints[i].velocity = 0;
- joints[i].oldposition = joints[i].position;
- }
-
- // read num_muscles
- funpackf(tfile, "Bi", &num_muscles);
-
- // allocate memory
- if (muscles)
- delete [] muscles; //dealloc2(muscles);
- muscles = (Muscle*)new Muscle[num_muscles]; //malloc(sizeof(Muscle)*num_muscles);
-
- // for each muscle...
- for (i = 0; i < num_muscles; i++) {
- // read info
- 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
- muscles[i].vertices = (int*)malloc(sizeof(int) * muscles[i].numvertices);
+ // read info for each joint
+ for (i = 0; i < num_joints; i++) {
+ funpackf(tfile, "Bf Bf Bf Bf Bf", &joints[i].position.x, &joints[i].position.y, &joints[i].position.z, &joints[i].length, &joints[i].mass);
+ funpackf(tfile, "Bb Bb", &joints[i].hasparent, &joints[i].locked);
+ funpackf(tfile, "Bi", &joints[i].modelnum);
+ funpackf(tfile, "Bb Bb", &joints[i].visible, &joints[i].sametwist);
+ funpackf(tfile, "Bi Bi", &joints[i].label, &joints[i].hasgun);
+ funpackf(tfile, "Bb", &joints[i].lower);
+ funpackf(tfile, "Bi", &parentID);
+ if (joints[i].hasparent)
+ joints[i].parent = &joints[parentID];
+ joints[i].velocity = 0;
+ joints[i].oldposition = joints[i].position;
+ }
- // read vertices
- edit = 0;
- for (j = 0; j < muscles[i].numvertices - edit; j++) {
- funpackf(tfile, "Bi", &muscles[i].vertices[j + edit]);
- if (muscles[i].vertices[j + edit] >= model[0].vertexNum) {
- muscles[i].numvertices--;
- edit--;
- }
+ // read num_muscles
+ funpackf(tfile, "Bi", &num_muscles);
+
+ // allocate memory
+ if (muscles)
+ delete [] muscles; //dealloc2(muscles);
+ muscles = (Muscle*)new Muscle[num_muscles]; //malloc(sizeof(Muscle)*num_muscles);
+
+ // for each muscle...
+ for (i = 0; i < num_muscles; i++) {
+ // read info
+ 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
+ muscles[i].vertices = (int*)malloc(sizeof(int) * muscles[i].numvertices);
+
+ // read vertices
+ edit = 0;
+ for (j = 0; j < muscles[i].numvertices - edit; j++) {
+ funpackf(tfile, "Bi", &muscles[i].vertices[j + edit]);
+ if (muscles[i].vertices[j + edit] >= model[0].vertexNum) {
+ muscles[i].numvertices--;
+ edit--;
}
-
- // read more info
- funpackf(tfile, "Bb Bi", &muscles[i].visible, &parentID);
- muscles[i].parent1 = &joints[parentID];
- funpackf(tfile, "Bi", &parentID);
- muscles[i].parent2 = &joints[parentID];
}
- // read forwardjoints (?)
- for (j = 0; j < 3; j++) {
- funpackf(tfile, "Bi", &forwardjoints[j]);
- }
- // read lowforwardjoints (?)
- for (j = 0; j < 3; j++) {
- funpackf(tfile, "Bi", &lowforwardjoints[j]);
- }
+ // read more info
+ funpackf(tfile, "Bb Bi", &muscles[i].visible, &parentID);
+ muscles[i].parent1 = &joints[parentID];
+ funpackf(tfile, "Bi", &parentID);
+ muscles[i].parent2 = &joints[parentID];
+ }
- // ???
- for (j = 0; j < num_muscles; j++) {
- for (i = 0; i < muscles[j].numvertices; i++) {
- for (int k = 0; k < num_models; k++) {
- if (muscles[j].numvertices && muscles[j].vertices[i] < model[k].vertexNum)
- model[k].owner[muscles[j].vertices[i]] = j;
- }
+ // read forwardjoints (?)
+ for (j = 0; j < 3; j++) {
+ funpackf(tfile, "Bi", &forwardjoints[j]);
+ }
+ // read lowforwardjoints (?)
+ for (j = 0; j < 3; j++) {
+ funpackf(tfile, "Bi", &lowforwardjoints[j]);
+ }
+
+ // ???
+ for (j = 0; j < num_muscles; j++) {
+ for (i = 0; i < muscles[j].numvertices; i++) {
+ for (int k = 0; k < num_models; k++) {
+ if (muscles[j].numvertices && muscles[j].vertices[i] < model[k].vertexNum)
+ model[k].owner[muscles[j].vertices[i]] = j;
}
}
+ }
- // calculate some stuff
- FindForwards();
- for (i = 0; i < num_joints; i++) {
- joints[i].startpos = joints[i].position;
- }
- for (i = 0; i < num_muscles; i++) {
- FindRotationMuscle(i, -1);
- }
- // this seems to use opengl purely for matrix calculations
- for (int k = 0; k < num_models; k++) {
- for (i = 0; i < model[k].vertexNum; i++) {
- model[k].vertex[i] = model[k].vertex[i] - (muscles[model[k].owner[i]].parent1->position + muscles[model[k].owner[i]].parent2->position) / 2;
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
- glRotatef(muscles[model[k].owner[i]].rotate3, 0, 1, 0);
- glRotatef(muscles[model[k].owner[i]].rotate2 - 90, 0, 0, 1);
- glRotatef(muscles[model[k].owner[i]].rotate1 - 90, 0, 1, 0);
- glTranslatef(model[k].vertex[i].x, model[k].vertex[i].y, model[k].vertex[i].z);
- glGetFloatv(GL_MODELVIEW_MATRIX, M);
- model[k].vertex[i].x = M[12] * 1;
- model[k].vertex[i].y = M[13] * 1;
- model[k].vertex[i].z = M[14] * 1;
- glPopMatrix();
- }
- model[k].CalculateNormals(0);
+ // calculate some stuff
+ FindForwards();
+ for (i = 0; i < num_joints; i++) {
+ joints[i].startpos = joints[i].position;
+ }
+ for (i = 0; i < num_muscles; i++) {
+ FindRotationMuscle(i, -1);
+ }
+ // this seems to use opengl purely for matrix calculations
+ for (int k = 0; k < num_models; k++) {
+ for (i = 0; i < model[k].vertexNum; i++) {
+ model[k].vertex[i] = model[k].vertex[i] - (muscles[model[k].owner[i]].parent1->position + muscles[model[k].owner[i]].parent2->position) / 2;
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+ glRotatef(muscles[model[k].owner[i]].rotate3, 0, 1, 0);
+ glRotatef(muscles[model[k].owner[i]].rotate2 - 90, 0, 0, 1);
+ glRotatef(muscles[model[k].owner[i]].rotate1 - 90, 0, 1, 0);
+ glTranslatef(model[k].vertex[i].x, model[k].vertex[i].y, model[k].vertex[i].z);
+ glGetFloatv(GL_MODELVIEW_MATRIX, M);
+ model[k].vertex[i].x = M[12] * 1;
+ model[k].vertex[i].y = M[13] * 1;
+ model[k].vertex[i].z = M[14] * 1;
+ glPopMatrix();
}
+ model[k].CalculateNormals(0);
}
fclose(tfile);
// load ???
- tfile = fopen( Folders::getResourcePath(lowfilename).c_str(), "rb" );
+ tfile = Folders::openMandatoryFile( Folders::getResourcePath(lowfilename), "rb" );
- if (1) { // FIXME: should this be if(tfile) ?
- // skip joints section
+ // skip joints section
- lSize = sizeof(num_joints);
+ lSize = sizeof(num_joints);
+ fseek(tfile, lSize, SEEK_CUR);
+ for (i = 0; i < num_joints; i++) {
+ // skip joint info
+ lSize = sizeof(XYZ)
+ + sizeof(float)
+ + sizeof(float)
+ + 1 //sizeof(bool)
+ + 1 //sizeof(bool)
+ + sizeof(int)
+ + 1 //sizeof(bool)
+ + 1 //sizeof(bool)
+ + sizeof(int)
+ + sizeof(int)
+ + 1 //sizeof(bool)
+ + sizeof(int);
fseek(tfile, lSize, SEEK_CUR);
- for (i = 0; i < num_joints; i++) {
- // skip joint info
- lSize = sizeof(XYZ)
- + sizeof(float)
- + sizeof(float)
- + 1 //sizeof(bool)
- + 1 //sizeof(bool)
- + sizeof(int)
- + 1 //sizeof(bool)
- + 1 //sizeof(bool)
- + sizeof(int)
- + sizeof(int)
- + 1 //sizeof(bool)
- + sizeof(int);
- fseek(tfile, lSize, SEEK_CUR);
- if (joints[i].hasparent)
- joints[i].parent = &joints[parentID];
- joints[i].velocity = 0;
- joints[i].oldposition = joints[i].position;
- }
-
- // read num_muscles
- funpackf(tfile, "Bi", &num_muscles);
+ if (joints[i].hasparent)
+ joints[i].parent = &joints[parentID];
+ joints[i].velocity = 0;
+ joints[i].oldposition = joints[i].position;
+ }
- for (i = 0; i < num_muscles; i++) {
- // skip muscle info
- lSize = sizeof(float)
- + sizeof(float)
- + sizeof(float)
- + sizeof(float)
- + sizeof(float)
- + sizeof(int);
- fseek(tfile, lSize, SEEK_CUR);
+ // read num_muscles
+ funpackf(tfile, "Bi", &num_muscles);
+
+ for (i = 0; i < num_muscles; i++) {
+ // skip muscle info
+ lSize = sizeof(float)
+ + sizeof(float)
+ + sizeof(float)
+ + sizeof(float)
+ + sizeof(float)
+ + sizeof(int);
+ fseek(tfile, lSize, SEEK_CUR);
- // read numverticeslow
- funpackf(tfile, "Bi", &muscles[i].numverticeslow);
+ // read numverticeslow
+ funpackf(tfile, "Bi", &muscles[i].numverticeslow);
- if (muscles[i].numverticeslow) {
- // allocate memory
- muscles[i].verticeslow = (int*)malloc(sizeof(int) * muscles[i].numverticeslow);
+ if (muscles[i].numverticeslow) {
+ // allocate memory
+ muscles[i].verticeslow = (int*)malloc(sizeof(int) * muscles[i].numverticeslow);
- // read verticeslow
- edit = 0;
- for (j = 0; j < muscles[i].numverticeslow - edit; j++) {
- funpackf(tfile, "Bi", &muscles[i].verticeslow[j + edit]);
- if (muscles[i].verticeslow[j + edit] >= modellow.vertexNum) {
- muscles[i].numverticeslow--;
- edit--;
- }
+ // read verticeslow
+ edit = 0;
+ for (j = 0; j < muscles[i].numverticeslow - edit; j++) {
+ funpackf(tfile, "Bi", &muscles[i].verticeslow[j + edit]);
+ if (muscles[i].verticeslow[j + edit] >= modellow.vertexNum) {
+ muscles[i].numverticeslow--;
+ edit--;
}
}
-
- // skip more stuff
- lSize = 1; //sizeof(bool);
- fseek ( tfile, lSize, SEEK_CUR);
- lSize = sizeof(int);
- fseek ( tfile, lSize, SEEK_CUR);
- fseek ( tfile, lSize, SEEK_CUR);
}
- for (j = 0; j < num_muscles; j++) {
- for (i = 0; i < muscles[j].numverticeslow; i++) {
- if (muscles[j].verticeslow[i] < modellow.vertexNum)
- modellow.owner[muscles[j].verticeslow[i]] = j;
- }
- }
+ // skip more stuff
+ lSize = 1; //sizeof(bool);
+ fseek ( tfile, lSize, SEEK_CUR);
+ lSize = sizeof(int);
+ fseek ( tfile, lSize, SEEK_CUR);
+ fseek ( tfile, lSize, SEEK_CUR);
+ }
- // use opengl for its matrix math
- for (i = 0; i < modellow.vertexNum; i++) {
- modellow.vertex[i] = modellow.vertex[i] - (muscles[modellow.owner[i]].parent1->position + muscles[modellow.owner[i]].parent2->position) / 2;
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
- glRotatef(muscles[modellow.owner[i]].rotate3, 0, 1, 0);
- glRotatef(muscles[modellow.owner[i]].rotate2 - 90, 0, 0, 1);
- glRotatef(muscles[modellow.owner[i]].rotate1 - 90, 0, 1, 0);
- glTranslatef(modellow.vertex[i].x, modellow.vertex[i].y, modellow.vertex[i].z);
- glGetFloatv(GL_MODELVIEW_MATRIX, M);
- modellow.vertex[i].x = M[12];
- modellow.vertex[i].y = M[13];
- modellow.vertex[i].z = M[14];
- glPopMatrix();
+ for (j = 0; j < num_muscles; j++) {
+ for (i = 0; i < muscles[j].numverticeslow; i++) {
+ if (muscles[j].verticeslow[i] < modellow.vertexNum)
+ modellow.owner[muscles[j].verticeslow[i]] = j;
}
+ }
- modellow.CalculateNormals(0);
+ // use opengl for its matrix math
+ for (i = 0; i < modellow.vertexNum; i++) {
+ modellow.vertex[i] = modellow.vertex[i] - (muscles[modellow.owner[i]].parent1->position + muscles[modellow.owner[i]].parent2->position) / 2;
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+ glRotatef(muscles[modellow.owner[i]].rotate3, 0, 1, 0);
+ glRotatef(muscles[modellow.owner[i]].rotate2 - 90, 0, 0, 1);
+ glRotatef(muscles[modellow.owner[i]].rotate1 - 90, 0, 1, 0);
+ glTranslatef(modellow.vertex[i].x, modellow.vertex[i].y, modellow.vertex[i].z);
+ glGetFloatv(GL_MODELVIEW_MATRIX, M);
+ modellow.vertex[i].x = M[12];
+ modellow.vertex[i].y = M[13];
+ modellow.vertex[i].z = M[14];
+ glPopMatrix();
}
+ modellow.CalculateNormals(0);
+
// load clothes
if (clothes) {
- tfile = fopen( Folders::getResourcePath(clothesfilename).c_str(), "rb" ); // FIXME: where's the check for valid load
+ tfile = Folders::openMandatoryFile( Folders::getResourcePath(clothesfilename), "rb" );
// skip num_joints
lSize = sizeof(num_joints);