From a6fc81ae1a379059b4a24757fa82c4cf5c41cd9b Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Tue, 18 Sep 2018 13:18:12 -0500 Subject: [PATCH 1/2] Use project values for tilesets --- mainwindow.cpp | 1 + map.cpp | 6 ++--- project.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ project.h | 1 + tileset.cpp | 23 +++++++++--------- tileset.h | 7 ++++++ 6 files changed, 88 insertions(+), 14 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index be578b65..c5c90f65 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -377,6 +377,7 @@ void MainWindow::loadDataStructures() { project->readSecretBaseIds(); project->readBgEventFacingDirections(); project->readMapsWithConnections(); + project->readTilesetProperties(); } void MainWindow::populateMapList() { diff --git a/map.cpp b/map.cpp index 721d4b17..d4bb6ab0 100755 --- a/map.cpp +++ b/map.cpp @@ -68,7 +68,7 @@ uint16_t Map::getSelectedBlockIndex(int index) { if (index < layout->tileset_primary->metatiles->length()) { return static_cast(index); } else { - return 0x200 + static_cast(index - layout->tileset_primary->metatiles->length()); + return static_cast(Tileset::num_metatiles_primary + index - layout->tileset_primary->metatiles->length()); } } @@ -76,7 +76,7 @@ int Map::getDisplayedBlockIndex(int index) { if (index < layout->tileset_primary->metatiles->length()) { return index; } else { - return index - 0x200 + layout->tileset_primary->metatiles->length(); + return index - Tileset::num_metatiles_primary + layout->tileset_primary->metatiles->length(); } } @@ -337,7 +337,7 @@ QPixmap Map::renderMetatiles() { for (int i = 0; i < length_; i++) { int tile = i; if (i >= primary_length) { - tile += 0x200 - primary_length; + tile += Tileset::num_metatiles_primary - primary_length; } QImage metatile_image = Metatile::getMetatileImage(tile, layout->tileset_primary, layout->tileset_secondary); int map_y = i / width_; diff --git a/project.cpp b/project.cpp index b3b625ba..c8d0c2d6 100755 --- a/project.cpp +++ b/project.cpp @@ -1121,6 +1121,70 @@ QMap Project::getTilesets() { return allTilesets; } +void Project::readTilesetProperties() { + QStringList defines; + QString text = readTextFile(root + "/include/fieldmap.h"); + if (!text.isNull()) { + bool error = false; + QStringList definePrefixes; + definePrefixes << "NUM_"; + QMap defines = readCDefines(text, definePrefixes); + auto it = defines.find("NUM_TILES_IN_PRIMARY"); + if (it != defines.end()) { + Tileset::num_tiles_primary = it.value(); + } + else { + Tileset::num_tiles_primary = 512; + error = true; + } + it = defines.find("NUM_TILES_TOTAL"); + if (it != defines.end()) { + Tileset::num_tiles_total = it.value(); + } + else { + Tileset::num_tiles_total = 1024; + error = true; + } + it = defines.find("NUM_METATILES_IN_PRIMARY"); + if (it != defines.end()) { + Tileset::num_metatiles_primary = it.value(); + } + else { + Tileset::num_metatiles_primary = 512; + error = true; + } + it = defines.find("NUM_METATILES_TOTAL"); + if (it != defines.end()) { + Tileset::num_metatiles_total = it.value(); + } + else { + Tileset::num_metatiles_total = 1024; + error = true; + } + it = defines.find("NUM_PALS_IN_PRIMARY"); + if (it != defines.end()) { + Tileset::num_pals_primary = it.value(); + } + else { + Tileset::num_pals_primary = 6; + error = true; + } + it = defines.find("NUM_PALS_TOTAL"); + if (it != defines.end()) { + Tileset::num_pals_total = it.value(); + } + else { + Tileset::num_pals_total = 13; + error = true; + } + + if (error) + { + qDebug() << "Some global tileset values could not be loaded. Using default values"; + } + } +} + void Project::readRegionMapSections() { QString filepath = root + "/include/constants/region_map_sections.h"; QStringList prefixes = (QStringList() << "MAPSEC_"); diff --git a/project.h b/project.h index fb630f38..ca34147b 100755 --- a/project.h +++ b/project.h @@ -88,6 +88,7 @@ public: QStringList getSongNames(); QStringList getVisibilities(); QMap getTilesets(); + void readTilesetProperties(); void readRegionMapSections(); void readItemNames(); void readFlagNames(); diff --git a/tileset.cpp b/tileset.cpp index df368170..981e2612 100755 --- a/tileset.cpp +++ b/tileset.cpp @@ -9,6 +9,13 @@ Tileset::Tileset() } +int Tileset::num_tiles_primary; +int Tileset::num_tiles_total; +int Tileset::num_metatiles_primary; +int Tileset::num_metatiles_total; +int Tileset::num_pals_primary; +int Tileset::num_pals_total; + Metatile::Metatile() { tiles = new QList; @@ -88,8 +95,7 @@ QImage Metatile::getMetatileTile(int tile, Tileset *primaryTileset, Tileset *sec } Tileset* Metatile::getBlockTileset(int metatile_index, Tileset *primaryTileset, Tileset *secondaryTileset) { - int primary_size = 0x200; - if (metatile_index < primary_size) { + if (metatile_index < Tileset::num_metatiles_primary) { return primaryTileset; } else { return secondaryTileset; @@ -97,24 +103,19 @@ Tileset* Metatile::getBlockTileset(int metatile_index, Tileset *primaryTileset, } int Metatile::getBlockIndex(int index) { - int primary_size = 0x200; - if (index < primary_size) { + if (index < Tileset::num_metatiles_primary) { return index; } else { - return index - primary_size; + return index - Tileset::num_metatiles_primary; } } QList> Metatile::getBlockPalettes(Tileset *primaryTileset, Tileset *secondaryTileset) { QList> palettes; - for (int i = 0; i < 6; i++) { + for (int i = 0; i < Tileset::num_pals_primary; i++) { palettes.append(primaryTileset->palettes->at(i)); } - - // TODO: Find a reliable way to detect Ruby vs. Emerald - // Ruby's secondary tilesets only use palettes 6-11, whereas - // Emerald uses 6-12. - for (int i = 6; i < 13; i++) { + for (int i = Tileset::num_pals_primary; i < Tileset::num_pals_total; i++) { palettes.append(secondaryTileset->palettes->at(i)); } return palettes; diff --git a/tileset.h b/tileset.h index 5cd22daa..f936855a 100755 --- a/tileset.h +++ b/tileset.h @@ -24,6 +24,13 @@ public: QList *tiles = nullptr; QList *metatiles = nullptr; QList> *palettes = nullptr; + + static int num_tiles_primary; + static int num_tiles_total; + static int num_metatiles_primary; + static int num_metatiles_total; + static int num_pals_primary; + static int num_pals_total; }; class Metatile From 363ea86a2afcafe41c8b26f9a4e2b3da7e9a6171 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Wed, 19 Sep 2018 12:35:45 -0500 Subject: [PATCH 2/2] Move static tileset vars to Project --- map.cpp | 7 ++++--- project.cpp | 55 +++++++++++++++++++++++++++++++++++++++++------------ project.h | 14 ++++++++++++++ tileset.cpp | 18 ++++++------------ tileset.h | 7 ------- 5 files changed, 67 insertions(+), 34 deletions(-) diff --git a/map.cpp b/map.cpp index d4bb6ab0..54298a5c 100755 --- a/map.cpp +++ b/map.cpp @@ -1,4 +1,5 @@ #include "map.h" +#include "project.h" #include #include @@ -68,7 +69,7 @@ uint16_t Map::getSelectedBlockIndex(int index) { if (index < layout->tileset_primary->metatiles->length()) { return static_cast(index); } else { - return static_cast(Tileset::num_metatiles_primary + index - layout->tileset_primary->metatiles->length()); + return static_cast(Project::getNumMetatilesPrimary() + index - layout->tileset_primary->metatiles->length()); } } @@ -76,7 +77,7 @@ int Map::getDisplayedBlockIndex(int index) { if (index < layout->tileset_primary->metatiles->length()) { return index; } else { - return index - Tileset::num_metatiles_primary + layout->tileset_primary->metatiles->length(); + return index - Project::getNumMetatilesPrimary() + layout->tileset_primary->metatiles->length(); } } @@ -337,7 +338,7 @@ QPixmap Map::renderMetatiles() { for (int i = 0; i < length_; i++) { int tile = i; if (i >= primary_length) { - tile += Tileset::num_metatiles_primary - primary_length; + tile += Project::getNumMetatilesPrimary() - primary_length; } QImage metatile_image = Metatile::getMetatileImage(tile, layout->tileset_primary, layout->tileset_secondary); int map_y = i / width_; diff --git a/project.cpp b/project.cpp index c8d0c2d6..9cce7bbb 100755 --- a/project.cpp +++ b/project.cpp @@ -12,6 +12,13 @@ #include #include +int Project::num_tiles_primary = 512; +int Project::num_tiles_total = 1024; +int Project::num_metatiles_primary = 512; +int Project::num_metatiles_total = 1024; +int Project::num_pals_primary = 6; +int Project::num_pals_total = 13; + Project::Project() { groupNames = new QStringList; @@ -1131,50 +1138,44 @@ void Project::readTilesetProperties() { QMap defines = readCDefines(text, definePrefixes); auto it = defines.find("NUM_TILES_IN_PRIMARY"); if (it != defines.end()) { - Tileset::num_tiles_primary = it.value(); + Project::num_tiles_primary = it.value(); } else { - Tileset::num_tiles_primary = 512; error = true; } it = defines.find("NUM_TILES_TOTAL"); if (it != defines.end()) { - Tileset::num_tiles_total = it.value(); + Project::num_tiles_total = it.value(); } else { - Tileset::num_tiles_total = 1024; error = true; } it = defines.find("NUM_METATILES_IN_PRIMARY"); if (it != defines.end()) { - Tileset::num_metatiles_primary = it.value(); + Project::num_metatiles_primary = it.value(); } else { - Tileset::num_metatiles_primary = 512; error = true; } it = defines.find("NUM_METATILES_TOTAL"); if (it != defines.end()) { - Tileset::num_metatiles_total = it.value(); + Project::num_metatiles_total = it.value(); } else { - Tileset::num_metatiles_total = 1024; error = true; } it = defines.find("NUM_PALS_IN_PRIMARY"); if (it != defines.end()) { - Tileset::num_pals_primary = it.value(); + Project::num_pals_primary = it.value(); } else { - Tileset::num_pals_primary = 6; error = true; } it = defines.find("NUM_PALS_TOTAL"); if (it != defines.end()) { - Tileset::num_pals_total = it.value(); + Project::num_pals_total = it.value(); } else { - Tileset::num_pals_total = 13; error = true; } @@ -1730,3 +1731,33 @@ QMap Project::readCDefines(QString text, QStringList prefixes) { } return filteredDefines; } + +int Project::getNumTilesPrimary() +{ + return Project::num_tiles_primary; +} + +int Project::getNumTilesTotal() +{ + return Project::num_tiles_total; +} + +int Project::getNumMetatilesPrimary() +{ + return Project::num_metatiles_primary; +} + +int Project::getNumMetatilesTotal() +{ + return Project::num_metatiles_total; +} + +int Project::getNumPalettesPrimary() +{ + return Project::num_pals_primary; +} + +int Project::getNumPalettesTotal() +{ + return Project::num_pals_total; +} diff --git a/project.h b/project.h index ca34147b..cb1a10ee 100755 --- a/project.h +++ b/project.h @@ -115,6 +115,13 @@ public: QStringList readCArray(QString text, QString label); QString readCIncbin(QString text, QString label); QMap readCDefines(QString text, QStringList prefixes); + + static int getNumTilesPrimary(); + static int getNumTilesTotal(); + static int getNumMetatilesPrimary(); + static int getNumMetatilesTotal(); + static int getNumPalettesPrimary(); + static int getNumPalettesTotal(); private: QString getMapLayoutsTableFilepath(); QString getMapLayoutFilepath(QString); @@ -133,6 +140,13 @@ private: void setNewMapBorder(Map *map); void setNewMapEvents(Map *map); void setNewMapConnections(Map *map); + + static int num_tiles_primary; + static int num_tiles_total; + static int num_metatiles_primary; + static int num_metatiles_total; + static int num_pals_primary; + static int num_pals_total; }; #endif // PROJECT_H diff --git a/tileset.cpp b/tileset.cpp index 981e2612..55fa6258 100755 --- a/tileset.cpp +++ b/tileset.cpp @@ -1,4 +1,5 @@ #include "tileset.h" +#include "project.h" #include #include @@ -9,13 +10,6 @@ Tileset::Tileset() } -int Tileset::num_tiles_primary; -int Tileset::num_tiles_total; -int Tileset::num_metatiles_primary; -int Tileset::num_metatiles_total; -int Tileset::num_pals_primary; -int Tileset::num_pals_total; - Metatile::Metatile() { tiles = new QList; @@ -95,7 +89,7 @@ QImage Metatile::getMetatileTile(int tile, Tileset *primaryTileset, Tileset *sec } Tileset* Metatile::getBlockTileset(int metatile_index, Tileset *primaryTileset, Tileset *secondaryTileset) { - if (metatile_index < Tileset::num_metatiles_primary) { + if (metatile_index < Project::getNumMetatilesPrimary()) { return primaryTileset; } else { return secondaryTileset; @@ -103,19 +97,19 @@ Tileset* Metatile::getBlockTileset(int metatile_index, Tileset *primaryTileset, } int Metatile::getBlockIndex(int index) { - if (index < Tileset::num_metatiles_primary) { + if (index < Project::getNumMetatilesPrimary()) { return index; } else { - return index - Tileset::num_metatiles_primary; + return index - Project::getNumMetatilesPrimary(); } } QList> Metatile::getBlockPalettes(Tileset *primaryTileset, Tileset *secondaryTileset) { QList> palettes; - for (int i = 0; i < Tileset::num_pals_primary; i++) { + for (int i = 0; i < Project::getNumPalettesPrimary(); i++) { palettes.append(primaryTileset->palettes->at(i)); } - for (int i = Tileset::num_pals_primary; i < Tileset::num_pals_total; i++) { + for (int i = Project::getNumPalettesPrimary(); i < Project::getNumPalettesTotal(); i++) { palettes.append(secondaryTileset->palettes->at(i)); } return palettes; diff --git a/tileset.h b/tileset.h index f936855a..5cd22daa 100755 --- a/tileset.h +++ b/tileset.h @@ -24,13 +24,6 @@ public: QList *tiles = nullptr; QList *metatiles = nullptr; QList> *palettes = nullptr; - - static int num_tiles_primary; - static int num_tiles_total; - static int num_metatiles_primary; - static int num_metatiles_total; - static int num_pals_primary; - static int num_pals_total; }; class Metatile