This seems to have been fixed partially. I noticed that when creep.say is called, it's sometimes close to 0 cost, and sometimes close to 0.2. Some basic test code show this to be inconsistent even within one tick:
let buckets = [0,0,0,0,0];
_.forEach( Game.creeps, function(creep) {
let time = Game.cpu.getUsed();
creep.say("0123456789");
time = Game.cpu.getUsed() - time;
if(time < 0.05) {
buckets[0]++;
} else if(time < 0.10) {
buckets[1]++;
} else if(time < 0.15) {
buckets[2]++;
} else if(time < 0.20) {
buckets[3]++;
} else {
buckets[4]++;
}
});
console.log(JSON.stringify(buckets));
Typical result:
[14,0,0,0,67]
It's never in between. So it's clear that usually CONST is applied, but sometimes not.