diff --git a/s2d_draw.c b/s2d_draw.c index 3f8a88f0..a84e3b52 100644 --- a/s2d_draw.c +++ b/s2d_draw.c @@ -17,14 +17,24 @@ static Gfx s2d_init_dl[] = { gsDPSetTextureConvert(G_TC_FILT), gsDPSetAlphaCompare(G_AC_THRESHOLD), gsDPSetBlendColor(0, 0, 0, 0x01), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + + // IA8 + gsDPSetCombineLERP(0, 0, 0, ENVIRONMENT, + 0, 0, 0, TEXEL0, + 0, 0, 0, ENVIRONMENT, + 0, 0, 0, TEXEL0), + + gsSPEndDisplayList(), }; +int s2d_red = 255, s2d_green = 255, s2d_blue = 255, s2d_alpha = 255; + void setup_font(int idx) { gDPPipeSync(gDisplayListHead++); gDPSetTextureFilter(gDisplayListHead++, G_TF_POINT); gSPDisplayList(gDisplayListHead++, s2d_init_dl); + gDPSetEnvColor(gDisplayListHead++, s2d_red, s2d_green, s2d_blue, s2d_alpha); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SPRITE, G_RM_XLU_SPRITE2); gSPObjRenderMode(gDisplayListHead++, G_OBJRM_XLU | G_OBJRM_BILERP); diff --git a/s2d_draw.h b/s2d_draw.h index a988859b..47640bd9 100644 --- a/s2d_draw.h +++ b/s2d_draw.h @@ -6,6 +6,8 @@ extern int myScale; extern int myDegrees; extern uObjMtx final_mtx, rot_mtx; +extern int s2d_red, s2d_green, s2d_blue, s2d_alpha; + extern void setup_font(int idx); extern void mtx_pipeline(uObjMtx *m, int x, int y); diff --git a/s2d_parse.c b/s2d_parse.c index f5cb2ba7..3ec0ebf2 100644 --- a/s2d_parse.c +++ b/s2d_parse.c @@ -29,6 +29,7 @@ int s2d_atoi(char *s, char **s2) { void s2d_print(int x, int y, const char *str, uObjMtx *buf) { char *p = str; int tx = 0, ty = 0; + // int r = 0, g = 0, b = 0, a = 0; if (*p == '\0') return; do { char r = *p; @@ -52,7 +53,21 @@ void s2d_print(int x, int y, const char *str, uObjMtx *buf) { CH_GET_NEXT(p); ty = s2d_atoi(p, &p); break; - + case CH_COLOR: + CH_GET_NEXT(p); + s2d_red = s2d_atoi(p, &p); + CH_GET_NEXT(p); + CH_GET_NEXT(p); + s2d_green = s2d_atoi(p, &p); + CH_GET_NEXT(p); + CH_GET_NEXT(p); + s2d_blue = s2d_atoi(p, &p); + CH_GET_NEXT(p); + CH_GET_NEXT(p); + s2d_alpha = s2d_atoi(p, &p); + break; + + break; default: if (myDegrees == 0) draw_s2d_glyph(r, (x += (8 * myScale)) + tx, y + ty, (buf++)); diff --git a/s2d_print.h b/s2d_print.h index d26e771c..e2d97fcf 100644 --- a/s2d_print.h +++ b/s2d_print.h @@ -4,10 +4,12 @@ #define SCALE "\x80" // SCALE (some scale) #define ROTATE "\x81" // ROTATE (degrees) // TODO: maybe add axis? #define TRANSLATE "\x82" // TRANSLATE (x) (y) +#define COLOR "\x83" // COLOR (r) (g) (b) (a) #define CH_SCALE '\x80' #define CH_ROT '\x81' #define CH_TRANSLATE '\x82' +#define CH_COLOR '\x83' #define CH_GET_NEXT(x) (*(++x))