more work into Terracotta Army

This commit is contained in:
Zeno Rogue 2017-10-04 21:26:26 +02:00
parent cbd3805361
commit 6d3fcf0a5d
7 changed files with 136 additions and 111 deletions

View File

@ -179,72 +179,31 @@ void drawBlizzards() {
bc->c->aitmp = bc->tmp;
}
#if 0
{
int v0 = windmap::at(c);
const bool method2 = true;
auto a = [] (cell *c) {
ld dx=0, dy=0;
int v0 = windmap::at(c);
forCellIdEx(c2, i, c) {
int v1 = windmap::at(c->mov[i]);
if(!c2) continue;
int xv1 = (v1 - v0) & 255;
if(xv1 >= 128) xv1 -= 256;
int hdir = displaydir(c, i);
dx += sin(hdir * M_PI / 42) * xv1;
dy += cos(hdir * M_PI / 42) * xv1;
}
return atan2(dx, dy);
};
ld alpha = a(c);
double xx = M_PI / (1 + sqrt(5));
forCellIdEx(c2, i, c) {
int v1 = windmap::at(c2);
int xv1 = (v1 - v0) & 255;
if(xv1 >= windmap::NOWINDBELOW && xv1 < windmap::NOWINDFROM) {
// method2 ? (ticks/16) - v0 : ticks/4;
double xcph = (ticks/16.) - v0;
xcph -= floor(xcph / 256) * 256;
ld beta = a(c2);
for(int u=0; u<(method2 ? 16 : 1); u++) {
xcph += 16; if(xcph >= 256) xcph -= 256;
if(method2 ? xcph < xv1 : true) {
int hdir = displaydir(c, i);
int aircol = 0xFFFFFF00; // 0xD0D0FFFF;
aircol += int(255. * windmap::NOWINDBELOW / xv1); // (1-exp(-xv1 / 50.)));
double at = method2 ? xcph*1./xv1 : xcph / 256.;
double ldist =
purehepta ? tessf :
c->type == 6 && c2->type == 6 ? hexhexdist :
crossf;
/* transmatrix alphamatrix = (*Vdp) * spin(M_PI/2) * xpush(sin(u*xx) * ldist/4) * spin(-M_PI/2) * spin(alpha) * xpush(ldist*at);
transmatrix betamatrix = (*Vdp) * spin(hdir*M_PI/42) * xpush(ldist) *
spin(-displaydir(c2, c->spn(i))*M_PI/S42) *
spin(M_PI/2) * xpush(-sin(u*xx)*ldist/4) * spin(-M_PI/2) *
spin(beta) * xpush(ldist * (1-at));
hyperpoint t = inverse(alphamatrix) * tC0(betamatrix);
transmatrix tpartial = alphamatrix * rspintox(t) * xpush(hdist0(t) * at * at * (3-2*at)); */
poly_outline = OUTLINE_TRANS;
transmatrix V0 = spin((hdir) * M_PI / S42);
// queuepoly(tpartial, shSnowball, aircol);
queuepoly((*Vdp) * V0 * xpush(at*ldist), shSnowball, aircol);
poly_outline = OUTLINE_DEFAULT;
}
}
vector<cell*> arrowtraps;
}
void drawArrowTraps() {
for(cell *c: arrowtraps) {
auto r = traplimits(c);
try {
transmatrix& t0 = gmatrix.at(r[0]);
transmatrix& t1 = gmatrix.at(r[1]);
queueline(tC0(t0), tC0(t1), 0xFF0000FF, 4, PPR_ITEM);
if((c->wparam & 7) == 3) {
// queueline(t0 * randomPointIn(r[0]->type), t1 * randomPointIn(r[1]->type), 0xFFFFFFFF, 4, PPR_ITEM);
int tt = ticks % 401;
for(int u=0; u<2; u++) {
transmatrix& tu = u ? t0 : t1;
transmatrix& tv = u ? t1 : t0;
hyperpoint trel = inverse(tu) * tC0(tv);
transmatrix tpartial = tu * rspintox(trel) * xpush(hdist0(trel) * tt / 401.0);
queuepoly(tpartial * ypush(.05), shTrapArrow, 0xFFFFFFFF);
}
}
}
#endif
catch(out_of_range) {}
}
}

View File

@ -697,7 +697,7 @@ monstertype minf[motypes] = {
"more reflections will come out of the mirror. Use Mimics to destroy them."
},
{ 'W', 0x202020, "Hunting Dog", NODESC},
{ 'T', 0xA0A0A0, "Terracotta Warrior", NODESC},
{ 'T', 0xE2725B, "Terracotta Warrior", NODESC},
{ 'H', 0xA0A0A0, "Mercury Warrior", NODESC},
{ 'B', 0xA00000, "Void Beast", NODESC},
{ 'L', 0xA00000, "Lemur", NODESC},
@ -1651,7 +1651,7 @@ const landtype linf[landtypes] = {
{ 0xA06000, "Alchemy II", NODESCYET},
{ 0x8080FF, "Blizzard", NODESCYET},
{ 0x207068, "Hunting Ground", NODESCYET},
{ 0x888888, "Terracotta Army", NODESCYET}
{ 0xE2725B, "Terracotta Army", NODESCYET}
};
enum eLand { laNone, laBarrier, laCrossroads, laDesert, laIce, laCaves, laJungle, laAlchemist, laMirror, laGraveyard,

View File

@ -101,7 +101,8 @@ bool isNonliving(eMonster m) {
m == moMimic || m == moGolem || m == moGolemMoved ||
m == moZombie || m == moGhost || m == moShadow || m == moSkeleton ||
m == moEvilGolem || m == moIllusion || m == moEarthElemental ||
m == moWaterElemental || m == moDraugr;
m == moWaterElemental || m == moDraugr || m == moTerraWarrior ||
m == moIceGolem || m == moVoidBeast;
}
bool isMetalBeast(eMonster m) {
@ -111,11 +112,11 @@ bool isMetalBeast(eMonster m) {
bool isStunnable(eMonster m) {
return m == moPalace || m == moFatGuard || m == moSkeleton || isPrincess(m) ||
isMetalBeast(m) || m == moTortoise || isDragon(m) ||
m == moReptile;
m == moReptile || m == moTerraWarrior;
}
bool hasHitpoints(eMonster m) {
return m == moPalace || m == moFatGuard || m == moVizier || isPrincess(m);
return m == moPalace || m == moFatGuard || m == moVizier || isPrincess(m) || m == moTerraWarrior;
}
bool isMountable(eMonster m) {

View File

@ -1107,6 +1107,10 @@ int monstersnear(stalemate1& sm) {
elec::builder b;
if(elec::affected(c)) { which = moLightningBolt; res++; }
if(c->wall == waArrowTrap && c->wparam == 2) {
which = moArrowTrap; res++;
}
if(sm.who == moPlayer || items[itOrbEmpathy]) {
fast = (items[itOrbSpeed] && (items[itOrbSpeed] & 1));
@ -1662,15 +1666,10 @@ bool mayExplodeMine(cell *c, eMonster who) {
}
void stunMonster(cell *c2) {
if(c2->monst != moSkeleton && !isMetalBeast(c2->monst) && c2->monst != moTortoise &&
c2->monst != moReptile) {
c2->hitpoints--;
if(c2->monst == moPrincess)
playSound(c2, princessgender() ? "hit-princess" : "hit-prince");
}
int newtime = (
c2->monst == moFatGuard ? 2 :
c2->monst == moSkeleton && c2->land != laPalace && c2->land != laHalloween ? 7 :
c2->monst == moTerraWarrior ? min(c2->stuntime + 8 - c2->hitpoints, 7) :
isMetalBeast(c2->monst) ? 7 :
c2->monst == moTortoise ? 7 :
c2->monst == moReptile ? 7 :
@ -1684,6 +1683,12 @@ void stunMonster(cell *c2) {
c2->monst == moHedge ? 1 :
c2->monst == moFlailer ? 1 :
3);
if(c2->monst != moSkeleton && !isMetalBeast(c2->monst) && c2->monst != moTortoise &&
c2->monst != moReptile) {
c2->hitpoints--;
if(c2->monst == moPrincess)
playSound(c2, princessgender() ? "hit-princess" : "hit-prince");
}
if(c2->stuntime < newtime) c2->stuntime = newtime;
if(isBull(c2->monst)) c2->mondir = NODIR;
checkStunKill(c2);
@ -2921,6 +2926,29 @@ void destroyWeakBranch(cell *cf, cell *ct, eMonster who) {
}
}
bool isCentralTrap(cell *c) {
if(c->wall != waArrowTrap) return false;
int i = 0;
forCellEx(c2, c) if(c2->wall == waArrowTrap) i++;
return i == 2;
}
array<cell*, 2> traplimits(cell *c) {
array<cell*, 2> res;
int q = 0;
for(int d=0; d<c->type; d++) {
cellwalker cw(c, d);
cwstep(cw);
if(cw.c->wall != waArrowTrap) continue;
cwspin(cw, cw.c->type/2);
if((cw.c->type&1) && cwpeek(cw, 0)->wall != waStone) cwspin(cw, 1);
cwstep(cw);
res[q++] = cw.c;
}
while(q<2) res[q++] = NULL;
return res;
}
void activateArrowTrap(cell *c) {
if(c->wall == waArrowTrap && c->wparam == 0) {
c->wparam = 1;
@ -4674,7 +4702,8 @@ int movevalue(eMonster m, cell *c, cell *c2, flagtype flags) {
(m == moPrincessArmed && isPrincess(c2->monst)) ? 14000 : // jealousy!
isActiveEnemy(c2,m) ? 12000 :
(c2->monst == moSkeleton || c2->monst == moMetalBeast ||
c2->monst == moReptile || c2->monst == moTortoise) ? -400 :
c2->monst == moReptile || c2->monst == moTortoise ||
c2->monst == moTerraWarrior) ? -400 :
isIvy(c2) ? 8000 :
isInactiveEnemy(c2,m) ? 1000 :
-500;
@ -6465,16 +6494,29 @@ namespace orbbull {
}
}
// predictable or not
static constexpr bool randterra = false;
void terracotta() {
for(int i=0; i<numplayers(); i++)
forCellEx(c2, playerpos(i))
if(c2->wall == waTerraWarrior) {
c2->landparam++;
if((c2->landparam == 3 && hrand(3) == 0) ||
(c2->landparam == 4 && hrand(2) == 0) ||
c2->landparam == 5)
c2->monst = moTerraWarrior,
c2->wall = waNone;
bool live = false;
if(randterra) {
c2->landparam++;
if((c2->landparam == 3 && hrand(3) == 0) ||
(c2->landparam == 4 && hrand(2) == 0) ||
c2->landparam == 5)
live = true;
}
else {
c2->landparam--;
live = !c2->landparam;
}
if(live)
c2->monst = moTerraWarrior,
c2->hitpoints = 7,
c2->wall = waNone;
}
}
@ -6626,7 +6668,7 @@ void killFriendlyIvy() {
}
bool monsterPushable(cell *c2) {
return (c2->monst != moFatGuard && !(isMetalBeast(c2->monst) && c2->stuntime < 2) && c2->monst != moTortoise);
return (c2->monst != moFatGuard && !(isMetalBeast(c2->monst) && c2->stuntime < 2) && c2->monst != moTortoise && c2->monst != moTerraWarrior);
}
bool movepcto(int d, int subdir, bool checkonly) {

View File

@ -649,15 +649,18 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int ticks,
return false;
}
void drawTerraWarrior(const transmatrix& V, int t, double footphase) {
int col = 0xC0C0C0;
int col2 = t > 6 ? 0x4040C0 : 0x6060A0;
void drawTerraWarrior(const transmatrix& V, int t, int hp, double footphase) {
ShadowV(V, shPBody);
otherbodyparts(V, darkena(t > 4 ? col2 : col, 0, 0xF0), moDesertman, footphase);
queuepoly(VBODY, shPBody, darkena(t > 0 ? col2 : col, 0, 0xF0));
queuepoly(VBODY, shPrinceDress, darkena(t > 1 ? col2 : col, 0, 0xF0));
if(!peace::on) queuepoly(VBODY * Mirror, shPSword, darkena(t > 2 ? col2 : col, 0, 0xF0));
queuepoly(VHEAD, shTurban1, darkena(t > 3 ? col2 : col, 0, 0xF0));
int col = linf[laTerracotta].color;
int bcol = darkena(false ? 0xC0B23E : col, 0, 0xFF);
otherbodyparts(V, bcol, moDesertman, footphase);
queuepoly(VBODY, shPBody, bcol);
if(!peace::on) queuepoly(VBODY * Mirror, shPSword, darkena(0xC0C0C0, 0, 0xFF));
queuepoly(VBODY, shTerraArmor1, darkena(t > 0 ? 0x4040FF : col, 0, 0xFF));
if(hp >= 4) queuepoly(VBODY, shTerraArmor2, darkena(t > 1 ? 0xC00000 : col, 0, 0xFF));
if(hp >= 2) queuepoly(VBODY, shTerraArmor3, darkena(t > 2 ? 0x612600 : col, 0, 0xFF));
queuepoly(VHEAD, shTerraHead, darkena(t > 4 ? 0x202020 : t > 3 ? 0x504040 : col, 0, 0xFF));
queuepoly(VHEAD, shPFace, bcol);
}
bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, double footphase) {
@ -1088,7 +1091,7 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou
queuepoly(VBODY, shPBody, c);
}
else if(m == moTerraWarrior)
drawTerraWarrior(V, 7, footphase);
drawTerraWarrior(V, 7, (where ? where->hitpoints : 7), footphase);
else if(m == moDesertman) {
otherbodyparts(V, darkena(col, 0, 0xC0), m, footphase);
ShadowV(V, shPBody);
@ -1207,14 +1210,15 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou
queuepoly(VHEAD, shPFace, darkena(col, 1, 0x90));
queuepoly(VHEAD, shArmor, darkena(col, 0, 0xC0));
}
else if(m == moTerraWarrior || m == moMercuryGuy || m == moLemur) {
else if(m == moMercuryGuy || m == moLemur) {
ShadowV(V, shPBody);
otherbodyparts(V, darkena(col, 0, 0xF0), m, footphase);
queuepoly(VBODY, shPBody, darkena(col, 0, 0xF0));
otherbodyparts(V, darkena(col, 0, 0xC0), m, footphase);
queuepoly(VBODY, shPBody, darkena(col, 0, 0x80));
if(!peace::on) queuepoly(VBODY * Mirror, shPSword, darkena(col, 0, 0xF0));
queuepoly(VHEAD, shPHead, darkena(col, 1, 0xF0));
queuepoly(VHEAD, shPFace, darkena(col, 1, 0xF0));
queuepoly(VHEAD, shArmor, darkena(col, 0, 0xF0));
queuepoly(VHEAD, shTerraHead, darkena(col, 0, 0x80));
queuepoly(VHEAD, shPFace, darkena(col, 0, 0x80));
queuepoly(VBODY, shTerraArmor1, darkena(col, 1, 0x40));
queuepoly(VBODY, shTerraArmor2, darkena(col, 1, 0x40));
}
else if(m == moGhost || m == moSeep || m == moFriendlyGhost) {
if(m == moFriendlyGhost) col = fghostcolor(ticks, where);
@ -2345,7 +2349,7 @@ void setcolors(cell *c, int& wcol, int &fcol) {
case laBurial: case laTrollheim: case laBarrier: case laOceanWall:
case laCrossroads2: case laCrossroads3: case laCrossroads4: case laCrossroads5:
case laRose: case laPower: case laWildWest: case laHalloween: case laRedRock:
case laDragon: case laStorms:
case laDragon: case laStorms: case laTerracotta:
fcol = linf[c->land].color; break;
case laDesert: fcol = 0xEDC9AF; break;
@ -2467,10 +2471,6 @@ void setcolors(cell *c, int& wcol, int &fcol) {
if(pseudohept(c)) fcol = fcol * 3/4;
break;
case laTerracotta:
fcol = 0x909090;
break;
case laIvoryTower:
fcol = 0x10101 * (32 + (c->landparam&1) * 32) - 0x000010;
break;
@ -3249,6 +3249,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
c->land == laTrollheim ? 2 :
c->land == laReptile ? 0 :
c->land == laDogPlains ? 1 :
c->land == laTerracotta ? 1 :
2;
if(c->land == laAlchemy2) {
@ -3763,7 +3764,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
}
if(c->wall == waTerraWarrior)
drawTerraWarrior(V, c->landparam & 7, 0);
drawTerraWarrior(V, randterra ? (c->landparam & 7) : (5 - (c->landparam & 7)), 7, 0);
else if(c->wall == waBoat || c->wall == waStrandedBoat) {
double footphase;
@ -3961,7 +3962,9 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
else if(c->wall == waArrowTrap) {
int trapcol[4] = {0x904040, 0xA02020, 0xD00000, 0x303030};
queuepoly(V, shDisk, darkena(trapcol[c->wparam&3], 0, 0xFF));
if(c->wparam >= 2)
queuepoly(V, shDisk, darkena(trapcol[c->wparam&3], 0, 0xFF));
if(isCentralTrap(c)) arrowtraps.push_back(c);
}
else if(xch == '%') {
@ -4644,6 +4647,8 @@ void drawthemap() {
playerfound = false;
// playerfoundL = false;
// playerfoundR = false;
arrowtraps.clear();
sphereflip = Id;
profile_start(1);
@ -4660,6 +4665,7 @@ void drawthemap() {
hsOrigin, ypush(vid.yshift) * sphereflip * View);
}
drawBlizzards();
drawArrowTraps();
ivoryz = false;
linepatterns::drawAll();

View File

@ -4062,7 +4062,7 @@ void setdist(cell *c, int d, cell *from) {
}
if(pseudohept(c) && hrand(100) < 40 && c->wall == waNone) {
c->wall = waTerraWarrior;
c->landparam = 0;
c->landparam = randterra ? 0 : 3 + hrand(3);
}
}
@ -4732,7 +4732,7 @@ void setdist(cell *c, int d, cell *from) {
if(d == 7 && c->land == laCaves && c->wall == waCavewall && hrand(5000) < items[itGold] + hard && !safety)
c->monst = moSeep;
if(d == 7 && c->land == laDogPlains) {
if(d == 7 && c->land == laDogPlains && false) {
if(hrand(1000) < 10) {
if(openplains(c)) {
c->item = itDogPlains;
@ -5086,7 +5086,7 @@ void setdist(cell *c, int d, cell *from) {
forCellEx(c2, c) if(c2->wall == waTerraWarrior) nearwarrior = true;
if(nearwarrior && hrand(5000) < PT(100 + 2 * kills[moMercuryGuy], 200) && notDippingFor(itTerra))
c->item = itTerra;
if(hrand(8000) < 2 * (items[itTerra] + hard))
if(hrand(20000) < 2 * (items[itTerra] + hard))
c->monst = moMercuryGuy;
}

View File

@ -668,7 +668,7 @@ hpcshape
shPickAxe, shPike, shFlailBall, shFlailTrunk, shFlailChain,
shBook, shBookCover, shGrail,
shBoatOuter, shBoatInner, shCompass1, shCompass2, shCompass3,
shKnife, shTongue, shFlailMissile,
shKnife, shTongue, shFlailMissile, shTrapArrow,
shPirateHook, shPirateHood, shEyepatch, shPirateX,
// shScratch,
shHeptaMarker, shSnowball,
@ -698,6 +698,8 @@ hpcshape
shButterflyBody, shButterflyWing, shGadflyBody, shGadflyWing, shGadflyEye,
shTerraArmor1, shTerraArmor2, shTerraArmor3, shTerraHead, shTerraFace,
shDodeca;
#define USERLAYERS 8
@ -1467,6 +1469,12 @@ void buildpolys() {
bshape(shReptileTail, PPR_MONSTER_BODY, scalef, 303);
bshape(shReptileEye, PPR_MONSTER_EYE0, scalef, 304);
bshape(shDodeca, PPR_ITEM, scalef, 305);
bshape(shTerraArmor1, PPR_MONSTER_BODY, scalef, 349);
bshape(shTerraArmor2, PPR_MONSTER_BODY, scalef, 350);
bshape(shTerraArmor3, PPR_MONSTER_BODY, scalef, 351);
bshape(shTerraHead, PPR_MONSTER_HEAD, scalef, 352);
bshape(shTerraFace, PPR_MONSTER_FACE, scalef, 353);
bshape(shPBody, PPR_MONSTER_BODY, scalef, 85);
bshape(shYeti, PPR_MONSTER_BODY, scalef, 86);
@ -1585,6 +1593,7 @@ void buildpolys() {
// missiles
bshape(shKnife, PPR_MISSILE, scalef, 87);
bshape(shTrapArrow, PPR_MISSILE, scalef, 354);
bshape(shTongue, PPR_MISSILE, scalef, 88);
bshape(shFlailMissile, PPR_MISSILE, scalef, 89);
@ -2784,6 +2793,14 @@ NEWSHAPE, 346, 3, 1, -0.239730,-0.007608, -0.223885,0.067283, -0.220256,0.133782
NEWSHAPE, 347, 3, 1, -0.224843,0.011231, -0.221774,0.155893, -0.237013,0.176616, -0.235167,0.161978, -0.233348,0.147389, -0.243466,0.116780, -0.268483,0.091378, -0.289413,0.094518, -0.303691,0.109465, -0.306027,0.164940, -0.298818,0.218829, -0.292029,0.245261, -0.240190,0.282931, -0.188317,0.284726, -0.152862,0.259042, -0.141074,0.232138, -0.099370,0.203720, -0.045785,0.208279, 0.009668,0.253588, 0.013535,0.280682, 0.018420,0.337425, 0.015783,0.401804, -0.001438,0.415925, 0.031579,0.404581, 0.041846,0.335206, 0.079240,0.235103,
NEWSHAPE, 348, 1, 1, 0.008663,-0.233609, 0.008598,-0.236670, 0.039937,-0.234457, 0.082195,-0.248873, 0.101194,-0.283516, 0.097960,-0.306736, 0.045069,-0.337983, -0.033666,-0.406661, -0.064823,-0.404114, -0.127271,-0.339591, -0.144421,-0.275485, -0.132327,-0.228734, -0.153707,-0.155774, -0.224124,-0.089714, -0.257905,-0.091799, -0.211227,-0.013730, -0.195172,0.041425, -0.206643,0.109302, -0.209261,0.110889, -0.223014,0.082642, -0.256628,0.053254, -0.296129,0.054121, -0.314621,0.068532, -0.315236,0.129961, -0.335346,0.232486, -0.317561,0.258195, -0.230459,0.280015, -0.166367,0.262815, -0.131926,0.228966, -0.058051,0.211001, 0.034367,0.238954, 0.049452,0.269252, 0.093723,0.189793, 0.133461,0.148311, 0.197980,0.124307, 0.200663,0.125781, 0.183077,0.151815, 0.174433,0.195619, 0.194935,0.229395, 0.216661,0.238204, 0.270167,0.208022, 0.369012,0.174175, 0.382384,0.145919, 0.357730,0.059576, 0.310788,0.012670, 0.264253,-0.000232, 0.211758,-0.055227, 0.189757,-0.149240, 0.208453,-0.177453, 0.117504,-0.176063, 0.061711,-0.189736, 0.008663,-0.233609,
NEWSHAPE, 349, 1, 2, -0.121972,-0.043111, -0.114642,-0.068365, -0.088391,-0.109437, -0.091010,-0.186252, -0.070420,-0.268876, -0.057667,-0.278726, -0.022404,-0.276319, 0.004269,-0.280716, 0.026650,-0.269700, 0.029709,-0.230247, 0.015894,-0.219344, -0.003181,-0.226933, -0.023333,-0.226963, -0.014779,-0.180514, -0.018939,-0.137833, 0.007353,-0.112396, 0.031445,-0.054504,
NEWSHAPE, 350, 1, 2, -0.125160,-0.046277, -0.115709,-0.070478, -0.085233,-0.111539, -0.094180,-0.184127, -0.071510,-0.271096, -0.054491,-0.283139, -0.006399,-0.274075, -0.002121,-0.225846, -0.022277,-0.229136, -0.014789,-0.188031, -0.018940,-0.138896, 0.010503,-0.110284, 0.034592,-0.055557,
NEWSHAPE, 351, 1, 2, -0.121946,-0.031538, -0.111405,-0.049397, -0.096675,-0.069354, -0.087345,-0.111549, -0.015775,-0.131461, -0.086284,-0.110485, -0.103742,-0.183136, -0.083551,-0.182966, -0.069423,-0.115705, -0.082446,-0.182860, -0.056507,-0.184308, -0.046776,-0.124036, -0.055447,-0.183766, -0.033783,-0.184751, -0.028908,-0.130351, -0.033253,-0.184213, -0.004225,-0.188021, -0.009468,-0.136762, -0.003150,-0.102889, -0.000000,-0.075460, -0.095569,-0.069314, -0.000000,-0.075500, 0.026212,-0.067103, 0.037193,-0.053432, -0.109760,-0.048841, 0.019376,-0.051845, 0.019363,0.000523, 0.020425,-0.052894, 0.037736,-0.052411, 0.036122,-0.020417, -0.121335,-0.020485, 0.034027,-0.019893, 0.002093,-0.019887, 0.001048,-0.077037, 0.001047,-0.021457, 0.001570,0.001047, 0.003140,-0.019887, 0.034027,-0.020416,
NEWSHAPE, 352, 1, 2, 0.060794,0.001192, 0.058426,0.023847, 0.050054,0.030986, 0.042896,0.038130, 0.044109,0.042917, 0.032180,0.050058, 0.017884,0.059612, 0.005963,0.064401, -0.009546,0.068015, -0.022689,0.070455, -0.044247,0.070556, -0.053847,0.068206, -0.047819,0.065752, -0.040573,0.056087, -0.040563,0.053686, -0.053753,0.053753, -0.067016,0.056246, -0.076602,0.051418, -0.065710,0.040621, -0.063272,0.034621, -0.064461,0.031037, -0.074098,0.028683, -0.094756,0.031185, -0.082872,0.019931, -0.074452,0.013632,
NEWSHAPE, 353, 1, 2, -0.006280,-0.006803, -0.001570,-0.039786, 0.007333,-0.062332, 0.014659,-0.042408, 0.019888,-0.016748, 0.027740,-0.009945,
NEWSHAPE, 354, 1, 2, 0.250609,-0.000793, 0.091262,-0.024449, 0.090008,-0.008476, -0.131783,-0.007990, -0.229492,-0.028849, -0.208244,0.002239,
NEWSHAPE
};