diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index 1a9ca1fa6..a91ea3470 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -2043,13 +2043,15 @@ int Items::getValue(df::item *item, df::caravan_state *caravan) int divisor = 1; auto creature = vector_get(world->raws.creatures.all, mat_type); if (creature) { - if (creature->flags.is_set(df::creature_raw_flags::VERMIN_SOIL_COLONY)) - divisor = 10000; - else if (size_t(mat_subtype) < creature->caste.size()) - divisor = creature->caste[mat_subtype]->misc.petvalue_divisor; + size_t caste = std::max(0, mat_subtype); + if (caste < creature->caste.size()) + divisor = creature->caste[caste]->misc.petvalue_divisor; } - if (divisor > 1) + if (divisor > 1) { value /= divisor; + if (!value) + value = 1; + } } // Add in value from units contained in cages