diff --git a/celldrawer.cpp b/celldrawer.cpp index 4be5f310..fe05fc1b 100644 --- a/celldrawer.cpp +++ b/celldrawer.cpp @@ -1634,7 +1634,7 @@ void celldrawer::draw_features() { if(numerical_minefield) { if(mines) { string label = its(mines); - queuestr(V, mines >= 10 ? .5 : 1, label, darkened(minecolors[mines]), 8); + queuestr(V, (mines >= 10 ? .5 : 1) * mapfontscale / 100, label, darkened(minecolors[mines]), 8); } } else { @@ -2079,7 +2079,7 @@ void celldrawer::draw_cellstat() { if(c->land == laMirrored || c->land == laMirrorWall2 || c->land == laMirrored2) { string label = its(c->landparam); - queuestr(V, 1 * .2, label, 0xFFFFFFFF, 1); + queuestr(V, mapfontscale / 500, label, 0xFFFFFFFF, 1); } if(debug_tiles && mod_allowed()) { @@ -2105,22 +2105,22 @@ void celldrawer::draw_cellstat() { #endif else label = its(shvid(c)); - queuestr(V, .5, label, 0xFFFFFFFF, 1); + queuestr(V, mapfontscale / 200, label, 0xFFFFFFFF, 1); for(int i=0; itype; i++) { - queuestr(V * rgpushxto0(currentmap->get_corner(c, i, 4)), .2, its(i), 0xFFFFFFFF, 1); - queuestr(V * rgpushxto0(mid(currentmap->get_corner(c, i, 4), currentmap->get_corner(c, i+1, 5))), .2, its(i), 0xFFFFFFFF, 1); + queuestr(V * rgpushxto0(currentmap->get_corner(c, i, 4)), mapfontscale / 500, its(i), 0xFFFFFFFF, 1); + queuestr(V * rgpushxto0(mid(currentmap->get_corner(c, i, 4), currentmap->get_corner(c, i+1, 5))), mapfontscale / 500, its(i), 0xFFFFFFFF, 1); } } if(debug_voronoi && ls::voronoi_structure() && mod_allowed()) { auto p = get_voronoi_winner(c); - queuestr(V, .2, its(p.second), index_pointer_int(p.first) * 0x7F3015, 1); + queuestr(V, mapfontscale / 500, its(p.second), index_pointer_int(p.first) * 0x7F3015, 1); } if(cmode & sm::TORUSCONFIG) { auto p = euc::coord_display(V, c); if(p.second != "") - queuestr(V, p.first ? .2 : .6, p.second, p.first ? 0xFFFFFFD0 : 0xFFFF0040, 1); + queuestr(V, (p.first ? .2 : .6) * mapfontscale / 100, p.second, p.first ? 0xFFFFFFD0 : 0xFFFF0040, 1); } #if CAP_EDIT @@ -2135,13 +2135,13 @@ void celldrawer::draw_cellstat() { string label = its(si.id & 255); color_t col = forecolor ^ colorhash(si.id >> 8); - queuestr(V, .5, label, 0xFF000000 + col); + queuestr(V, mapfontscale / 200, label, 0xFF000000 + col); } #endif if(debug_cellnames && pointer_indices.count(c)) { shstream ss; print(ss, c); - queuestr(V, .5, ss.s, 0xFFFFFFFF); + queuestr(V, mapfontscale / 200, ss.s, 0xFFFFFFFF); queuepoly(V * ddspin(c, 0), cgi.shAsymmetric, darkena(0x000000, 0, 0xC0)); } } @@ -2962,7 +2962,7 @@ void celldrawer::draw() { string s = s0+asciichar; dynamicval p(poly_outline, asciiborder << 8); if(!wmascii3) - queuestrn(V, 1, s, darkenedby(asciicol, darken), 2); + queuestrn(V, mapfontscale / 100, s, darkenedby(asciicol, darken), 2); else if(highwall(c) && conegraph(c)) { const int layers = 1 << detaillevel; string s1 = s0+asciichar1; @@ -2970,7 +2970,7 @@ void celldrawer::draw() { for(int z=0; zwall == waChasm) { // const int layers = 1 << detaillevel; @@ -2996,12 +2996,12 @@ void celldrawer::draw() { else if(chasmgraph(c)) { string s1 = s0+asciichar1; poly_outline = bordcolor << 8; - queuestrn(orthogonal_move_fol(V, cgi.BOTTOM), 1, s1, darkenedby(gradient(bordcolor, asciicol1, 0, 0.3, 1), darken), 2); + queuestrn(orthogonal_move_fol(V, cgi.BOTTOM), mapfontscale / 100, s1, darkenedby(gradient(bordcolor, asciicol1, 0, 0.3, 1), darken), 2); poly_outline = asciiborder << 8; - queuestrn(V, 1, s, darkenedby(asciicol, darken), 2); + queuestrn(V, mapfontscale / 100, s, darkenedby(asciicol, darken), 2); } else - queuestrn(V, 1, s, darkenedby(asciicol, darken), 2); + queuestrn(V, mapfontscale / 100, s, darkenedby(asciicol, darken), 2); } draw_grid(); diff --git a/config.cpp b/config.cpp index 0211243f..7af7b662 100644 --- a/config.cpp +++ b/config.cpp @@ -1028,6 +1028,8 @@ EX void savecolortable(colortable& ct, string name) { EX purehookset hooks_configfile; +EX ld mapfontscale = 100; + EX void initConfig() { // basic config @@ -1080,6 +1082,13 @@ EX void initConfig() { -> set_reaction(compute_fsize) -> set_sets([] { dialog::bound_low(0); }); + param_f(mapfontscale, "mapfontscale", 100) + -> editable(-400, 400, 10, "map font scale", + "This affects the size of the characters on the ASCII map. This includes ASCII walls/monster display mode, the minimap, minefield values, and various debug features.", 'B') + ->set_extra([] { + dialog::get_di().extra_options = [] () { draw_radar(true); }; + }); + param_i(vid.abs_fsize, "fsize", 12) -> editable(1, 72, 1, "font size", "", 'b') -> set_reaction(compute_fsize) @@ -2236,6 +2245,7 @@ EX void showGraphConfig() { add_edit(vid.fontscale); else add_edit(vid.abs_fsize); + add_edit(mapfontscale); dialog::addSelItem(XLAT("vector settings"), XLAT("width") + " " + fts(vid.linewidth), 'w'); dialog::add_action_push(show_vector_settings); diff --git a/expansion.cpp b/expansion.cpp index 40290c0f..7f52a5d9 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -655,7 +655,7 @@ void celldrawer::do_viewdist() { if(!dist_label_colored) dc = dist_label_color; if(label != "") - queuestr(V, (isize(label) > 1 ? .6 : 1), label, 0xFF000000 + dc, 1); + queuestr(V, (isize(label) > 1 ? .6 : 1) * mapfontscale / 100, label, 0xFF000000 + dc, 1); } EX void viewdist_configure_dialog() { diff --git a/graph.cpp b/graph.cpp index 601cf2a4..5ecfe7ec 100644 --- a/graph.cpp +++ b/graph.cpp @@ -846,9 +846,9 @@ EX void draw_ascii(const shiftmatrix& V, char glyph, color_t col, ld size) { string s = s0 + glyph; int id = isize(ptds); if(WDIM == 2 && GDIM == 3) - queuestrn(V * lzpush(cgi.FLOOR - cgi.scalefactor * size / 4), size, s, darkenedby(col, darken), 0); + queuestrn(V * lzpush(cgi.FLOOR - cgi.scalefactor * size / 4), size * mapfontscale / 100, s, darkenedby(col, darken), 0); else - queuestrn(V, 1, s, darkenedby(col, darken), GDIM == 3 ? 0 : 2); + queuestrn(V, mapfontscale / 100, s, darkenedby(col, darken), GDIM == 3 ? 0 : 2); while(id < isize(ptds)) ptds[id++]->prio = PPR::MONSTER_BODY; } @@ -3103,15 +3103,15 @@ EX bool drawMonster(const shiftmatrix& Vparam, int ct, cell *c, color_t col, col col = mirrorcolor(geometry == gElliptic ? det(Vs.T) < 0 : mirr); if(!mouseout() && !nospins && GDIM == 2) { shiftpoint P2 = Vs * inverse_shift(inmirrorcount ? ocwtV : cwtV, mouseh); - queuestr(P2, 10, "x", 0xFF00); - } + queuestr(P2, 10*mapfontscale/100, "x", 0xFF00); + } if(!nospins && flipplayer) Vs = Vs * lpispin(); - + res = res && drawMonsterType(moMimic, c, Vs, col, footphase, asciicol); drawPlayerEffects(Vs, Vparam, c, c->monst); } } - + // illusions face randomly else if(c->monst == moIllusion) { @@ -3235,7 +3235,7 @@ EX bool drawMonster(const shiftmatrix& Vparam, int ct, cell *c, color_t col, col hyperpoint h = inverse_shift(ocwtV, mouseh); if(flipplayer) h = lpispin() * h; shiftpoint P2 = Vs * h; - queuestr(P2, 10, "x", 0xFF00); + queuestr(P2, mapfontscale / 10, "x", 0xFF00); } if(hide_player()) { @@ -3573,7 +3573,7 @@ void draw_movement_arrows(cell *c, const transmatrix& V, int df) { transmatrix T = iso_inverse(Centered) * rgpushxto0(Centered * tC0(V)) * lrspintox(Centered*tC0(V)) * spin(-sd * M_PI/S7) * xpush(0.2); if(vid.axes >= 5) - queuestr(shiftless(T), keysize, s0 + key, col >> 8, 1); + queuestr(shiftless(T), keysize * mapfontscale / 100, s0 + key, col >> 8, 1); else queuepoly(shiftless(T), cgi.shArrow, col); @@ -3581,7 +3581,7 @@ void draw_movement_arrows(cell *c, const transmatrix& V, int df) { else if(!confusingGeometry()) break; } } - if(keylist != "") queuestr(shiftless(V), keysize, keylist, col >> 8, 1); + if(keylist != "") queuestr(shiftless(V), keysize * mapfontscale / 100, keylist, col >> 8, 1); } EX int celldistAltPlus(cell *c) { return 1000000 + celldistAlt(c); } @@ -4761,7 +4761,7 @@ EX void drawMarkers() { #if CAP_QUEUE if(haveMount()) for (const shiftmatrix& V : hr::span_at(current_display->all_drawn_copies, dragon::target)) { - queuestr(V, 1, "X", + queuestr(V, mapfontscale/100, "X", gradient(0, iinf[itOrbDomination].color, -1, sintick(dragon::whichturn == turncount ? 75 : 150), 1)); } #endif @@ -4994,12 +4994,12 @@ EX void draw_flash(struct flashdata& f, const shiftmatrix& V, bool& kill) { int r = 2; apply_neon(col, r); if(GDIM == 3 || sphere) - queuestr(V, (1 - tim * 1. / f.size) * f.angle, f.text, col, r); + queuestr(V, (1 - tim * 1. / f.size) * f.angle * mapfontscale / 100, f.text, col, r); else if(!kill) { shiftpoint h = tC0(V); if(hdist0(h) > .1) { transmatrix V2 = rspintox(h.h) * xpush(hdist0(h.h) * (1 / (1 - tim * 1. / f.size))); - queuestr(shiftless(V2, h.shift), f.angle, f.text, col, r); + queuestr(shiftless(V2, h.shift), f.angle * mapfontscale / 100, f.text, col, r); } } if(static_bubbles) { diff --git a/nonisotropic.cpp b/nonisotropic.cpp index 7ed02620..2d3d06f3 100644 --- a/nonisotropic.cpp +++ b/nonisotropic.cpp @@ -2358,7 +2358,7 @@ EX namespace rots { ptds.clear(); drawthemap(); drawqueue(); - displaychr(current_display->xcenter, current_display->ycenter, 0, 24, '+', 0xFFFFFFFF); + displaychr(current_display->xcenter, current_display->ycenter, 0, 24 * mapfontscale / 100, '+', 0xFFFFFFFF); glflush(); }); gmatrix = std::move(g); diff --git a/radar.cpp b/radar.cpp index 7ba8330a..47e2c205 100644 --- a/radar.cpp +++ b/radar.cpp @@ -146,7 +146,7 @@ EX void draw_radar(bool cornermode) { auto compassdir = [&] (char dirname, hyperpoint h) { h = NLP * h * .8; queueline(sId*atscreenpos(cx+rad * h[0], cy - rad * h[2] * si + rad * h[1] * co, 0)*C0, sId*atscreenpos(cx+rad*h[0], cy - rad*h[2] * si, 0)*C0, 0xA0401040, -1); - displaychr(int(cx+rad * h[0]), int(cy - rad * h[2] * si + rad * h[1] * co), 0, 8, dirname, 0xA04010); + displaychr(int(cx+rad * h[0]), int(cy - rad * h[2] * si + rad * h[1] * co), 0, 8 * mapfontscale / 100, dirname, 0xA04010); }; compassdir('E', point3(+1, 0, 0)); compassdir('N', point3(0, +1, 0)); @@ -180,10 +180,10 @@ EX void draw_radar(bool cornermode) { glflush(); for(auto& r: cd->radarpoints) { - if(d3) displaychr(int(cx + rad * r.h[0]), int(cy - rad * r.h[2] * si + rad * r.h[1] * co), 0, 8, r.glyph, r.color); + if(d3) displaychr(int(cx + rad * r.h[0]), int(cy - rad * r.h[2] * si + rad * r.h[1] * co), 0, 8 * mapfontscale / 100, r.glyph, r.color); else { hyperpoint h = locate(r.h); - displaychr(int(h[0]), int(h[1]), 0, int(h[2]) / divby, r.glyph, r.color); + displaychr(int(h[0]), int(h[1]), 0, int(h[2]) * mapfontscale / divby / 100, r.glyph, r.color); } } #endif