/* collision.c - spinout Aug 2010 based off of JSA's collision fixer 3.2 (written in FreeBasic), using MNGoldenEagle's algorithm to calculate collision normals. */ #include #define U16(a,p) (((a)[p]<<8)|((a)[p+1])) #define S16(a,p) (signed short)U16(a,p) void FixCollision(unsigned char * data, int vertOff, int TriOff, int TriCount) { int i, pos, end = TriOff + (TriCount << 4); int v1, v2, v3, p1[3], p2[3], p3[3], dx[2], dy[2], dz[2], dn, ni[3]; float nf[3], nd; for(pos=TriOff;pos>8)&0xFF; data[pos+0xF] = dn&0xFF; dn &= 0xFFFF; for(i=0;i<3;i++) { ni[i] = (int)nf[i]; if(ni[i] < 0) ni[i] += 0x10000; ni[i] &= 0xFFFF; data[pos+8+(i<<1)] = (ni[i]>>8)&0xFF; data[pos+9+(i<<1)] = ni[i]&0xFF; } } }