From 63bdf9ddecab77e823cea90afc7ba2030debfb29 Mon Sep 17 00:00:00 2001 From: farisawan-2000 Date: Tue, 15 Dec 2020 22:57:04 -0500 Subject: [PATCH] text typing now works; implemented initial vsprint --- config.h | 3 ++ s2d_parse.c | 67 +++++++++++++++++++++----------------- s2d_print.h | 2 +- x86_testing_ground/a.out | Bin 17272 -> 17384 bytes x86_testing_ground/atoi.c | 15 +++++++-- 5 files changed, 53 insertions(+), 34 deletions(-) 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 2170664a3b48ca5ac3ac0f6985e1be38909e56b6..674ddc8401af9c5d6fab3f4e59fac23a19d9f487 100755 GIT binary patch delta 1349 zcmey-#`vP0ae@YuhRsB+dt9O%3}7J2FB*f;_eIV>`TFK6-|T1EGP3crcYS;+7a4nea}9F{6XTA}7g?Wjsk*TB2o7qITnd^hPS+{61FnG-H=oO6zF?wYL zx>*;3SRf%E5QFi8N9XYuU;q67@6may^O#4k?Q;$Wh8-Z2UReM9|G%5HP?Le7`2b@l zYlbERLpN&@NLTU=k6v3IO$LS+-+%o7?_qhkbP8CDNAnSm=-9(){PHdg40@mW<$gJa z`}Ep!t1&P*hIw{ga}4$D{OTCu*!d^aqgVHjDg#5XkLF*G<~JNK>^Jv`J8?`>FsfHg zQBW=B0=a-un%O#ofq{XCfq~)4`~UyvFfcHveE9$W2m=Fy$%p^{?=UbhqziCr?zAXIwvdqoTYf$kuj{a#ucq zHYR6YHrHlmrb-@mXcA*^VPIeYxo*PbpNj5`J2pEi#dA+yp=-g!A+h<9ZX46&Eld)V z9SlSj3_!rdEGaWxA+sbgCo@?gIioZ$y|lQ|(8$Et*mQHM!EHt+4vEQ5MtY1klM9W+ z8COg$G!mUW&!~#=z+^^a(aCzoAl6Fbe#Vf=mL}zlHj_7+s57!mzG))Q#2_*Gmx&tV zk;#gt?wlM<3=Dz{k_qWny3uVh~_phMEqJPzDADt;vSw;*!SD&~kvxTG~$R*K;W zR2Jr9&&dTT(Ah>keDpw;Kpb!0S&(un=d-JGcq2SEa{}r y3G?=W$$?Jxj0Yx9bh79C08R1@lW#hia~4=Y{5Es4q_a5}r!|Bp#W-2YMh*b{o=6S= delta 1300 zcmaFS&iJE^ae@ZZ4(o|p_qd+2Gl0QU_Q^twdYl1FU>-xjWKTwYt`kt+4W`LWjNb%J z6d;mtdU7YzeUaJf%_n#4lRlh#K!iuI1vEG^!5q`1$=rh0jH;8}1=X4U>TNC% zWMbm}r^CR|?fRmV^{39{TH!kGQXPm}j~DJ4i11hDWb0qb38x3!R_;|9e;-ET-n%O#ofq{XCfq~)8`~UyvFfcIaeE9$W2m=Fy&4>U0?=UbhVrK6wBCzdp##F6;szN`--e!GwWJ)xM1=@Bhkt4jH(z5CI=dePOdWs zv3?r&Gx|*KG%05^napUa&d4xX(^Q`6g7{=FQ#Hl|lM7AVIa!z(7z7z488RjxG!@q@ zaDci7O7Su>FbFXTGTab{3P35($%$s-lCg{+y;2MnP+crg*>sRBV>5`9oDNna$)JFy zWU0D~k015_4j0K@6Y2hGGKZ-MkONiuMt$v&U_(M(+O8^~=80t^XIx1~Zg zvrSesmlte6({p5Upt-oGC=WJYIu&IJY# gM`uj-bT;SYuz>KUPVRIz=bCE;;Yl%0?y`{s06zvNod5s; 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