From a1d6482723bdf12482c67a150dbd6b9d757d0bbf Mon Sep 17 00:00:00 2001 From: ABelliqueux Date: Mon, 8 Feb 2021 17:13:51 +0100 Subject: [PATCH] fck --- ...osTable-lerp-atantable-psqrt-nodpq-quads.c | 94 +++--- Makefile | 35 +++ TIM/grnd.tim | Bin 0 -> 65556 bytes TIM/home.tim | Bin 0 -> 130070 bytes atan.c | 272 ++++++++++++++++++ coridor.c | 233 +++++++-------- 6 files changed, 464 insertions(+), 170 deletions(-) create mode 100644 Makefile create mode 100644 TIM/grnd.tim create mode 100644 TIM/home.tim create mode 100644 atan.c diff --git a/3dcam-cosTable-lerp-atantable-psqrt-nodpq-quads.c b/3dcam-cosTable-lerp-atantable-psqrt-nodpq-quads.c index a1f3bd4..30e153f 100644 --- a/3dcam-cosTable-lerp-atantable-psqrt-nodpq-quads.c +++ b/3dcam-cosTable-lerp-atantable-psqrt-nodpq-quads.c @@ -404,7 +404,7 @@ int main() { //~ dt = time/180+1 - time/180; if (physics){ - //~ if(time%1 == 0){ + if(time%1 == 0){ for ( int k = 0; k < sizeof(meshes)/sizeof(meshes[0]);k ++){ if ( *meshes[k]->isRigidBody == 1 ) { @@ -431,10 +431,9 @@ int main() { if ( col_lvl.vx ) { meshes[k]->body->gForce.vx *= -1; } if ( col_lvl.vy ) { - //~ meshes[k]->body->gForce.vy *= -1; - //~ meshes[k]->body->velocity.vy = 0; - //~ meshes[k]->body->position.vy = modelgnd_body.max.vy - meshes[k]->body->max.vy ; - } + //~ meshes[k]->body->gForce.vy *= -1; + + } if ( col_lvl.vz ) { meshes[k]->body->gForce.vz *= -1; } @@ -444,70 +443,55 @@ int main() { //~ col_lvl.vy || //~ col_lvl.vz //~ ) { - //~ meshes[k]->body->velocity.vy = meshes[k]->body->velocity.vx = meshes[k]->body->velocity.vz = 0; - //~ //meshes[k]->body->velocity.vy = meshes[k]->body->velocity.vz = 0; + //~ meshes[k]->body->velocity.vy = meshes[k]->body->velocity.vz = 0; //~ } - ResolveCollision(&modelobject_body, &modelSphere_body); - //~ FntPrint("Col: %d\n", col_sphere.vx); - - - if ( !col_sphere.vx ) { - //~ ResolveCollision(&modelobject_body, &modelSphere_body); - //~ modelSphere_body.restitution = -meshes[k]->body->gForce.vx/2; - //~ modelSphere_body.velocity.vx -= 1; - } - - //~ modelSphere_body.restitution = -meshes[k]->body->gForce.vx/2; - //~ meshes[k]->body->gForce.vx *= -1; - int w = ONE / ( (modelSphere_body.velocity.vx * ONE) / ((modelSphere_body.max.vx - modelSphere_body.min.vx)/2) ) * col_sphere.vx; - - - if (modelSphere_body.velocity.vx){ - //~ modelSphere_rot.vz -= 10; - //angular velocity w = v/r + ResolveCollision( &modelobject_body, &modelSphere_body); + //~ FntPrint("Vel: %d\n", modelSphere_body.velocity.vx); + if (col_sphere.vx){ - modelSphere_rot.vz += w; + int w = (ONE / (( modelSphere_body.velocity.vx * ONE ) / ( (modelSphere_body.max.vx - modelSphere_body.min.vx) / 2 ))) ; - if ( !col_sphere.vx & modelSphere_body.velocity.vx > 0 ) { - //~ ResolveCollision(&modelobject_body, &modelSphere_body); - //~ modelSphere_body.restitution = -meshes[k]->body->gForce.vx/2; - modelSphere_body.velocity.vx -= 1; + if (modelSphere_body.velocity.vx){ + + //~ int w = (ONE / (( modelSphere_body.velocity.vx * ONE ) / ( (modelSphere_body.max.vx - modelSphere_body.min.vx) / 2 ))) * modelSphere_body.velocity.vx ; + //~ FntPrint("W %d\n",w); + FntPrint("Vel %d\n",modelSphere_body.velocity.vx); + + modelSphere_rot.vz += w; - } - - FntPrint("W: %d\n", w); - //~ FntPrint("G: %d\n", modelSphere_body.velocity.vx); - //~ FntPrint("F: %d\n", modelSphere_body.gForce.vx); + //~ if ( col_sphere.vx ) { + //~ meshes[k]->body->gForce.vx *= -1; + //modelSphere_body.gForce.vx = -meshes[k]->body->gForce.vx/4; //~ ResolveCollision(&modelobject_body, &modelSphere_body); + //~ } + } + } + + if (!col_sphere.vx){ + modelSphere_body.velocity.vx = 0; } - //~ if (modelSphere_body.inertia){ - - //~ modelSphere_body.velocity.vx = - //~ modelSphere_body.inertia --; + //~ if (w && !modelSphere_body.velocity.vx) + //~ { + //~ FntPrint("W %d\n",w); + //~ w --; //~ } - - //~ if (modelSphere_body.gForce.vx){ - //~ modelSphere_body.gForce.vx -= 10; - //~ } + + //~ if ( col_sphere.vz ) { meshes[k]->body->gForce.vz *= -1; } //~ if ( col_sphere.vy ) { meshes[k]->body->gForce.vy *= -1; } - //~ ResolveCollision(&modelobject_body, &modelSphere_body); - + //~ if (modelSphere_body.gForce.vx){modelSphere_body.gForce.vx -= 5;} meshes[k]->pos->vx = meshes[k]->body->position.vx; - //~ meshes[k]->pos->vy = meshes[k]->body->position.vy; + //~ meshes[k]->pos->vy = meshes[k]->body->position.vy ; meshes[k]->pos->vz = meshes[k]->body->position.vz; - //~ if(modelSphere_body.restitution > 0) { - //~ modelSphere_body.position.vx += lerp(modelSphere_body.restitution,modelSphere_body.position.vx,48); - //~ modelSphere_body.restitution += lerp(modelSphere_body.restitution,modelSphere_body.position.vx,48); - //~ } - meshes[k]->body->velocity.vy = meshes[k]->body->velocity.vx = meshes[k]->body->velocity.vz = 0; - + } + meshes[k]->body->velocity.vy = meshes[k]->body->velocity.vx = meshes[k]->body->velocity.vz = 0; + } - //~ } + } } // Camera setup @@ -803,7 +787,7 @@ int main() { FntPrint("Obj: %d,%d,%d\n",modelobject_body.velocity.vx,modelobject_body.velocity.vy,modelobject_body.velocity.vz); FntPrint("Sph: %d,%d,%d\n",modelSphere_body.velocity.vx,modelSphere_body.velocity.vy,modelSphere_body.velocity.vz); - FntPrint("%d, %d\n",modelSphere_body.restitution, modelobject_pos.vx); + //~ FntPrint("%d, %d\n",modelobject_body.position.vx, modelobject_pos.vx); //~ FntPrint("Time : %d %d dt :%d\n",time, atime, dt); //~ FntPrint("Tricount: %d OTz: %d\nOTc: %d, p: %d\n",triCount, OTz, OTc, *meshes[2]->p); @@ -1081,12 +1065,10 @@ void ResolveCollision( BODY * one, BODY * two ){ //~ FntPrint("V1 %d %d %d\n", velOne.vx/4096/4096,velOne.vy/4096/4096,velOne.vz/4096/4096); //~ FntPrint("V2 %d %d %d\n", velTwo.vx/4096/4096,velTwo.vy/4096/4096,velTwo.vz/4096/4096); - } - // A few notes on the following code : int ncos(unsigned int t) { diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f440723 --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +TARGET = 3dcam-cosTable-lerp-atantable-psqrt-nodpq-quads +TYPE = ps-exe + +SRCS = 3dcam-cosTable-lerp-atantable-psqrt-nodpq-quads.c \ +../common/crt0/crt0.s \ +TIM/home.tim \ +TIM/grnd.tim \ + +CPPFLAGS += -I../psyq/include +LDFLAGS += -L../psyq/lib +LDFLAGS += -Wl,--start-group +LDFLAGS += -lapi +LDFLAGS += -lc +LDFLAGS += -lc2 +LDFLAGS += -lcard +LDFLAGS += -lcomb +LDFLAGS += -lds +LDFLAGS += -letc +LDFLAGS += -lgpu +LDFLAGS += -lgs +LDFLAGS += -lgte +LDFLAGS += -lgun +LDFLAGS += -lhmd +LDFLAGS += -lmath +LDFLAGS += -lmcrd +LDFLAGS += -lmcx +LDFLAGS += -lpad +LDFLAGS += -lpress +LDFLAGS += -lsio +LDFLAGS += -lsnd +LDFLAGS += -lspu +LDFLAGS += -ltap +LDFLAGS += -Wl,--end-group + +include ../common.mk \ diff --git a/TIM/grnd.tim b/TIM/grnd.tim new file mode 100644 index 0000000000000000000000000000000000000000..9bd3966c281ecda4a4ef7ad1aeb083e807b74518 GIT binary patch literal 65556 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 P#C!D`)C7nI{r>*}w9v5+ literal 0 HcmV?d00001 diff --git a/TIM/home.tim b/TIM/home.tim new file mode 100644 index 0000000000000000000000000000000000000000..689908f83bb0f19bbe0875a2efaf86af2b89a6ee GIT binary patch literal 130070 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 W4F?(yG#qF+&~TvPK*NEO1OFcnd?L>P literal 0 HcmV?d00001 diff --git a/atan.c b/atan.c new file mode 100644 index 0000000..014c2b2 --- /dev/null +++ b/atan.c @@ -0,0 +1,272 @@ +// Arctan base table +static int AtanBaseTable[8] = { + 0x0000, + -0x4000, + -0xFFFF, + 0xC000, + -0x8000, + 0x4000, + 0x8000, + -0xC000, +}; + +// Arctan angle table +static short AtanAngleTable[0x802] = { + 0x0000, 0x0005, 0x000A, 0x000F, 0x0014, 0x0019, 0x001F, 0x0024, + 0x0029, 0x002E, 0x0033, 0x0038, 0x003D, 0x0042, 0x0047, 0x004C, + 0x0051, 0x0057, 0x005C, 0x0061, 0x0066, 0x006B, 0x0070, 0x0075, + 0x007A, 0x007F, 0x0084, 0x008A, 0x008F, 0x0094, 0x0099, 0x009E, + 0x00A3, 0x00A8, 0x00AD, 0x00B2, 0x00B7, 0x00BC, 0x00C2, 0x00C7, + 0x00CC, 0x00D1, 0x00D6, 0x00DB, 0x00E0, 0x00E5, 0x00EA, 0x00EF, + 0x00F4, 0x00FA, 0x00FF, 0x0104, 0x0109, 0x010E, 0x0113, 0x0118, + 0x011D, 0x0122, 0x0127, 0x012C, 0x0131, 0x0137, 0x013C, 0x0141, + 0x0146, 0x014B, 0x0150, 0x0155, 0x015A, 0x015F, 0x0164, 0x0169, + 0x016F, 0x0174, 0x0179, 0x017E, 0x0183, 0x0188, 0x018D, 0x0192, + 0x0197, 0x019C, 0x01A1, 0x01A6, 0x01AC, 0x01B1, 0x01B6, 0x01BB, + 0x01C0, 0x01C5, 0x01CA, 0x01CF, 0x01D4, 0x01D9, 0x01DE, 0x01E3, + 0x01E9, 0x01EE, 0x01F3, 0x01F8, 0x01FD, 0x0202, 0x0207, 0x020C, + 0x0211, 0x0216, 0x021B, 0x0220, 0x0226, 0x022B, 0x0230, 0x0235, + 0x023A, 0x023F, 0x0244, 0x0249, 0x024E, 0x0253, 0x0258, 0x025D, + 0x0262, 0x0268, 0x026D, 0x0272, 0x0277, 0x027C, 0x0281, 0x0286, + 0x028B, 0x0290, 0x0295, 0x029A, 0x029F, 0x02A4, 0x02A9, 0x02AF, + 0x02B4, 0x02B9, 0x02BE, 0x02C3, 0x02C8, 0x02CD, 0x02D2, 0x02D7, + 0x02DC, 0x02E1, 0x02E6, 0x02EB, 0x02F0, 0x02F6, 0x02FB, 0x0300, + 0x0305, 0x030A, 0x030F, 0x0314, 0x0319, 0x031E, 0x0323, 0x0328, + 0x032D, 0x0332, 0x0337, 0x033C, 0x0341, 0x0347, 0x034C, 0x0351, + 0x0356, 0x035B, 0x0360, 0x0365, 0x036A, 0x036F, 0x0374, 0x0379, + 0x037E, 0x0383, 0x0388, 0x038D, 0x0392, 0x0397, 0x039C, 0x03A2, + 0x03A7, 0x03AC, 0x03B1, 0x03B6, 0x03BB, 0x03C0, 0x03C5, 0x03CA, + 0x03CF, 0x03D4, 0x03D9, 0x03DE, 0x03E3, 0x03E8, 0x03ED, 0x03F2, + 0x03F7, 0x03FC, 0x0401, 0x0407, 0x040C, 0x0411, 0x0416, 0x041B, + 0x0420, 0x0425, 0x042A, 0x042F, 0x0434, 0x0439, 0x043E, 0x0443, + 0x0448, 0x044D, 0x0452, 0x0457, 0x045C, 0x0461, 0x0466, 0x046B, + 0x0470, 0x0475, 0x047A, 0x047F, 0x0484, 0x0489, 0x048E, 0x0494, + 0x0499, 0x049E, 0x04A3, 0x04A8, 0x04AD, 0x04B2, 0x04B7, 0x04BC, + 0x04C1, 0x04C6, 0x04CB, 0x04D0, 0x04D5, 0x04DA, 0x04DF, 0x04E4, + 0x04E9, 0x04EE, 0x04F3, 0x04F8, 0x04FD, 0x0502, 0x0507, 0x050C, + 0x0511, 0x0516, 0x051B, 0x0520, 0x0525, 0x052A, 0x052F, 0x0534, + 0x0539, 0x053E, 0x0543, 0x0548, 0x054D, 0x0552, 0x0557, 0x055C, + 0x0561, 0x0566, 0x056B, 0x0570, 0x0575, 0x057A, 0x057F, 0x0584, + 0x0589, 0x058E, 0x0593, 0x0598, 0x059D, 0x05A2, 0x05A7, 0x05AC, + 0x05B1, 0x05B6, 0x05BB, 0x05C0, 0x05C5, 0x05CA, 0x05CF, 0x05D4, + 0x05D9, 0x05DE, 0x05E3, 0x05E8, 0x05ED, 0x05F2, 0x05F7, 0x05FC, + 0x0601, 0x0606, 0x060B, 0x0610, 0x0615, 0x061A, 0x061F, 0x0624, + 0x0629, 0x062E, 0x0633, 0x0638, 0x063D, 0x0642, 0x0647, 0x064C, + 0x0651, 0x0656, 0x065B, 0x0660, 0x0665, 0x066A, 0x066E, 0x0673, + 0x0678, 0x067D, 0x0682, 0x0687, 0x068C, 0x0691, 0x0696, 0x069B, + 0x06A0, 0x06A5, 0x06AA, 0x06AF, 0x06B4, 0x06B9, 0x06BE, 0x06C3, + 0x06C8, 0x06CD, 0x06D2, 0x06D7, 0x06DC, 0x06E1, 0x06E5, 0x06EA, + 0x06EF, 0x06F4, 0x06F9, 0x06FE, 0x0703, 0x0708, 0x070D, 0x0712, + 0x0717, 0x071C, 0x0721, 0x0726, 0x072B, 0x0730, 0x0735, 0x0739, + 0x073E, 0x0743, 0x0748, 0x074D, 0x0752, 0x0757, 0x075C, 0x0761, + 0x0766, 0x076B, 0x0770, 0x0775, 0x077A, 0x077E, 0x0783, 0x0788, + 0x078D, 0x0792, 0x0797, 0x079C, 0x07A1, 0x07A6, 0x07AB, 0x07B0, + 0x07B5, 0x07B9, 0x07BE, 0x07C3, 0x07C8, 0x07CD, 0x07D2, 0x07D7, + 0x07DC, 0x07E1, 0x07E6, 0x07EB, 0x07EF, 0x07F4, 0x07F9, 0x07FE, + 0x0803, 0x0808, 0x080D, 0x0812, 0x0817, 0x081C, 0x0820, 0x0825, + 0x082A, 0x082F, 0x0834, 0x0839, 0x083E, 0x0843, 0x0848, 0x084C, + 0x0851, 0x0856, 0x085B, 0x0860, 0x0865, 0x086A, 0x086F, 0x0873, + 0x0878, 0x087D, 0x0882, 0x0887, 0x088C, 0x0891, 0x0896, 0x089A, + 0x089F, 0x08A4, 0x08A9, 0x08AE, 0x08B3, 0x08B8, 0x08BD, 0x08C1, + 0x08C6, 0x08CB, 0x08D0, 0x08D5, 0x08DA, 0x08DF, 0x08E3, 0x08E8, + 0x08ED, 0x08F2, 0x08F7, 0x08FC, 0x0901, 0x0905, 0x090A, 0x090F, + 0x0914, 0x0919, 0x091E, 0x0922, 0x0927, 0x092C, 0x0931, 0x0936, + 0x093B, 0x093F, 0x0944, 0x0949, 0x094E, 0x0953, 0x0958, 0x095C, + 0x0961, 0x0966, 0x096B, 0x0970, 0x0975, 0x0979, 0x097E, 0x0983, + 0x0988, 0x098D, 0x0992, 0x0996, 0x099B, 0x09A0, 0x09A5, 0x09AA, + 0x09AE, 0x09B3, 0x09B8, 0x09BD, 0x09C2, 0x09C6, 0x09CB, 0x09D0, + 0x09D5, 0x09DA, 0x09DE, 0x09E3, 0x09E8, 0x09ED, 0x09F2, 0x09F6, + 0x09FB, 0x0A00, 0x0A05, 0x0A0A, 0x0A0E, 0x0A13, 0x0A18, 0x0A1D, + 0x0A22, 0x0A26, 0x0A2B, 0x0A30, 0x0A35, 0x0A39, 0x0A3E, 0x0A43, + 0x0A48, 0x0A4D, 0x0A51, 0x0A56, 0x0A5B, 0x0A60, 0x0A64, 0x0A69, + 0x0A6E, 0x0A73, 0x0A77, 0x0A7C, 0x0A81, 0x0A86, 0x0A8B, 0x0A8F, + 0x0A94, 0x0A99, 0x0A9E, 0x0AA2, 0x0AA7, 0x0AAC, 0x0AB1, 0x0AB5, + 0x0ABA, 0x0ABF, 0x0AC4, 0x0AC8, 0x0ACD, 0x0AD2, 0x0AD7, 0x0ADB, + 0x0AE0, 0x0AE5, 0x0AE9, 0x0AEE, 0x0AF3, 0x0AF8, 0x0AFC, 0x0B01, + 0x0B06, 0x0B0B, 0x0B0F, 0x0B14, 0x0B19, 0x0B1E, 0x0B22, 0x0B27, + 0x0B2C, 0x0B30, 0x0B35, 0x0B3A, 0x0B3F, 0x0B43, 0x0B48, 0x0B4D, + 0x0B51, 0x0B56, 0x0B5B, 0x0B60, 0x0B64, 0x0B69, 0x0B6E, 0x0B72, + 0x0B77, 0x0B7C, 0x0B80, 0x0B85, 0x0B8A, 0x0B8F, 0x0B93, 0x0B98, + 0x0B9D, 0x0BA1, 0x0BA6, 0x0BAB, 0x0BAF, 0x0BB4, 0x0BB9, 0x0BBD, + 0x0BC2, 0x0BC7, 0x0BCB, 0x0BD0, 0x0BD5, 0x0BD9, 0x0BDE, 0x0BE3, + 0x0BE7, 0x0BEC, 0x0BF1, 0x0BF5, 0x0BFA, 0x0BFF, 0x0C03, 0x0C08, + 0x0C0D, 0x0C11, 0x0C16, 0x0C1B, 0x0C1F, 0x0C24, 0x0C29, 0x0C2D, + 0x0C32, 0x0C37, 0x0C3B, 0x0C40, 0x0C45, 0x0C49, 0x0C4E, 0x0C53, + 0x0C57, 0x0C5C, 0x0C60, 0x0C65, 0x0C6A, 0x0C6E, 0x0C73, 0x0C78, + 0x0C7C, 0x0C81, 0x0C86, 0x0C8A, 0x0C8F, 0x0C93, 0x0C98, 0x0C9D, + 0x0CA1, 0x0CA6, 0x0CAB, 0x0CAF, 0x0CB4, 0x0CB8, 0x0CBD, 0x0CC2, + 0x0CC6, 0x0CCB, 0x0CCF, 0x0CD4, 0x0CD9, 0x0CDD, 0x0CE2, 0x0CE6, + 0x0CEB, 0x0CF0, 0x0CF4, 0x0CF9, 0x0CFD, 0x0D02, 0x0D07, 0x0D0B, + 0x0D10, 0x0D14, 0x0D19, 0x0D1E, 0x0D22, 0x0D27, 0x0D2B, 0x0D30, + 0x0D34, 0x0D39, 0x0D3E, 0x0D42, 0x0D47, 0x0D4B, 0x0D50, 0x0D54, + 0x0D59, 0x0D5E, 0x0D62, 0x0D67, 0x0D6B, 0x0D70, 0x0D74, 0x0D79, + 0x0D7D, 0x0D82, 0x0D87, 0x0D8B, 0x0D90, 0x0D94, 0x0D99, 0x0D9D, + 0x0DA2, 0x0DA6, 0x0DAB, 0x0DAF, 0x0DB4, 0x0DB9, 0x0DBD, 0x0DC2, + 0x0DC6, 0x0DCB, 0x0DCF, 0x0DD4, 0x0DD8, 0x0DDD, 0x0DE1, 0x0DE6, + 0x0DEA, 0x0DEF, 0x0DF3, 0x0DF8, 0x0DFC, 0x0E01, 0x0E05, 0x0E0A, + 0x0E0F, 0x0E13, 0x0E18, 0x0E1C, 0x0E21, 0x0E25, 0x0E2A, 0x0E2E, + 0x0E33, 0x0E37, 0x0E3C, 0x0E40, 0x0E45, 0x0E49, 0x0E4E, 0x0E52, + 0x0E56, 0x0E5B, 0x0E5F, 0x0E64, 0x0E68, 0x0E6D, 0x0E71, 0x0E76, + 0x0E7A, 0x0E7F, 0x0E83, 0x0E88, 0x0E8C, 0x0E91, 0x0E95, 0x0E9A, + 0x0E9E, 0x0EA3, 0x0EA7, 0x0EAC, 0x0EB0, 0x0EB4, 0x0EB9, 0x0EBD, + 0x0EC2, 0x0EC6, 0x0ECB, 0x0ECF, 0x0ED4, 0x0ED8, 0x0EDC, 0x0EE1, + 0x0EE5, 0x0EEA, 0x0EEE, 0x0EF3, 0x0EF7, 0x0EFC, 0x0F00, 0x0F04, + 0x0F09, 0x0F0D, 0x0F12, 0x0F16, 0x0F1B, 0x0F1F, 0x0F23, 0x0F28, + 0x0F2C, 0x0F31, 0x0F35, 0x0F3A, 0x0F3E, 0x0F42, 0x0F47, 0x0F4B, + 0x0F50, 0x0F54, 0x0F58, 0x0F5D, 0x0F61, 0x0F66, 0x0F6A, 0x0F6E, + 0x0F73, 0x0F77, 0x0F7C, 0x0F80, 0x0F84, 0x0F89, 0x0F8D, 0x0F91, + 0x0F96, 0x0F9A, 0x0F9F, 0x0FA3, 0x0FA7, 0x0FAC, 0x0FB0, 0x0FB5, + 0x0FB9, 0x0FBD, 0x0FC2, 0x0FC6, 0x0FCA, 0x0FCF, 0x0FD3, 0x0FD7, + 0x0FDC, 0x0FE0, 0x0FE5, 0x0FE9, 0x0FED, 0x0FF2, 0x0FF6, 0x0FFA, + 0x0FFF, 0x1003, 0x1007, 0x100C, 0x1010, 0x1014, 0x1019, 0x101D, + 0x1021, 0x1026, 0x102A, 0x102E, 0x1033, 0x1037, 0x103B, 0x1040, + 0x1044, 0x1048, 0x104D, 0x1051, 0x1055, 0x105A, 0x105E, 0x1062, + 0x1067, 0x106B, 0x106F, 0x1073, 0x1078, 0x107C, 0x1080, 0x1085, + 0x1089, 0x108D, 0x1092, 0x1096, 0x109A, 0x109E, 0x10A3, 0x10A7, + 0x10AB, 0x10B0, 0x10B4, 0x10B8, 0x10BC, 0x10C1, 0x10C5, 0x10C9, + 0x10CE, 0x10D2, 0x10D6, 0x10DA, 0x10DF, 0x10E3, 0x10E7, 0x10EB, + 0x10F0, 0x10F4, 0x10F8, 0x10FD, 0x1101, 0x1105, 0x1109, 0x110E, + 0x1112, 0x1116, 0x111A, 0x111F, 0x1123, 0x1127, 0x112B, 0x1130, + 0x1134, 0x1138, 0x113C, 0x1140, 0x1145, 0x1149, 0x114D, 0x1151, + 0x1156, 0x115A, 0x115E, 0x1162, 0x1166, 0x116B, 0x116F, 0x1173, + 0x1177, 0x117C, 0x1180, 0x1184, 0x1188, 0x118C, 0x1191, 0x1195, + 0x1199, 0x119D, 0x11A1, 0x11A6, 0x11AA, 0x11AE, 0x11B2, 0x11B6, + 0x11BB, 0x11BF, 0x11C3, 0x11C7, 0x11CB, 0x11CF, 0x11D4, 0x11D8, + 0x11DC, 0x11E0, 0x11E4, 0x11E9, 0x11ED, 0x11F1, 0x11F5, 0x11F9, + 0x11FD, 0x1202, 0x1206, 0x120A, 0x120E, 0x1212, 0x1216, 0x121A, + 0x121F, 0x1223, 0x1227, 0x122B, 0x122F, 0x1233, 0x1237, 0x123C, + 0x1240, 0x1244, 0x1248, 0x124C, 0x1250, 0x1254, 0x1259, 0x125D, + 0x1261, 0x1265, 0x1269, 0x126D, 0x1271, 0x1275, 0x127A, 0x127E, + 0x1282, 0x1286, 0x128A, 0x128E, 0x1292, 0x1296, 0x129A, 0x129F, + 0x12A3, 0x12A7, 0x12AB, 0x12AF, 0x12B3, 0x12B7, 0x12BB, 0x12BF, + 0x12C3, 0x12C7, 0x12CC, 0x12D0, 0x12D4, 0x12D8, 0x12DC, 0x12E0, + 0x12E4, 0x12E8, 0x12EC, 0x12F0, 0x12F4, 0x12F8, 0x12FC, 0x1301, + 0x1305, 0x1309, 0x130D, 0x1311, 0x1315, 0x1319, 0x131D, 0x1321, + 0x1325, 0x1329, 0x132D, 0x1331, 0x1335, 0x1339, 0x133D, 0x1341, + 0x1345, 0x1349, 0x134D, 0x1351, 0x1355, 0x135A, 0x135E, 0x1362, + 0x1366, 0x136A, 0x136E, 0x1372, 0x1376, 0x137A, 0x137E, 0x1382, + 0x1386, 0x138A, 0x138E, 0x1392, 0x1396, 0x139A, 0x139E, 0x13A2, + 0x13A6, 0x13AA, 0x13AE, 0x13B2, 0x13B6, 0x13BA, 0x13BE, 0x13C2, + 0x13C6, 0x13CA, 0x13CE, 0x13D2, 0x13D6, 0x13DA, 0x13DE, 0x13E2, + 0x13E6, 0x13E9, 0x13ED, 0x13F1, 0x13F5, 0x13F9, 0x13FD, 0x1401, + 0x1405, 0x1409, 0x140D, 0x1411, 0x1415, 0x1419, 0x141D, 0x1421, + 0x1425, 0x1429, 0x142D, 0x1431, 0x1435, 0x1439, 0x143D, 0x1440, + 0x1444, 0x1448, 0x144C, 0x1450, 0x1454, 0x1458, 0x145C, 0x1460, + 0x1464, 0x1468, 0x146C, 0x1470, 0x1473, 0x1477, 0x147B, 0x147F, + 0x1483, 0x1487, 0x148B, 0x148F, 0x1493, 0x1497, 0x149B, 0x149E, + 0x14A2, 0x14A6, 0x14AA, 0x14AE, 0x14B2, 0x14B6, 0x14BA, 0x14BE, + 0x14C1, 0x14C5, 0x14C9, 0x14CD, 0x14D1, 0x14D5, 0x14D9, 0x14DD, + 0x14E0, 0x14E4, 0x14E8, 0x14EC, 0x14F0, 0x14F4, 0x14F8, 0x14FB, + 0x14FF, 0x1503, 0x1507, 0x150B, 0x150F, 0x1513, 0x1516, 0x151A, + 0x151E, 0x1522, 0x1526, 0x152A, 0x152D, 0x1531, 0x1535, 0x1539, + 0x153D, 0x1541, 0x1544, 0x1548, 0x154C, 0x1550, 0x1554, 0x1558, + 0x155B, 0x155F, 0x1563, 0x1567, 0x156B, 0x156E, 0x1572, 0x1576, + 0x157A, 0x157E, 0x1581, 0x1585, 0x1589, 0x158D, 0x1591, 0x1594, + 0x1598, 0x159C, 0x15A0, 0x15A4, 0x15A7, 0x15AB, 0x15AF, 0x15B3, + 0x15B7, 0x15BA, 0x15BE, 0x15C2, 0x15C6, 0x15C9, 0x15CD, 0x15D1, + 0x15D5, 0x15D8, 0x15DC, 0x15E0, 0x15E4, 0x15E8, 0x15EB, 0x15EF, + 0x15F3, 0x15F7, 0x15FA, 0x15FE, 0x1602, 0x1606, 0x1609, 0x160D, + 0x1611, 0x1614, 0x1618, 0x161C, 0x1620, 0x1623, 0x1627, 0x162B, + 0x162F, 0x1632, 0x1636, 0x163A, 0x163E, 0x1641, 0x1645, 0x1649, + 0x164C, 0x1650, 0x1654, 0x1658, 0x165B, 0x165F, 0x1663, 0x1666, + 0x166A, 0x166E, 0x1671, 0x1675, 0x1679, 0x167D, 0x1680, 0x1684, + 0x1688, 0x168B, 0x168F, 0x1693, 0x1696, 0x169A, 0x169E, 0x16A1, + 0x16A5, 0x16A9, 0x16AC, 0x16B0, 0x16B4, 0x16B7, 0x16BB, 0x16BF, + 0x16C2, 0x16C6, 0x16CA, 0x16CD, 0x16D1, 0x16D5, 0x16D8, 0x16DC, + 0x16E0, 0x16E3, 0x16E7, 0x16EB, 0x16EE, 0x16F2, 0x16F6, 0x16F9, + 0x16FD, 0x1700, 0x1704, 0x1708, 0x170B, 0x170F, 0x1713, 0x1716, + 0x171A, 0x171D, 0x1721, 0x1725, 0x1728, 0x172C, 0x1730, 0x1733, + 0x1737, 0x173A, 0x173E, 0x1742, 0x1745, 0x1749, 0x174C, 0x1750, + 0x1754, 0x1757, 0x175B, 0x175E, 0x1762, 0x1766, 0x1769, 0x176D, + 0x1770, 0x1774, 0x1778, 0x177B, 0x177F, 0x1782, 0x1786, 0x1789, + 0x178D, 0x1791, 0x1794, 0x1798, 0x179B, 0x179F, 0x17A2, 0x17A6, + 0x17AA, 0x17AD, 0x17B1, 0x17B4, 0x17B8, 0x17BB, 0x17BF, 0x17C2, + 0x17C6, 0x17C9, 0x17CD, 0x17D1, 0x17D4, 0x17D8, 0x17DB, 0x17DF, + 0x17E2, 0x17E6, 0x17E9, 0x17ED, 0x17F0, 0x17F4, 0x17F7, 0x17FB, + 0x17FE, 0x1802, 0x1806, 0x1809, 0x180D, 0x1810, 0x1814, 0x1817, + 0x181B, 0x181E, 0x1822, 0x1825, 0x1829, 0x182C, 0x1830, 0x1833, + 0x1837, 0x183A, 0x183E, 0x1841, 0x1845, 0x1848, 0x184C, 0x184F, + 0x1853, 0x1856, 0x185A, 0x185D, 0x1860, 0x1864, 0x1867, 0x186B, + 0x186E, 0x1872, 0x1875, 0x1879, 0x187C, 0x1880, 0x1883, 0x1887, + 0x188A, 0x188E, 0x1891, 0x1894, 0x1898, 0x189B, 0x189F, 0x18A2, + 0x18A6, 0x18A9, 0x18AD, 0x18B0, 0x18B3, 0x18B7, 0x18BA, 0x18BE, + 0x18C1, 0x18C5, 0x18C8, 0x18CC, 0x18CF, 0x18D2, 0x18D6, 0x18D9, + 0x18DD, 0x18E0, 0x18E3, 0x18E7, 0x18EA, 0x18EE, 0x18F1, 0x18F5, + 0x18F8, 0x18FB, 0x18FF, 0x1902, 0x1906, 0x1909, 0x190C, 0x1910, + 0x1913, 0x1917, 0x191A, 0x191D, 0x1921, 0x1924, 0x1928, 0x192B, + 0x192E, 0x1932, 0x1935, 0x1938, 0x193C, 0x193F, 0x1943, 0x1946, + 0x1949, 0x194D, 0x1950, 0x1953, 0x1957, 0x195A, 0x195D, 0x1961, + 0x1964, 0x1968, 0x196B, 0x196E, 0x1972, 0x1975, 0x1978, 0x197C, + 0x197F, 0x1982, 0x1986, 0x1989, 0x198C, 0x1990, 0x1993, 0x1996, + 0x199A, 0x199D, 0x19A0, 0x19A4, 0x19A7, 0x19AA, 0x19AE, 0x19B1, + 0x19B4, 0x19B8, 0x19BB, 0x19BE, 0x19C2, 0x19C5, 0x19C8, 0x19CC, + 0x19CF, 0x19D2, 0x19D5, 0x19D9, 0x19DC, 0x19DF, 0x19E3, 0x19E6, + 0x19E9, 0x19ED, 0x19F0, 0x19F3, 0x19F6, 0x19FA, 0x19FD, 0x1A00, + 0x1A04, 0x1A07, 0x1A0A, 0x1A0D, 0x1A11, 0x1A14, 0x1A17, 0x1A1B, + 0x1A1E, 0x1A21, 0x1A24, 0x1A28, 0x1A2B, 0x1A2E, 0x1A31, 0x1A35, + 0x1A38, 0x1A3B, 0x1A3E, 0x1A42, 0x1A45, 0x1A48, 0x1A4B, 0x1A4F, + 0x1A52, 0x1A55, 0x1A58, 0x1A5C, 0x1A5F, 0x1A62, 0x1A65, 0x1A69, + 0x1A6C, 0x1A6F, 0x1A72, 0x1A76, 0x1A79, 0x1A7C, 0x1A7F, 0x1A83, + 0x1A86, 0x1A89, 0x1A8C, 0x1A8F, 0x1A93, 0x1A96, 0x1A99, 0x1A9C, + 0x1A9F, 0x1AA3, 0x1AA6, 0x1AA9, 0x1AAC, 0x1AB0, 0x1AB3, 0x1AB6, + 0x1AB9, 0x1ABC, 0x1AC0, 0x1AC3, 0x1AC6, 0x1AC9, 0x1ACC, 0x1ACF, + 0x1AD3, 0x1AD6, 0x1AD9, 0x1ADC, 0x1ADF, 0x1AE3, 0x1AE6, 0x1AE9, + 0x1AEC, 0x1AEF, 0x1AF2, 0x1AF6, 0x1AF9, 0x1AFC, 0x1AFF, 0x1B02, + 0x1B05, 0x1B09, 0x1B0C, 0x1B0F, 0x1B12, 0x1B15, 0x1B18, 0x1B1C, + 0x1B1F, 0x1B22, 0x1B25, 0x1B28, 0x1B2B, 0x1B2E, 0x1B32, 0x1B35, + 0x1B38, 0x1B3B, 0x1B3E, 0x1B41, 0x1B44, 0x1B48, 0x1B4B, 0x1B4E, + 0x1B51, 0x1B54, 0x1B57, 0x1B5A, 0x1B5D, 0x1B61, 0x1B64, 0x1B67, + 0x1B6A, 0x1B6D, 0x1B70, 0x1B73, 0x1B76, 0x1B79, 0x1B7D, 0x1B80, + 0x1B83, 0x1B86, 0x1B89, 0x1B8C, 0x1B8F, 0x1B92, 0x1B95, 0x1B98, + 0x1B9C, 0x1B9F, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BAB, 0x1BAE, 0x1BB1, + 0x1BB4, 0x1BB7, 0x1BBA, 0x1BBD, 0x1BC1, 0x1BC4, 0x1BC7, 0x1BCA, + 0x1BCD, 0x1BD0, 0x1BD3, 0x1BD6, 0x1BD9, 0x1BDC, 0x1BDF, 0x1BE2, + 0x1BE5, 0x1BE8, 0x1BEB, 0x1BEE, 0x1BF2, 0x1BF5, 0x1BF8, 0x1BFB, + 0x1BFE, 0x1C01, 0x1C04, 0x1C07, 0x1C0A, 0x1C0D, 0x1C10, 0x1C13, + 0x1C16, 0x1C19, 0x1C1C, 0x1C1F, 0x1C22, 0x1C25, 0x1C28, 0x1C2B, + 0x1C2E, 0x1C31, 0x1C34, 0x1C37, 0x1C3A, 0x1C3D, 0x1C40, 0x1C43, + 0x1C46, 0x1C49, 0x1C4C, 0x1C4F, 0x1C52, 0x1C55, 0x1C58, 0x1C5B, + 0x1C5E, 0x1C61, 0x1C64, 0x1C67, 0x1C6A, 0x1C6D, 0x1C70, 0x1C73, + 0x1C76, 0x1C79, 0x1C7C, 0x1C7F, 0x1C82, 0x1C85, 0x1C88, 0x1C8B, + 0x1C8E, 0x1C91, 0x1C94, 0x1C97, 0x1C9A, 0x1C9D, 0x1CA0, 0x1CA3, + 0x1CA6, 0x1CA9, 0x1CAC, 0x1CAF, 0x1CB2, 0x1CB5, 0x1CB8, 0x1CBB, + 0x1CBE, 0x1CC1, 0x1CC3, 0x1CC6, 0x1CC9, 0x1CCC, 0x1CCF, 0x1CD2, + 0x1CD5, 0x1CD8, 0x1CDB, 0x1CDE, 0x1CE1, 0x1CE4, 0x1CE7, 0x1CEA, + 0x1CED, 0x1CF0, 0x1CF3, 0x1CF5, 0x1CF8, 0x1CFB, 0x1CFE, 0x1D01, + 0x1D04, 0x1D07, 0x1D0A, 0x1D0D, 0x1D10, 0x1D13, 0x1D16, 0x1D18, + 0x1D1B, 0x1D1E, 0x1D21, 0x1D24, 0x1D27, 0x1D2A, 0x1D2D, 0x1D30, + 0x1D33, 0x1D35, 0x1D38, 0x1D3B, 0x1D3E, 0x1D41, 0x1D44, 0x1D47, + 0x1D4A, 0x1D4D, 0x1D4F, 0x1D52, 0x1D55, 0x1D58, 0x1D5B, 0x1D5E, + 0x1D61, 0x1D64, 0x1D66, 0x1D69, 0x1D6C, 0x1D6F, 0x1D72, 0x1D75, + 0x1D78, 0x1D7B, 0x1D7D, 0x1D80, 0x1D83, 0x1D86, 0x1D89, 0x1D8C, + 0x1D8E, 0x1D91, 0x1D94, 0x1D97, 0x1D9A, 0x1D9D, 0x1DA0, 0x1DA2, + 0x1DA5, 0x1DA8, 0x1DAB, 0x1DAE, 0x1DB1, 0x1DB3, 0x1DB6, 0x1DB9, + 0x1DBC, 0x1DBF, 0x1DC2, 0x1DC4, 0x1DC7, 0x1DCA, 0x1DCD, 0x1DD0, + 0x1DD3, 0x1DD5, 0x1DD8, 0x1DDB, 0x1DDE, 0x1DE1, 0x1DE3, 0x1DE6, + 0x1DE9, 0x1DEC, 0x1DEF, 0x1DF1, 0x1DF4, 0x1DF7, 0x1DFA, 0x1DFD, + 0x1DFF, 0x1E02, 0x1E05, 0x1E08, 0x1E0B, 0x1E0D, 0x1E10, 0x1E13, + 0x1E16, 0x1E19, 0x1E1B, 0x1E1E, 0x1E21, 0x1E24, 0x1E26, 0x1E29, + 0x1E2C, 0x1E2F, 0x1E32, 0x1E34, 0x1E37, 0x1E3A, 0x1E3D, 0x1E3F, + 0x1E42, 0x1E45, 0x1E48, 0x1E4A, 0x1E4D, 0x1E50, 0x1E53, 0x1E55, + 0x1E58, 0x1E5B, 0x1E5E, 0x1E60, 0x1E63, 0x1E66, 0x1E69, 0x1E6B, + 0x1E6E, 0x1E71, 0x1E74, 0x1E76, 0x1E79, 0x1E7C, 0x1E7F, 0x1E81, + 0x1E84, 0x1E87, 0x1E8A, 0x1E8C, 0x1E8F, 0x1E92, 0x1E94, 0x1E97, + 0x1E9A, 0x1E9D, 0x1E9F, 0x1EA2, 0x1EA5, 0x1EA8, 0x1EAA, 0x1EAD, + 0x1EB0, 0x1EB2, 0x1EB5, 0x1EB8, 0x1EBA, 0x1EBD, 0x1EC0, 0x1EC3, + 0x1EC5, 0x1EC8, 0x1ECB, 0x1ECD, 0x1ED0, 0x1ED3, 0x1ED5, 0x1ED8, + 0x1EDB, 0x1EDE, 0x1EE0, 0x1EE3, 0x1EE6, 0x1EE8, 0x1EEB, 0x1EEE, + 0x1EF0, 0x1EF3, 0x1EF6, 0x1EF8, 0x1EFB, 0x1EFE, 0x1F00, 0x1F03, + 0x1F06, 0x1F08, 0x1F0B, 0x1F0E, 0x1F10, 0x1F13, 0x1F16, 0x1F18, + 0x1F1B, 0x1F1E, 0x1F20, 0x1F23, 0x1F26, 0x1F28, 0x1F2B, 0x1F2E, + 0x1F30, 0x1F33, 0x1F36, 0x1F38, 0x1F3B, 0x1F3D, 0x1F40, 0x1F43, + 0x1F45, 0x1F48, 0x1F4B, 0x1F4D, 0x1F50, 0x1F53, 0x1F55, 0x1F58, + 0x1F5A, 0x1F5D, 0x1F60, 0x1F62, 0x1F65, 0x1F68, 0x1F6A, 0x1F6D, + 0x1F6F, 0x1F72, 0x1F75, 0x1F77, 0x1F7A, 0x1F7C, 0x1F7F, 0x1F82, + 0x1F84, 0x1F87, 0x1F8A, 0x1F8C, 0x1F8F, 0x1F91, 0x1F94, 0x1F97, + 0x1F99, 0x1F9C, 0x1F9E, 0x1FA1, 0x1FA4, 0x1FA6, 0x1FA9, 0x1FAB, + 0x1FAE, 0x1FB0, 0x1FB3, 0x1FB6, 0x1FB8, 0x1FBB, 0x1FBD, 0x1FC0, + 0x1FC3, 0x1FC5, 0x1FC8, 0x1FCA, 0x1FCD, 0x1FCF, 0x1FD2, 0x1FD5, + 0x1FD7, 0x1FDA, 0x1FDC, 0x1FDF, 0x1FE1, 0x1FE4, 0x1FE6, 0x1FE9, + 0x1FEC, 0x1FEE, 0x1FF1, 0x1FF3, 0x1FF6, 0x1FF8, 0x1FFB, 0x1FFD, + 0x2000, 0x2000, +}; diff --git a/coridor.c b/coridor.c index 1118861..5829af2 100644 --- a/coridor.c +++ b/coridor.c @@ -1,10 +1,11 @@ typedef struct { - VECTOR gForce; + VECTOR gForce; VECTOR position; SVECTOR velocity; - int mass; + int invMass; VECTOR min; VECTOR max; + int restitution; } BODY; typedef struct { @@ -42,8 +43,8 @@ typedef struct { } CAMPATH; CAMPOS camStartPos = { - {-62,176,-15}, - {537,459,0}, + {-177,90,121}, + {78,459,0}, }; CAMPATH camPath = { @@ -868,12 +869,13 @@ short modelCylindre_isPrism =0; short modelCylindre_isAnim =1; long modelCylindre_p = 0; BODY modelCylindre_body = { - {0, 981, 0, 0}, + {0, 981, 0, 0}, -53,-108,18, 0, 0,0,0, 0, - 1000, + ONE/1000, 13,-3,14, 0, 90,62,91, 0, + 4096, }; TMESH modelCylindre = { @@ -2103,12 +2105,13 @@ short modelgnd_isPrism =0; short modelgnd_isAnim =0; long modelgnd_p = 0; BODY modelgnd_body = { - {0, 981, 0, 0}, + {0, 981, 0, 0}, 0,0,0, 0, 0,0,0, 0, - 1000, + ONE/1000, -580,-195,-98, 0, 200,0,682, 0, + 4096, }; TMESH modelgnd = { @@ -2256,19 +2259,20 @@ int modelobject_index[] = { }; MATRIX modelobject_matrix = {0}; -VECTOR modelobject_pos = {-160,-141,58, 0}; +VECTOR modelobject_pos = {-200,-179,57, 0}; SVECTOR modelobject_rot = {0,0,0}; short modelobject_isRigidBody =1; short modelobject_isPrism =0; short modelobject_isAnim =0; long modelobject_p = 0; BODY modelobject_body = { - {0, 981, 100, 0}, - -160,-141,58, 0, + {100, 981, 0, 0}, + -200,-179,57, 0, 0,0,0, 0, - 50, + ONE/64, -20,1,-22, 0, 19,53,18, 0, + 2048 }; TMESH modelobject = { @@ -2301,102 +2305,102 @@ MESH meshobject = { }; SVECTOR modelSphere_mesh[] = { - {0,-50,42}, - {0,-30,58}, - {0,-6,65}, - {0,19,62}, - {15,13,63}, - {13,-50,40}, - {17,-26,58}, - {14,42,49}, - {23,53,32}, - {47,-6,46}, - {36,7,55}, - {38,-33,42}, - {49,-21,38}, - {48,21,39}, - {41,42,30}, - {32,-51,26}, - {30,-58,6}, - {55,-30,17}, - {63,-7,18}, - {61,13,20}, - {55,31,17}, - {12,-63,14}, - {39,52,5}, - {64,-15,-6}, - {58,31,-5}, - {24,60,5}, - {9,-64,-9}, - {50,-43,-8}, - {64,7,-13}, - {28,-58,-11}, - {46,42,-21}, - {40,-42,-31}, - {53,17,-35}, - {46,-26,-40}, - {37,31,-45}, - {22,55,-28}, - {0,65,0}, - {30,-6,-58}, - {23,18,-59}, - {15,-58,-27}, - {20,-43,-46}, - {17,-30,-56}, - {13,-7,-64}, - {23,47,-40}, - {13,63,-13}, - {0,-50,-41}, - {0,-31,-57}, - {0,-6,-65}, - {0,19,-62}, - {11,47,-46}, - {-17,-30,-56}, - {-13,-7,-64}, - {-17,36,-52}, - {-20,-43,-46}, - {-30,-6,-58}, - {-23,18,-59}, - {0,-65,11}, - {-15,-58,-27}, - {-40,-42,-31}, - {-37,31,-45}, - {-23,47,-40}, - {-46,-26,-40}, - {-54,-8,-37}, - {-53,17,-35}, - {-46,42,-21}, - {-22,55,-28}, - {-9,-64,-9}, - {-64,7,-13}, - {-28,-58,-11}, - {-64,-15,-6}, - {-58,31,-5}, - {-50,-43,-8}, - {-61,13,20}, - {-13,63,-13}, - {-55,-30,17}, - {-63,-7,18}, - {-55,31,17}, - {-39,52,5}, - {-30,-58,6}, - {-24,60,5}, - {-49,-21,38}, - {-48,21,39}, - {-41,42,30}, - {-32,-51,26}, - {-38,-33,42}, - {-47,-6,46}, - {-29,29,51}, - {-36,7,55}, - {-10,63,16}, - {-12,-63,14}, - {-13,-50,40}, - {-17,-26,58}, - {-15,13,63}, - {-14,42,49}, - {-23,53,32}, - {0,47,46} + {0,-19,15}, + {0,-11,21}, + {0,-2,24}, + {0,7,23}, + {6,5,23}, + {5,-19,15}, + {6,-10,22}, + {5,15,18}, + {8,20,12}, + {17,-2,17}, + {13,3,20}, + {14,-12,16}, + {18,-8,14}, + {18,8,14}, + {15,15,11}, + {12,-19,10}, + {11,-22,2}, + {20,-11,6}, + {23,-3,7}, + {23,5,7}, + {20,11,6}, + {4,-23,5}, + {15,19,2}, + {24,-5,-2}, + {21,11,-2}, + {9,22,2}, + {3,-24,-3}, + {18,-16,-3}, + {24,2,-5}, + {10,-21,-4}, + {17,16,-8}, + {15,-15,-12}, + {20,6,-13}, + {17,-10,-15}, + {14,11,-17}, + {8,21,-10}, + {0,24,0}, + {11,-2,-21}, + {8,7,-22}, + {5,-21,-10}, + {7,-16,-17}, + {6,-11,-21}, + {5,-3,-23}, + {8,17,-15}, + {5,23,-5}, + {0,-19,-15}, + {0,-12,-21}, + {0,-2,-24}, + {0,7,-23}, + {4,17,-17}, + {-6,-11,-21}, + {-5,-3,-23}, + {-6,13,-19}, + {-7,-16,-17}, + {-11,-2,-21}, + {-8,7,-22}, + {0,-24,4}, + {-5,-21,-10}, + {-15,-15,-12}, + {-14,11,-17}, + {-8,17,-15}, + {-17,-10,-15}, + {-20,-3,-14}, + {-20,6,-13}, + {-17,16,-8}, + {-8,21,-10}, + {-3,-24,-3}, + {-24,2,-5}, + {-10,-21,-4}, + {-24,-5,-2}, + {-21,11,-2}, + {-18,-16,-3}, + {-23,5,7}, + {-5,23,-5}, + {-20,-11,6}, + {-23,-3,7}, + {-20,11,6}, + {-15,19,2}, + {-11,-22,2}, + {-9,22,2}, + {-18,-8,14}, + {-18,8,14}, + {-15,15,11}, + {-12,-19,10}, + {-14,-12,16}, + {-17,-2,17}, + {-11,11,19}, + {-13,3,20}, + {-4,23,6}, + {-4,-23,5}, + {-5,-19,15}, + {-6,-10,22}, + {-6,5,23}, + {-5,15,18}, + {-8,20,12}, + {0,17,17} }; SVECTOR modelSphere_normal[] = { @@ -3824,19 +3828,20 @@ int modelSphere_index[] = { }; MATRIX modelSphere_matrix = {0}; -VECTOR modelSphere_pos = {-24,-41,238, 0}; +VECTOR modelSphere_pos = {-103,-22,54, 0}; SVECTOR modelSphere_rot = {0,0,0}; short modelSphere_isRigidBody =1; short modelSphere_isPrism =0; short modelSphere_isAnim =0; long modelSphere_p = 0; BODY modelSphere_body = { - {0, 981, 0, 0}, - -24,-41,238, 0, + {0, 981, 0, 0}, + -103,-22,54, 0, 0,0,0, 0, - 1000, - -64,-65,-65, 0, - 64,65,65, 0, + ONE/128, + -24,-24,-24, 0, + 24,24,24, 0, + 1024 }; TMESH modelSphere = {