mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-25 01:20:37 +00:00
'u' loads the current monster image; Jiang Shi shape
This commit is contained in:
parent
6d3fcf0a5d
commit
62de2588cf
@ -4114,8 +4114,12 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if CAP_EDIT
|
#if CAP_EDIT
|
||||||
if(c == mapeditor::drawcell && mapeditor::drawcellShapeGroup() == 2)
|
if(c == mapeditor::drawcell) {
|
||||||
|
if(mapeditor::drawcellShapeGroup() == 2) {
|
||||||
mapeditor::drawtrans = V;
|
mapeditor::drawtrans = V;
|
||||||
|
}
|
||||||
|
qfi_dc = qfi;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(it && cellHalfvine(c)) {
|
if(it && cellHalfvine(c)) {
|
||||||
|
1
hyper.h
1
hyper.h
@ -1549,3 +1549,4 @@ void buildEquidistant(cell *c);
|
|||||||
void produceGhost(cell *c, eMonster victim, eMonster who);
|
void produceGhost(cell *c, eMonster victim, eMonster who);
|
||||||
void sideAttack(cell *mf, int dir, eMonster who, int bonus, eItem orb);
|
void sideAttack(cell *mf, int dir, eMonster who, int bonus, eItem orb);
|
||||||
void sideAttack(cell *mf, int dir, eMonster who, int bonuskill);
|
void sideAttack(cell *mf, int dir, eMonster who, int bonuskill);
|
||||||
|
void warpfloor(cell *c, const transmatrix& V, int col, int prio, bool warp);
|
||||||
|
120
mapeditor.cpp
120
mapeditor.cpp
@ -1234,7 +1234,6 @@ namespace mapeditor {
|
|||||||
transmatrix drawtrans, drawtransnew;
|
transmatrix drawtrans, drawtransnew;
|
||||||
|
|
||||||
void loadShape(int sg, int id, hpcshape& sh, int d, int layer) {
|
void loadShape(int sg, int id, hpcshape& sh, int d, int layer) {
|
||||||
initShape(sg, id);
|
|
||||||
usershapelayer *dsCur = &usershapes[sg][id]->d[layer];
|
usershapelayer *dsCur = &usershapes[sg][id]->d[layer];
|
||||||
dsCur->list.clear();
|
dsCur->list.clear();
|
||||||
dsCur->sym = d==2;
|
dsCur->sym = d==2;
|
||||||
@ -1345,6 +1344,7 @@ namespace mapeditor {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
displaymm('n', 8, 8+fs*5, 2, vid.fsize, XLAT("'n' to start"), 0);
|
displaymm('n', 8, 8+fs*5, 2, vid.fsize, XLAT("'n' to start"), 0);
|
||||||
|
displaymm('u', 8, 8+fs*6, 2, vid.fsize, XLAT("'u' to load current"), 0);
|
||||||
if(mousekey == 'a' || mousekey == 'd' || mousekey == 'd' ||
|
if(mousekey == 'a' || mousekey == 'd' || mousekey == 'd' ||
|
||||||
mousekey == 'c') mousekey = 'n';
|
mousekey == 'c') mousekey = 'n';
|
||||||
}
|
}
|
||||||
@ -1370,6 +1370,63 @@ namespace mapeditor {
|
|||||||
|
|
||||||
bool rebuildPolys = false;
|
bool rebuildPolys = false;
|
||||||
|
|
||||||
|
void loadShapes(int sg, int id) {
|
||||||
|
delete usershapes[sg][id];
|
||||||
|
usershapes[sg][id] = NULL;
|
||||||
|
|
||||||
|
initquickqueue();
|
||||||
|
|
||||||
|
dynamicval<bool> ws(mmspatial, false);
|
||||||
|
|
||||||
|
if(sg == 0) {
|
||||||
|
multi::cpid = id, drawMonsterType(moPlayer, drawcell, Id, 0xC0C0C0, 0);
|
||||||
|
}
|
||||||
|
else if(sg == 1) {
|
||||||
|
drawMonsterType(eMonster(id), drawcell, Id, minf[id].color, 0);
|
||||||
|
}
|
||||||
|
else if(sg == 2) {
|
||||||
|
drawItemType(eItem(id), drawcell, Id, iinf[id].color, 0, false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
warpfloor(drawcell, Id, 0, PPR_FLOOR, isWarped(drawcell));
|
||||||
|
}
|
||||||
|
|
||||||
|
sortquickqueue();
|
||||||
|
|
||||||
|
int layer = 0;
|
||||||
|
|
||||||
|
initShape(sg, id);
|
||||||
|
|
||||||
|
for(int i=0; i<size(ptds); i++) {
|
||||||
|
auto& ptd = ptds[i];
|
||||||
|
if(ptd.kind != pkPoly) continue;
|
||||||
|
|
||||||
|
auto& p = ptd.u.poly;
|
||||||
|
int cnt = p.cnt;
|
||||||
|
|
||||||
|
usershapelayer *dsCur = &usershapes[sg][id]->d[layer];
|
||||||
|
dsCur->list.clear();
|
||||||
|
dsCur->color = ptd.col;
|
||||||
|
dsCur->sym = false;
|
||||||
|
dsCur->rots = 1;
|
||||||
|
|
||||||
|
for(auto& v: symmetriesAt)
|
||||||
|
if(p.tab == &ourshape[v[0]*3]) {
|
||||||
|
dsCur->rots = v[1];
|
||||||
|
dsCur->sym = v[2] == 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int d = dsCur->rots * (dsCur->sym ? 2 : 1);
|
||||||
|
|
||||||
|
for(int i=0; i < cnt/d; i++)
|
||||||
|
dsCur->list.push_back(p.V * hpxyz(p.tab[3*i], p.tab[3*i+1], p.tab[3*i+2]));
|
||||||
|
|
||||||
|
layer++;
|
||||||
|
if(layer == USERLAYERS) break;
|
||||||
|
}
|
||||||
|
rebuildPolys = true;
|
||||||
|
}
|
||||||
|
|
||||||
void applyToShape(int sg, int id, int uni, hyperpoint mh) {
|
void applyToShape(int sg, int id, int uni, hyperpoint mh) {
|
||||||
bool haveshape = usershapes[sg][id];
|
bool haveshape = usershapes[sg][id];
|
||||||
bool xnew = false;
|
bool xnew = false;
|
||||||
@ -1377,8 +1434,9 @@ namespace mapeditor {
|
|||||||
if(uni == '-') uni = mousekey;
|
if(uni == '-') uni = mousekey;
|
||||||
|
|
||||||
if(!haveshape) {
|
if(!haveshape) {
|
||||||
if(uni == 'n' || uni == 'u')
|
if(uni == 'n')
|
||||||
initShape(sg, id);
|
initShape(sg, id);
|
||||||
|
else if(uni == 'u') ;
|
||||||
else if(uni >= '0' && uni <= '9') {
|
else if(uni >= '0' && uni <= '9') {
|
||||||
initShape(sg, id);
|
initShape(sg, id);
|
||||||
xnew = true;
|
xnew = true;
|
||||||
@ -1395,6 +1453,9 @@ namespace mapeditor {
|
|||||||
rebuildPolys = true;
|
rebuildPolys = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(uni == 'u')
|
||||||
|
loadShapes(sg, id);
|
||||||
|
|
||||||
if(uni == 'a' && haveshape) {
|
if(uni == 'a' && haveshape) {
|
||||||
mh = spin(2*M_PI*-ew.rotid/dsCur->rots) * mh;
|
mh = spin(2*M_PI*-ew.rotid/dsCur->rots) * mh;
|
||||||
if(ew.symid) mh = Mirror * mh;
|
if(ew.symid) mh = Mirror * mh;
|
||||||
@ -1431,61 +1492,6 @@ namespace mapeditor {
|
|||||||
rebuildPolys = true;
|
rebuildPolys = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(uni == 'T') {
|
|
||||||
/* loadShape(sg, id, shFemaleBody, 1, 1);
|
|
||||||
loadShape(sg, id, shPKnife, 1, 2);
|
|
||||||
loadShape(sg, id, shFemaleDress, 1, 3);
|
|
||||||
loadShape(sg, id, shPrincessDress, 1, 4);
|
|
||||||
loadShape(sg, id, shBeautyHair, 1, 5);
|
|
||||||
loadShape(sg, id, shPFace, 1, 6);
|
|
||||||
loadShape(sg, id, shFlowerHair, 1, 7); */
|
|
||||||
|
|
||||||
loadShape(sg, id, shPBody, 2, 0);
|
|
||||||
loadShape(sg, id, shTerraArmor1, 2, 1);
|
|
||||||
loadShape(sg, id, shTerraArmor2, 2, 2);
|
|
||||||
loadShape(sg, id, shTerraArmor3, 2, 3);
|
|
||||||
loadShape(sg, id, shPHead, 2, 4);
|
|
||||||
loadShape(sg, id, shPFace, 2, 5);
|
|
||||||
|
|
||||||
/* loadShape(sg, id, shReptileFrontFoot, 1, 0);
|
|
||||||
loadShape(sg, id, shReptileRearFoot, 1, 1);
|
|
||||||
loadShape(sg, id, shReptileFrontLeg, 1, 2);
|
|
||||||
loadShape(sg, id, shReptileRearLeg, 1, 3);
|
|
||||||
loadShape(sg, id, shReptileBody, 2, 4);
|
|
||||||
loadShape(sg, id, shReptileHead, 2, 5);
|
|
||||||
loadShape(sg, id, shReptileTail, 2, 6); */
|
|
||||||
|
|
||||||
// loadShape(sg, id, shTrylobite, 2, 0);
|
|
||||||
|
|
||||||
/* for(int i=0; i<8; i++)
|
|
||||||
loadShape(sg, id, shWave[i][0], 1, i); */
|
|
||||||
|
|
||||||
/* loadShape(sg, id, shYeti, 2, 0);
|
|
||||||
loadShape(sg, id, shHumanFoot, 1, 1); */
|
|
||||||
|
|
||||||
/* loadShape(sg, id, shYeti, 1, 2);
|
|
||||||
loadShape(sg, id, shRatHead, 1, 3);
|
|
||||||
loadShape(sg, id, shRatTail, 1, 1);
|
|
||||||
loadShape(sg, id, shWolf1, 1, 4);
|
|
||||||
loadShape(sg, id, shWolf2, 1, 5);
|
|
||||||
loadShape(sg, id, shRatCape1, 1, 7);
|
|
||||||
loadShape(sg, id, shRatCape2, 1, 6); */
|
|
||||||
|
|
||||||
// loadShape(sg, id, shTortoise[0][0], 1, 0);
|
|
||||||
/* loadShape(sg, id, shTentacleX, 1, 0);
|
|
||||||
loadShape(sg, id, shTentacle, 1, 1);
|
|
||||||
loadShape(sg, id, shJoint, 1, 2); */
|
|
||||||
|
|
||||||
/* loadShape(3, 0, shTurtleFloor[0], 12, 0);
|
|
||||||
loadShape(3, 1, shTurtleFloor[1], 14, 0); */
|
|
||||||
|
|
||||||
// loadShape(sg, id, shDragonSegment, 2, 0);
|
|
||||||
// loadShape(sg, id, shEyes, 2, 2);
|
|
||||||
|
|
||||||
// loadShape(sg, id, shFamiliarHead, 2, 0);
|
|
||||||
rebuildPolys = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(uni == 'K') {
|
if(uni == 'K') {
|
||||||
if(vid.cs.charid >= 4) {
|
if(vid.cs.charid >= 4) {
|
||||||
loadShape(sg, id, shCatBody, 2, 0);
|
loadShape(sg, id, shCatBody, 2, 0);
|
||||||
|
20
polygons.cpp
20
polygons.cpp
@ -524,6 +524,15 @@ void initquickqueue() {
|
|||||||
poly_outline = OUTLINE_NONE;
|
poly_outline = OUTLINE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sortquickqueue() {
|
||||||
|
for(int i=1; i<size(ptds);)
|
||||||
|
if(i && ptds[i].prio < ptds[i-1].prio) {
|
||||||
|
swap(ptds[i], ptds[i-1]);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
else i++;
|
||||||
|
}
|
||||||
|
|
||||||
void quickqueue() {
|
void quickqueue() {
|
||||||
int siz = size(ptds);
|
int siz = size(ptds);
|
||||||
setcameraangle(false);
|
setcameraangle(false);
|
||||||
@ -698,11 +707,11 @@ hpcshape
|
|||||||
|
|
||||||
shButterflyBody, shButterflyWing, shGadflyBody, shGadflyWing, shGadflyEye,
|
shButterflyBody, shButterflyWing, shGadflyBody, shGadflyWing, shGadflyEye,
|
||||||
|
|
||||||
shTerraArmor1, shTerraArmor2, shTerraArmor3, shTerraHead, shTerraFace,
|
shTerraArmor1, shTerraArmor2, shTerraArmor3, shTerraHead, shTerraFace, shJiangShi,
|
||||||
|
|
||||||
shDodeca;
|
shDodeca;
|
||||||
|
|
||||||
#define USERLAYERS 8
|
#define USERLAYERS 32
|
||||||
#define USERSHAPEGROUPS 8
|
#define USERSHAPEGROUPS 8
|
||||||
#define USERSHAPEIDS 256
|
#define USERSHAPEIDS 256
|
||||||
|
|
||||||
@ -762,11 +771,14 @@ hyperpoint spfix(int rots, hyperpoint h) {
|
|||||||
return spin(M_PI + M_PI * 4/35 * d) * h;
|
return spin(M_PI + M_PI * 4/35 * d) * h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<array<int, 3>> symmetriesAt;
|
||||||
|
|
||||||
void bshape(hpcshape& sh, int p, double shzoom, int shapeid) {
|
void bshape(hpcshape& sh, int p, double shzoom, int shapeid) {
|
||||||
bshape(sh, p);
|
bshape(sh, p);
|
||||||
int whereis = 0;
|
int whereis = 0;
|
||||||
while(polydata[whereis] != NEWSHAPE || polydata[whereis+1] != shapeid) whereis++;
|
while(polydata[whereis] != NEWSHAPE || polydata[whereis+1] != shapeid) whereis++;
|
||||||
int rots = polydata[whereis+2]; int sym = polydata[whereis+3];
|
int rots = polydata[whereis+2]; int sym = polydata[whereis+3];
|
||||||
|
symmetriesAt.emplace_back(array<int,3> ({qhpc, rots, sym}));
|
||||||
whereis += 4;
|
whereis += 4;
|
||||||
int qty = 0;
|
int qty = 0;
|
||||||
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
|
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
|
||||||
@ -830,6 +842,7 @@ void pushShape(const usershapelayer& ds) {
|
|||||||
|
|
||||||
void buildpolys() {
|
void buildpolys() {
|
||||||
|
|
||||||
|
symmetriesAt.clear();
|
||||||
geom3::compute();
|
geom3::compute();
|
||||||
DEBB(DF_INIT, (debugfile,"buildpolys\n"));
|
DEBB(DF_INIT, (debugfile,"buildpolys\n"));
|
||||||
|
|
||||||
@ -1475,6 +1488,7 @@ void buildpolys() {
|
|||||||
bshape(shTerraArmor3, PPR_MONSTER_BODY, scalef, 351);
|
bshape(shTerraArmor3, PPR_MONSTER_BODY, scalef, 351);
|
||||||
bshape(shTerraHead, PPR_MONSTER_HEAD, scalef, 352);
|
bshape(shTerraHead, PPR_MONSTER_HEAD, scalef, 352);
|
||||||
bshape(shTerraFace, PPR_MONSTER_FACE, scalef, 353);
|
bshape(shTerraFace, PPR_MONSTER_FACE, scalef, 353);
|
||||||
|
bshape(shJiangShi, PPR_MONSTER_BODY, scale, 355);
|
||||||
|
|
||||||
bshape(shPBody, PPR_MONSTER_BODY, scalef, 85);
|
bshape(shPBody, PPR_MONSTER_BODY, scalef, 85);
|
||||||
bshape(shYeti, PPR_MONSTER_BODY, scalef, 86);
|
bshape(shYeti, PPR_MONSTER_BODY, scalef, 86);
|
||||||
@ -1755,6 +1769,7 @@ struct qfloorinfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
qfloorinfo qfi;
|
qfloorinfo qfi;
|
||||||
|
qfloorinfo qfi_dc;
|
||||||
|
|
||||||
int chasmg;
|
int chasmg;
|
||||||
|
|
||||||
@ -2800,6 +2815,7 @@ NEWSHAPE, 352, 1, 2, 0.060794,0.001192, 0.058426,0.023847, 0.050054,0.030986, 0.
|
|||||||
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, 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, 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, 355, 1, 2, -0.120944,-0.046316, -0.118320,-0.065458, -0.026635,-0.134194, 0.069939,-0.150868, 0.257603,-0.099875, 0.263931,-0.098916, 0.295208,-0.074359, 0.292228,-0.069765, 0.274479,-0.081250, 0.293481,-0.057622, 0.290757,-0.055430, 0.266210,-0.078038, 0.289156,-0.044495, 0.286442,-0.042311, 0.263022,-0.071079, 0.275695,-0.039346, 0.256850,-0.068686, 0.254313,-0.048283, 0.242683,-0.074603, 0.079643,-0.108059, 0.017947,-0.089316, 0.039133,-0.032229,
|
||||||
|
|
||||||
NEWSHAPE
|
NEWSHAPE
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user