According to houndbone.lua:
if bonetype == 3 then inst.components.lootdropper:AddChanceLoot("houndstooth", .5) end
I'm reading this as "the tooth is supposed to drop from the skull" (which makes sense). Problem is, the bonetype var is not saved (so I guess it's re-generated on reload?), even though the animstate (the bone type as visible to the player) is:
local function onsave(inst, data) data.anim = inst.animname end local function onload(inst, data) if data ~= nil and data.anim ~= nil then inst.animname = data.anim inst.AnimState:PlayAnimation(inst.animname) end end
As a result, the bone type visible to the player stays the same across reloads, but after reload it has no bearing on what will actually drop from the bones.
Generate a bunch of bones, save and reload the game. Start hammering. Observe that tooth drop rate from skull pieces is much lower than 50%, and occasionally a tooth drops from a type other than skull.