#include "game_types.h"

/* Text_RenderString @ 0x08014400 (real 102B) -- byte-pair render levels with clamped average. Mirrors src/matched/Text_RenderString.c. */
/* Picks level 15/240/255 at [27] from the byte pair, stores the (clamped)
   nibble average at [10], scales byte 6 into [25], and masks [27] by [28]. */
void Text_RenderString(char *p)
{
    unsigned b2 = (unsigned char)p[2];
    unsigned b3 = (unsigned char)p[3];
    unsigned avg;
    if (b2 >= b3) {
        if ((b2 >> 1) >= b3) {
            p[27] = 15;
            avg = (b2 + b3) >> 4;
            if (avg > 15)
                avg = 15;
        } else {
            p[27] = (char)255;
            avg = (b2 + b3) >> 4;
        }
    } else {
        if ((b3 >> 1) >= b2) {
            p[27] = (char)240;
            avg = (b2 + b3) >> 4;
            if (avg > 15)
                avg = 15;
        } else {
            p[27] = (char)255;
            avg = (b2 + b3) >> 4;
        }
    }
    p[10] = (char)avg;
    p[25] = (char)(((avg * (unsigned char)p[6]) + 15) >> 4);
    p[27] = (char)((unsigned char)p[27] & (unsigned char)p[28]);
}
