A while back, I wrote some code that scanned over the default font and searched for straight lines and rows and diagonals of pixels, which it then spat out as vector data.
It let me rewrite a GPRINT function to draw characters without all the blockiness of GPRINT at any x-y scale without any added delay from other methods, because all it was doing was connecting points with lines (or GBOXes for thickness).
I see that you're not really doing much with upscaled text, but GPSETing each pixel is definitely slow in some cases. I think you might get faster speeds if you format your font with such an algorithm.
Dev/Bugreports for SKKBAUI
Root / Talk About Programs / [.]
CyberYoshi64Created:
I finally made some sort of KNJLIB system...How does it work?
@ASC0'label for the ASCII character data DATA 10,10,0'char data width, data height and char width (char data w/h are actually not used) DATA &H40F,&H0F,&H4F,&H40,&H8F,&HAF,&HEF,&HA55,&H3FF,&H2CD'character dataThe code above is an example of the data structure for each ASCII that is supported. Invalid ones default to a different one (in my system: &H
E01B
The 3DS's font displays this ASCII as a different "replacement" character than the standardized inverted question mark box. SmileBASIC's font doesn't support it.Tags
%E - Insert a line break %CRRGGBB - Change color R,G,B - RGB in hex %B - Enable / Disable bold %I - Enable / Disable italic (WIP) %U - Enable / Disable underlining %S - Enable / DisableThe DEF (not up-to-date)
DEF GPRINT0 X,Y,S,C,W,EX,EY VAR OC=C,OX=X,OY=Y,I,_B,B,IT,U,ST,S$,TMP,NUL,D,HEI=13,SP IF TYPEOF(S)!=2 THEN S$=STR$(S) ELSE S$=S WHILE I<LEN(S$) IF S$[I]=="%" THEN IF S$[I+1]=="E"THEN OX=X:INC OY,HEI:INC I,2CONTINUE IF S$[I+1]=="R"THEN C=OC:B=0IT=0U=0ST=0D=0HEI=13INC I,2CONTINUE IF S$[I+1]=="C"THEN C=VAL("&HFF"+MID$(S$,I+2,6))INC I,8CONTINUE IF S$[I+1]=="B"THEN B=!B:INC I,2CONTINUE 'IF S$[I+1]=="I"THEN IT=!IT:INC I,2CONTINUE IF S$[I+1]=="U"THEN U=!U:INC I,2CONTINUE IF S$[I+1]=="S"THEN ST=!ST:INC I,2CONTINUE ENDIF _B=0 WHILE _B<=B IF CHKLABEL("@ASC"+STR$(ASC(S$))) THEN RESTORE "@ASC"+STR$(ASC(S$)) ELSE RESTORE "@ASC"+STR$(&HE01B) READ NUL,NUL,SP _Y=0 WHILE _Y<11 READ TMP _X=0 WHILE _X<11 IF TMP AND POW(2,10-_X)THEN GPSET OX+(10-_X),OY+_Y,C INC _X WEND INC _Y WEND INC _B WEND IF U THEN GLINE OX,OY+11,OX+SP+D+B,OY+11,C IF ST THEN GLINE OX,OY+5,OX+SP+D+B,OY+5,C INC OX,SP+D+B IF W THEN IF OX>EX THEN INC OY,HEI:OX=X IF OY>IFF(W,511,EY) THEN BREAK INC I WEND ENDIt uses WHILE loops so it's a tiny bit faster when display a bigger string than using FOR. OC holds the color you put in the argument. This can be used when %R is reached in a string to reset the color. OX and OY are used instead of the originals. NUL is simply taking the data that isn't needed (character data width/height in this case) TMP holds the _Yth row of the character data itself that it GPSETs one at a time. (Improvements must be made) SP contains the width of the character itself. B, IT, U and
I just did a GTEXT thing similar (almost exactly same) to this. You have (custom) character widths, going to the next line when necessary (does not drag the word behind it so be careful,) bold, strikethrough, and underline. I am trying to figure out a way to do italics.I finally made some sort of KNJLIB system...How does it work?@ASC0'label for the ASCII character data DATA 10,10,0'char data width, data height and char width (char data w/h are actually not used) DATA &H40F,&H0F,&H4F,&H40,&H8F,&HAF,&HEF,&HA55,&H3FF,&H2CD'character dataThe code above is an example of the data structure for each ASCII that is supported. Invalid ones default to a different one (in my system: &H) GPRINT0 X,Y,S,C,W,EX,EY X - horizontal offset Y - vertical offset S - String/Numerical value C - Display color (Can be changed using a tag in string) W - Text wrap flag (0=off 1=on) EX, EY - Position where text wraps or ends prematurelyE01B
The 3DS's font displays this ASCII as a different "replacement" character than the standardized inverted question mark box. SmileBASIC's font doesn't support it.Tags
%E - Insert a line break %CRRGGBB - Change color R,G,B - RGB in hex %B - Enable / Disable bold %I - Enable / Disable italic (WIP) %U - Enable / Disable underlining %S - Enable / Disablestriking%Wnn - Change spacing (nn=0: default) %Hnn - Change line spacing (nn=13: default) %R - Reset text formatting (normal text using color C ↑)The TYPEOF and IFF functions are in XCMD.LIB, so I don't need to explain these. Speaking of, the data and the DEF (obviously) sit within XCMD.LIB so the font can be used by user apps or other built-in programs. EDIT: Could not give at this time Umm, no. Checked code and added phrases for "Magistr"! lol EDIT 2: I missed something. Sorry!The DEF (not up-to-date)
DEF GPRINT0 X,Y,S,C,W,EX,EY VAR OC=C,OX=X,OY=Y,I,_B,B,IT,U,ST,S$,TMP,NUL,D,HEI=13,SP IF TYPEOF(S)!=2 THEN S$=STR$(S) ELSE S$=S WHILE I<LEN(S$) IF S$[I]=="%" THEN IF S$[I+1]=="E"THEN OX=X:INC OY,HEI:INC I,2CONTINUE IF S$[I+1]=="R"THEN C=OC:B=0IT=0U=0ST=0D=0HEI=13INC I,2CONTINUE IF S$[I+1]=="C"THEN C=VAL("&HFF"+MID$(S$,I+2,6))INC I,8CONTINUE IF S$[I+1]=="B"THEN B=!B:INC I,2CONTINUE 'IF S$[I+1]=="I"THEN IT=!IT:INC I,2CONTINUE IF S$[I+1]=="U"THEN U=!U:INC I,2CONTINUE IF S$[I+1]=="S"THEN ST=!ST:INC I,2CONTINUE ENDIF _B=0 WHILE _B<=B IF CHKLABEL("@ASC"+STR$(ASC(S$))) THEN RESTORE "@ASC"+STR$(ASC(S$)) ELSE RESTORE "@ASC"+STR$(&HE01B) READ NUL,NUL,SP _Y=0 WHILE _Y<11 READ TMP _X=0 WHILE _X<11 IF _X AND POW(2,10-_X)THEN GPSET OX+(10-_X),OY+_Y,C INC _X WEND INC _Y WEND INC _B WEND IF U THEN GLINE OX,OY+11,OX+SP+D+B,OY+11,C IF ST THEN GLINE OX,OY+5,OX+SP+D+B,OY+5,C INC OX,SP+D+B IF W THEN IF OX>EX THEN INC OY,HEI:OX=X IF OY>IFF(W,511,EY) THEN BREAK INC I WEND END
Can I join development? (I have some ideas)
Can I join development? (I have some ideas)Sure thing!
Ok! Thanks!
But, I dont know some programming, but I have ideas for the OS.
So, first one is adding more games, like Factory RPG, MAL-Function, add shortcuts (because no one knows how to enter the games, calculator, and that things...) Add Easter Eggs, add pages for the browser (to create shortcuts using the decryptor), and, last... MORE VIRUSES!!! (No, just kidding), I was thinking about adding a function to the explorer to open others folders programs. Thats I have at all. When I have more ideas, I will post them.
You can get the Decryptor/Encryptor from 12Me21.
Adding more gamesYes, I planned to add games. (I removed all the games in this version but I am putting them back in along with new ones.)
Add shortcuts (because no one knows how to enter the games, calculator, and that things...)Yeah. I knew that and thought about that as well.
Add pages for the browser (to create shortcuts using the decryptor)I don't quite get it. What am I supposed to do with the en-/decryptor?
Adding a function to the explorer to open others folders programs.Uh... I do have a basic file system up and running now but I haven't linked the explorer with the FS. (I need to cram the explorer into a window to even have access to the FS because the explorer was an external program and the main "kernel" program is holding it.) Speaking of, I decided to change the slot order. Slot 0 is holding the -----RUN----- program. Slot 1 holds any external program that got accessed last, f.e. a game that doesn't fit in a DEF or the NitroBoot editor. (Yes, I finally did it) I also added the 3DS-ish manual I talked about on the Jump Kun dev page but it's (of course) unfinished.
The encryptor/decryptor is (I think to compress files)
Also, do you have the new ver. Key? I want to test it
Oh, I have forgot that. Thanks, Random!
Yeah, srry
I don't quite get it. What am I supposed to use en-/decryptor?You can also make an pack/unpack engine.
I did that already. Very early versions of V0.3.3 (unavailable) are coming in a packed form where you run the setup (unpacker).I don't quite get it. What am I supposed to use en-/decryptor?You can also make an pack/unpack engine.
And the key of the new ver??? EDIT: I think I need to be patient...I did that already. Very early versions of V0.3.3 (unavailable) are coming in a packed form where you run the setup (unpacker).I don't quite get it. What am I supposed to use en-/decryptor?You can also make an pack/unpack engine.