diff --git a/dfhack/include/modules/Materials.h b/dfhack/include/modules/Materials.h index 6fbbd2ab8..ebf2c6206 100644 --- a/dfhack/include/modules/Materials.h +++ b/dfhack/include/modules/Materials.h @@ -44,6 +44,7 @@ namespace DFHack char singular[128]; char plural[128]; char adjective[128]; + std::vector > ColorModifier; }; struct t_matglossOther diff --git a/dfhack/modules/Materials.cpp b/dfhack/modules/Materials.cpp index 4303c3156..b60628525 100644 --- a/dfhack/modules/Materials.cpp +++ b/dfhack/modules/Materials.cpp @@ -293,8 +293,11 @@ bool Materials::ReadCreatureTypesEx (void) uint32_t castes_vector_offset = mem->getOffset ("creature_type_caste_vector"); uint32_t extract_vector_offset = mem->getOffset ("creature_type_extract_vector"); uint32_t sizeof_string = mem->getHexValue ("sizeof_string"); + uint32_t caste_colormod_offset = mem->getOffset ("caste_color_modifiers"); uint32_t size = p_races.size(); uint32_t sizecas = 0; + uint32_t sizecolormod; + uint32_t sizecolorlist; uint32_t tile_offset = mem->getOffset ("creature_tile"); uint32_t tile_color_offset = mem->getOffset ("creature_tile_color"); raceEx.clear(); @@ -313,6 +316,18 @@ bool Materials::ReadCreatureTypesEx (void) p->readSTLString (caste_start + sizeof_string, caste.singular, sizeof(caste.singular)); p->readSTLString (caste_start + 2 * sizeof_string, caste.plural, sizeof(caste.plural)); p->readSTLString (caste_start + 3 * sizeof_string, caste.adjective, sizeof(caste.adjective)); + DfVector p_colormod(p, caste_start + caste_colormod_offset); + sizecolormod = p_colormod.size(); + caste.ColorModifier.resize(sizecolormod); + + for(uint32_t k = 0; k < sizecolormod;k++) + { + DfVector p_colorlist(p, p_colormod[k]); + sizecolorlist = p_colorlist.size(); + caste.ColorModifier[k].resize(sizecolorlist); + for(uint32_t l = 0; l < sizecolorlist; l++) + caste.ColorModifier[k][l] = p_colorlist[l]; + } mat.castes.push_back(caste); } mat.tile_character = p->readByte( p_races[i] + tile_offset ); @@ -327,6 +342,8 @@ bool Materials::ReadCreatureTypesEx (void) p->readSTLString( p_extract[j], extract.rawname, sizeof(extract.rawname)); mat.extract.push_back(extract); } + + raceEx.push_back(mat); } return true; diff --git a/examples/materialtest.cpp b/examples/materialtest.cpp index 77be49ba7..583f5a6e2 100644 --- a/examples/materialtest.cpp +++ b/examples/materialtest.cpp @@ -81,6 +81,13 @@ int main (int numargs, const char ** args) << castes[j].plural << ":" << castes[j].adjective << "] "; cout << endl; + for(uint32_t k = 0; k < castes[j].ColorModifier.size(); k++) + { + cout << " colormod[" << k << "] "; + for(uint32_t l = 0; l < castes[j].ColorModifier[k].size(); l++) + cout << castes[j].ColorModifier[k][l] << " "; + cout << endl; + } } cout << endl; } diff --git a/output/Memory.xml b/output/Memory.xml index c26b3c221..7ac380e80 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -1422,6 +1422,8 @@ map_data_1b60_offset 0x1B9c 0x288 + 0x298 + 0x29C 0x464