Page 1 of 1

%d or %s... For custom font?

Posted: April 2nd, 2018, 3:25 am
by NITROYUASH
Hello PSXDEV :>
So... It is possible to create %d, %s, /n, etc, for custom fonts? Like printf or fntprint?

Code: Select all

GsSPRITE Font_Tahoma;
extern unsigned char SYS_FONT_TAHOMA[];

extern int DrawFontTahoma(char *string, int X, int Y, int R, int G, int B, int DIST, int SCALE, ...);

extern int DrawFontTahoma(char *string, int X, int Y, int R, int G, int B, int DIST, int SCALE, ...)
{
	GsIMAGE FontInfo;
	int fntval=0;

	GsGetTimInfo((u_long *)SYS_FONT_TAHOMA+1,&FontInfo);

	// Setting Font proprieties
	Font_Tahoma.tpage=14; //Font tpage
	Font_Tahoma.attribute=((FontInfo.pmode&0x3f)<<24);  // pattern bit mode: 15bitdirect

	Font_Tahoma.cx=FontInfo.cx;
	Font_Tahoma.cy=FontInfo.cy;

	// Text cell size
	Font_Tahoma.w=16;
	Font_Tahoma.h=16;

	Font_Tahoma.x = X;            // COORDINATE X
	Font_Tahoma.y = Y;            // COORDINATE Y
	
	Font_Tahoma.r = R;			// Font RED colors
	Font_Tahoma.g = G;			// Font GREEN colors
	Font_Tahoma.b = B;			// Font BLUE colors
	
	Font_Tahoma.scalex=Font_Tahoma.scaley=SCALE;

	while(*string){

		if(*string>='A' && (*string)<='Z')
		fntval=(*string)-'A';

		else if(*string>='1' && (*string)<='9')
		fntval=26+(*string)-'1';

		else if(*string == '0') fntval=35;
		
		else if(*string>='a' && (*string)<='z')
		fntval=36+(*string)-'a';
		
		else if(*string == '!') fntval=62;
		else if(*string == '?') fntval=63;
		else if(*string == ':') fntval=64;
		else if(*string == ';') fntval=65;
		else if(*string == '.') fntval=66;
		else if(*string == ',') fntval=67;
		else if(*string == '[') fntval=68;
		else if(*string == ']') fntval=69;
		else if(*string == '(') fntval=70;
		else if(*string == ')') fntval=71;
		else if(*string == '{') fntval=72;
		else if(*string == '}') fntval=73;
		else if(*string == '+') fntval=74;
		else if(*string == '-') fntval=75;
		else if(*string == '=') fntval=76;
		else if(*string == '/') fntval=77;
		else if(*string == '|') fntval=79;
		else if(*string == '_') fntval=80;
		else if(*string == '*') fntval=81;
		else if(*string == '@') fntval=82;
		else if(*string == '`') fntval=84; // It's actually [']
		else if(*string == '~') fntval=85;
		else if(*string == '^') fntval=86;
		else if(*string == '<') fntval=87;
		else if(*string == '>') fntval=88;
		else if(*string == '$') fntval=89;
		else if(*string == '#') fntval=90;
		else if(*string == '«') fntval=92;
		else if(*string == '»') fntval=93;
		else if(*string == '&') fntval=94;
		else if(*string == '%') fntval=95;
		else if(*string == '—') fntval=96;
		else if(*string == ' ') fntval=111;
		
		// Restricted Symbols
		
		// ["] SYMBOL
		else if(*string == '\1') fntval=98;
		
		// [No.] SYMBOL
		else if(*string == '\2') fntval=91;

		// [LOGO] SYMBOL
		else if(*string == '\3') fntval=97;
		
		// New Line
		else if(*string == '\n') {
			string++;
			Font_Tahoma.x = X;
			Font_Tahoma.y += 17;
			continue;
		}

		else {
			string++;
			continue;
		}

		Font_Tahoma.u=(fntval%16)*16;
		Font_Tahoma.v=(fntval/16)*16+1;
		
		//Draw text to OT
		GsSortSprite(&Font_Tahoma,&myOT[ActiveBuffer],0);

		string++;
		
		//Screen position
		Font_Tahoma.x+=16+(DIST);
	}
}

Re: %d or %s... For custom font?

Posted: April 3rd, 2018, 4:23 am
by MrQuetch
Hi, NITROYUASH.

I'm very new to the PS1 Homebrew, but having been using the C language for over the past year. I'm certain that even if I'm not able to fully help, I will at least be able to lead you in the right direction. Perhaps we will both be able to learn more from this.

From my experience (I mean in general), you could use images, sprites, or even textures for your font. If you already know how to set up geometry in the PS1, you could draw out your text through primitives, set the depth to draw over everything else, and then use a "switch" statement to check which letter or other character is next in your array of strings (Does "while" work for what you're doing so far)? I noticed you're using that to check the characters.

I know for sure that you can use %d or %s to draw out some text. However, keep in mind that the %d is used for numbers while %s is used for an array of characters. Since the majority of your game will use strings, you could make a function that converts your number to a string, and only have to use %s throughout the game.

If you use "sprintf" in someway, you should be able to print out the contents of a number properly. I still have much to learn myself, but I hope this information helps you. You already have a good chunk of code... I'm sure you will get to where you want to be eventually.

Good luck.

Edit: You may want to look at this: http://www.psxdev.net/forum/viewtopic.php?f=64&t=319

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 12:39 am
by NITROYUASH
Thanks for the answer!
I found the another way to translate our stuff in custom fonts.

We also can use strcat() for this c:

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 4:59 am
by MrQuetch
NITROYUASH wrote: April 4th, 2018, 12:39 am Thanks for the answer!
I found the another way to translate our stuff in custom fonts.

We also can use strcat() for this c:
Thank you - I'm glad you found an answer to your problem.

May I ask how you did that? I'm still learning, so I like looking at other code to learn from.

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 5:23 am
by NITROYUASH

Code: Select all

char	STRING[64];
char	FNTCHR[2];

int	test() {

	// Load our font from PS-EXE :)
	LoadTIM((u_long*)SYS_FONT_TAHOMA);

	while (1) {
		// Font test
		// [*STRING, X, Y, R, G, B, DISTANCE BETWEEN LETTERS, SCALE]
		DrawFontTahoma(testfont3, 50, 190, 128, 128, 128, -4, ONE);
		DrawFontTahoma("1234\n1234", 50, 190, 128, 128, 128, -4, ONE);

		// More font stuff!
		STRING[0] = 0; 
		strcat(STRING, "Timer"); strcat(STRING, "test:");
		FNTCHR[0] = '0'+FSEC[1]; strcat(STRING, FNTCHR);
		FNTCHR[0] = '0'+FSEC[0]; strcat(STRING, FNTCHR);
		DrawFontTahoma(STRING, 50, 190, 128, 128, 128, -4, ONE);
	}
}
I am not good in c, but i hope this example will help someone.

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 5:25 am
by MrQuetch
NITROYUASH wrote: April 4th, 2018, 5:23 am

Code: Select all

char	STRING[64];
char	FNTCHR[2];

int	test() {

	// Load our font from PS-EXE :)
	LoadTIM((u_long*)SYS_FONT_TAHOMA);

	while (1) {
		// Font test
		// [*STRING, X, Y, R, G, B, DISTANCE BETWEEN LETTERS, SCALE]
		DrawFontTahoma(testfont3, 50, 190, 128, 128, 128, -4, ONE);
		DrawFontTahoma("1234\n1234", 50, 190, 128, 128, 128, -4, ONE);

		// More font stuff!
		STRING[0] = 0; 
		strcat(STRING, "Timer"); strcat(STRING, "test:");
		FNTCHR[0] = '0'+FSEC[1]; strcat(STRING, FNTCHR);
		FNTCHR[0] = '0'+FSEC[0]; strcat(STRING, FNTCHR);
		DrawFontTahoma(STRING, 50, 190, 128, 128, 128, -4, ONE);
	}
}
I am not good in c, but i hope this example will help someone.
Actually, this may be useful enough for me (And hopefully others). Is the "SYS_FONT_TAHOMA" already on the PS1 by default? Or is that something you need to add to it? Anyways, thank you for sharing. :)

Edit: I just realized in the first snippet of code you have you show how to get the "SYS_FONT_TAHOMA".

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 5:43 am
by NITROYUASH
SYS_FONT_TAHOMA (Load from System (PS-EXE) Font Tahoma) - it's "my" custom font. I just ported Tahoma font into my code and loading this texture from PS-EXE.

Code: Select all

			opt C+

		section datasection
; ------------------( GFX DATA )-------------------
			CNOP	0,4
        global SYS_FONT_TAHOMA
SYS_FONT_TAHOMA:
        incbin "materials/TAHOMA_FONT_EXTENDED.TIM"
            END
Tahoma Texture from Tim Tool V3.0.A:
► Show Spoiler

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 8:30 am
by MrQuetch
NITROYUASH wrote: April 4th, 2018, 5:43 am SYS_FONT_TAHOMA (Load from System (PS-EXE) Font Tahoma) - it's "my" custom font. I just ported Tahoma font into my code and loading this texture from PS-EXE.

Code: Select all

			opt C+

		section datasection
; ------------------( GFX DATA )-------------------
			CNOP	0,4
        global SYS_FONT_TAHOMA
SYS_FONT_TAHOMA:
        incbin "materials/TAHOMA_FONT_EXTENDED.TIM"
            END
Tahoma Texture from Tim Tool V3.0.A:
► Show Spoiler
Oh. That's cool. Thanks for the snippet of code. Now, it will be easier for me to do this too.

Re: %d or %s... For custom font?

Posted: April 4th, 2018, 4:47 pm
by Xavi92
For my video game "Airport" I am also using custom fonts along with a simple library I built. Check it out here: https://github.com/XaviDCR92/Airport/bl ... rce/Font.c