Looking through the code, this seems to be somewhat accounted for already. Squirrels are tiny, right? Tiny corpses take 200 movement points to butcher by default, then you apply the butcher factor (-485 for an active chainsaw by my math). Anything below 250 after that gets defaulted to 250, so a chainsaw won’t help you with a squirrel or other tiny/small critters very much.
Relevant code if anyone is interested:
for (int i = corpses.size() - 1; i >= 0; i--) {
mtype *corpse = m.i_at(u.posx, u.posy)[corpses[i]].corpse;
if (query_yn(_("Butcher the %s corpse?"), corpse->name.c_str())) {
int time_to_cut = 0;
switch (corpse->size) { // Time in turns to cut up te corpse
case MS_TINY: time_to_cut = 2; break;
case MS_SMALL: time_to_cut = 5; break;
case MS_MEDIUM: time_to_cut = 10; break;
case MS_LARGE: time_to_cut = 18; break;
case MS_HUGE: time_to_cut = 40; break;
}
time_to_cut *= 100; // Convert to movement points
time_to_cut += factor * 5; // Penalty for poor tool
if (time_to_cut < 250)
time_to_cut = 250;
u.assign_activity(this, ACT_BUTCHER, time_to_cut, corpses[i]);
u.moves = 0;
return;
}
}
On the topic of butcher knives, going off the weight and volume from the latest experimental at least, I think pocket knives might actually be more useful in a sense. A butcher knife will take 10 fewer points than a pocket knife to butcher something (that isn’t tiny), but a pocket knife only weighs 141 and has 0 volume.
Butcher factor by my calculations (including the *5 when it is applied to movement point cost) for some items if anyone is curious:
Chainsaw: -485
Chainsaw(off): -135 (lol? I don’t actually know if an off chainsaw can be used to butcher corpses, but this is what the equation gives for its stats)
Butcher Knife: -120
Pocket Knife/Steak Knife: -110
Combat Knife: -95
Broadsword: -75
Rapier: -55
Machete: +25
Makeshift Machete: +65
Zweihander: +90 (in experimental)
Katana: +100
Makeshift halberd: +120