1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-25 01:20:37 +00:00

line quality option

This commit is contained in:
Zeno Rogue 2018-08-01 11:07:22 +02:00
parent 2f9e581f51
commit 1b44899624
10 changed files with 135 additions and 109 deletions

View File

@ -236,7 +236,7 @@ void drawArrowTraps() {
transmatrix& t0 = gmatrix.at(r[0]); transmatrix& t0 = gmatrix.at(r[0]);
transmatrix& t1 = gmatrix.at(r[4]); transmatrix& t1 = gmatrix.at(r[4]);
queueline(tC0(t0), tC0(t1), 0xFF0000FF, 4, PPR_ITEM); queueline(tC0(t0), tC0(t1), 0xFF0000FF, 4 + vid.linequality, PPR_ITEM);
if((c->wparam & 7) == 3 && !shmup::on) { if((c->wparam & 7) == 3 && !shmup::on) {
// queueline(t0 * randomPointIn(r[0]->type), t1 * randomPointIn(r[1]->type), 0xFFFFFFFF, 4, PPR_ITEM); // queueline(t0 * randomPointIn(r[0]->type), t1 * randomPointIn(r[1]->type), 0xFFFFFFFF, 4, PPR_ITEM);
int tt = ticks % 401; int tt = ticks % 401;

View File

@ -271,6 +271,8 @@ void initConfig() {
addsaver(irr::rearrange_max_attempts, "irregular-rearrange-max", 50); addsaver(irr::rearrange_max_attempts, "irregular-rearrange-max", 50);
addsaver(irr::rearrange_less, "irregular-rearrangeless", 10); addsaver(irr::rearrange_less, "irregular-rearrangeless", 10);
addsaver(vid.linequality, "line quality", 0);
#if CAP_SHMUP #if CAP_SHMUP
shmup::initConfig(); shmup::initConfig();
#endif #endif
@ -610,6 +612,8 @@ void showGraphConfig() {
else else
dialog::addBreak(100); dialog::addBreak(100);
dialog::addSelItem(XLAT("line quality"), its(vid.linequality), 'L');
#if CAP_FRAMELIMIT #if CAP_FRAMELIMIT
dialog::addSelItem(XLAT("framerate limit"), its(vid.framelimit), 'l'); dialog::addSelItem(XLAT("framerate limit"), its(vid.framelimit), 'l');
if(getcstat == 'l') if(getcstat == 'l')
@ -661,7 +665,7 @@ void showGraphConfig() {
char xuni = uni | 96; char xuni = uni | 96;
if(uni >= 32 && uni < 64) xuni = uni; if((uni >= 32 && uni < 64) || uni == 'L') xuni = uni;
if(xuni == 'u') vid.particles = !vid.particles; if(xuni == 'u') vid.particles = !vid.particles;
if(xuni == 'd') vid.graphglyph = (1+vid.graphglyph)%3; if(xuni == 'd') vid.graphglyph = (1+vid.graphglyph)%3;
@ -737,6 +741,12 @@ void showGraphConfig() {
}; };
} }
if(xuni == 'L') {
dialog::editNumber(vid.linequality, -3, 5, 1, 1, XLAT("line quality"),
XLAT("Higher numbers make the curved lines smoother, but reduces the performance."));
dialog::reaction = [] () { resetGeometry(); };
}
if(xuni == 'c') { if(xuni == 'c') {
dialog::editNumber(vid.mobilecompasssize, 0, 100, 10, 20, XLAT("compass size"), ""); dialog::editNumber(vid.mobilecompasssize, 0, 100, 10, 20, XLAT("compass size"), "");
// we need to check the moves // we need to check the moves

View File

@ -139,7 +139,7 @@ void drawShield(const transmatrix& V, eItem it) {
col = 0; col = 0;
double d = it == itOrbShield ? hexf : hexf - .1; double d = it == itOrbShield ? hexf : hexf - .1;
int mt = sphere ? 7 : 5; int mt = sphere ? 7 : 5;
for(int a=0; a<=S84*mt; a++) for(ld a=0; a<=S84*mt+1e-6; a+=pow(.5, vid.linequality))
curvepoint(V*ddi0(a, d + sin(ds + M_PI*2*a/4/mt)*.1)); curvepoint(V*ddi0(a, d + sin(ds + M_PI*2*a/4/mt)*.1));
queuecurve(darkena(col, 0, 0xFF), 0x8080808, PPR_LINE); queuecurve(darkena(col, 0, 0xFF), 0x8080808, PPR_LINE);
#endif #endif
@ -150,7 +150,7 @@ void drawSpeed(const transmatrix& V) {
ld ds = ticks / 10.; ld ds = ticks / 10.;
int col = darkena(iinf[itOrbSpeed].color, 0, 0xFF); int col = darkena(iinf[itOrbSpeed].color, 0, 0xFF);
for(int b=0; b<S84; b+=S14) { for(int b=0; b<S84; b+=S14) {
for(int a=0; a<=S84; a++) PRING(a)
curvepoint(V*ddi0(ds+b+a, hexf*a/S84)); curvepoint(V*ddi0(ds+b+a, hexf*a/S84));
queuecurve(col, 0x8080808, PPR_LINE); queuecurve(col, 0x8080808, PPR_LINE);
} }
@ -175,7 +175,7 @@ void drawSafety(const transmatrix& V, int ct) {
ld ds = ticks / 50.; ld ds = ticks / 50.;
int col = darkena(iinf[itOrbSafety].color, 0, 0xFF); int col = darkena(iinf[itOrbSafety].color, 0, 0xFF);
for(int a=0; a<ct; a++) for(int a=0; a<ct; a++)
queueline(V*ddi0(ds+a*S84/ct, 2*hexf), V*ddi0(ds+(a+(ct-1)/2)*S84/ct, 2*hexf), col); queueline(V*ddi0(ds+a*S84/ct, 2*hexf), V*ddi0(ds+(a+(ct-1)/2)*S84/ct, 2*hexf), col, vid.linequality);
#endif #endif
} }
@ -186,7 +186,7 @@ void drawFlash(const transmatrix& V) {
col &= ~1; col &= ~1;
for(int u=0; u<5; u++) { for(int u=0; u<5; u++) {
ld rad = hexf * (2.5 + .5 * sin(ds+u*.3)); ld rad = hexf * (2.5 + .5 * sin(ds+u*.3));
for(int a=0; a<=S84; a++) curvepoint(V*ddi0(a, rad)); PRING(a) curvepoint(V*ddi0(a, rad));
queuecurve(col, 0x8080808, PPR_LINE); queuecurve(col, 0x8080808, PPR_LINE);
} }
#endif #endif
@ -198,9 +198,9 @@ void drawLove(const transmatrix& V, int hdir) {
int col = darkena(iinf[itOrbLove].color, 0, 0xFF); int col = darkena(iinf[itOrbLove].color, 0, 0xFF);
col &= ~1; col &= ~1;
for(int u=0; u<5; u++) { for(int u=0; u<5; u++) {
for(int a=0; a<=S84; a++) { PRING(a) {
double d = (1 + cos(a * M_PI/S42)) / 2; double d = (1 + cos(a * M_PI/S42)) / 2;
int z = a; if(z>S42) z = S84-z; double z = a; if(z>S42) z = S84-z;
if(z <= 10) d += (10-z) * (10-z) * (10-z) / 3000.; if(z <= 10) d += (10-z) * (10-z) * (10-z) / 3000.;
ld rad = hexf * (2.5 + .5 * sin(ds+u*.3)) * d; ld rad = hexf * (2.5 + .5 * sin(ds+u*.3)) * d;
@ -217,7 +217,7 @@ void drawWinter(const transmatrix& V, int hdir) {
int col = darkena(iinf[itOrbWinter].color, 0, 0xFF); int col = darkena(iinf[itOrbWinter].color, 0, 0xFF);
for(int u=0; u<20; u++) { for(int u=0; u<20; u++) {
ld rad = 6 * sin(ds+u * 2 * M_PI / 20); ld rad = 6 * sin(ds+u * 2 * M_PI / 20);
queueline(V*ddi0(S42+hdir+rad, hexf*.5), V*ddi0(S42+hdir+rad, hexf*3), col, 2); queueline(V*ddi0(S42+hdir+rad, hexf*.5), V*ddi0(S42+hdir+rad, hexf*3), col, 2 + vid.linequality);
} }
#endif #endif
} }
@ -228,7 +228,7 @@ void drawLightning(const transmatrix& V) {
for(int u=0; u<20; u++) { for(int u=0; u<20; u++) {
ld leng = 0.5 / (0.1 + (rand() % 100) / 100.0); ld leng = 0.5 / (0.1 + (rand() % 100) / 100.0);
ld rad = rand() % S84; ld rad = rand() % S84;
queueline(V*ddi0(rad, hexf*0.3), V*ddi0(rad, hexf*leng), col, 2); queueline(V*ddi0(rad, hexf*0.3), V*ddi0(rad, hexf*leng), col, 2 + vid.linequality);
} }
#endif #endif
} }
@ -335,8 +335,9 @@ void drawPlayerEffects(const transmatrix& V, cell *c, bool onplayer) {
if((u-tim)%250) continue; if((u-tim)%250) continue;
ld rad = hexf * u / 250; ld rad = hexf * u / 250;
int col = darkena(iinf[itOrbSafety].color, 0, 0xFF); int col = darkena(iinf[itOrbSafety].color, 0, 0xFF);
for(int a=0; a<S84; a++) PRING(a)
queueline(V*ddi0(a, rad), V*ddi0(a+1, rad), col, 0); curvepoint(V*ddi0(a, rad));
queuecurve(col, 0, PPR_LINE);
} }
} }
} }
@ -1923,7 +1924,7 @@ bool drawMonster(const transmatrix& Vparam, int ct, cell *c, int col) {
int hdir = displaydir(c, c->mondir); int hdir = displaydir(c, c->mondir);
int col = darkena(0x606020, 0, 0xFF); int col = darkena(0x606020, 0, 0xFF);
for(int u=-1; u<=1; u++) for(int u=-1; u<=1; u++)
queueline(Vparam*ddi0(hdir+S21, u*crossf/5), Vparam*ddi(hdir, crossf)*ddi0(hdir+S21, u*crossf/5), col, 2); queueline(Vparam*ddi0(hdir+S21, u*crossf/5), Vparam*ddi(hdir, crossf)*ddi0(hdir+S21, u*crossf/5), col, 2 + vid.linequality);
} }
} }
@ -3649,8 +3650,9 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
for(int u=0; u<5; u++) { for(int u=0; u<5; u++) {
ld rad = hexf * (.3 * u + (ds%1000) * .0003); ld rad = hexf * (.3 * u + (ds%1000) * .0003);
int tcol = darkena(gradient(forecolor, backcolor, 0, rad, 1.5 * hexf), 0, 0xFF); int tcol = darkena(gradient(forecolor, backcolor, 0, rad, 1.5 * hexf), 0, 0xFF);
for(int a=0; a<S84; a++) PRING(a)
queueline(V*ddi0(a, rad), V*ddi0(a+1, rad), tcol, 0); curvepoint(V*ddi0(a, rad));
queuecurve(tcol, 0, PPR_LINE);
} }
} }
@ -3718,7 +3720,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
for(int t=0; t<c->type; t++) if(c->mov[t] && c->mov[t]->ligon) { for(int t=0; t<c->type; t++) if(c->mov[t] && c->mov[t]->ligon) {
int hdir = displaydir(c, t); int hdir = displaydir(c, t);
int lcol = darkena(gradient(iinf[itOrbLightning].color, 0, 0, tim, 1100), 0, 0xFF); int lcol = darkena(gradient(iinf[itOrbLightning].color, 0, 0, tim, 1100), 0, 0xFF);
queueline(V*ddi0(ticks, hexf/2), V*ddi0(hdir, crossf), lcol, 2); queueline(V*ddi0(ticks, hexf/2), V*ddi0(hdir, crossf), lcol, 2 + vid.linequality);
} }
} }
@ -4716,6 +4718,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
// hyper: 0.3798 // hyper: 0.3798
int prec = sphere ? 3 : 1; int prec = sphere ? 3 : 1;
prec += vid.linequality;
if(irr::on) { if(irr::on) {
int id = irr::cellindex[c]; int id = irr::cellindex[c];
@ -4831,8 +4834,8 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
if(vid.grid && c->bardir != NODIR && c->bardir != NOBARRIERS && c->land != laHauntedWall && if(vid.grid && c->bardir != NODIR && c->bardir != NOBARRIERS && c->land != laHauntedWall &&
c->barleft != NOWALLSEP_USED) { c->barleft != NOWALLSEP_USED) {
int col = darkena(0x505050, 0, 0xFF); int col = darkena(0x505050, 0, 0xFF);
queueline(tC0(V), V*tC0(heptmove[c->bardir]), col, 2); queueline(tC0(V), V*tC0(heptmove[c->bardir]), col, 2 + vid.linequality);
queueline(tC0(V), V*tC0(hexmove[c->bardir]), col, 2); queueline(tC0(V), V*tC0(hexmove[c->bardir]), col, 2 + vid.linequality);
} }
#if CAP_MODEL #if CAP_MODEL
@ -5075,7 +5078,7 @@ void drawFlashes() {
int flashcol = f.color; int flashcol = f.color;
if(u > 500) flashcol = gradient(flashcol, 0, 500, u, 1100); if(u > 500) flashcol = gradient(flashcol, 0, 500, u, 1100);
flashcol = darkena(flashcol, 0, 0xFF); flashcol = darkena(flashcol, 0, 0xFF);
for(int a=0; a<=S84; a++) curvepoint(V*ddi0(a, rad)); PRING(a) curvepoint(V*ddi0(a, rad));
queuecurve(flashcol, 0x8080808, PPR_LINE); queuecurve(flashcol, 0x8080808, PPR_LINE);
} }
} }
@ -5089,7 +5092,7 @@ void drawFlashes() {
int flashcol = f.color; int flashcol = f.color;
if(u > 1000) flashcol = gradient(flashcol, 0, 1000, u, 2200); if(u > 1000) flashcol = gradient(flashcol, 0, 1000, u, 2200);
flashcol = darkena(flashcol, 0, 0xFF); flashcol = darkena(flashcol, 0, 0xFF);
for(int a=0; a<=S84; a++) curvepoint(V*ddi0(a, rad)); PRING(a) curvepoint(V*ddi0(a, rad));
queuecurve(flashcol, 0x8080808, PPR_LINE); queuecurve(flashcol, 0x8080808, PPR_LINE);
} }
} }
@ -5319,10 +5322,10 @@ void drawmovestar(double dx, double dy) {
#if CAP_QUEUE #if CAP_QUEUE
if(euclid) if(euclid)
queueline(tC0(Centered), Centered * ddi0(d * 10.5, 0.5) , col, 0); queueline(tC0(Centered), Centered * ddi0(d * 10.5, 0.5) , col, vid.linequality);
else else
// queueline(tC0(Centered), Centered * spin(M_PI*d/4)* xpush(d==0?.7:d==2?.6:.5) * C0, col >> darken); // queueline(tC0(Centered), Centered * spin(M_PI*d/4)* xpush(d==0?.7:d==2?.6:.5) * C0, col >> darken);
queueline(tC0(Centered), Centered * xspinpush0(M_PI*d/4, d==0?.7:d==2?.5:.2), col, 3); queueline(tC0(Centered), Centered * xspinpush0(M_PI*d/4, d==0?.7:d==2?.5:.2), col, 3 + vid.linequality);
#endif #endif
} }
} }
@ -5410,7 +5413,7 @@ void drawfullmap() {
queuereset(vid.usingGL ? mdDisk : mdUnchanged, PPR_CIRCLE); queuereset(vid.usingGL ? mdDisk : mdUnchanged, PPR_CIRCLE);
for(int b=-1; b<=1; b+=2) for(int b=-1; b<=1; b+=2)
for(int a=-90; a<=90; a++) { for(ld a=-90; a<=90+1e-6; a+=pow(.5, vid.linequality)) {
using namespace hyperpoint_vec; using namespace hyperpoint_vec;
ld x = sin(a * vid.twopoint_param * b / 90); ld x = sin(a * vid.twopoint_param * b / 90);
ld y = 0; ld y = 0;
@ -5429,10 +5432,10 @@ void drawfullmap() {
if(!stereo::active() && sphere && pmodel == mdSinusoidal) { if(!stereo::active() && sphere && pmodel == mdSinusoidal) {
queuereset(vid.usingGL ? mdDisk : mdUnchanged, PPR_CIRCLE); queuereset(vid.usingGL ? mdDisk : mdUnchanged, PPR_CIRCLE);
for(int a=-45; a<45; a++) { for(ld a=-45; a<45+1e-6; a+=pow(.5, vid.linequality)) {
curvepoint(hpxyz(cos(a * M_PI / 90) * vid.radius, a * vid.radius / 90, 0)); curvepoint(hpxyz(cos(a * M_PI / 90) * vid.radius, a * vid.radius / 90, 0));
} }
for(int a=45; a>=-45; a--) { for(ld a=45; a>=-45-1e-6; a-=pow(.5, vid.linequality)) {
curvepoint(hpxyz(-cos(a * M_PI / 90) * vid.radius, a * vid.radius / 90, 0)); curvepoint(hpxyz(-cos(a * M_PI / 90) * vid.radius, a * vid.radius / 90, 0));
} }
queuecurve(ringcolor, 0, PPR_CIRCLE); queuecurve(ringcolor, 0, PPR_CIRCLE);

View File

@ -810,6 +810,8 @@ struct videopar {
int mobilecompasssize; int mobilecompasssize;
int aurastr, aurasmoothen; int aurastr, aurasmoothen;
int linequality;
bool full; bool full;
int graphglyph; // graphical glyphs int graphglyph; // graphical glyphs
@ -3742,4 +3744,8 @@ namespace ors {
bool saved_tortoise_on(cell *c); bool saved_tortoise_on(cell *c);
#define RING(i) for(double i=0; i<=S84+1e-6; i+=S3 * pow(.5, vid.linequality))
#define REVRING(i) for(double i=S84; i>=-1e-6; i-=S3 * pow(.5, vid.linequality))
#define PRING(i) for(double i=0; i<=S84+1e-6; i+= pow(.5, vid.linequality))
} }

View File

@ -906,20 +906,21 @@ namespace mapeditor {
unsigned gridcolor = 0xC0C0C040; unsigned gridcolor = 0xC0C0C040;
void drawGrid() { void drawGrid() {
for(int d=0; d<S84; d++) {
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
unsigned lightgrid = gridcolor; unsigned lightgrid = gridcolor;
lightgrid -= (lightgrid & 0xFF) / 2; lightgrid -= (lightgrid & 0xFF) / 2;
for(int d=0; d<S84; d++) {
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
unsigned col = (d % (S84/drawcell->type) == 0) ? gridcolor : lightgrid; unsigned col = (d % (S84/drawcell->type) == 0) ? gridcolor : lightgrid;
queueline(d2 * C0, d2 * spin(M_PI*d/S42)* xpush(1) * C0, col, 4); queueline(d2 * C0, d2 * spin(M_PI*d/S42)* xpush(1) * C0, col, 4 + vid.linequality);
}
for(int u=2; u<=20; u++) { for(int u=2; u<=20; u++) {
queueline( PRING(d) {
d2 * spin(M_PI*d/S42)* xpush(u/20.) * C0, transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
d2 * spin(M_PI*(d+1)/S42)* xpush(u/20.) * C0, curvepoint(d2 * spin(M_PI*d/S42)* xpush(u/20.) * C0);
(u%5==0) ? gridcolor : lightgrid, 0);
} }
queuecurve((u%5==0) ? gridcolor : lightgrid, 0, PPR_LINE);
} }
queueline(drawtrans*ccenter, drawtrans*coldcenter, gridcolor, 4); queueline(drawtrans*ccenter, drawtrans*coldcenter, gridcolor, 4 + vid.linequality);
} }
void drawHandleKey(int sym, int uni); void drawHandleKey(int sym, int uni);
@ -1626,14 +1627,15 @@ namespace mapeditor {
#if CAP_TEXTURE #if CAP_TEXTURE
void queue_hcircle(transmatrix Ctr, ld radius) { void queue_hcircle(transmatrix Ctr, ld radius) {
vector<hyperpoint> pts; vector<hyperpoint> pts;
int circp = 6; int circp = int(6 * pow(2, vid.linequality));
if(radius > 0.04) circp *= 2; if(radius > 0.04) circp *= 2;
if(radius > .1) circp *= 2; if(radius > .1) circp *= 2;
for(int j=0; j<circp; j++) for(int j=0; j<circp; j++)
pts.push_back(Ctr * tC0(spin(M_PI*j*2/circp) * xpush(radius))); pts.push_back(Ctr * tC0(spin(M_PI*j*2/circp) * xpush(radius)));
for(int j=0; j<circp; j++) for(int j=0; j<circp; j++) curvepoint(pts[j]);
queueline(pts[j], pts[(j+1)%circp], texture::config.paint_color, 0, PPR_LINE); curvepoint(pts[0]);
queuecurve(texture::config.paint_color, 0, PPR_LINE);
} }
#endif #endif
@ -1680,7 +1682,7 @@ namespace mapeditor {
queue_hcircle(M2 * ml, hdist(lstart, mouseh)); queue_hcircle(M2 * ml, hdist(lstart, mouseh));
break; break;
case 'l': case 'l':
queueline(M2 * mh * C0, M2 * ml * C0, texture::config.paint_color, 4, PPR_LINE); queueline(M2 * mh * C0, M2 * ml * C0, texture::config.paint_color, 4 + vid.linequality, PPR_LINE);
break; break;
default: default:
queue_hcircle(M2 * mh, texture::penwidth); queue_hcircle(M2 * mh, texture::penwidth);

View File

@ -1848,7 +1848,7 @@ namespace linepatterns {
} }
if(all) for(int i=0; i<3; i++) if(all) for(int i=0; i<3; i++)
queueline(tri[i], tri[(i+1)%3], col, 3); queueline(tri[i], tri[(i+1)%3], col, 3 + vid.linequality);
} }
break; break;
@ -1865,7 +1865,7 @@ namespace linepatterns {
queuelinef(V * ddspin(c,i,-S14) * xpush0(x), queuelinef(V * ddspin(c,i,-S14) * xpush0(x),
V * ddspin(c,i,+S14) * xpush0(x), V * ddspin(c,i,+S14) * xpush0(x),
col, 1); col, 1 + vid.linequality);
} }
break; break;
@ -1876,13 +1876,13 @@ namespace linepatterns {
if(c->mov[t] && c->mov[t] < c) if(c->mov[t] && c->mov[t] < c)
queuelinef(V * gp::get_corner_position(c, t), queuelinef(V * gp::get_corner_position(c, t),
V * gp::get_corner_position(c, (t+1)%c->type), V * gp::get_corner_position(c, (t+1)%c->type),
col, 1); col, 1 + vid.linequality);
} }
else if(euclid || !pseudohept(c)) for(int t=0; t<c->type; t++) else if(euclid || !pseudohept(c)) for(int t=0; t<c->type; t++)
if(euclid ? c->mov[t]<c : (((t^1)&1) || c->mov[t] < c)) { if(euclid ? c->mov[t]<c : (((t^1)&1) || c->mov[t] < c)) {
queuelinef(V * ddspin(c,t,-S7) * xpush0(x), queuelinef(V * ddspin(c,t,-S7) * xpush0(x),
V * ddspin(c,t,+S7) * xpush0(x), V * ddspin(c,t,+S7) * xpush0(x),
col, 1); col, 1 + vid.linequality);
} }
break; break;
} }
@ -1892,7 +1892,7 @@ namespace linepatterns {
if(pseudohept(c)) for(int t=0; t<c->type; t++) if(pseudohept(c)) for(int t=0; t<c->type; t++)
queuelinef(V * gp::get_corner_position(c, t%c->type, 2), queuelinef(V * gp::get_corner_position(c, t%c->type, 2),
V * gp::get_corner_position(c, (t+1)%c->type, 2), V * gp::get_corner_position(c, (t+1)%c->type, 2),
col, 1); col, 1 + vid.linequality);
} }
else { else {
if(!pseudohept(c)) for(int i=0; i<c->type; i++) { if(!pseudohept(c)) for(int i=0; i<c->type; i++) {
@ -1901,14 +1901,14 @@ namespace linepatterns {
double x = hexhexdist / 2; // sphere?.3651:euclid?.2611:.2849; double x = hexhexdist / 2; // sphere?.3651:euclid?.2611:.2849;
queuelinef(V * ddspin(c,i,-S14) * xpush0(x), queuelinef(V * ddspin(c,i,-S14) * xpush0(x),
V * ddspin(c,i,+S14) * xpush0(x), V * ddspin(c,i,+S14) * xpush0(x),
col, 1); col, 1 + vid.linequality);
} }
} }
break; break;
case patTriNet: case patTriNet:
forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2)) if(celldist(c) != celldist(c2)) { forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2)) if(celldist(c) != celldist(c2)) {
queuelinef(tC0(V), gmatrix[c2]*C0, col, 2); queuelinef(tC0(V), gmatrix[c2]*C0, col, 2 + vid.linequality);
} }
break; break;
@ -1916,18 +1916,18 @@ namespace linepatterns {
forCellIdEx(c2, i, c) { forCellIdEx(c2, i, c) {
if(S3 == 4) c2 = (cellwalker(c, i) + wstep + 1 + wstep).c; if(S3 == 4) c2 = (cellwalker(c, i) + wstep + 1 + wstep).c;
if(c2 > c) if(gmatrix.count(c2) && celldist(c) == celldist(c2)) if(c2 > c) if(gmatrix.count(c2) && celldist(c) == celldist(c2))
queuelinef(tC0(V), gmatrix[c2]*C0, col, 2); queuelinef(tC0(V), gmatrix[c2]*C0, col, 2 + vid.linequality);
} }
break; break;
case patHepta: case patHepta:
forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && pseudohept(c) == pseudohept(c2)) forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && pseudohept(c) == pseudohept(c2))
queuelinef(tC0(V), gmatrix[c2]*C0, col, 2); queuelinef(tC0(V), gmatrix[c2]*C0, col, 2 + vid.linequality);
break; break;
case patRhomb: case patRhomb:
forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && pseudohept(c) != pseudohept(c2)) forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && pseudohept(c) != pseudohept(c2))
queuelinef(tC0(V), gmatrix[c2]*C0, col, 2); queuelinef(tC0(V), gmatrix[c2]*C0, col, 2 + vid.linequality);
break; break;
case patPalace: { case patPalace: {
@ -1938,7 +1938,7 @@ namespace linepatterns {
if(polarb50(c1) != a && polarb50(c2) != a) if(polarb50(c1) != a && polarb50(c2) != a)
queuelinef(V * ddspin(c,i,84*5/14) * xpush0(tessf/2), queuelinef(V * ddspin(c,i,84*5/14) * xpush0(tessf/2),
V * ddspin(c,i,84*9/14) * xpush0(tessf/2), V * ddspin(c,i,84*9/14) * xpush0(tessf/2),
col, 1); col, 1 + vid.linequality);
} }
break; break;
} }
@ -1947,13 +1947,13 @@ namespace linepatterns {
if(pseudohept(c)) for(int i=0; i<7; i++) if(pseudohept(c)) for(int i=0; i<7; i++)
queuelinef(V * ddspin(c,i,84*5/14) * xpush0(tessf/2), queuelinef(V * ddspin(c,i,84*5/14) * xpush0(tessf/2),
V * ddspin(c,i,84*9/14) * xpush0(tessf/2), V * ddspin(c,i,84*9/14) * xpush0(tessf/2),
col, 1); col, 1 + vid.linequality);
break; break;
case patBigTriangles: { case patBigTriangles: {
if(is_master(c) && !euclid) for(int i=0; i<S7; i++) if(is_master(c) && !euclid) for(int i=0; i<S7; i++)
if(c->master->move[i] && c->master->move[i] < c->master) { if(c->master->move[i] && c->master->move[i] < c->master) {
queuelinef(tC0(V), V*xspinpush0(-2*M_PI*i/S7 - master_to_c7_angle(), tessf), col, 2); queuelinef(tC0(V), V*xspinpush0(-2*M_PI*i/S7 - master_to_c7_angle(), tessf), col, 2 + vid.linequality);
} }
break; break;
} }
@ -1961,7 +1961,7 @@ namespace linepatterns {
case patBigRings: { case patBigRings: {
if(is_master(c) && !euclid) for(int i=0; i<S7; i++) if(is_master(c) && !euclid) for(int i=0; i<S7; i++)
if(c->master->move[i] && c->master->move[i] < c->master && c->master->move[i]->dm4 == c->master->dm4) if(c->master->move[i] && c->master->move[i] < c->master && c->master->move[i]->dm4 == c->master->dm4)
queuelinef(tC0(V), V*xspinpush0(-2*M_PI*i/S7 - master_to_c7_angle(), tessf), col, 2); queuelinef(tC0(V), V*xspinpush0(-2*M_PI*i/S7 - master_to_c7_angle(), tessf), col, 2 + vid.linequality);
// V*xspinpush0((nonbitrunc?M_PI:0) -2*M_PI*i/S7 // V*xspinpush0((nonbitrunc?M_PI:0) -2*M_PI*i/S7
break; break;
} }
@ -1969,7 +1969,7 @@ namespace linepatterns {
case patTree: case patTree:
if(is_master(c)) { if(is_master(c)) {
cell *c2 = c->master->move[0]->c7; cell *c2 = c->master->move[0]->c7;
if(gmatrix.count(c2)) queuelinef(tC0(V), gmatrix[c2]*C0, col, 2); if(gmatrix.count(c2)) queuelinef(tC0(V), gmatrix[c2]*C0, col, 2 + vid.linequality);
} }
break; break;
@ -1979,7 +1979,7 @@ namespace linepatterns {
forCellEx(c2, c) if(c2 > c && c2->master->alt && celldistAlt(c2) == d && gmatrix.count(c2)) forCellEx(c2, c) if(c2 > c && c2->master->alt && celldistAlt(c2) == d && gmatrix.count(c2))
queuelinef(tC0(V), gmatrix[c2]*C0, queuelinef(tC0(V), gmatrix[c2]*C0,
darkena(backcolor ^ 0xFFFFFF, 0, col), darkena(backcolor ^ 0xFFFFFF, 0, col),
2); 2 + vid.linequality);
} }
break; break;
@ -1988,7 +1988,7 @@ namespace linepatterns {
for(int i=0; i<S7; i++) for(int i=0; i<S7; i++)
if(c->master->move[i] && c->master->move[i]->alt == c->master->alt->move[0]) { if(c->master->move[i] && c->master->move[i]->alt == c->master->alt->move[0]) {
cell *c2 = c->master->move[i]->c7; cell *c2 = c->master->move[i]->c7;
if(gmatrix.count(c2)) queuelinef(tC0(V), gmatrix[c2]*C0, col, 2); if(gmatrix.count(c2)) queuelinef(tC0(V), gmatrix[c2]*C0, col, 2 + vid.linequality);
} }
} }
break; break;
@ -1998,21 +1998,21 @@ namespace linepatterns {
if(c->master->c7 != c) if(gmatrix.count(c->mov[0])) if(c->master->c7 != c) if(gmatrix.count(c->mov[0]))
queuelinef(tC0(V), gmatrix[c->mov[0]]*C0, queuelinef(tC0(V), gmatrix[c->mov[0]]*C0,
darkena(backcolor ^ 0xFFFFFF, 0, col), darkena(backcolor ^ 0xFFFFFF, 0, col),
2); 2 + vid.linequality);
} }
else if(irr::on) { else if(irr::on) {
if(c->master->c7 != c) if(gmatrix.count(c->master->c7)) if(c->master->c7 != c) if(gmatrix.count(c->master->c7))
queuelinef(tC0(V), gmatrix[c->master->c7]*C0, queuelinef(tC0(V), gmatrix[c->master->c7]*C0,
darkena(backcolor ^ 0xFFFFFF, 0, col), darkena(backcolor ^ 0xFFFFFF, 0, col),
2); 2 + vid.linequality);
} }
else { else {
int p = emeraldval(c); int p = emeraldval(c);
double hdist = hdist0(heptmove[0] * heptmove[2] * C0); double hdist = hdist0(heptmove[0] * heptmove[2] * C0);
if(pseudohept(c) && (p/4 == 10 || p/4 == 8)) if(pseudohept(c) && (p/4 == 10 || p/4 == 8))
for(int i=0; i<S7; i++) if(c->mov[i] && emeraldval(c->mov[i]) == p-4) { for(int i=0; i<S7; i++) if(c->mov[i] && emeraldval(c->mov[i]) == p-4) {
queuelinef(tC0(V), V*tC0(heptmove[i]), col, 2); queuelinef(tC0(V), V*tC0(heptmove[i]), col, 2 + vid.linequality);
queuelinef(tC0(V), V*tC0(spin(-i * ALPHA) * xpush(-hdist/2)), col, 2); queuelinef(tC0(V), V*tC0(spin(-i * ALPHA) * xpush(-hdist/2)), col, 2 + vid.linequality);
} }
} }
break; break;
@ -2023,7 +2023,7 @@ namespace linepatterns {
for(int i=0; i<S7; i++) if(c->mov[i] && c->mov[i]->master != c->master && gmatrix.count(c->mov[i])) for(int i=0; i<S7; i++) if(c->mov[i] && c->mov[i]->master != c->master && gmatrix.count(c->mov[i]))
queuelinef(tC0(V), gmatrix[c->mov[i]]*C0, queuelinef(tC0(V), gmatrix[c->mov[i]]*C0,
col, col,
1); 1 + vid.linequality);
} }
else { else {
int a = emeraldval(c); int a = emeraldval(c);
@ -2034,7 +2034,7 @@ namespace linepatterns {
if(emeraldval(h1->c7)/4 == 8 && emeraldval(h2->c7)/4 == 8) if(emeraldval(h1->c7)/4 == 8 && emeraldval(h2->c7)/4 == 8)
queuelinef(V * ddspin(c,i,84*5/14) * xpush0(tessf/2), queuelinef(V * ddspin(c,i,84*5/14) * xpush0(tessf/2),
V * ddspin(c,i,84*9/14) * xpush0(tessf/2), V * ddspin(c,i,84*9/14) * xpush0(tessf/2),
col, 1); col, 1 + vid.linequality);
} }
} }
break; break;

View File

@ -86,7 +86,8 @@ bool ptdsort(const polytodraw& p1, const polytodraw& p2) {
void hpcpush(hyperpoint h) { void hpcpush(hyperpoint h) {
if(sphere) h = mid(h,h); if(sphere) h = mid(h,h);
if(/*vid.usingGL && */!first && intval(hpc.back(), h) > (sphere ? (ISMOBWEB || gp::on || irr::on ? .04 : .0001) : 0.1)) { ld threshold = (sphere ? (ISMOBWEB || gp::on || irr::on ? .04 : .001) : 0.1) * pow(.25, vid.linequality);
if(/*vid.usingGL && */!first && intval(hpc.back(), h) > threshold) {
hyperpoint md = mid(hpc.back(), h); hyperpoint md = mid(hpc.back(), h);
hpcpush(md); hpcpush(md);
hpcpush(h); hpcpush(h);
@ -884,7 +885,7 @@ void prettypoint(const hyperpoint& h) {
} }
void prettylinesub(const hyperpoint& h1, const hyperpoint& h2, int lev) { void prettylinesub(const hyperpoint& h1, const hyperpoint& h2, int lev) {
if(lev) { if(lev >= 0) {
hyperpoint h3 = midz(h1, h2); hyperpoint h3 = midz(h1, h2);
prettylinesub(h1, h3, lev-1); prettylinesub(h1, h3, lev-1);
prettylinesub(h3, h2, lev-1); prettylinesub(h3, h2, lev-1);
@ -1295,11 +1296,12 @@ usershape *usershapes[USERSHAPEGROUPS][USERSHAPEIDS];
void drawTentacle(hpcshape &h, ld rad, ld var, ld divby) { void drawTentacle(hpcshape &h, ld rad, ld var, ld divby) {
double tlength = max(crossf, hexhexdist * gp::scale * irr::scale); double tlength = max(crossf, hexhexdist * gp::scale * irr::scale);
for(int i=0; i<=20; i++) int max = int(20 * pow(2, vid.linequality));
hpcpush(ddi(S21, rad + var * sin(i * M_PI/divby)) * ddi(0, tlength * i/20.) * C0); for(ld i=0; i<=max; i++)
for(int i=20; i>=0; i--) hpcpush(ddi(S21, rad + var * sin(i * M_PI/divby)) * ddi(0, tlength * i/max) * C0);
hpcpush(ddi(S21*3, rad - var * sin(i * M_PI/divby)) * ddi(0, tlength * i/20.) * C0); for(ld i=max; i>=0; i--)
hpcpush(ddi(S21, rad + var * sin(0 * M_PI/divby)) * ddi(0, tlength * 0/20.) * C0); hpcpush(ddi(S21*3, rad - var * sin(i * M_PI/divby)) * ddi(0, tlength * i/max) * C0);
hpcpush(ddi(S21, rad + var * sin(0 * M_PI/divby)) * C0);
} }
hyperpoint hpxd(ld d, ld x, ld y, ld z) { hyperpoint hpxd(ld d, ld x, ld y, ld z) {
@ -1780,35 +1782,36 @@ void buildpolys() {
} }
bshape(shEgg, PPR_ITEM); bshape(shEgg, PPR_ITEM);
for(int i=0; i<=S84; i+=S3)
RING(i)
hpcpush(hpxy(sin(i*2*M_PI/S84)*.15, cos(i*2*M_PI/S84)*.11)); hpcpush(hpxy(sin(i*2*M_PI/S84)*.15, cos(i*2*M_PI/S84)*.11));
bshape(shRing, PPR_ITEM); bshape(shRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * .30) * C0); hpcpush(ddi(i, disksize * .30) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shSpikedRing, PPR_ITEM); bshape(shSpikedRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * (i&1?.35:.30)) * C0); hpcpush(ddi(i, disksize * (int(i)&1?.35:.30)) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shTargetRing, PPR_ITEM); bshape(shTargetRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * (i >= S42-6 && i <= S42+6 ?.36:.30)) * C0); hpcpush(ddi(i, disksize * (i >= S42-6 && i <= S42+6 ?.36:.30)) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shSpearRing, PPR_ITEM); bshape(shSpearRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) { REVRING(i) {
int d = i - S42; double d = i - S42;
if(d<0) d = -d; if(d<0) d = -d;
d = 8 - 2 * d; d = 8 - 2 * d;
if(d<0) d = 0; if(d<0) d = 0;
@ -1832,10 +1835,10 @@ void buildpolys() {
*/ */
bshape(shLoveRing, PPR_ITEM); bshape(shLoveRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i) hpcpush(ddi(i, disksize * .25) * C0);
hpcpush(ddi(i, disksize * .25) * C0); REVRING(i) {
for(int i=S84; i>=0; i--) { double j = i*3;
int j = i*3 % S84; while(j >= S84) j -= S84;
double d = j - S42; double d = j - S42;
d = d / 9; d = d / 9;
if(d<0) d = -d; if(d<0) d = -d;
@ -1846,40 +1849,42 @@ void buildpolys() {
} }
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
auto dmod = [] (ld a, ld b) { return a - int(a/b)*b; };
bshape(shSawRing, PPR_ITEM); bshape(shSawRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * (.3 + (i&3) * .02)) * C0); hpcpush(ddi(i, disksize * (.3 + (dmod(i, 4) * .02))) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shGearRing, PPR_ITEM); bshape(shGearRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * ((i%6<3)?.3:.36)) * C0); hpcpush(ddi(i, disksize * ((dmod(i, 6)<3)?.3:.36)) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shPeaceRing, PPR_ITEM); bshape(shPeaceRing, PPR_ITEM);
for(int i=0; i<=S84; i++) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * (i%S28 < S7?.36 : .3)) * C0); hpcpush(ddi(i, disksize * (dmod(i, S28) < S7?.36 : .3)) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shHeptaRing, PPR_ITEM); bshape(shHeptaRing, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, disksize * .25) * C0); hpcpush(ddi(i, disksize * .25) * C0);
for(int i=S84; i>=0; i--) REVRING(i)
hpcpush(ddi(i, disksize * (i%S12 < S3?.4 : .27)) * C0); hpcpush(ddi(i, disksize * (dmod(i, S12) < S3?.4 : .27)) * C0);
hpcpush(ddi(0, disksize * .25) * C0); hpcpush(ddi(0, disksize * .25) * C0);
bshape(shCompass1, PPR_ITEM); bshape(shCompass1, PPR_ITEM);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, crossf * .35) * C0); hpcpush(ddi(i, crossf * .35) * C0);
bshape(shCompass2, PPR_ITEMa); bshape(shCompass2, PPR_ITEMa);
for(int i=0; i<=S84; i+=S3) REVRING(i)
hpcpush(ddi(i, crossf * .3) * C0); hpcpush(ddi(i, crossf * .3) * C0);
bshape(shCompass3, PPR_ITEMb); bshape(shCompass3, PPR_ITEMb);
@ -1913,11 +1918,11 @@ void buildpolys() {
} }
bshape(shSlime, 33); bshape(shSlime, 33);
for(int i=0; i<=S84; i++) PRING(i)
hpcpush(ddi(i, crossf * (0.7 + .2 * sin(i * M_PI * 2 / S84 * 9))) * C0); hpcpush(ddi(i, crossf * (0.7 + .2 * sin(i * M_PI * 2 / S84 * 9))) * C0);
bshape(shJelly, 33); bshape(shJelly, 33);
for(int i=0; i<=S84; i++) PRING(i)
hpcpush(ddi(i, crossf * (0.4 + .03 * sin(i * M_PI * 2 / S84 * 7))) * C0); hpcpush(ddi(i, crossf * (0.4 + .03 * sin(i * M_PI * 2 / S84 * 7))) * C0);
bshape(shHeptaMarker, PPR_HEPTAMARK); bshape(shHeptaMarker, PPR_HEPTAMARK);
@ -1927,7 +1932,7 @@ void buildpolys() {
for(int t=0; t<=S7*4; t++) hpcpush(ddi(t*S3, zhexf*.1) * C0); for(int t=0; t<=S7*4; t++) hpcpush(ddi(t*S3, zhexf*.1) * C0);
bshape(shRose, PPR_ITEM); bshape(shRose, PPR_ITEM);
for(int t=0; t<=S84; t++) PRING(t)
hpcpush(spin(M_PI * t / (S42+.0)) * xpush(crossf * (0.2 + .15 * sin(M_PI * t / (S42+.0) * 3))) * C0); hpcpush(spin(M_PI * t / (S42+.0)) * xpush(crossf * (0.2 + .15 * sin(M_PI * t / (S42+.0) * 3))) * C0);
bshape(shThorns, PPR_THORNS); bshape(shThorns, PPR_THORNS);
@ -2049,10 +2054,10 @@ void buildpolys() {
bshape(shWormHead, PPR_ONTENTACLE, scalef, 80); bshape(shWormHead, PPR_ONTENTACLE, scalef, 80);
bshape(shWormSegment, PPR_TENTACLE1); bshape(shWormSegment, PPR_TENTACLE1);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, .20 * scalef) * C0); hpcpush(ddi(i, .20 * scalef) * C0);
bshape(shSmallWormSegment, PPR_TENTACLE1); bshape(shSmallWormSegment, PPR_TENTACLE1);
for(int i=0; i<=S84; i+=S3) RING(i)
hpcpush(ddi(i, .16 * scalef) * C0); hpcpush(ddi(i, .16 * scalef) * C0);
bshape(shWormTail, PPR_TENTACLE1, scalef, 383); bshape(shWormTail, PPR_TENTACLE1, scalef, 383);
bshape(shSmallWormTail, PPR_TENTACLE1, scalef, 384); bshape(shSmallWormTail, PPR_TENTACLE1, scalef, 384);

View File

@ -813,7 +813,7 @@ namespace levelline {
queueline( queueline(
tC0(T * ddspin(c1,i) * xpush(d2 * (vmid-val1) / (val2-val1))), tC0(T * ddspin(c1,i) * xpush(d2 * (vmid-val1) / (val2-val1))),
tC0(T * ddspin(c1,i-1) * xpush(d3 * (vmid-val1) / (val3-val1))), tC0(T * ddspin(c1,i-1) * xpush(d3 * (vmid-val1) / (val3-val1))),
l.color); l.color, vid.linequality);
}; };
while(v1 < v2 && v1 < v3) { while(v1 < v2 && v1 < v3) {
draw(); draw();

View File

@ -1173,13 +1173,13 @@ bool drawVertex(const transmatrix &V, cell *c, shmup::monster *m) {
hyperpoint l1 = T*tC0(spiral::at(1+ei->i)); hyperpoint l1 = T*tC0(spiral::at(1+ei->i));
for(int z=1; z<=prec; z++) { for(int z=1; z<=prec; z++) {
hyperpoint l2 = T*tC0(spiral::at(1+ei->i+(ei->j-ei->i) * z / (prec+.0))); hyperpoint l2 = T*tC0(spiral::at(1+ei->i+(ei->j-ei->i) * z / (prec+.0)));
queueline(l1, l2, col, 0); queueline(l1, l2, col, vid.linequality);
l1 = l2; l1 = l2;
lastptd().prio = PPR_STRUCT0; lastptd().prio = PPR_STRUCT0;
} }
} }
else { else {
queueline(h1, h2, col, 2); queueline(h1, h2, col, 2 + vid.linequality);
lastptd().prio = PPR_STRUCT0; lastptd().prio = PPR_STRUCT0;
} }
} }

View File

@ -1236,13 +1236,13 @@ void prepareTexture() {
drawthemap(); drawthemap();
if(mousing && !renderonce) { if(mousing && !renderonce) {
for(int i=0; i<numplayers(); i++) if(multi::playerActive(i)) for(int i=0; i<numplayers(); i++) if(multi::playerActive(i))
queueline(tC0(shmup::ggmatrix(playerpos(i))), mouseh, 0xFF00FF, 8); queueline(tC0(shmup::ggmatrix(playerpos(i))), mouseh, 0xFF00FF, 8 + vid.linequality);
} }
if(finger_center) { if(finger_center) {
transmatrix V = rgpushxto0(finger_center->h); transmatrix V = rgpushxto0(finger_center->h);
queuechr(V, 0.5, 'X', 0xFFFFFFFF, 2); queuechr(V, 0.5, 'X', 0xFFFFFFFF, 2);
for(int i=0; i<72; i++) for(int i=0; i<72; i++)
queueline(tC0(V * spin(i*M_PI/32) * xpush(finger_range)), tC0(V * spin((i+1)*M_PI/32) * xpush(finger_range)), 0xFFFFFFFF, 0); queueline(tC0(V * spin(i*M_PI/32) * xpush(finger_range)), tC0(V * spin((i+1)*M_PI/32) * xpush(finger_range)), 0xFFFFFFFF, vid.linequality);
} }
drawqueue(); drawqueue();
vid = svid; vid = svid;