diff --git a/config.cpp b/config.cpp index 1d0f596a..afad245a 100644 --- a/config.cpp +++ b/config.cpp @@ -985,6 +985,7 @@ EX string csnameid(int id) { if(id == 4 || id == 5) return XLAT("cat"); if(id == 6 || id == 7) return XLAT("dog"); if(id == 8 || id == 9) return XLATN("Familiar"); + if(id == 10 || id == 11) return XLATN("spaceship"); return XLAT("none"); } @@ -3557,7 +3558,7 @@ EX void showCustomizeChar() { else if(uni == 'g') { cs.charid++; if(cs.charid == 2 && !princess::everSaved && !autocheat) cs.charid = 4; - cs.charid %= 10; + cs.charid %= 12; } else if(uni == 'p') vid.samegender = !vid.samegender; else if(uni == 's') switchcolor(cs.skincolor, cat ? haircolors : skincolors); diff --git a/geometry.cpp b/geometry.cpp index ab280630..8542bb24 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -362,7 +362,9 @@ hpcshape hpcshape shCrossbow, shCrossbowBolt, shCrossbowstringLoaded, shCrossbowstringUnloaded, shCrossbowstringSemiloaded, shCrossbowIcon, shCrossbowstringIcon; - hpcshape shReserved[16]; + hpcshape shSpaceship, shMissile, shSpaceshipBase, shSpaceshipCockpit, shSpaceshipGun, shSpaceshipEngine; + + hpcshape shReserved[10]; int orb_inner_ring; //< for shDisk* shapes, the number of vertices in the inner ring int res1, res2; diff --git a/graph.cpp b/graph.cpp index ac1b496f..aae50c97 100644 --- a/graph.cpp +++ b/graph.cpp @@ -1324,7 +1324,16 @@ EX void drawPlayer(eMonster m, cell *where, const shiftmatrix& V, color_t col, d if(mapeditor::drawplayer && !mapeditor::drawUserShape(V, mapeditor::sgPlayer, cs.charid, cs.skincolor, where)) { - if(cs.charid >= 8) { + if(cs.charid >= 10) { + ShadowV(V, cgi.shSpaceship); + queuepoly(VBODY, cgi.shSpaceshipBase, fc(150, cs.skincolor, 4)); + queuepoly(VBODY, cgi.shSpaceshipCockpit, fc(150, cs.eyecolor, 4)); + queuepoly(VBODY, cgi.shSpaceshipGun, fc(150, cs.dresscolor, 4)); + queuepoly(VBODY, cgi.shSpaceshipEngine, fc(150, cs.haircolor, 4)); + queuepoly(VBODY * lmirror(), cgi.shSpaceshipGun, fc(150, cs.dresscolor, 4)); + queuepoly(VBODY * lmirror(), cgi.shSpaceshipEngine, fc(150, cs.haircolor, 4)); + } + else if(cs.charid >= 8) { /* famililar */ if(!mmspatial && !footphase) { if(stop) return; diff --git a/polygons.cpp b/polygons.cpp index 7548f6f2..e04e1956 100644 --- a/polygons.cpp +++ b/polygons.cpp @@ -1337,6 +1337,13 @@ void geometry_information::prepare_shapes() { bshape(shCrossbowIcon, PPR::ITEM, scalefactor, 426); bshape(shCrossbowstringIcon, PPR::ITEM, scalefactor, 427); + bshape(shMissile, PPR::MONSTER_LEG, scalefactor * 3, 428); + bshape(shSpaceshipBase, PPR::MONSTER_BODY, scalefactor * 3, 429); + bshape(shSpaceshipCockpit, PPR::MONSTER_HEAD, scalefactor * 3, 430); + bshape(shSpaceshipGun, PPR::MONSTER_WPN, scalefactor * 3, 431); + bshape(shSpaceshipEngine, PPR::MONSTER_ARMOR0, scalefactor * 3, 432); + bshape(shSpaceship, PPR::MONSTER_BODY, scalefactor * 3, 433); + wormscale = WDIM == 3 ? 3 : 1; // first layer monsters @@ -2531,6 +2538,24 @@ NEWSHAPE, 426, 1, 1, -0.161593, 0.0201991, 0.0669713, 0.0200914, 0.0669893, 0.03 // shCrossbowstringIcon, NEWSHAPE, 427, 1, 1, -0.102273, 0.00502984, -0.0369432, 0.124264, -0.0218299, 0.127621, -0.00838927, 0.115772, -0.00670825, 0.107332, -0.077039, 0.0100486, -0.077039, -0.0100486, -0.00670825, -0.107332, -0.00838927, -0.115772, -0.0218299, -0.127621, -0.0369432, -0.124264, -0.102273, -0.00502984, +// shMissile +NEWSHAPE, 428, 1, 1, 0.04, 0, 0.01, -0.02, -0.02, -0.02, -0.02, 0.02, 0.01, 0.02, + +// shSpaceshipBase +NEWSHAPE, 429, 1, 1, 0.0699706, 0, 0.0509304, 0.019032, 0.0056909, 0.023788, 0.00331668, 0.0380512, -0.0630665, 0.0699568, -0.0619577, 0.041535, -0.0572505, 0.0237463, -0.0572505, -0.0237463, -0.0619577, -0.041535, -0.0630665, -0.0699568, 0.00331668, -0.0380512, 0.0056909, -0.023788, 0.0509304, -0.019032, 0.0699706, 0, 0.0699706, 0, + +// shSpaceshipCockpit +NEWSHAPE, 430, 1, 2, 0.0651425, -0.000368037, 0.0491134, -0.0154514, 0.0299719, -0.0159973, + +// shSpaceshipGun +NEWSHAPE, 431, 1, 1, 0.0321848, 0.0303457, 0.0336611, 0.0375238, -0.00441346, 0.0389856, -0.00367705, 0.0248201, 0.00128693, 0.0224293, 0.0321848, 0.0303457, + +// shSpaceshipEngine +NEWSHAPE, 432, 1, 1, -0.0498532, 0.0220752, -0.0675516, 0.0261371, -0.0684933, 0.0425321, -0.0495047, 0.0458241, -0.0459549, 0.0455172, -0.0422296, 0.0437612, -0.0395991, 0.0404742, -0.0389396, 0.0369707, -0.0391553, 0.0321554, -0.0395915, 0.0295296, -0.0419969, 0.0247169, -0.0457175, 0.0216557, + +// shSpaceship +NEWSHAPE, 433, 1, 1, 0.0699706, 0, 0.0509304, 0.019032, 0.0056909, 0.023788, 0.0318813, 0.0309258, 0.0330715, 0.0368693, 0.00331668, 0.0380512, -0.0630665, 0.0699568, -0.0619577, 0.041535, -0.0678691, 0.0415233, -0.0678946, 0.0261072, -0.0572505, 0.0237463, -0.0572505, -0.0237463, -0.0678946, -0.0261072, -0.0678691, -0.0415233, -0.0619577, -0.041535, -0.0630665, -0.0699568, 0.00331668, -0.0380512, 0.0330715, -0.0368693, 0.0318813, -0.0309258, 0.0056909, -0.023788, 0.0509304, -0.019032, + NEWSHAPE, NEWSHAPE }; diff --git a/shmup.cpp b/shmup.cpp index 926e25c6..3a9fc79c 100644 --- a/shmup.cpp +++ b/shmup.cpp @@ -3121,7 +3121,11 @@ bool celldrawer::draw_shmup_monster() { col = (mirrorcolor(det(view.T) < 0) << 8) | 0xFF; else col = (minf[m->get_parenttype()].color << 8) | 0xFF; - if(getcs().charid >= 4) { + if(getcs().charid >= 10) { + queuepoly(at_missile_level(view), cgi.shMissile, col); + ShadowV(view, cgi.shMissile); + } + else if(getcs().charid >= 4) { queuepoly(at_missile_level(view), cgi.shPHead, col); ShadowV(view, cgi.shPHead); }