diff --git a/config.h b/config.h index 1970a816..7b119b91 100644 --- a/config.h +++ b/config.h @@ -21,4 +21,7 @@ extern Gfx *gdl_head; // The frame timer that is used to time s2d_type_print #define s2d_timer gGlobalTimer +// The equivalent vsprintf in your game (defaults to libultra _Printf) +#define vsprintf _Printf + #endif \ No newline at end of file diff --git a/s2d_parse.c b/s2d_parse.c index b01d79e6..41b2a18f 100644 --- a/s2d_parse.c +++ b/s2d_parse.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "config.h" @@ -9,19 +10,22 @@ #include "s2d_ustdlib.h" int saved_degrees = 0; - +int s2d_colorFrames = 0; extern u32 gGlobalTimer; -void s2d_print(int x, int y, const char *str, uObjMtx *buf) { +void s2d_snprint(int x, int y, char *str, uObjMtx *buf, int len) { char *p = str; int tx = 0, ty = 0; + int tmp_len = 0; // int r = 0, g = 0, b = 0, a = 0; if (*p == '\0') return; do { char r = *p; int s, rd; + + switch (r) { case CH_SCALE: CH_SKIP(p); @@ -42,6 +46,7 @@ void s2d_print(int x, int y, const char *str, uObjMtx *buf) { y = s2d_atoi(p, &p); break; case CH_COLOR: + s2d_colorFrames++; CH_SKIP(p); s2d_red = s2d_atoi(p, &p); CH_SKIP(p); CH_SKIP(p); @@ -55,15 +60,23 @@ void s2d_print(int x, int y, const char *str, uObjMtx *buf) { s2d_alpha = s2d_atoi(p, &p); break; default: - if (myDegrees == 0) - draw_s2d_glyph(r, (x += (8 * myScale)) + tx, y + ty, (buf++)); - else - draw_s2d_glyph(r, (x += ((8 * myScale))) + tx, y + ty, (buf++)); + // if (s2d_colorFrames > 2) { + // s2d_colorFrames = 0; + // s2d_red = s2d_green = s2d_blue = 255; + // s2d_alpha = 255; + // } + if (r != '\0') { + if (myDegrees == 0) + draw_s2d_glyph(r, (x += (8 * myScale)) + tx, y + ty, (buf++)); + else + draw_s2d_glyph(r, (x += ((8 * myScale))) + tx, y + ty, (buf++)); + } } // myDegrees += saved_degrees; if (*p == '\0') break; p++; - } while (*p != '\0'); + tmp_len++; + } while (tmp_len < len); myScale = 1; myDegrees = 0; // saved_degrees = 0; @@ -71,31 +84,25 @@ void s2d_print(int x, int y, const char *str, uObjMtx *buf) { ty = 0; } -int ilen = 0; -void s2d_type_print(int x, int y, char *str, uObjMtx *buf, int *pos) { - char *temp_str = str; - char tmp = temp_str[*pos]; - int len = s2d_strlen(str); - switch(tmp) { - case CH_SCALE: - ilen = s2d_ilen(str + *pos + 2); - if (ilen <= 1) { - (*pos) += ilen; - } else { - (*pos) += ilen + 1; - } - break; - case CH_ROT: - (*pos) += s2d_ilen(str + *pos); - - break; - } - temp_str[*pos] = '\0'; - s2d_print(x, y, temp_str, buf); - temp_str[*pos] = tmp; +void s2d_print(int x, int y, const char *str, uObjMtx *buf) { + s2d_snprint(x, y, str, buf, s2d_strlen(str)); +} +void s2d_type_print(int x, int y, char *str, uObjMtx *buf, int *pos) { + int len = s2d_strlen(str); + + s2d_snprint(x, y, str, buf, *pos); if (s2d_timer % 2 == 0) { - if (*pos < len) (*pos)++; + if (*pos < len) { + (*pos)++; + } } } +void s2d_vsprint(int x, int y, uObjMtx *buf, char *str, ...) { + va_list args; + va_start(args, str); + sprintf() +} + + diff --git a/s2d_print.h b/s2d_print.h index 6c527416..c4c47d51 100644 --- a/s2d_print.h +++ b/s2d_print.h @@ -15,6 +15,6 @@ #define CH_NEWLINE '\n' #define CH_GET_NEXT(x) (*(++x)) -#define CH_SKIP(x) ((x++)) +#define CH_SKIP(x) {x++;} extern void s2d_print(int x, int y, const char *str, uObjMtx *buf); diff --git a/x86_testing_ground/a.out b/x86_testing_ground/a.out index 2170664a..674ddc84 100755 Binary files a/x86_testing_ground/a.out and b/x86_testing_ground/a.out differ diff --git a/x86_testing_ground/atoi.c b/x86_testing_ground/atoi.c index c853b04f..3c12a2a0 100644 --- a/x86_testing_ground/atoi.c +++ b/x86_testing_ground/atoi.c @@ -183,13 +183,22 @@ char myS[] = "small test" ROTATE "26" "italic chungus"; -int pos; +char my2[] = "small test" + ROTATE "2" + "big test" + ROTATE "0000046" + "big italic chungus" + ROTATE "124335"; + +int pos = 0; int main(void) { // printf("%d\n", s2d_atoi(s, &s)); // printf("%s\n", s); // s2d_print(0,0, t); - while (pos != strlen(myS)) { - s2d_type_print(0, 0, myS, &pos); + while (pos != strlen(my2)) { + // s2d_type_print(0, 0, myS, &pos); + printf("%d %s\n",s2d_ilen(my2 + pos), my2 + pos); + pos++; } // printf("%d\n", s2d_ilen(sss + 1)); } \ No newline at end of file