Model scaling turns quadratic for one-bone models compiled without $staticprop
Expected behavior: Any given prop_dynamic with a modelscale=2 KV should scale to 2x original size.
Observed behavior: In the specific case where a prop_dynamic's model has only one bone and was compiled without the $staticprop flag, a modelscale=2 KV is effectively scaling to 4x original size.
This is happening because it's an unintended case where we're accidentally hitting into two scaling codepaths that are otherwise mutually exclusive:
Path A (gated by STUDIOHDR_FLAGS_STATIC_PROP):
https://github.com/ValveSoftware/source-sdk-2013/blob/88fa198fba3fb85d46d4c95018254693fdc3af0a/src/game/client/c_baseanimating.cpp#L2931-L2937
Path B (gated by numbones() == 1):
https://github.com/ValveSoftware/source-sdk-2013/blob/88fa198fba3fb85d46d4c95018254693fdc3af0a/src/game/client/c_baseanimating.cpp#L3502
I'd simply forgotten to add $staticprop to my model so this was an easy fix for me... but I suspect there's at least a few cases for animated single-bone props? numbones() == 1 seems like quite the hack in the first place, so unifying the Path A/B conditions under STUDIOHDR_FLAGS_STATIC_PROP seems like an ideal fix.
In the meantime, anyone encountering this who cannot use $staticprop will instead need to resort to adding a 2nd dummy bone or otherwise try taking the square root of their desired scale factor.
Source: ValveSoftware/source-sdk-2013