From 18f1b5c675b99ec067f6423f326e49300908491a Mon Sep 17 00:00:00 2001 From: TaxiService Date: Fri, 31 Mar 2023 17:33:23 +0200 Subject: [PATCH 1/5] attempt#2 to fix masterwork/exceptional/decorated symbols this time we're using a couple of `static_cast(...)` thingies --- library/modules/Items.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index bfdd525be..9c1217c93 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -720,13 +720,13 @@ df::coord Items::getPosition(df::item *item) return item->pos; } -static char quality_table[] = { 0, '-', '+', '*', '=', '@' }; +static int quality_table[] = { 0, 45, 43, 42, 240, 15 }; static void addQuality(std::string &tmp, int quality) { if (quality > 0 && quality <= 5) { - char c = quality_table[quality]; - tmp = c + tmp + c; + int c = quality_table[quality]; + tmp = static_cast(c) + tmp + static_cast(c); } } @@ -825,7 +825,7 @@ std::string Items::getDescription(df::item *item, int type, bool decorate) addQuality(tmp, item->getQuality()); if (item->isImproved()) { - tmp = "<" + tmp + ">"; + tmp = static_cast(174) + tmp + static_cast(175); addQuality(tmp, item->getImprovementQuality()); } } From 3a6893de53ee3994aa68641dd8b49a423ff617ab Mon Sep 17 00:00:00 2001 From: TaxiService Date: Sat, 1 Apr 2023 16:43:05 +0200 Subject: [PATCH 2/5] attempt to increase code readability following lethosor and myk's suggestions, each symbol now is its own constant with a descriptive name. ...will it work though? --- library/modules/Items.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index 9c1217c93..75951aaa5 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -720,13 +720,18 @@ df::coord Items::getPosition(df::item *item) return item->pos; } -static int quality_table[] = { 0, 45, 43, 42, 240, 15 }; +static const char MARKER_EXCEPTIONAL = static_cast(240); +static const char MARKER_MASTERWORK = static_cast(15); +static const char MARKER_IMPROVED_LEFT = static_cast(174); +static const char MARKER_IMPROVED_RIGHT = static_cast(175); + +static char quality_table[] = { 0, '-', '+', '*', MARKER_EXCEPTIONAL, MARKER_MASTERWORK }; static void addQuality(std::string &tmp, int quality) { if (quality > 0 && quality <= 5) { - int c = quality_table[quality]; - tmp = static_cast(c) + tmp + static_cast(c); + char c = quality_table[quality]; + tmp = c + tmp + c; } } @@ -825,7 +830,7 @@ std::string Items::getDescription(df::item *item, int type, bool decorate) addQuality(tmp, item->getQuality()); if (item->isImproved()) { - tmp = static_cast(174) + tmp + static_cast(175); + tmp = MARKER_IMPROVED_LEFT + tmp + MARKER_IMPROVED_RIGHT; addQuality(tmp, item->getImprovementQuality()); } } From e3bab1eb6b0c464d33b2a0f981d1e0b645eb1759 Mon Sep 17 00:00:00 2001 From: TaxiService Date: Sat, 1 Apr 2023 23:40:45 +0200 Subject: [PATCH 3/5] simplifying character definition even more removed those pesky superfluous consts and casts... --- library/modules/Items.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index 75951aaa5..5a34d7385 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -720,12 +720,7 @@ df::coord Items::getPosition(df::item *item) return item->pos; } -static const char MARKER_EXCEPTIONAL = static_cast(240); -static const char MARKER_MASTERWORK = static_cast(15); -static const char MARKER_IMPROVED_LEFT = static_cast(174); -static const char MARKER_IMPROVED_RIGHT = static_cast(175); - -static char quality_table[] = { 0, '-', '+', '*', MARKER_EXCEPTIONAL, MARKER_MASTERWORK }; +static char quality_table[] = { 0, '-', '+', '*', '\xF0', '\x0F' }; static void addQuality(std::string &tmp, int quality) { @@ -830,7 +825,7 @@ std::string Items::getDescription(df::item *item, int type, bool decorate) addQuality(tmp, item->getQuality()); if (item->isImproved()) { - tmp = MARKER_IMPROVED_LEFT + tmp + MARKER_IMPROVED_RIGHT; + tmp = '\xAE' + tmp + '\xAF'; addQuality(tmp, item->getImprovementQuality()); } } From 8d8a4abd13e96c17214dfb84fcbb94ab77f87b9e Mon Sep 17 00:00:00 2001 From: TaxiService Date: Sun, 2 Apr 2023 02:33:09 +0200 Subject: [PATCH 4/5] reverted loss of readability --- library/modules/Items.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index 5a34d7385..303f9771e 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -720,7 +720,13 @@ df::coord Items::getPosition(df::item *item) return item->pos; } -static char quality_table[] = { 0, '-', '+', '*', '\xF0', '\x0F' }; +// These '\xFF' chars refer to quality markers from curses.png, namely: 250 (≡), 15 (☼), 174 («) and 175 (»). +static const char MARKER_EXCEPTIONAL = '\xF0'; +static const char MARKER_MASTERWORK = '\x0F'; +static const char MARKER_IMPROVED_LEFT = '\xAE'; +static const char MARKER_IMPROVED_RIGHT = '\xAF'; + +static char quality_table[] = { 0, '-', '+', '*', MARKER_EXCEPTIONAL, MARKER_MASTERWORK }; static void addQuality(std::string &tmp, int quality) { @@ -825,7 +831,7 @@ std::string Items::getDescription(df::item *item, int type, bool decorate) addQuality(tmp, item->getQuality()); if (item->isImproved()) { - tmp = '\xAE' + tmp + '\xAF'; + tmp = MARKER_IMPROVED_LEFT + tmp + MARKER_IMPROVED_RIGHT; addQuality(tmp, item->getImprovementQuality()); } } From 5846c3fc12d2021509e501d4d0da10abaa55d0cf Mon Sep 17 00:00:00 2001 From: Myk Date: Sat, 1 Apr 2023 22:11:38 -0700 Subject: [PATCH 5/5] Update changelog.txt --- docs/changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.txt b/docs/changelog.txt index b34e66aaa..6dde716b3 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -40,6 +40,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: - `blueprint`: interpret saplings, shrubs, and twigs as floors instead of walls ## Misc Improvements +- `buildingplan`: items in the item selection dialog should now use the same item quality symbols as the base game ## Documentation