diff --git a/ContentLoader.cpp b/ContentLoader.cpp index 3f7429a1..d223ac94 100644 --- a/ContentLoader.cpp +++ b/ContentLoader.cpp @@ -743,8 +743,11 @@ ALLEGRO_COLOR lookupMaterialColor(int matType, int matIndex, int dyeType, int dy DFColor: DFHack::MaterialInfo mat; if(mat.decode(matType, matIndex)) { - auto cd = df::global::world->raws.descriptors.colors[mat.material->state_color[0]]; - return al_map_rgb_f(cd->red, cd->green, cd->blue) * dyeColor; + int16_t colorIdx = mat.material->state_color[0]; + if (colorIdx >= 0 && size_t(colorIdx) < df::global::world->raws.descriptors.colors.size()) { + auto cd = df::global::world->raws.descriptors.colors[colorIdx]; + return al_map_rgb_f(cd->red, cd->green, cd->blue) * dyeColor; + } } return defaultColor * dyeColor; } diff --git a/docs/changelog.txt b/docs/changelog.txt index 5ef44c6d..7ecad818 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -40,6 +40,7 @@ Template for new versions: ## New Features ## Fixes +- `stonesense`: fixed a crash when rendering materials with an out-of-range color index ## Misc Improvements