KAGEXには既読テキストと未読テキストで色を変える機能がありません。少しtjsで書き換えるだけで簡単に実現できます。
書き換えるのはMessageLayer.tjsの2476行目です。drawTextToLayerでテキストを描画していますが、chColorが色の設定です。ルビがある場合は2497行目でまたdrawTextToLayerを使って描画しています。この2箇所を適当に書き換えればいいです。
drawTextToLayer(ll, dx, dy, ch, chColor);
if(currentRuby != "")
{
// ルビがある
var cw = llfont.getTextWidth(ch);
var orgsize = llfont.height;
llfont.height = rubySize;
var rw = llfont.getTextWidth(currentRuby);
var rx,ry;
if(!vert)
{
rx = int(dx + (cw>>1) - (rw>>1));
ry = int(dy - rubySize - rubyOffset);
}
else
{
rx = int(dx + rubySize + rubyOffset);
ry = int(dy + (cw>>1) - (rw>>1));
}
drawTextToLayer(ll, rx, ry, currentRuby, chColor);
llfont.height = orgsize;
currentRuby = '';
}
既読かどうかはkag.getCurrentRead()でわかります。現在のテキストが既読ならtrue、未読ならfalseになります。以下では既読なら色を0xFF0000、未読ならchColorそのままになるように変更しました。
if (kag.getCurrentRead()) {
drawTextToLayer(ll, dx, dy, ch, 0xFF0000);
} else {
drawTextToLayer(ll, dx, dy, ch, chColor);
}
if(currentRuby != "")
{
// ルビがある
var cw = llfont.getTextWidth(ch);
var orgsize = llfont.height;
llfont.height = rubySize;
var rw = llfont.getTextWidth(currentRuby);
var rx,ry;
if(!vert)
{
rx = int(dx + (cw>>1) - (rw>>1));
ry = int(dy - rubySize - rubyOffset);
}
else
{
rx = int(dx + rubySize + rubyOffset);
ry = int(dy + (cw>>1) - (rw>>1));
}
if (kag.getCurrentRead()) {
drawTextToLayer(ll, dx, dy, ch, 0xFF0000);
} else {
drawTextToLayer(ll, dx, dy, ch, chColor);
}
llfont.height = orgsize;
currentRuby = '';
}