extern int flashdelay;
extern bool showpoints;
extern bool immediate;
-extern int test;
-extern bool tilt2weird;
-extern bool tiltweird;
-extern bool midweird;
-extern bool proportionweird;
-extern bool vertexweird[6];
extern XYZ envsound[30];
extern float envsoundvol[30];
extern float envsoundlife[30];
std::vector<std::shared_ptr<Person>> Person::players(1, std::shared_ptr<Person>(new Person()));
+Person::Person() :
+ whichpatchx(0),
+ whichpatchz(0),
+ animCurrent(0),
+ animTarget(0),
+ frameCurrent(0),
+ frameTarget(0),
+ oldanimCurrent(0),
+ oldanimTarget(0),
+ oldframeCurrent(0),
+ oldframeTarget(0),
+ howactive(typeactive),
+ parriedrecently(0),
+ superruntoggle(false),
+ lastattack(0), lastattack2(0), lastattack3(0),
+ currentoffset(), targetoffset(), offset(),
+ target(0),
+ transspeed(0),
+
+ realoldcoords(),
+ oldcoords(),
+ coords(),
+ velocity(),
+
+ proportionhead(),
+ proportionlegs(),
+ proportionarms(),
+ proportionbody(),
+
+ unconscioustime(0),
+
+ immobile(false),
+
+ velspeed(0),
+ targetyaw(0),
+ targetrot(0),
+ rot(0),
+ oldrot(0),
+ lookyaw(0),
+ lookpitch(0),
+ yaw(0),
+ pitch(0),
+ lowyaw(0),
+ tilt(0),
+ targettilt(0),
+ tilt2(0),
+ targettilt2(0),
+ rabbitkickenabled(false),
+
+ bloodloss(0),
+ bleeddelay(0),
+ skiddelay(0),
+ skiddingdelay(0),
+ deathbleeding(0),
+ tempdeltav(0),
+
+ damagetolerance(0),
+ damage(0),
+ permanentdamage(0),
+ superpermanentdamage(0),
+ lastcollide(0),
+ dead(0),
+
+ jumppower(0),
+ onground(false),
+
+ wentforweapon(0),
+
+ calcrot(false),
+
+ facing(),
+
+ bleeding(0),
+ bleedx(0), bleedy(0),
+ direction(0),
+ texupdatedelay(0),
+
+ headyaw(0), headpitch(0),
+ targetheadyaw(0), targetheadpitch(0),
+
+ onterrain(false),
+ pause(false),
+
+ grabdelay(0),
+
+ victim(nullptr),
+ hasvictim(false),
+
+ updatedelay(0),
+ normalsupdatedelay(0),
+
+ jumpstart(false),
+ forwardkeydown(false),
+ forwardstogglekeydown(false),
+ rightkeydown(false),
+ leftkeydown(false),
+ backkeydown(false),
+ jumpkeydown(false),
+ jumptogglekeydown(false),
+ crouchkeydown(false),
+ crouchtogglekeydown(false),
+ drawkeydown(false),
+ drawtogglekeydown(false),
+ throwkeydown(false),
+ throwtogglekeydown(false),
+ attackkeydown(false),
+ feint(false),
+ lastfeint(false),
+ headless(false),
+
+ crouchkeydowntime(0),
+ jumpkeydowntime(0),
+ freefall(false),
+
+ turnspeed(0),
+
+ aitype(0),
+ aiupdatedelay(0),
+ losupdatedelay(0),
+ ally(0),
+ collide(0),
+ collided(0),
+ avoidcollided(0),
+ loaded(false),
+ whichdirection(false),
+ whichdirectiondelay(0),
+ avoidsomething(false),
+ avoidwhere(),
+ blooddimamount(0),
+
+ staggerdelay(0),
+ blinkdelay(0),
+ twitchdelay(0),
+ twitchdelay2(0),
+ twitchdelay3(0),
+ lefthandmorphness(0),
+ righthandmorphness(0),
+ headmorphness(0),
+ chestmorphness(0),
+ tailmorphness(0),
+ targetlefthandmorphness(0),
+ targetrighthandmorphness(0),
+ targetheadmorphness(0),
+ targetchestmorphness(0),
+ targettailmorphness(0),
+ lefthandmorphstart(0), lefthandmorphend(0),
+ righthandmorphstart(0), righthandmorphend(0),
+ headmorphstart(0), headmorphend(0),
+ chestmorphstart(0), chestmorphend(0),
+ tailmorphstart(0), tailmorphend(0),
+
+ weaponmissdelay(0),
+ highreversaldelay(0),
+ lowreversaldelay(0),
+
+ creature(rabbittype),
+
+ id(0),
+
+ skeleton(),
+
+ speed(0),
+ scale(-1),
+ power(0),
+ speedmult(0),
+
+ protectionhead(0),
+ protectionhigh(0),
+ protectionlow(0),
+ armorhead(0),
+ armorhigh(0),
+ armorlow(0),
+ metalhead(false),
+ metalhigh(false),
+ metallow(false),
+
+ numclothes(0),
+
+ landhard(false),
+ bled(false),
+ spurt(false),
+ onfire(false),
+ onfiredelay(0),
+ burnt(0),
+
+ flamedelay(0),
+
+ playerdetail(0),
+
+ num_weapons(0),
+ weaponactive(-1),
+ weaponstuck(0),
+ weaponstuckwhere(0),
+
+ numwaypoints(0),
+ pausetime(0),
+
+ headtarget(),
+ interestdelay(0),
+
+ finalfinaltarget(),
+ finaltarget(),
+ finalpathfindpoint(0),
+ targetpathfindpoint(0),
+ lastpathfindpoint(0),
+ lastpathfindpoint2(0),
+ lastpathfindpoint3(0),
+ lastpathfindpoint4(0),
+
+ waypoint(0),
+
+ lastseen(),
+ lastseentime(0),
+ lastchecktime(0),
+ stunned(0),
+ surprised(0),
+ runninghowlong(0),
+ lastoccluded(0),
+ laststanding(0),
+ escapednum(0),
+
+ speechdelay(0),
+ neckspurtdelay(0),
+ neckspurtparticledelay(0),
+ neckspurtamount(0),
+
+ whichskin(0),
+ rabbitkickragdoll(false),
+
+ tempanimation(),
+
+ occluded(0),
+
+ jumpclimb(false)
+{
+}
+
/* EFFECT
*
* USES:
p1 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[whichtri].vertex[0]];
p2 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[whichtri].vertex[1]];
p3 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[whichtri].vertex[2]];
- /*
- CrossProduct(p2-p1,p3-p1,&N);
- CrossProduct(p0-p1,p3-p1,&temp);
- s = dotproduct(&temp,&N)/findLength(&N);
- CrossProduct(p2-p1,p1-p0,&temp);
- t = dotproduct(&temp,&N)/findLength(&N);
- r = 1 - (s + t);*/
bary.x = distsq(&p0, &p1);
bary.y = distsq(&p0, &p2);
coordsx = skeleton.drawmodel.Triangles[whichtri].gx[0] * bary.x + skeleton.drawmodel.Triangles[whichtri].gx[1] * bary.y + skeleton.drawmodel.Triangles[whichtri].gx[2] * bary.z;
coordsy = skeleton.drawmodel.Triangles[whichtri].gy[0] * bary.x + skeleton.drawmodel.Triangles[whichtri].gy[1] * bary.y + skeleton.drawmodel.Triangles[whichtri].gy[2] * bary.z;
- //coordsx=skeleton.drawmodel.Triangles[whichtri].gx[1];
- //coordsy=skeleton.drawmodel.Triangles[whichtri].gy[1];
-
if (bleeding <= 0 && spurt) {
spurt = 0;
for (int i = 0; i < 3; i++) {
weaponids[0] = weaponId;
}
+void Person::addClothes()
+{
+ if (numclothes > 0) {
+ for (int i = 0; i < numclothes; i++) {
+ addClothes(i);
+ }
+ DoMipmaps();
+ }
+}
+
+bool Person::addClothes(const int& clothesId)
+{
+ LOGFUNC;
+ const char* fileName = clothes[clothesId];
+
+ GLubyte* array = &skeleton.skinText[0];
+
+ //Load Image
+ ImageRec texture;
+ bool opened = load_image(fileName, texture);
+
+ float alphanum;
+ //Is it valid?
+ if (opened) {
+ float tintr = clothestintr[clothesId];
+ float tintg = clothestintg[clothesId];
+ float tintb = clothestintb[clothesId];
+
+ if (tintr > 1) tintr = 1;
+ if (tintg > 1) tintg = 1;
+ if (tintb > 1) tintb = 1;
+
+ if (tintr < 0) tintr = 0;
+ if (tintg < 0) tintg = 0;
+ if (tintb < 0) tintb = 0;
+
+ int bytesPerPixel = texture.bpp / 8;
+
+ int tempnum = 0;
+ alphanum = 255;
+ for (int i = 0; i < (int)(texture.sizeY * texture.sizeX * bytesPerPixel); i++) {
+ if (bytesPerPixel == 3)
+ alphanum = 255;
+ else if ((i + 1) % 4 == 0)
+ alphanum = texture.data[i];
+ if ((i + 1) % 4 || bytesPerPixel == 3) {
+ if ((i % 4) == 0)
+ texture.data[i] *= tintr;
+ if ((i % 4) == 1)
+ texture.data[i] *= tintg;
+ if ((i % 4) == 2)
+ texture.data[i] *= tintb;
+ array[tempnum] = (float)array[tempnum] * (1 - alphanum / 255) + (float)texture.data[i] * (alphanum / 255);
+ tempnum++;
+ }
+ }
+ return 1;
+ } else {
+ return 0;
+ }
+}