add new fonts very easily; comic sans font added

This commit is contained in:
farisawan-2000
2021-04-20 00:50:13 -04:00
parent 24e3e0060c
commit 6c8acc2d39
8 changed files with 2080 additions and 115 deletions

View File

@@ -3,19 +3,48 @@
#ifndef S2D_CONFIG_H
#define S2D_CONFIG_H
#define const
/**
* SET YOUR FONT NAME HERE
*/
#define FONTNAME comicsans
/***********
* Helpful defines to change
***********/
#define BASE_SCALE 1.0f
/******************************
*
* ONLY CHANGE THE BELOW CONTENTS IF YOU'RE DEVELOPING
* FOR A GAME THAT ISN'T SM64
*
*****************************/
// magic macros and font header inclusion
#define GLUE(a, b) a##b
#define GLUE2(a, b) GLUE(a, b)
#define STR(x) #x
#define STR2(x) STR(x)
#define __headername(hd) fonts/hd.h
#define _FONT_HEADER STR2(__headername(FONTNAME))
#include _FONT_HEADER
// include your font header here
#include "fonts/impact.h"
// get your font symbols defined here
#define s2d_font impact_obj
#define s2d_tex impact_tex
#define s2d_kerning_table impact_kerning_table
#define s2d_font GLUE2(FONTNAME, _obj)
#define s2d_dropshadow GLUE2(FONTNAME, _obj_dropshadow)
#define s2d_tex GLUE2(FONTNAME, _tex)
#define s2d_kerning_table GLUE2(FONTNAME, _kerning_table)
extern char s2d_kerning_table[];
// Debug: bypass custom matrix setup
#define s2d_mat impact_mtx
#define s2d_mat GLUE2(FONTNAME, _mtx)
// Homebrew users: use this to rename your gdl head
#define gdl_head gDisplayListHead

1796
fonts/comicsans.c Normal file

File diff suppressed because one or more lines are too long

136
fonts/comicsans.h Normal file
View File

@@ -0,0 +1,136 @@
#include <PR/ultratypes.h>
#include <PR/gs2dex.h>
extern uObjTxtrBlock_t comicsans_tex[];
extern uObjMtx comicsans_mtx;
extern uObjSprite comicsans_obj;
extern void call_comicsans_sprite_dl(int idx, int x, int y, uObjMtx *buffer, int buf_idx);
extern u8 comicsans_tex_0[];
extern u8 comicsans_tex_1[];
extern u8 comicsans_tex_2[];
extern u8 comicsans_tex_3[];
extern u8 comicsans_tex_4[];
extern u8 comicsans_tex_5[];
extern u8 comicsans_tex_6[];
extern u8 comicsans_tex_7[];
extern u8 comicsans_tex_8[];
extern u8 comicsans_tex_9[];
extern u8 comicsans_tex_10[];
extern u8 comicsans_tex_11[];
extern u8 comicsans_tex_12[];
extern u8 comicsans_tex_13[];
extern u8 comicsans_tex_14[];
extern u8 comicsans_tex_15[];
extern u8 comicsans_tex_16[];
extern u8 comicsans_tex_17[];
extern u8 comicsans_tex_18[];
extern u8 comicsans_tex_19[];
extern u8 comicsans_tex_20[];
extern u8 comicsans_tex_21[];
extern u8 comicsans_tex_22[];
extern u8 comicsans_tex_23[];
extern u8 comicsans_tex_24[];
extern u8 comicsans_tex_25[];
extern u8 comicsans_tex_26[];
extern u8 comicsans_tex_27[];
extern u8 comicsans_tex_28[];
extern u8 comicsans_tex_29[];
extern u8 comicsans_tex_30[];
extern u8 comicsans_tex_31[];
extern u8 comicsans_tex_32[];
extern u8 comicsans_tex_33[];
extern u8 comicsans_tex_34[];
extern u8 comicsans_tex_35[];
extern u8 comicsans_tex_36[];
extern u8 comicsans_tex_37[];
extern u8 comicsans_tex_38[];
extern u8 comicsans_tex_39[];
extern u8 comicsans_tex_40[];
extern u8 comicsans_tex_41[];
extern u8 comicsans_tex_42[];
extern u8 comicsans_tex_43[];
extern u8 comicsans_tex_44[];
extern u8 comicsans_tex_45[];
extern u8 comicsans_tex_46[];
extern u8 comicsans_tex_47[];
extern u8 comicsans_tex_48[];
extern u8 comicsans_tex_49[];
extern u8 comicsans_tex_50[];
extern u8 comicsans_tex_51[];
extern u8 comicsans_tex_52[];
extern u8 comicsans_tex_53[];
extern u8 comicsans_tex_54[];
extern u8 comicsans_tex_55[];
extern u8 comicsans_tex_56[];
extern u8 comicsans_tex_57[];
extern u8 comicsans_tex_58[];
extern u8 comicsans_tex_59[];
extern u8 comicsans_tex_60[];
extern u8 comicsans_tex_61[];
extern u8 comicsans_tex_62[];
extern u8 comicsans_tex_63[];
extern u8 comicsans_tex_64[];
extern u8 comicsans_tex_65[];
extern u8 comicsans_tex_66[];
extern u8 comicsans_tex_67[];
extern u8 comicsans_tex_68[];
extern u8 comicsans_tex_69[];
extern u8 comicsans_tex_70[];
extern u8 comicsans_tex_71[];
extern u8 comicsans_tex_72[];
extern u8 comicsans_tex_73[];
extern u8 comicsans_tex_74[];
extern u8 comicsans_tex_75[];
extern u8 comicsans_tex_76[];
extern u8 comicsans_tex_77[];
extern u8 comicsans_tex_78[];
extern u8 comicsans_tex_79[];
extern u8 comicsans_tex_80[];
extern u8 comicsans_tex_81[];
extern u8 comicsans_tex_82[];
extern u8 comicsans_tex_83[];
extern u8 comicsans_tex_84[];
extern u8 comicsans_tex_85[];
extern u8 comicsans_tex_86[];
extern u8 comicsans_tex_87[];
extern u8 comicsans_tex_88[];
extern u8 comicsans_tex_89[];
extern u8 comicsans_tex_90[];
extern u8 comicsans_tex_91[];
extern u8 comicsans_tex_92[];
extern u8 comicsans_tex_93[];
extern u8 comicsans_tex_94[];
extern u8 comicsans_tex_95[];
extern u8 comicsans_tex_96[];
extern u8 comicsans_tex_97[];
extern u8 comicsans_tex_98[];
extern u8 comicsans_tex_99[];
extern u8 comicsans_tex_100[];
extern u8 comicsans_tex_101[];
extern u8 comicsans_tex_102[];
extern u8 comicsans_tex_103[];
extern u8 comicsans_tex_104[];
extern u8 comicsans_tex_105[];
extern u8 comicsans_tex_106[];
extern u8 comicsans_tex_107[];
extern u8 comicsans_tex_108[];
extern u8 comicsans_tex_109[];
extern u8 comicsans_tex_110[];
extern u8 comicsans_tex_111[];
extern u8 comicsans_tex_112[];
extern u8 comicsans_tex_113[];
extern u8 comicsans_tex_114[];
extern u8 comicsans_tex_115[];
extern u8 comicsans_tex_116[];
extern u8 comicsans_tex_117[];
extern u8 comicsans_tex_118[];
extern u8 comicsans_tex_119[];
extern u8 comicsans_tex_120[];
extern u8 comicsans_tex_121[];
extern u8 comicsans_tex_122[];
extern u8 comicsans_tex_123[];
extern u8 comicsans_tex_124[];
extern u8 comicsans_tex_125[];
extern u8 comicsans_tex_126[];
extern u8 comicsans_tex_127[];
extern char comicsans_obj_dropshadow[];

View File

@@ -1694,4 +1694,107 @@ uObjSprite impact_obj_dropshadow = {
0, /* imageFlags */
};
char impact_kerning_table[] = {
// unprintable characters
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
/* */ 8,
/* ! */ 3,
/* " */ 6,
/* # */ 9,
/* $ */ 7,
/* % */ 9,
/* & */ 8,
/* ' */ 3,
/* ( */ 4,
/* ) */ 4,
/* * */ 4,
/* + */ 6,
/* , */ 3,
/* - */ 5,
/* . */ 3,
/* / */ 8,
/* 0 */ 6,
/* 1 */ 5,
/* 2 */ 6,
/* 3 */ 6,
/* 4 */ 6,
/* 5 */ 6,
/* 6 */ 7,
/* 7 */ 5,
/* 8 */ 6,
/* 9 */ 7,
/* : */ 3,
/* ; */ 3,
/* < */ 5,
/* = */ 7,
/* > */ 5,
/* ? */ 6,
/* @ */ 10,
/* A */ 7,
/* B */ 7,
/* C */ 7,
/* D */ 7,
/* E */ 5,
/* F */ 5,
/* G */ 7,
/* H */ 7,
/* I */ 3,
/* J */ 3,
/* K */ 6,
/* L */ 5,
/* M */ 9,
/* N */ 7,
/* O */ 7,
/* P */ 6,
/* Q */ 7,
/* R */ 6,
/* S */ 6,
/* T */ 6,
/* U */ 7,
/* V */ 6,
/* W */ 10,
/* X */ 7,
/* Y */ 7,
/* Z */ 5,
/* [ */ 4,
/* \ */ 4,
/* ] */ 4,
/* ^ */ 7,
/* _ */ 8,
/* ` */ 3,
/* a */ 6,
/* b */ 6,
/* c */ 6,
/* d */ 6,
/* e */ 6,
/* f */ 4,
/* g */ 6,
/* h */ 6,
/* i */ 3,
/* j */ 4,
/* k */ 6,
/* l */ 3,
/* m */ 9,
/* n */ 6,
/* o */ 6,
/* p */ 6,
/* q */ 6,
/* r */ 4,
/* s */ 6,
/* t */ 4,
/* u */ 6,
/* v */ 6,
/* w */ 8,
/* x */ 6,
/* y */ 5,
/* z */ 4,
/* { */ 3,
/* | */ 3,
/* } */ 3,
/* ~ */ 6,
};
// 16 16

View File

@@ -2,7 +2,7 @@
#include "config.h"
#include "mtx.h"
int myScale = 1;
float myScale = 1.0f;
int myDegrees = 0;
uObjMtx final_mtx, rot_mtx;
int s2d_red = 255, s2d_green = 255, s2d_blue = 255, s2d_alpha = 255;
@@ -68,7 +68,7 @@ void mtx_pipeline2(uObjMtx *m, int x, int y) {
// init
Mat4 tmp, rot, scal, translate;
guMtxIdentF(tmp);
guScaleF(scal, myScale, myScale, 0);
guScaleF(scal, BASE_SCALE * (myScale), BASE_SCALE * (myScale), 0);
guRotateF(rot, (f32) myDegrees, 0, 0, 1.0f);
guTranslateF(translate, x, y, 0);
@@ -100,7 +100,7 @@ void draw_s2d_glyph(char c, int x, int y, uObjMtx *mt) {
CLAMP_0(s2d_green - 100),
CLAMP_0(s2d_blue - 100),
s2d_alpha);
gSPObjSprite(gdl_head++, &impact_obj_dropshadow);
gSPObjSprite(gdl_head++, &s2d_dropshadow);
gDPPipeSync(gdl_head++);
gDPSetEnvColor(gdl_head++, s2d_red, s2d_green, s2d_blue, s2d_alpha);
}

View File

@@ -2,7 +2,7 @@
#define S2D_DRAW_H
#include <ultra64.h>
extern int myScale;
extern float myScale;
extern int myDegrees;
extern int drop_shadow;
extern uObjMtx final_mtx, rot_mtx;

View File

@@ -1,101 +0,0 @@
char impact_kerning_table[] = {
// unprintable characters
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
/* */ 8,
/* ! */ 3,
/* " */ 6,
/* # */ 9,
/* $ */ 7,
/* % */ 9,
/* & */ 8,
/* ' */ 3,
/* ( */ 4,
/* ) */ 4,
/* * */ 4,
/* + */ 6,
/* , */ 3,
/* - */ 5,
/* . */ 3,
/* / */ 8,
/* 0 */ 6,
/* 1 */ 5,
/* 2 */ 6,
/* 3 */ 6,
/* 4 */ 6,
/* 5 */ 6,
/* 6 */ 7,
/* 7 */ 5,
/* 8 */ 6,
/* 9 */ 7,
/* : */ 3,
/* ; */ 3,
/* < */ 5,
/* = */ 7,
/* > */ 5,
/* ? */ 6,
/* @ */ 10,
/* A */ 7,
/* B */ 7,
/* C */ 7,
/* D */ 7,
/* E */ 5,
/* F */ 5,
/* G */ 7,
/* H */ 7,
/* I */ 3,
/* J */ 3,
/* K */ 6,
/* L */ 5,
/* M */ 9,
/* N */ 7,
/* O */ 7,
/* P */ 6,
/* Q */ 7,
/* R */ 6,
/* S */ 6,
/* T */ 6,
/* U */ 7,
/* V */ 6,
/* W */ 10,
/* X */ 7,
/* Y */ 7,
/* Z */ 5,
/* [ */ 4,
/* \ */ 4,
/* ] */ 4,
/* ^ */ 7,
/* _ */ 8,
/* ` */ 3,
/* a */ 6,
/* b */ 6,
/* c */ 6,
/* d */ 6,
/* e */ 6,
/* f */ 4,
/* g */ 6,
/* h */ 6,
/* i */ 3,
/* j */ 4,
/* k */ 6,
/* l */ 3,
/* m */ 9,
/* n */ 6,
/* o */ 6,
/* p */ 6,
/* q */ 6,
/* r */ 4,
/* s */ 6,
/* t */ 4,
/* u */ 6,
/* v */ 6,
/* w */ 8,
/* x */ 6,
/* y */ 5,
/* z */ 4,
/* { */ 3,
/* | */ 3,
/* } */ 3,
/* ~ */ 6,
};

View File

@@ -42,7 +42,7 @@ static void s2d_snprint(int x, int y, int align, const char *str, uObjMtx *buf,
switch (current_char) {
case CH_SCALE:
CH_SKIP(p);
myScale = s2d_atoi(p, &p);
myScale = (f32)s2d_atoi(p, &p) / 100.0f;
break;
case CH_ROT:
CH_SKIP(p);
@@ -117,15 +117,17 @@ static void s2d_snprint(int x, int y, int align, const char *str, uObjMtx *buf,
break;
default:
if (current_char != '\0' && current_char != CH_SEPARATOR) {
char *tbl = segmented_to_virtual(s2d_kerning_table);
draw_s2d_glyph(current_char, x, y, (buf++));
(x += (s2d_kerning_table[(int) current_char] * myScale));
(x += (tbl[(int) current_char] * (BASE_SCALE * myScale)));
}
}
if (*p == '\0') break;
p++;
tmp_len++;
} while (tmp_len < len);
myScale = 1;
myScale = 1.0f;
myDegrees = 0;
}