treballant en el generador de .fnt
@@ -1,135 +1,132 @@
|
|||||||
# Font: 8bithud
|
# Font: 8bithud — generado desde 8-bit-hud.ttf size 5
|
||||||
# Formato: codepoint_decimal ancho_visual
|
# Generado con tools/font_gen/font_gen.py
|
||||||
# Los gliphos se listan en orden de aparición en el bitmap (izquierda→derecha, arriba→abajo)
|
|
||||||
|
|
||||||
box_width 8
|
box_width 8
|
||||||
box_height 8
|
box_height 8
|
||||||
columns 15
|
columns 15
|
||||||
|
|
||||||
# ASCII 32-126
|
# codepoint_decimal ancho_visual
|
||||||
32 2
|
32 3 # U+0020
|
||||||
33 2
|
33 2 # !
|
||||||
34 5
|
34 5 # "
|
||||||
35 6
|
35 6 # #
|
||||||
36 6
|
36 6 # $
|
||||||
37 6
|
37 6 # %
|
||||||
38 6
|
38 6 # &
|
||||||
39 2
|
39 2 # '
|
||||||
40 3
|
40 3 # (
|
||||||
41 3
|
41 3 # )
|
||||||
42 4
|
42 4 # *
|
||||||
43 3
|
43 3 # +
|
||||||
44 2
|
44 2 # ,
|
||||||
45 3
|
45 3 # -
|
||||||
46 2
|
46 2 # .
|
||||||
47 4
|
47 4 # /
|
||||||
48 6
|
48 6 # 0
|
||||||
49 6
|
49 3 # 1
|
||||||
50 6
|
50 6 # 2
|
||||||
51 6
|
51 6 # 3
|
||||||
52 6
|
52 6 # 4
|
||||||
53 6
|
53 6 # 5
|
||||||
54 6
|
54 6 # 6
|
||||||
55 6
|
55 6 # 7
|
||||||
56 6
|
56 6 # 8
|
||||||
57 6
|
57 6 # 9
|
||||||
58 2
|
58 2 # :
|
||||||
59 2
|
59 2 # ;
|
||||||
60 4
|
60 4 # <
|
||||||
61 3
|
61 3 # =
|
||||||
62 4
|
62 4 # >
|
||||||
63 6
|
63 6 # ?
|
||||||
64 8
|
64 8 # @
|
||||||
65 6
|
65 6 # A
|
||||||
66 6
|
66 6 # B
|
||||||
67 6
|
67 6 # C
|
||||||
68 6
|
68 6 # D
|
||||||
69 6
|
69 6 # E
|
||||||
70 6
|
70 6 # F
|
||||||
71 6
|
71 6 # G
|
||||||
72 6
|
72 6 # H
|
||||||
73 6
|
73 6 # I
|
||||||
74 6
|
74 6 # J
|
||||||
75 6
|
75 6 # K
|
||||||
76 6
|
76 6 # L
|
||||||
77 6
|
77 6 # M
|
||||||
78 6
|
78 6 # N
|
||||||
79 6
|
79 6 # O
|
||||||
80 6
|
80 6 # P
|
||||||
81 6
|
81 6 # Q
|
||||||
82 6
|
82 6 # R
|
||||||
83 6
|
83 6 # S
|
||||||
84 6
|
84 6 # T
|
||||||
85 6
|
85 6 # U
|
||||||
86 5
|
86 5 # V
|
||||||
87 6
|
87 6 # W
|
||||||
88 6
|
88 6 # X
|
||||||
89 6
|
89 6 # Y
|
||||||
90 6
|
90 6 # Z
|
||||||
91 3
|
91 3 # [
|
||||||
92 5
|
92 4 # \
|
||||||
93 3
|
93 3 # ]
|
||||||
94 4
|
94 4 # ^
|
||||||
95 6
|
95 6 # _
|
||||||
96 2
|
96 2 # `
|
||||||
97 5
|
97 5 # a
|
||||||
98 5
|
98 5 # b
|
||||||
99 5
|
99 5 # c
|
||||||
100 5
|
100 5 # d
|
||||||
101 5
|
101 5 # e
|
||||||
102 5
|
102 5 # f
|
||||||
103 5
|
103 5 # g
|
||||||
104 5
|
104 5 # h
|
||||||
105 4
|
105 4 # i
|
||||||
106 5
|
106 5 # j
|
||||||
107 5
|
107 5 # k
|
||||||
108 5
|
108 5 # l
|
||||||
109 6
|
109 6 # m
|
||||||
110 5
|
110 5 # n
|
||||||
111 5
|
111 5 # o
|
||||||
112 5
|
112 5 # p
|
||||||
113 5
|
113 5 # q
|
||||||
114 5
|
114 5 # r
|
||||||
115 5
|
115 5 # s
|
||||||
116 4
|
116 4 # t
|
||||||
117 5
|
117 5 # u
|
||||||
118 5
|
118 5 # v
|
||||||
119 6
|
119 6 # w
|
||||||
120 4
|
120 4 # x
|
||||||
121 4
|
121 4 # y
|
||||||
122 5
|
122 5 # z
|
||||||
123 3
|
123 4 # {
|
||||||
124 2
|
124 1 # |
|
||||||
125 3
|
125 4 # }
|
||||||
126 3
|
126 4 # ~
|
||||||
|
192 4 # À
|
||||||
# Extensiones para ES/CA/VA (descomentar tras añadirlos al bitmap)
|
193 4 # Á
|
||||||
# 192 6 # À
|
200 4 # È
|
||||||
# 193 6 # Á
|
201 4 # É
|
||||||
# 200 6 # È
|
205 4 # Í
|
||||||
# 201 6 # É
|
207 4 # Ï
|
||||||
# 205 6 # Í
|
210 4 # Ò
|
||||||
# 207 6 # Ï
|
211 4 # Ó
|
||||||
# 210 6 # Ò
|
218 4 # Ú
|
||||||
# 211 6 # Ó
|
220 4 # Ü
|
||||||
# 218 6 # Ú
|
209 4 # Ñ
|
||||||
# 220 6 # Ü
|
199 4 # Ç
|
||||||
# 209 6 # Ñ
|
224 4 # à
|
||||||
# 199 6 # Ç
|
225 4 # á
|
||||||
# 224 5 # à
|
232 4 # è
|
||||||
# 225 5 # á
|
233 4 # é
|
||||||
# 232 5 # è
|
237 4 # í
|
||||||
# 233 5 # é
|
239 4 # ï
|
||||||
# 237 4 # í
|
242 4 # ò
|
||||||
# 239 5 # ï
|
243 4 # ó
|
||||||
# 242 5 # ò
|
250 4 # ú
|
||||||
# 243 5 # ó
|
252 4 # ü
|
||||||
# 250 5 # ú
|
241 4 # ñ
|
||||||
# 252 5 # ü
|
231 4 # ç
|
||||||
# 241 5 # ñ
|
161 4 # ¡
|
||||||
# 231 5 # ç
|
191 4 # ¿
|
||||||
# 161 2 # ¡
|
171 4 # «
|
||||||
# 191 6 # ¿
|
187 4 # »
|
||||||
# 171 6 # «
|
183 4 # ·
|
||||||
# 187 6 # »
|
|
||||||
# 183 2 # · (punt volat)
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 680 B After Width: | Height: | Size: 759 B |
@@ -1,194 +0,0 @@
|
|||||||
# box width
|
|
||||||
8
|
|
||||||
# box height
|
|
||||||
8
|
|
||||||
# 32 espacio ( )
|
|
||||||
2
|
|
||||||
# 33 !
|
|
||||||
2
|
|
||||||
# 34 "
|
|
||||||
5
|
|
||||||
# 35 #
|
|
||||||
6
|
|
||||||
# 36 $
|
|
||||||
6
|
|
||||||
# 37 %
|
|
||||||
6
|
|
||||||
# 38 &
|
|
||||||
6
|
|
||||||
# 39 '
|
|
||||||
2
|
|
||||||
# 40 (
|
|
||||||
3
|
|
||||||
# 41 )
|
|
||||||
3
|
|
||||||
# 42 *
|
|
||||||
4
|
|
||||||
# 43 +
|
|
||||||
3
|
|
||||||
# 44 ,
|
|
||||||
2
|
|
||||||
# 45 -
|
|
||||||
3
|
|
||||||
# 46 .
|
|
||||||
2
|
|
||||||
# 47 /
|
|
||||||
4
|
|
||||||
# 48 0
|
|
||||||
6
|
|
||||||
# 49 1
|
|
||||||
6
|
|
||||||
# 50 2
|
|
||||||
6
|
|
||||||
# 51 3
|
|
||||||
6
|
|
||||||
# 52 4
|
|
||||||
6
|
|
||||||
# 53 5
|
|
||||||
6
|
|
||||||
# 54 6
|
|
||||||
6
|
|
||||||
# 55 7
|
|
||||||
6
|
|
||||||
# 56 8
|
|
||||||
6
|
|
||||||
# 57 9
|
|
||||||
6
|
|
||||||
# 58 :
|
|
||||||
2
|
|
||||||
# 59 ;
|
|
||||||
2
|
|
||||||
# 60 <
|
|
||||||
4
|
|
||||||
# 61 =
|
|
||||||
3
|
|
||||||
# 62 >
|
|
||||||
4
|
|
||||||
# 63 ?
|
|
||||||
6
|
|
||||||
# 64 @
|
|
||||||
8
|
|
||||||
# 65 A
|
|
||||||
6
|
|
||||||
# 66 B
|
|
||||||
6
|
|
||||||
# 67 C
|
|
||||||
6
|
|
||||||
# 68 D
|
|
||||||
6
|
|
||||||
# 69 E
|
|
||||||
6
|
|
||||||
# 70 F
|
|
||||||
6
|
|
||||||
# 71 G
|
|
||||||
6
|
|
||||||
# 72 H
|
|
||||||
6
|
|
||||||
# 73 I
|
|
||||||
6
|
|
||||||
# 74 J
|
|
||||||
6
|
|
||||||
# 75 K
|
|
||||||
6
|
|
||||||
# 76 L
|
|
||||||
6
|
|
||||||
# 77 M
|
|
||||||
6
|
|
||||||
# 78 N
|
|
||||||
6
|
|
||||||
# 79 O
|
|
||||||
6
|
|
||||||
# 80 P
|
|
||||||
6
|
|
||||||
# 81 Q
|
|
||||||
6
|
|
||||||
# 82 R
|
|
||||||
6
|
|
||||||
# 83 S
|
|
||||||
6
|
|
||||||
# 84 T
|
|
||||||
6
|
|
||||||
# 85 U
|
|
||||||
6
|
|
||||||
# 86 V
|
|
||||||
5
|
|
||||||
# 87 W
|
|
||||||
6
|
|
||||||
# 88 X
|
|
||||||
6
|
|
||||||
# 89 Y
|
|
||||||
6
|
|
||||||
# 90 Z
|
|
||||||
6
|
|
||||||
# 91 [
|
|
||||||
3
|
|
||||||
# 92 \
|
|
||||||
5
|
|
||||||
# 93 ]
|
|
||||||
3
|
|
||||||
# 94 ^
|
|
||||||
4
|
|
||||||
# 95 _
|
|
||||||
6
|
|
||||||
# 96 `
|
|
||||||
2
|
|
||||||
# 97 a
|
|
||||||
5
|
|
||||||
# 98 b
|
|
||||||
5
|
|
||||||
# 99 c
|
|
||||||
5
|
|
||||||
# 100 d
|
|
||||||
5
|
|
||||||
# 101 e
|
|
||||||
5
|
|
||||||
# 102 f
|
|
||||||
5
|
|
||||||
# 103 g
|
|
||||||
5
|
|
||||||
# 104 h
|
|
||||||
5
|
|
||||||
# 105 i
|
|
||||||
4
|
|
||||||
# 106 j
|
|
||||||
5
|
|
||||||
# 107 k
|
|
||||||
5
|
|
||||||
# 108 l
|
|
||||||
5
|
|
||||||
# 109 m
|
|
||||||
6
|
|
||||||
# 110 n
|
|
||||||
5
|
|
||||||
# 111 o
|
|
||||||
5
|
|
||||||
# 112 p
|
|
||||||
5
|
|
||||||
# 113 q
|
|
||||||
5
|
|
||||||
# 114 r
|
|
||||||
5
|
|
||||||
# 115 s
|
|
||||||
5
|
|
||||||
# 116 t
|
|
||||||
4
|
|
||||||
# 117 u
|
|
||||||
5
|
|
||||||
# 118 v
|
|
||||||
5
|
|
||||||
# 119 w
|
|
||||||
6
|
|
||||||
# 120 x
|
|
||||||
4
|
|
||||||
# 121 y
|
|
||||||
4
|
|
||||||
# 122 z
|
|
||||||
5
|
|
||||||
# 123 {
|
|
||||||
3
|
|
||||||
# 124 |
|
|
||||||
2
|
|
||||||
# 125 }
|
|
||||||
3
|
|
||||||
# 126 ~
|
|
||||||
3
|
|
||||||
@@ -1,194 +0,0 @@
|
|||||||
# box width
|
|
||||||
8
|
|
||||||
# box height
|
|
||||||
8
|
|
||||||
# 32 espacio ( )
|
|
||||||
3
|
|
||||||
# 33 !
|
|
||||||
1
|
|
||||||
# 34 "
|
|
||||||
3
|
|
||||||
# 35 #
|
|
||||||
3
|
|
||||||
# 36 $
|
|
||||||
4
|
|
||||||
# 37 %
|
|
||||||
5
|
|
||||||
# 38 &
|
|
||||||
5
|
|
||||||
# 39 '
|
|
||||||
2
|
|
||||||
# 40 (
|
|
||||||
2
|
|
||||||
# 41 )
|
|
||||||
2
|
|
||||||
# 42 *
|
|
||||||
5
|
|
||||||
# 43 +
|
|
||||||
5
|
|
||||||
# 44 ,
|
|
||||||
3
|
|
||||||
# 45 -
|
|
||||||
3
|
|
||||||
# 46 .
|
|
||||||
1
|
|
||||||
# 47 /
|
|
||||||
4
|
|
||||||
# 48 0
|
|
||||||
4
|
|
||||||
# 49 1
|
|
||||||
2
|
|
||||||
# 50 2
|
|
||||||
4
|
|
||||||
# 51 3
|
|
||||||
4
|
|
||||||
# 52 4
|
|
||||||
4
|
|
||||||
# 53 5
|
|
||||||
4
|
|
||||||
# 54 6
|
|
||||||
4
|
|
||||||
# 55 7
|
|
||||||
4
|
|
||||||
# 56 8
|
|
||||||
4
|
|
||||||
# 57 9
|
|
||||||
4
|
|
||||||
# 58 :
|
|
||||||
1
|
|
||||||
# 59 ;
|
|
||||||
1
|
|
||||||
# 60 <
|
|
||||||
3
|
|
||||||
# 61 =
|
|
||||||
4
|
|
||||||
# 62 >
|
|
||||||
4
|
|
||||||
# 63 ?
|
|
||||||
4
|
|
||||||
# 64 @
|
|
||||||
7
|
|
||||||
# 65 A
|
|
||||||
4
|
|
||||||
# 66 B
|
|
||||||
4
|
|
||||||
# 67 C
|
|
||||||
4
|
|
||||||
# 68 D
|
|
||||||
4
|
|
||||||
# 69 E
|
|
||||||
4
|
|
||||||
# 70 F
|
|
||||||
4
|
|
||||||
# 71 G
|
|
||||||
4
|
|
||||||
# 72 H
|
|
||||||
4
|
|
||||||
# 73 I
|
|
||||||
2
|
|
||||||
# 74 J
|
|
||||||
2
|
|
||||||
# 75 K
|
|
||||||
4
|
|
||||||
# 76 L
|
|
||||||
4
|
|
||||||
# 77 M
|
|
||||||
5
|
|
||||||
# 78 N
|
|
||||||
4
|
|
||||||
# 79 O
|
|
||||||
5
|
|
||||||
# 80 P
|
|
||||||
4
|
|
||||||
# 81 Q
|
|
||||||
5
|
|
||||||
# 82 R
|
|
||||||
4
|
|
||||||
# 83 S
|
|
||||||
4
|
|
||||||
# 84 T
|
|
||||||
5
|
|
||||||
# 85 U
|
|
||||||
4
|
|
||||||
# 86 V
|
|
||||||
5
|
|
||||||
# 87 W
|
|
||||||
7
|
|
||||||
# 88 X
|
|
||||||
5
|
|
||||||
# 89 Y
|
|
||||||
5
|
|
||||||
# 90 Z
|
|
||||||
4
|
|
||||||
# 91 [
|
|
||||||
2
|
|
||||||
# 92 \
|
|
||||||
3
|
|
||||||
# 93 ]
|
|
||||||
2
|
|
||||||
# 94 ^
|
|
||||||
5
|
|
||||||
# 95 _
|
|
||||||
5
|
|
||||||
# 96 `
|
|
||||||
3
|
|
||||||
# 97 a
|
|
||||||
4
|
|
||||||
# 98 b
|
|
||||||
4
|
|
||||||
# 99 c
|
|
||||||
4
|
|
||||||
# 100 d
|
|
||||||
4
|
|
||||||
# 101 e
|
|
||||||
4
|
|
||||||
# 102 f
|
|
||||||
2
|
|
||||||
# 103 g
|
|
||||||
4
|
|
||||||
# 104 h
|
|
||||||
4
|
|
||||||
# 105 i
|
|
||||||
1
|
|
||||||
# 106 j
|
|
||||||
2
|
|
||||||
# 107 k
|
|
||||||
4
|
|
||||||
# 108 l
|
|
||||||
1
|
|
||||||
# 109 m
|
|
||||||
7
|
|
||||||
# 110 n
|
|
||||||
4
|
|
||||||
# 111 o
|
|
||||||
4
|
|
||||||
# 112 p
|
|
||||||
4
|
|
||||||
# 113 q
|
|
||||||
4
|
|
||||||
# 114 r
|
|
||||||
3
|
|
||||||
# 115 s
|
|
||||||
3
|
|
||||||
# 116 t
|
|
||||||
2
|
|
||||||
# 117 u
|
|
||||||
4
|
|
||||||
# 118 v
|
|
||||||
4
|
|
||||||
# 119 w
|
|
||||||
5
|
|
||||||
# 120 x
|
|
||||||
5
|
|
||||||
# 121 y
|
|
||||||
4
|
|
||||||
# 122 z
|
|
||||||
4
|
|
||||||
# 123 {
|
|
||||||
3
|
|
||||||
# 124 |
|
|
||||||
3
|
|
||||||
# 125 }
|
|
||||||
3
|
|
||||||
# 126 ~
|
|
||||||
5
|
|
||||||
@@ -1,135 +1,99 @@
|
|||||||
# Font: gauntlet
|
# Font: gauntlet — generado desde Gauntlet.ttf size 7
|
||||||
# Formato: codepoint_decimal ancho_visual
|
# Generado con tools/font_gen/font_gen.py
|
||||||
# Los gliphos se listan en orden de aparición en el bitmap (izquierda→derecha, arriba→abajo)
|
|
||||||
|
|
||||||
box_width 8
|
box_width 8
|
||||||
box_height 8
|
box_height 8
|
||||||
columns 15
|
columns 15
|
||||||
|
|
||||||
# ASCII 32-126
|
# codepoint_decimal ancho_visual
|
||||||
32 6
|
32 3 # U+0020
|
||||||
33 2
|
33 2 # !
|
||||||
34 5
|
34 5 # "
|
||||||
35 6
|
35 6 # #
|
||||||
36 6
|
36 6 # $
|
||||||
37 7
|
37 7 # %
|
||||||
38 7
|
38 7 # &
|
||||||
39 2
|
39 2 # '
|
||||||
40 4
|
40 4 # (
|
||||||
41 4
|
41 4 # )
|
||||||
42 6
|
42 6 # *
|
||||||
43 8
|
43 8 # +
|
||||||
44 2
|
44 2 # ,
|
||||||
45 7
|
45 7 # -
|
||||||
46 2
|
46 2 # .
|
||||||
47 7
|
47 7 # /
|
||||||
48 7
|
48 7 # 0
|
||||||
49 6
|
49 6 # 1
|
||||||
50 6
|
50 6 # 2
|
||||||
51 6
|
51 6 # 3
|
||||||
52 7
|
52 7 # 4
|
||||||
53 6
|
53 6 # 5
|
||||||
54 6
|
54 6 # 6
|
||||||
55 6
|
55 6 # 7
|
||||||
56 6
|
56 6 # 8
|
||||||
57 6
|
57 6 # 9
|
||||||
58 2
|
58 2 # :
|
||||||
59 2
|
59 3 # ;
|
||||||
60 5
|
60 5 # <
|
||||||
61 6
|
61 6 # =
|
||||||
62 5
|
62 5 # >
|
||||||
63 6
|
63 6 # ?
|
||||||
64 6
|
64 6 # @
|
||||||
65 6
|
65 6 # A
|
||||||
66 7
|
66 7 # B
|
||||||
67 7
|
67 7 # C
|
||||||
68 7
|
68 7 # D
|
||||||
69 7
|
69 7 # E
|
||||||
70 7
|
70 7 # F
|
||||||
71 7
|
71 7 # G
|
||||||
72 6
|
72 6 # H
|
||||||
73 6
|
73 6 # I
|
||||||
74 7
|
74 7 # J
|
||||||
75 7
|
75 7 # K
|
||||||
76 7
|
76 7 # L
|
||||||
77 7
|
77 7 # M
|
||||||
78 7
|
78 7 # N
|
||||||
79 7
|
79 7 # O
|
||||||
80 7
|
80 7 # P
|
||||||
81 7
|
81 7 # Q
|
||||||
82 7
|
82 7 # R
|
||||||
83 6
|
83 6 # S
|
||||||
84 6
|
84 6 # T
|
||||||
85 6
|
85 6 # U
|
||||||
86 6
|
86 6 # V
|
||||||
87 7
|
87 7 # W
|
||||||
88 7
|
88 7 # X
|
||||||
89 6
|
89 6 # Y
|
||||||
90 7
|
90 7 # Z
|
||||||
91 8
|
91 8 # [
|
||||||
92 3
|
92 3 # \
|
||||||
93 7
|
93 7 # ]
|
||||||
94 7
|
94 7 # ^
|
||||||
95 8
|
95 8 # _
|
||||||
96 0
|
97 6 # a
|
||||||
97 6
|
98 7 # b
|
||||||
98 7
|
99 7 # c
|
||||||
99 7
|
100 7 # d
|
||||||
100 7
|
101 7 # e
|
||||||
101 7
|
102 7 # f
|
||||||
102 7
|
103 7 # g
|
||||||
103 7
|
104 6 # h
|
||||||
104 6
|
105 6 # i
|
||||||
105 6
|
106 7 # j
|
||||||
106 7
|
107 7 # k
|
||||||
107 7
|
108 7 # l
|
||||||
108 7
|
109 7 # m
|
||||||
109 7
|
110 7 # n
|
||||||
110 7
|
111 7 # o
|
||||||
111 7
|
112 7 # p
|
||||||
112 7
|
113 7 # q
|
||||||
113 7
|
114 7 # r
|
||||||
114 7
|
115 6 # s
|
||||||
115 6
|
116 6 # t
|
||||||
116 6
|
117 6 # u
|
||||||
117 6
|
118 6 # v
|
||||||
118 6
|
119 7 # w
|
||||||
119 7
|
120 7 # x
|
||||||
120 7
|
121 6 # y
|
||||||
121 6
|
122 7 # z
|
||||||
122 7
|
126 6 # ~
|
||||||
123 0
|
|
||||||
124 0
|
|
||||||
125 0
|
|
||||||
126 0
|
|
||||||
|
|
||||||
# Extensiones para ES/CA/VA (descomentar tras añadirlos al bitmap)
|
|
||||||
# 192 6 # À
|
|
||||||
# 193 6 # Á
|
|
||||||
# 200 7 # È
|
|
||||||
# 201 7 # É
|
|
||||||
# 205 6 # Í
|
|
||||||
# 207 6 # Ï
|
|
||||||
# 210 7 # Ò
|
|
||||||
# 211 7 # Ó
|
|
||||||
# 218 6 # Ú
|
|
||||||
# 220 6 # Ü
|
|
||||||
# 209 7 # Ñ
|
|
||||||
# 199 7 # Ç
|
|
||||||
# 224 6 # à
|
|
||||||
# 225 6 # á
|
|
||||||
# 232 7 # è
|
|
||||||
# 233 7 # é
|
|
||||||
# 237 6 # í
|
|
||||||
# 239 6 # ï
|
|
||||||
# 242 7 # ò
|
|
||||||
# 243 7 # ó
|
|
||||||
# 250 6 # ú
|
|
||||||
# 252 6 # ü
|
|
||||||
# 241 7 # ñ
|
|
||||||
# 231 7 # ç
|
|
||||||
# 161 2 # ¡
|
|
||||||
# 191 6 # ¿
|
|
||||||
# 171 7 # «
|
|
||||||
# 187 7 # »
|
|
||||||
# 183 2 # · (punt volat)
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 810 B After Width: | Height: | Size: 784 B |
@@ -1,194 +0,0 @@
|
|||||||
# box width
|
|
||||||
8
|
|
||||||
# box height
|
|
||||||
8
|
|
||||||
# 32 espacio ( )
|
|
||||||
6
|
|
||||||
# 33 !
|
|
||||||
2
|
|
||||||
# 34 "
|
|
||||||
5
|
|
||||||
# 35 #
|
|
||||||
6
|
|
||||||
# 36 $
|
|
||||||
6
|
|
||||||
# 37 %
|
|
||||||
7
|
|
||||||
# 38 &
|
|
||||||
7
|
|
||||||
# 39 '
|
|
||||||
2
|
|
||||||
# 40 (
|
|
||||||
4
|
|
||||||
# 41 )
|
|
||||||
4
|
|
||||||
# 42 *
|
|
||||||
6
|
|
||||||
# 43 +
|
|
||||||
8
|
|
||||||
# 44 ,
|
|
||||||
2
|
|
||||||
# 45 -
|
|
||||||
7
|
|
||||||
# 46 .
|
|
||||||
2
|
|
||||||
# 47 /
|
|
||||||
7
|
|
||||||
# 48 0
|
|
||||||
7
|
|
||||||
# 49 1
|
|
||||||
6
|
|
||||||
# 50 2
|
|
||||||
6
|
|
||||||
# 51 3
|
|
||||||
6
|
|
||||||
# 52 4
|
|
||||||
7
|
|
||||||
# 53 5
|
|
||||||
6
|
|
||||||
# 54 6
|
|
||||||
6
|
|
||||||
# 55 7
|
|
||||||
6
|
|
||||||
# 56 8
|
|
||||||
6
|
|
||||||
# 57 9
|
|
||||||
6
|
|
||||||
# 58 :
|
|
||||||
2
|
|
||||||
# 59 ;
|
|
||||||
2
|
|
||||||
# 60 <
|
|
||||||
5
|
|
||||||
# 61 =
|
|
||||||
6
|
|
||||||
# 62 >
|
|
||||||
5
|
|
||||||
# 63 ?
|
|
||||||
6
|
|
||||||
# 64 @
|
|
||||||
6
|
|
||||||
# 65 A
|
|
||||||
6
|
|
||||||
# 66 B
|
|
||||||
7
|
|
||||||
# 67 C
|
|
||||||
7
|
|
||||||
# 68 D
|
|
||||||
7
|
|
||||||
# 69 E
|
|
||||||
7
|
|
||||||
# 70 F
|
|
||||||
7
|
|
||||||
# 71 G
|
|
||||||
7
|
|
||||||
# 72 H
|
|
||||||
6
|
|
||||||
# 73 I
|
|
||||||
6
|
|
||||||
# 74 J
|
|
||||||
7
|
|
||||||
# 75 K
|
|
||||||
7
|
|
||||||
# 76 L
|
|
||||||
7
|
|
||||||
# 77 M
|
|
||||||
7
|
|
||||||
# 78 N
|
|
||||||
7
|
|
||||||
# 79 O
|
|
||||||
7
|
|
||||||
# 80 P
|
|
||||||
7
|
|
||||||
# 81 Q
|
|
||||||
7
|
|
||||||
# 82 R
|
|
||||||
7
|
|
||||||
# 83 S
|
|
||||||
6
|
|
||||||
# 84 T
|
|
||||||
6
|
|
||||||
# 85 U
|
|
||||||
6
|
|
||||||
# 86 V
|
|
||||||
6
|
|
||||||
# 87 W
|
|
||||||
7
|
|
||||||
# 88 X
|
|
||||||
7
|
|
||||||
# 89 Y
|
|
||||||
6
|
|
||||||
# 90 Z
|
|
||||||
7
|
|
||||||
# 91 [
|
|
||||||
8
|
|
||||||
# 92 \
|
|
||||||
3
|
|
||||||
# 93 ]
|
|
||||||
7
|
|
||||||
# 94 ^
|
|
||||||
7
|
|
||||||
# 95 _
|
|
||||||
8
|
|
||||||
# 96 `
|
|
||||||
0
|
|
||||||
# 97 a
|
|
||||||
6
|
|
||||||
# 98 b
|
|
||||||
7
|
|
||||||
# 99 c
|
|
||||||
7
|
|
||||||
# 100 d
|
|
||||||
7
|
|
||||||
# 101 e
|
|
||||||
7
|
|
||||||
# 102 f
|
|
||||||
7
|
|
||||||
# 103 g
|
|
||||||
7
|
|
||||||
# 104 h
|
|
||||||
6
|
|
||||||
# 105 i
|
|
||||||
6
|
|
||||||
# 106 j
|
|
||||||
7
|
|
||||||
# 107 k
|
|
||||||
7
|
|
||||||
# 108 l
|
|
||||||
7
|
|
||||||
# 109 m
|
|
||||||
7
|
|
||||||
# 110 n
|
|
||||||
7
|
|
||||||
# 111 o
|
|
||||||
7
|
|
||||||
# 112 p
|
|
||||||
7
|
|
||||||
# 113 q
|
|
||||||
7
|
|
||||||
# 114 r
|
|
||||||
7
|
|
||||||
# 115 s
|
|
||||||
6
|
|
||||||
# 116 t
|
|
||||||
6
|
|
||||||
# 117 u
|
|
||||||
6
|
|
||||||
# 118 v
|
|
||||||
6
|
|
||||||
# 119 w
|
|
||||||
7
|
|
||||||
# 120 x
|
|
||||||
7
|
|
||||||
# 121 y
|
|
||||||
6
|
|
||||||
# 122 z
|
|
||||||
7
|
|
||||||
# 123 {
|
|
||||||
0
|
|
||||||
# 124 |
|
|
||||||
0
|
|
||||||
# 125 }
|
|
||||||
0
|
|
||||||
# 126 ~
|
|
||||||
0
|
|
||||||
@@ -1,144 +1,132 @@
|
|||||||
# Font: smb2 - Super Mario Bros 2
|
# Font: smb2 — generado desde Super Mario Bros. 2.ttf size 8
|
||||||
# Formato: codepoint_decimal ancho_visual
|
# Generado con tools/font_gen/font_gen.py
|
||||||
# Los gliphos se listan en orden de aparición en el bitmap (izquierda→derecha, arriba→abajo)
|
|
||||||
# Para añadir nuevos caracteres: añadir entradas al final Y dibujarlos en el bitmap GIF
|
|
||||||
|
|
||||||
box_width 8
|
box_width 8
|
||||||
box_height 8
|
box_height 8
|
||||||
columns 15
|
columns 15
|
||||||
|
|
||||||
# ASCII 32-126 (misma disposición que el bitmap original)
|
# codepoint_decimal ancho_visual
|
||||||
32 7
|
32 8 # U+0020
|
||||||
33 7
|
33 5 # !
|
||||||
34 7
|
34 6 # "
|
||||||
35 7
|
35 7 # #
|
||||||
36 7
|
36 7 # $
|
||||||
37 7
|
37 7 # %
|
||||||
38 7
|
38 7 # &
|
||||||
39 7
|
39 4 # '
|
||||||
40 7
|
40 6 # (
|
||||||
41 7
|
41 5 # )
|
||||||
42 7
|
42 7 # *
|
||||||
43 7
|
43 7 # +
|
||||||
44 7
|
44 4 # ,
|
||||||
45 7
|
45 7 # -
|
||||||
46 7
|
46 4 # .
|
||||||
47 7
|
47 7 # /
|
||||||
48 7
|
48 7 # 0
|
||||||
49 7
|
49 6 # 1
|
||||||
50 7
|
50 7 # 2
|
||||||
51 7
|
51 7 # 3
|
||||||
52 7
|
52 7 # 4
|
||||||
53 7
|
53 7 # 5
|
||||||
54 7
|
54 7 # 6
|
||||||
55 7
|
55 7 # 7
|
||||||
56 7
|
56 7 # 8
|
||||||
57 7
|
57 7 # 9
|
||||||
58 7
|
58 4 # :
|
||||||
59 7
|
59 4 # ;
|
||||||
60 7
|
60 6 # <
|
||||||
61 7
|
61 6 # =
|
||||||
62 7
|
62 6 # >
|
||||||
63 7
|
63 7 # ?
|
||||||
64 7
|
64 7 # @
|
||||||
65 7
|
65 7 # A
|
||||||
66 7
|
66 7 # B
|
||||||
67 7
|
67 7 # C
|
||||||
68 7
|
68 7 # D
|
||||||
69 7
|
69 7 # E
|
||||||
70 7
|
70 7 # F
|
||||||
71 7
|
71 7 # G
|
||||||
72 7
|
72 7 # H
|
||||||
73 7
|
73 6 # I
|
||||||
74 7
|
74 7 # J
|
||||||
75 7
|
75 7 # K
|
||||||
76 7
|
76 7 # L
|
||||||
77 7
|
77 7 # M
|
||||||
78 7
|
78 7 # N
|
||||||
79 7
|
79 7 # O
|
||||||
80 7
|
80 7 # P
|
||||||
81 7
|
81 7 # Q
|
||||||
82 7
|
82 7 # R
|
||||||
83 7
|
83 7 # S
|
||||||
84 7
|
84 7 # T
|
||||||
85 7
|
85 7 # U
|
||||||
86 7
|
86 7 # V
|
||||||
87 7
|
87 7 # W
|
||||||
88 7
|
88 7 # X
|
||||||
89 7
|
89 7 # Y
|
||||||
90 7
|
90 7 # Z
|
||||||
91 7
|
91 6 # [
|
||||||
92 7
|
92 7 # \
|
||||||
93 7
|
93 5 # ]
|
||||||
94 7
|
94 6 # ^
|
||||||
95 7
|
95 7 # _
|
||||||
96 7
|
96 4 # `
|
||||||
97 7
|
97 7 # a
|
||||||
98 7
|
98 7 # b
|
||||||
99 7
|
99 7 # c
|
||||||
100 7
|
100 7 # d
|
||||||
101 7
|
101 7 # e
|
||||||
102 7
|
102 7 # f
|
||||||
103 7
|
103 7 # g
|
||||||
104 7
|
104 7 # h
|
||||||
105 7
|
105 6 # i
|
||||||
106 7
|
106 7 # j
|
||||||
107 7
|
107 7 # k
|
||||||
108 7
|
108 7 # l
|
||||||
109 7
|
109 7 # m
|
||||||
110 7
|
110 7 # n
|
||||||
111 7
|
111 7 # o
|
||||||
112 7
|
112 7 # p
|
||||||
113 7
|
113 7 # q
|
||||||
114 7
|
114 7 # r
|
||||||
115 7
|
115 7 # s
|
||||||
116 7
|
116 7 # t
|
||||||
117 7
|
117 7 # u
|
||||||
118 7
|
118 7 # v
|
||||||
119 7
|
119 7 # w
|
||||||
120 7
|
120 7 # x
|
||||||
121 7
|
121 7 # y
|
||||||
122 7
|
122 7 # z
|
||||||
123 7
|
123 6 # {
|
||||||
124 7
|
124 5 # |
|
||||||
125 7
|
125 5 # }
|
||||||
126 7
|
126 7 # ~
|
||||||
|
192 7 # À
|
||||||
# Extensiones para ES/CA/VA
|
193 7 # Á
|
||||||
# Para activarlos: dibujar los gliphos en el bitmap GIF a continuación del último ASCII
|
200 7 # È
|
||||||
# y descomentar las entradas correspondientes:
|
201 7 # É
|
||||||
#
|
205 6 # Í
|
||||||
# Mayúsculas acentuadas
|
207 6 # Ï
|
||||||
# 192 7 # À
|
210 7 # Ò
|
||||||
# 193 7 # Á
|
211 7 # Ó
|
||||||
# 200 7 # È
|
218 7 # Ú
|
||||||
# 201 7 # É
|
220 7 # Ü
|
||||||
# 205 7 # Í
|
209 7 # Ñ
|
||||||
# 207 7 # Ï
|
199 7 # Ç
|
||||||
# 210 7 # Ò
|
224 7 # à
|
||||||
# 211 7 # Ó
|
225 7 # á
|
||||||
# 218 7 # Ú
|
232 7 # è
|
||||||
# 220 7 # Ü
|
233 7 # é
|
||||||
# 209 7 # Ñ
|
237 6 # í
|
||||||
# 199 7 # Ç
|
239 6 # ï
|
||||||
#
|
242 7 # ò
|
||||||
# Minúsculas acentuadas
|
243 7 # ó
|
||||||
# 224 7 # à
|
250 7 # ú
|
||||||
# 225 7 # á
|
252 7 # ü
|
||||||
# 232 7 # è
|
241 7 # ñ
|
||||||
# 233 7 # é
|
231 7 # ç
|
||||||
# 237 7 # í
|
161 5 # ¡
|
||||||
# 239 7 # ï
|
191 7 # ¿
|
||||||
# 242 7 # ò
|
171 7 # «
|
||||||
# 243 7 # ó
|
187 7 # »
|
||||||
# 250 7 # ú
|
183 4 # ·
|
||||||
# 252 7 # ü
|
|
||||||
# 241 7 # ñ
|
|
||||||
# 231 7 # ç
|
|
||||||
#
|
|
||||||
# Símbolos adicionales
|
|
||||||
# 161 7 # ¡
|
|
||||||
# 191 7 # ¿
|
|
||||||
# 171 7 # «
|
|
||||||
# 187 7 # »
|
|
||||||
# 183 7 # · (punt volat)
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 798 B After Width: | Height: | Size: 968 B |
@@ -1,194 +0,0 @@
|
|||||||
# box width
|
|
||||||
8
|
|
||||||
# box height
|
|
||||||
8
|
|
||||||
# 32 espacio ( )
|
|
||||||
7
|
|
||||||
# 33 !
|
|
||||||
7
|
|
||||||
# 34 "
|
|
||||||
7
|
|
||||||
# 35 #
|
|
||||||
7
|
|
||||||
# 36 $
|
|
||||||
7
|
|
||||||
# 37 %
|
|
||||||
7
|
|
||||||
# 38 &
|
|
||||||
7
|
|
||||||
# 39 '
|
|
||||||
7
|
|
||||||
# 40 (
|
|
||||||
7
|
|
||||||
# 41 )
|
|
||||||
7
|
|
||||||
# 42 *
|
|
||||||
7
|
|
||||||
# 43 +
|
|
||||||
7
|
|
||||||
# 44 ,
|
|
||||||
7
|
|
||||||
# 45 -
|
|
||||||
7
|
|
||||||
# 46 .
|
|
||||||
7
|
|
||||||
# 47 /
|
|
||||||
7
|
|
||||||
# 48 0
|
|
||||||
7
|
|
||||||
# 49 1
|
|
||||||
7
|
|
||||||
# 50 2
|
|
||||||
7
|
|
||||||
# 51 3
|
|
||||||
7
|
|
||||||
# 52 4
|
|
||||||
7
|
|
||||||
# 53 5
|
|
||||||
7
|
|
||||||
# 54 6
|
|
||||||
7
|
|
||||||
# 55 7
|
|
||||||
7
|
|
||||||
# 56 8
|
|
||||||
7
|
|
||||||
# 57 9
|
|
||||||
7
|
|
||||||
# 58 :
|
|
||||||
7
|
|
||||||
# 59 ;
|
|
||||||
7
|
|
||||||
# 60 <
|
|
||||||
7
|
|
||||||
# 61 =
|
|
||||||
7
|
|
||||||
# 62 >
|
|
||||||
7
|
|
||||||
# 63 ?
|
|
||||||
7
|
|
||||||
# 64 @
|
|
||||||
7
|
|
||||||
# 65 A
|
|
||||||
7
|
|
||||||
# 66 B
|
|
||||||
7
|
|
||||||
# 67 C
|
|
||||||
7
|
|
||||||
# 68 D
|
|
||||||
7
|
|
||||||
# 69 E
|
|
||||||
7
|
|
||||||
# 70 F
|
|
||||||
7
|
|
||||||
# 71 G
|
|
||||||
7
|
|
||||||
# 72 H
|
|
||||||
7
|
|
||||||
# 73 I
|
|
||||||
7
|
|
||||||
# 74 J
|
|
||||||
7
|
|
||||||
# 75 K
|
|
||||||
7
|
|
||||||
# 76 L
|
|
||||||
7
|
|
||||||
# 77 M
|
|
||||||
7
|
|
||||||
# 78 N
|
|
||||||
7
|
|
||||||
# 79 O
|
|
||||||
7
|
|
||||||
# 80 P
|
|
||||||
7
|
|
||||||
# 81 Q
|
|
||||||
7
|
|
||||||
# 82 R
|
|
||||||
7
|
|
||||||
# 83 S
|
|
||||||
7
|
|
||||||
# 84 T
|
|
||||||
7
|
|
||||||
# 85 U
|
|
||||||
7
|
|
||||||
# 86 V
|
|
||||||
7
|
|
||||||
# 87 W
|
|
||||||
7
|
|
||||||
# 88 X
|
|
||||||
7
|
|
||||||
# 89 Y
|
|
||||||
7
|
|
||||||
# 90 Z
|
|
||||||
7
|
|
||||||
# 91 [
|
|
||||||
7
|
|
||||||
# 92 \
|
|
||||||
7
|
|
||||||
# 93 ]
|
|
||||||
7
|
|
||||||
# 94 ^
|
|
||||||
7
|
|
||||||
# 95 _
|
|
||||||
7
|
|
||||||
# 96 `
|
|
||||||
7
|
|
||||||
# 97 a
|
|
||||||
7
|
|
||||||
# 98 b
|
|
||||||
7
|
|
||||||
# 99 c
|
|
||||||
7
|
|
||||||
# 100 d
|
|
||||||
7
|
|
||||||
# 101 e
|
|
||||||
7
|
|
||||||
# 102 f
|
|
||||||
7
|
|
||||||
# 103 g
|
|
||||||
7
|
|
||||||
# 104 h
|
|
||||||
7
|
|
||||||
# 105 i
|
|
||||||
7
|
|
||||||
# 106 j
|
|
||||||
7
|
|
||||||
# 107 k
|
|
||||||
7
|
|
||||||
# 108 l
|
|
||||||
7
|
|
||||||
# 109 m
|
|
||||||
7
|
|
||||||
# 110 n
|
|
||||||
7
|
|
||||||
# 111 o
|
|
||||||
7
|
|
||||||
# 112 p
|
|
||||||
7
|
|
||||||
# 113 q
|
|
||||||
7
|
|
||||||
# 114 r
|
|
||||||
7
|
|
||||||
# 115 s
|
|
||||||
7
|
|
||||||
# 116 t
|
|
||||||
7
|
|
||||||
# 117 u
|
|
||||||
7
|
|
||||||
# 118 v
|
|
||||||
7
|
|
||||||
# 119 w
|
|
||||||
7
|
|
||||||
# 120 x
|
|
||||||
7
|
|
||||||
# 121 y
|
|
||||||
7
|
|
||||||
# 122 z
|
|
||||||
7
|
|
||||||
# 123 {
|
|
||||||
7
|
|
||||||
# 124 |
|
|
||||||
7
|
|
||||||
# 125 }
|
|
||||||
7
|
|
||||||
# 126 ~
|
|
||||||
7
|
|
||||||
@@ -1,135 +1,132 @@
|
|||||||
# Font: subatomic
|
# Font: subatomic — generado desde atomics.TTF size 6
|
||||||
# Formato: codepoint_decimal ancho_visual
|
# Generado con tools/font_gen/font_gen.py
|
||||||
# Los gliphos se listan en orden de aparición en el bitmap (izquierda→derecha, arriba→abajo)
|
|
||||||
|
|
||||||
box_width 7
|
box_width 7
|
||||||
box_height 7
|
box_height 7
|
||||||
columns 15
|
columns 15
|
||||||
|
|
||||||
# ASCII 32-126
|
# codepoint_decimal ancho_visual
|
||||||
32 4
|
32 4 # U+0020
|
||||||
33 1
|
33 1 # !
|
||||||
34 3
|
34 3 # "
|
||||||
35 5
|
35 5 # #
|
||||||
36 5
|
36 5 # $
|
||||||
37 5
|
37 5 # %
|
||||||
38 6
|
38 6 # &
|
||||||
39 1
|
39 1 # '
|
||||||
40 2
|
40 2 # (
|
||||||
41 2
|
41 2 # )
|
||||||
42 5
|
42 5 # *
|
||||||
43 5
|
43 5 # +
|
||||||
44 1
|
44 1 # ,
|
||||||
45 5
|
45 5 # -
|
||||||
46 1
|
46 1 # .
|
||||||
47 5
|
47 5 # /
|
||||||
48 5
|
48 5 # 0
|
||||||
49 2
|
49 2 # 1
|
||||||
50 5
|
50 5 # 2
|
||||||
51 5
|
51 5 # 3
|
||||||
52 5
|
52 5 # 4
|
||||||
53 5
|
53 5 # 5
|
||||||
54 5
|
54 5 # 6
|
||||||
55 5
|
55 5 # 7
|
||||||
56 5
|
56 5 # 8
|
||||||
57 5
|
57 5 # 9
|
||||||
58 1
|
58 1 # :
|
||||||
59 2
|
59 1 # ;
|
||||||
60 3
|
60 3 # <
|
||||||
61 5
|
61 5 # =
|
||||||
62 3
|
62 3 # >
|
||||||
63 4
|
63 4 # ?
|
||||||
64 5
|
64 5 # @
|
||||||
65 5
|
65 5 # A
|
||||||
66 5
|
66 5 # B
|
||||||
67 5
|
67 5 # C
|
||||||
68 5
|
68 5 # D
|
||||||
69 4
|
69 4 # E
|
||||||
70 5
|
70 5 # F
|
||||||
71 5
|
71 5 # G
|
||||||
72 5
|
72 5 # H
|
||||||
73 1
|
73 1 # I
|
||||||
74 5
|
74 5 # J
|
||||||
75 5
|
75 5 # K
|
||||||
76 2
|
76 4 # L
|
||||||
77 5
|
77 5 # M
|
||||||
78 5
|
78 5 # N
|
||||||
79 5
|
79 5 # O
|
||||||
80 5
|
80 5 # P
|
||||||
81 5
|
81 5 # Q
|
||||||
82 5
|
82 5 # R
|
||||||
83 5
|
83 5 # S
|
||||||
84 5
|
84 5 # T
|
||||||
85 5
|
85 5 # U
|
||||||
86 5
|
86 5 # V
|
||||||
87 5
|
87 5 # W
|
||||||
88 5
|
88 5 # X
|
||||||
89 5
|
89 5 # Y
|
||||||
90 5
|
90 5 # Z
|
||||||
91 2
|
91 2 # [
|
||||||
92 5
|
92 5 # \
|
||||||
93 2
|
93 2 # ]
|
||||||
94 3
|
94 3 # ^
|
||||||
95 5
|
95 5 # _
|
||||||
96 2
|
96 2 # `
|
||||||
97 4
|
97 4 # a
|
||||||
98 4
|
98 4 # b
|
||||||
99 3
|
99 3 # c
|
||||||
100 4
|
100 4 # d
|
||||||
101 4
|
101 4 # e
|
||||||
102 3
|
102 3 # f
|
||||||
103 4
|
103 4 # g
|
||||||
104 4
|
104 4 # h
|
||||||
105 1
|
105 1 # i
|
||||||
106 2
|
106 2 # j
|
||||||
107 3
|
107 3 # k
|
||||||
108 1
|
108 1 # l
|
||||||
109 5
|
109 5 # m
|
||||||
110 4
|
110 4 # n
|
||||||
111 4
|
111 4 # o
|
||||||
112 4
|
112 4 # p
|
||||||
113 4
|
113 4 # q
|
||||||
114 3
|
114 3 # r
|
||||||
115 4
|
115 4 # s
|
||||||
116 2
|
116 2 # t
|
||||||
117 4
|
117 4 # u
|
||||||
118 4
|
118 4 # v
|
||||||
119 5
|
119 5 # w
|
||||||
120 3
|
120 3 # x
|
||||||
121 4
|
121 4 # y
|
||||||
122 4
|
122 4 # z
|
||||||
123 0
|
123 3 # {
|
||||||
124 0
|
124 1 # |
|
||||||
125 0
|
125 3 # }
|
||||||
126 0
|
126 4 # ~
|
||||||
|
192 3 # À
|
||||||
# Extensiones para ES/CA/VA (descomentar tras añadirlos al bitmap)
|
193 3 # Á
|
||||||
# 192 5 # À
|
200 3 # È
|
||||||
# 193 5 # Á
|
201 3 # É
|
||||||
# 200 4 # È
|
205 3 # Í
|
||||||
# 201 4 # É
|
207 3 # Ï
|
||||||
# 205 1 # Í
|
210 3 # Ò
|
||||||
# 207 2 # Ï
|
211 3 # Ó
|
||||||
# 210 5 # Ò
|
218 3 # Ú
|
||||||
# 211 5 # Ó
|
220 3 # Ü
|
||||||
# 218 5 # Ú
|
209 3 # Ñ
|
||||||
# 220 5 # Ü
|
199 3 # Ç
|
||||||
# 209 5 # Ñ
|
224 3 # à
|
||||||
# 199 5 # Ç
|
225 3 # á
|
||||||
# 224 4 # à
|
232 3 # è
|
||||||
# 225 4 # á
|
233 3 # é
|
||||||
# 232 4 # è
|
237 3 # í
|
||||||
# 233 4 # é
|
239 3 # ï
|
||||||
# 237 1 # í
|
242 3 # ò
|
||||||
# 239 2 # ï
|
243 3 # ó
|
||||||
# 242 4 # ò
|
250 3 # ú
|
||||||
# 243 4 # ó
|
252 3 # ü
|
||||||
# 250 4 # ú
|
241 3 # ñ
|
||||||
# 252 4 # ü
|
231 3 # ç
|
||||||
# 241 4 # ñ
|
161 3 # ¡
|
||||||
# 231 3 # ç
|
191 3 # ¿
|
||||||
# 161 1 # ¡
|
171 3 # «
|
||||||
# 191 4 # ¿
|
187 3 # »
|
||||||
# 171 5 # «
|
183 3 # ·
|
||||||
# 187 5 # »
|
|
||||||
# 183 1 # · (punt volat)
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 596 B |
@@ -1,194 +0,0 @@
|
|||||||
# box width
|
|
||||||
7
|
|
||||||
# box height
|
|
||||||
7
|
|
||||||
# 32 espacio ( )
|
|
||||||
4
|
|
||||||
# 33 !
|
|
||||||
1
|
|
||||||
# 34 "
|
|
||||||
3
|
|
||||||
# 35 #
|
|
||||||
5
|
|
||||||
# 36 $
|
|
||||||
5
|
|
||||||
# 37 %
|
|
||||||
5
|
|
||||||
# 38 &
|
|
||||||
6
|
|
||||||
# 39 '
|
|
||||||
1
|
|
||||||
# 40 (
|
|
||||||
2
|
|
||||||
# 41 )
|
|
||||||
2
|
|
||||||
# 42 *
|
|
||||||
5
|
|
||||||
# 43 +
|
|
||||||
5
|
|
||||||
# 44 ,
|
|
||||||
1
|
|
||||||
# 45 -
|
|
||||||
5
|
|
||||||
# 46 .
|
|
||||||
1
|
|
||||||
# 47 /
|
|
||||||
5
|
|
||||||
# 48 0
|
|
||||||
5
|
|
||||||
# 49 1
|
|
||||||
2
|
|
||||||
# 50 2
|
|
||||||
5
|
|
||||||
# 51 3
|
|
||||||
5
|
|
||||||
# 52 4
|
|
||||||
5
|
|
||||||
# 53 5
|
|
||||||
5
|
|
||||||
# 54 6
|
|
||||||
5
|
|
||||||
# 55 7
|
|
||||||
5
|
|
||||||
# 56 8
|
|
||||||
5
|
|
||||||
# 57 9
|
|
||||||
5
|
|
||||||
# 58 :
|
|
||||||
1
|
|
||||||
# 59 ;
|
|
||||||
2
|
|
||||||
# 60 <
|
|
||||||
3
|
|
||||||
# 61 =
|
|
||||||
5
|
|
||||||
# 62 >
|
|
||||||
3
|
|
||||||
# 63 ?
|
|
||||||
4
|
|
||||||
# 64 @
|
|
||||||
5
|
|
||||||
# 65 A
|
|
||||||
5
|
|
||||||
# 66 B
|
|
||||||
5
|
|
||||||
# 67 C
|
|
||||||
5
|
|
||||||
# 68 D
|
|
||||||
5
|
|
||||||
# 69 E
|
|
||||||
4
|
|
||||||
# 70 F
|
|
||||||
5
|
|
||||||
# 71 G
|
|
||||||
5
|
|
||||||
# 72 H
|
|
||||||
5
|
|
||||||
# 73 I
|
|
||||||
1
|
|
||||||
# 74 J
|
|
||||||
5
|
|
||||||
# 75 K
|
|
||||||
5
|
|
||||||
# 76 L
|
|
||||||
2
|
|
||||||
# 77 M
|
|
||||||
5
|
|
||||||
# 78 N
|
|
||||||
5
|
|
||||||
# 79 O
|
|
||||||
5
|
|
||||||
# 80 P
|
|
||||||
5
|
|
||||||
# 81 Q
|
|
||||||
5
|
|
||||||
# 82 R
|
|
||||||
5
|
|
||||||
# 83 S
|
|
||||||
5
|
|
||||||
# 84 T
|
|
||||||
5
|
|
||||||
# 85 U
|
|
||||||
5
|
|
||||||
# 86 V
|
|
||||||
5
|
|
||||||
# 87 W
|
|
||||||
5
|
|
||||||
# 88 X
|
|
||||||
5
|
|
||||||
# 89 Y
|
|
||||||
5
|
|
||||||
# 90 Z
|
|
||||||
5
|
|
||||||
# 91 [
|
|
||||||
2
|
|
||||||
# 92 \
|
|
||||||
5
|
|
||||||
# 93 ]
|
|
||||||
2
|
|
||||||
# 94 ^
|
|
||||||
3
|
|
||||||
# 95 _
|
|
||||||
5
|
|
||||||
# 96 `
|
|
||||||
2
|
|
||||||
# 97 a
|
|
||||||
4
|
|
||||||
# 98 b
|
|
||||||
4
|
|
||||||
# 99 c
|
|
||||||
3
|
|
||||||
# 100 d
|
|
||||||
4
|
|
||||||
# 101 e
|
|
||||||
4
|
|
||||||
# 102 f
|
|
||||||
3
|
|
||||||
# 103 g
|
|
||||||
4
|
|
||||||
# 104 h
|
|
||||||
4
|
|
||||||
# 105 i
|
|
||||||
1
|
|
||||||
# 106 j
|
|
||||||
2
|
|
||||||
# 107 k
|
|
||||||
3
|
|
||||||
# 108 l
|
|
||||||
1
|
|
||||||
# 109 m
|
|
||||||
5
|
|
||||||
# 110 n
|
|
||||||
4
|
|
||||||
# 111 o
|
|
||||||
4
|
|
||||||
# 112 p
|
|
||||||
4
|
|
||||||
# 113 q
|
|
||||||
4
|
|
||||||
# 114 r
|
|
||||||
3
|
|
||||||
# 115 s
|
|
||||||
4
|
|
||||||
# 116 t
|
|
||||||
2
|
|
||||||
# 117 u
|
|
||||||
4
|
|
||||||
# 118 v
|
|
||||||
4
|
|
||||||
# 119 w
|
|
||||||
5
|
|
||||||
# 120 x
|
|
||||||
3
|
|
||||||
# 121 y
|
|
||||||
4
|
|
||||||
# 122 z
|
|
||||||
4
|
|
||||||
# 123 {
|
|
||||||
0
|
|
||||||
# 124 |
|
|
||||||
0
|
|
||||||
# 125 }
|
|
||||||
0
|
|
||||||
# 126 ~
|
|
||||||
0
|
|
||||||
@@ -1,71 +1,70 @@
|
|||||||
# JailDoctor's Dilemma - Catalan Locale
|
# JailDoctor's Dilemma - Catalan Locale
|
||||||
# lang: ca
|
# lang: ca
|
||||||
# Nota: s'utilitzen nomes caracters ASCII per compatibilitat amb la font del joc
|
|
||||||
|
|
||||||
title:
|
title:
|
||||||
marquee: "EH JAILEROS!! ES EL 2022 I ENCARA HO PETEM COM EL 1998!!! HEU SENTIT? ELS JAILGAMES HAN TORNAT!! SIII HAN TORNAT!! MES DE 10 TITOLS A LA CUINA DEL JAILDOC!! AIXO ES MOLT, PERO QUIN SERA EL PRIMER? TAMBE HI HA UN NOU APARELL QUE US FARA VOLAR EL CAP AMB JAILGAMES A TOT ARREU: P.A.C.O. PERO ESPERA! QUE ES AQUELLA BELLESA QUE VEIG ALLA? OOOH AQUELLA PETITA MINIASCII ES PUR AMOR!! VULL LLEPAR CADA BYTE! OH MERDA! I NO OBLIDEU PORTAR AQUELLS VELLS I GRASSOS JAILGAMES DE MS-DOS A GITHUB PER MANTENIR-LOS VIUS!! QUIN SERA EL PROPER LLANCAMENT DEL JAILDOC? QUIN PROJECTE COBRARA VIDA?? OH NANOS NO HO SABEM PERO AQUI PODEU TROBAR LA RESPOSTA, NOMES HEU DE COMPLETAR EL DILEMA DEL JAILDOCTOR ... PODEU?"
|
marquee: "EH JAILEROS!! ESTEM EN 2022 I ENCARA HO PETEM COM EN 1998!! QUE, HO HEU SENTIT O NO? ELS JAILGAMES HAN TORNAT!! SÍ, COLLONS, HAN TORNAT!! MÉS DE 10 TÍTOLS QUE EL JAILDOC TÉ A FOC LENT!! AIXÒ ÉS UNA BARBARITAT, PERÒ... QUIN EIXIRÀ PRIMER? I ATENCIÓ, QUE HI HA UN APARELLET NOU QUE VOS FARÀ VOLAR EL CAP: EL P.A.C.O.! PERÒ UN MOMENT... QUÈ ÉS AQUELL ENCANTET QUE VE ALLÀ? OOOH, AQUELLA MINIASCII ÉS AMOR DEL BO!! LI PEGARIA UNA MOSSEGADA A CADA BYTE! OSTRES! I NO VOS OBLIDEU DE PUJAR AQUELLS JAILGAMES VELLS I PANXUTS DE MS-DOS A GITHUB, QUE SI NO ES PERDRAN!! QUIN SERÀ EL PROPER PROJECTE DEL JAILDOC? QUÈ PRENDRA VIDA? AI MARE... NI IDEA, PERÒ ACÍ PODEU SABER-HO SI RESOLGUEU EL DILEMA DEL JAILDOCTOR... VOS ATREVIU O QUÈ?"
|
||||||
menu:
|
menu:
|
||||||
play: "1. JUGAR"
|
play: "1. JUGAR"
|
||||||
keyboard: "2. REDEFINIR TECLAT"
|
keyboard: "2. REDEFINIR TECLAT"
|
||||||
joystick: "3. REDEFINIR MANDO"
|
joystick: "3. REDEFINIR MANDO"
|
||||||
projects: "4. PROJECTES"
|
projects: "4. PROJECTES"
|
||||||
keys:
|
keys:
|
||||||
prompt0: "PREM TECLA PER ESQUERRA"
|
prompt0: "PREM UNA TECLA PER A ESQUERRA"
|
||||||
prompt1: "PREM TECLA PER DRETA"
|
prompt1: "PREM UNA TECLA PER A DRETA"
|
||||||
prompt2: "PREM TECLA PER SALTAR"
|
prompt2: "PREM UNA TECLA PER A SALTAR"
|
||||||
defined: "TECLES DEFINIDES"
|
defined: "TECLES DEFINIDES"
|
||||||
label0: "ESQUERRA: "
|
label0: "ESQUERRA: "
|
||||||
label1: "DRETA: "
|
label1: "DRETA: "
|
||||||
label2: "SALTAR: "
|
label2: "SALTAR: "
|
||||||
invalid: "TECLA INVALIDA! PROVA UNA ALTRA"
|
invalid: "TECLA INVÀLIDA! PROVA'N UNA ALTRA"
|
||||||
already_used: "TECLA JA USADA! PROVA UNA ALTRA"
|
already_used: "TECLA JA USADA! PROVA'N UNA ALTRA"
|
||||||
buttons:
|
buttons:
|
||||||
prompt0: "PREM BOTO PER ESQUERRA"
|
prompt0: "PREM UN BOTÓ PER A ESQUERRA"
|
||||||
prompt1: "PREM BOTO PER DRETA"
|
prompt1: "PREM UN BOTÓ PER A DRETA"
|
||||||
prompt2: "PREM BOTO PER SALTAR"
|
prompt2: "PREM UN BOTÓ PER A SALTAR"
|
||||||
defined: "BOTONS DEFINITS"
|
defined: "BOTONS DEFINITS"
|
||||||
already_used: "BOTO JA USAT! PROVA UN ALTRE"
|
already_used: "BOTÓ JA USAT! PROVA'N UN ALTRE"
|
||||||
projects: "PROJECTES"
|
projects: "PROJECTES"
|
||||||
|
|
||||||
game_over:
|
game_over:
|
||||||
title: "G A M E O V E R"
|
title: "G A M E O V E R"
|
||||||
items: "OBJECTES: "
|
items: "OBJECTES: "
|
||||||
rooms: "SALES: "
|
rooms: "SALES: "
|
||||||
worst_nightmare: "EL TEU PITJOR MALSON ES"
|
worst_nightmare: "EL TEU PITJOR MALSON ÉS"
|
||||||
|
|
||||||
ending:
|
ending:
|
||||||
t0: "FINALMENT HO VA ACONSEGUIR"
|
t0: "FINALMENT HO VA ACONSEGUIR"
|
||||||
t1: "ARRIBAR A LA JAIL"
|
t1: "ARRIBAR A LA JAIL"
|
||||||
t2: "AMB TOTS ELS SEUS PROJECTES"
|
t2: "AMB TOTS ELS SEUS PROJECTES"
|
||||||
t3: "A PUNT PER SER ALLIBERATS"
|
t3: "A PUNT D'ALLIBERAR-LOS"
|
||||||
t4: "ALLI ESTAVEN TOTS ELS JAILERS"
|
t4: "ALLÍ ESTAVEN TOTS ELS JAILERS"
|
||||||
t5: "ESPERANT QUE ELS JAILGAMES"
|
t5: "ESPERANT QUE ELS JAILGAMES"
|
||||||
t6: "FOSSIN ALLIBERATS"
|
t6: "FOREN ALLIBERATS"
|
||||||
t7: "HI HAVIA FINS I TOT BARRULLS"
|
t7: "HI HAVIA FINS I TOT BARRULLS"
|
||||||
t8: "I BEGGINERS ENTRE LA MULTITUD"
|
t8: "I BEGGINERS ENTRE LA GENT"
|
||||||
t9: "BRY ESTAVA PLORANT..."
|
t9: "BRY ESTAVA FENT LLAGRIMETA..."
|
||||||
t10: "PERO DE SOBTE ALGUNA COSA"
|
t10: "PERÒ DE SOBTE ALGUNA COSA"
|
||||||
t11: "VA ATREURE LA SEVA ATENCIO"
|
t11: "LI VA CRIDAR L'ATENCIÓ"
|
||||||
t12: "UN MUNT DE FERALLA!"
|
t12: "UN MUNT DE FERRALLA!"
|
||||||
t13: "PLE DE TRASTOS QUE NO FUNCIONEN!!"
|
t13: "PLE D'ANDROMINES QUE NI ANAVEN!!"
|
||||||
t14: "I ALESHORES,"
|
t14: "I ALESHORES,"
|
||||||
t15: "QUARANTA NOUS PROJECTES"
|
t15: "QUARANTA PROJECTES NOUS"
|
||||||
t16: "VAN NEIXER..."
|
t16: "VAN NÀIXER..."
|
||||||
|
|
||||||
ending2:
|
ending2:
|
||||||
starring: "PROTAGONISTES"
|
starring: "PROTAGONISTES"
|
||||||
jaildoctor: "JAILDOCTOR"
|
jaildoctor: "JAILDOCTOR"
|
||||||
thank_you: "GRACIES"
|
thank_you: "GRÀCIES"
|
||||||
for_playing: "PER JUGAR!"
|
for_playing: "PER JUGAR!"
|
||||||
|
|
||||||
credits:
|
credits:
|
||||||
instructions: "INSTRUCCIONS:"
|
instructions: "INSTRUCCIONS:"
|
||||||
l0: "AJUDA A JAILDOC A RECUPERAR"
|
l0: "AJUDA EL JAILDOC A RECUPERAR"
|
||||||
l1: "ELS SEUS PROJECTES I ANAR A"
|
l1: "ELS SEUS PROJECTES I ARRIBAR A"
|
||||||
l2: "LA JAIL PER ACABAR-LOS"
|
l2: "LA JAIL PER ACABAR-LOS"
|
||||||
keys: "TECLES:"
|
keys: "TECLES:"
|
||||||
keys_move: "CURSORS PER MOURE I SALTAR"
|
keys_move: "CURSORS PER A MOURE I SALTAR"
|
||||||
f8: "F8 ACTIVAR/DESACTIVAR MUSICA"
|
f8: "F8 ACTIVAR/DESACTIVAR MÚSICA"
|
||||||
f11: "F11 PAUSAR EL JOC"
|
f11: "F11 PAUSAR EL JOC"
|
||||||
f1f2: "F1-F2 MIDA DE LA FINESTRA"
|
f1f2: "F1-F2 MIDA DE LA FINESTRA"
|
||||||
f3: "F3 PANTALLA COMPLETA"
|
f3: "F3 PANTALLA COMPLETA"
|
||||||
@@ -77,35 +76,35 @@ credits:
|
|||||||
achievements:
|
achievements:
|
||||||
header: "ASSOLIMENT DESBLOQUEJAT!"
|
header: "ASSOLIMENT DESBLOQUEJAT!"
|
||||||
c1: "COSES BRILLANTS"
|
c1: "COSES BRILLANTS"
|
||||||
d1: "Obteniu el 25% dels objectes"
|
d1: "Aconseguiu el 25% dels objectes"
|
||||||
c2: "A MEITAT DE CAMI"
|
c2: "A MITJAN CAMÍ"
|
||||||
d2: "Obteniu el 50% dels objectes"
|
d2: "Aconseguiu el 50% dels objectes"
|
||||||
c3: "QUASI HI SOM"
|
c3: "QUASI HI SOM"
|
||||||
d3: "Obteniu el 75% dels objectes"
|
d3: "Aconseguiu el 75% dels objectes"
|
||||||
c4: "EL COL LECCIONISTA"
|
c4: "EL COL·LECCIONISTA"
|
||||||
d4: "Obteniu el 100% dels objectes"
|
d4: "Aconseguiu el 100% dels objectes"
|
||||||
c5: "PASSEJANT PER AQUI"
|
c5: "PASSEJANT PER ACÍ"
|
||||||
d5: "Visiteu 20 sales"
|
d5: "Visiteu 20 sales"
|
||||||
c6: "M'HE PERDUT"
|
c6: "M'HE PERDUT"
|
||||||
d6: "Visiteu 40 sales"
|
d6: "Visiteu 40 sales"
|
||||||
c7: "M'AGRADA EXPLORAR"
|
c7: "M'AGRADA EXPLORAR"
|
||||||
d7: "Visiteu totes les sales"
|
d7: "Visiteu totes les sales"
|
||||||
c8: "JA ESTA?"
|
c8: "JA ESTÀ?"
|
||||||
d8: "Completa el joc"
|
d8: "Completeu el joc"
|
||||||
c9: "EM VA XUCLAR UN FORAT"
|
c9: "UN FORAT EM VA ENGOLIR"
|
||||||
d9: "Completa el joc sense entrar a la preso"
|
d9: "Completeu el joc sense entrar a la presó"
|
||||||
c10: "ELS MEUS PROJECTES"
|
c10: "ELS MEUS PROJECTES"
|
||||||
d10: "Completa el joc amb tots els objectes"
|
d10: "Completeu el joc amb tots els objectes"
|
||||||
c11: "M'AGRADEN ELS MEUS AMICS DE COLORS"
|
c11: "M'AGRADEN ELS MEUS AMICS DE COLORS"
|
||||||
d11: "Completa el joc sense morir"
|
d11: "Completeu el joc sense morir"
|
||||||
c12: "PROJECTES MALS FETS DE PRESSA"
|
c12: "PROJECTES A CORRE-CUITA"
|
||||||
d12: "Completa el joc en menys de 30 minuts"
|
d12: "Completeu el joc en menys de 30 minuts"
|
||||||
|
|
||||||
ui:
|
ui:
|
||||||
press_again_menu: "PREM DE NOU PER TORNAR AL MENU"
|
press_again_menu: "PREM DE NOU PER TORNAR AL MENÚ"
|
||||||
press_again_exit: "PREM DE NOU PER SORTIR"
|
press_again_exit: "PREM DE NOU PER EIXIR"
|
||||||
border_enabled: "BORDE ACTIVAT"
|
border_enabled: "VORA ACTIVADA"
|
||||||
border_disabled: "BORDE DESACTIVAT"
|
border_disabled: "VORA DESACTIVADA"
|
||||||
fullscreen_enabled: "PANTALLA COMPLETA ACTIVADA"
|
fullscreen_enabled: "PANTALLA COMPLETA ACTIVADA"
|
||||||
fullscreen_disabled: "PANTALLA COMPLETA DESACTIVADA"
|
fullscreen_disabled: "PANTALLA COMPLETA DESACTIVADA"
|
||||||
window_zoom: "ZOOM FINESTRA x"
|
window_zoom: "ZOOM FINESTRA x"
|
||||||
@@ -120,12 +119,12 @@ ui:
|
|||||||
|
|
||||||
scoreboard:
|
scoreboard:
|
||||||
items: "TRESORS PILLATS "
|
items: "TRESORS PILLATS "
|
||||||
time: " HORA "
|
time: " TEMPS "
|
||||||
rooms: "SALES"
|
rooms: "SALES"
|
||||||
|
|
||||||
game:
|
game:
|
||||||
music_enabled: "MUSICA ACTIVADA"
|
music_enabled: "MÚSICA ACTIVADA"
|
||||||
music_disabled: "MUSICA DESACTIVADA"
|
music_disabled: "MÚSICA DESACTIVADA"
|
||||||
paused: "JOC EN PAUSA"
|
paused: "JOC EN PAUSA"
|
||||||
running: "JOC EN MARXA"
|
running: "JOC EN MARXA"
|
||||||
enabled: " ACTIVAT"
|
enabled: " ACTIVAT"
|
||||||
|
|||||||
242
tools/font_gen/font_gen.py
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Generador de fuentes bitmap para JailDoctor's Dilemma.
|
||||||
|
|
||||||
|
Convierte un archivo .ttf en un GIF indexado + fichero .fnt compatibles
|
||||||
|
con el sistema de texto del juego.
|
||||||
|
|
||||||
|
Dependencias: pip install Pillow
|
||||||
|
|
||||||
|
Uso:
|
||||||
|
python3 font_gen.py --ttf myfont.ttf --size 8 --output myfont
|
||||||
|
python3 font_gen.py --ttf myfont.ttf --size 8 --output myfont --dir data/font --box-width 8
|
||||||
|
|
||||||
|
Notas:
|
||||||
|
- Para fuentes bitmap (pixel fonts) en TTF, usa el tamaño exacto del bitmap strike.
|
||||||
|
- Los glifos se almacenan como índice de paleta 1 (blanco) sobre fondo transparente (índice 0).
|
||||||
|
- Esto es compatible con SurfaceSprite::render(1, color) del motor del juego.
|
||||||
|
- Los caracteres no incluidos en la fuente aparecerán como celdas vacías en el GIF.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from math import ceil
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
except ImportError:
|
||||||
|
print("Error: Pillow no está instalado. Ejecuta: pip install Pillow", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Conjunto de caracteres en el mismo orden que los ficheros .fnt del juego.
|
||||||
|
# ASCII 32-126 primero, luego extensiones para castellano, catalán y valenciano.
|
||||||
|
_ASCII_CHARS = [chr(i) for i in range(32, 127)] # 95 chars: espacio … ~
|
||||||
|
_EXTENDED_CHARS = list("ÀÁÈÉÍÏÒÓÚÜÑÇàáèéíïòóúüñç¡¿«»·") # 29 chars ES/CA/VA
|
||||||
|
ALL_CHARS = _ASCII_CHARS + _EXTENDED_CHARS # 124 total
|
||||||
|
|
||||||
|
|
||||||
|
def render_font(
|
||||||
|
ttf_path: str,
|
||||||
|
size: int,
|
||||||
|
output_name: str,
|
||||||
|
output_dir: str,
|
||||||
|
columns: int,
|
||||||
|
box_width_override: int | None,
|
||||||
|
box_height_override: int | None,
|
||||||
|
) -> None:
|
||||||
|
"""Genera el GIF indexado y el .fnt a partir de un archivo .ttf."""
|
||||||
|
|
||||||
|
if not os.path.isfile(ttf_path):
|
||||||
|
print(f"Error: No se encuentra el archivo TTF: {ttf_path}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
output_gif = os.path.join(output_dir, f"{output_name}.gif")
|
||||||
|
output_fnt = os.path.join(output_dir, f"{output_name}.fnt")
|
||||||
|
|
||||||
|
# --- Cargar fuente ---
|
||||||
|
try:
|
||||||
|
font = ImageFont.truetype(ttf_path, size)
|
||||||
|
except OSError as e:
|
||||||
|
print(f"Error al cargar la fuente: {e}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# --- Calcular dimensiones de la caja ---
|
||||||
|
# box_height = línea completa: ascent (sobre la línea base) + descent (bajo ella)
|
||||||
|
ascent, descent = font.getmetrics()
|
||||||
|
box_height = box_height_override if box_height_override is not None else (ascent + abs(descent))
|
||||||
|
|
||||||
|
# Filtrar chars: solo incluir los que el TTF soporta realmente.
|
||||||
|
# Un char se descarta si su advance es 0 (el TTF no lo tiene) y no es un
|
||||||
|
# espacio. Evita que chars sin glifo aparezcan con width=1 en el .fnt,
|
||||||
|
# lo que causaría solapamiento masivo al renderizar texto localizado.
|
||||||
|
chars_to_render = [
|
||||||
|
ch for ch in ALL_CHARS
|
||||||
|
if ch.isspace() or font.getlength(ch) >= 1.0
|
||||||
|
]
|
||||||
|
skipped = [ch for ch in ALL_CHARS if ch not in chars_to_render]
|
||||||
|
if skipped:
|
||||||
|
print(f"Omitidos : {len(skipped)} chars sin soporte en este TTF: {''.join(skipped)}")
|
||||||
|
|
||||||
|
# Medir advance width tipográfico: solo se usa para calcular box_width del canvas
|
||||||
|
# cuando el usuario no lo especifica. El ancho real del .fnt se mide desde píxeles.
|
||||||
|
char_widths: dict[str, int] = {}
|
||||||
|
for ch in chars_to_render:
|
||||||
|
char_widths[ch] = max(1, int(font.getlength(ch)))
|
||||||
|
|
||||||
|
# Calcular el offset vertical para eliminar el espacio en blanco en la parte
|
||||||
|
# superior de la celda. Muchas fuentes bitmap tienen un em-box más grande que
|
||||||
|
# los píxeles visibles (ascent incluye espacio interno). Usamos las letras
|
||||||
|
# mayúsculas como referencia de "cap height": su bbox[1] indica cuántos
|
||||||
|
# píxeles en blanco hay sobre los caracteres más altos, y restamos ese valor
|
||||||
|
# para que las mayúsculas queden alineadas al borde superior de la celda.
|
||||||
|
cap_tops = [font.getbbox(ch)[1] for ch in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" if font.getbbox(ch)]
|
||||||
|
y_offset = -round(sum(cap_tops) / len(cap_tops)) if cap_tops else 0
|
||||||
|
|
||||||
|
# box_width: anchura de cada celda en el bitmap.
|
||||||
|
# Si el usuario la especifica, se usa tal cual. Si no, se calcula como el
|
||||||
|
# advance máximo (sin padding extra, ya que getlength incluye el espaciado).
|
||||||
|
if box_width_override is not None:
|
||||||
|
box_width = box_width_override
|
||||||
|
else:
|
||||||
|
box_width = max(char_widths.values())
|
||||||
|
|
||||||
|
# --- Calcular dimensiones del bitmap completo ---
|
||||||
|
rows = ceil(len(chars_to_render) / columns)
|
||||||
|
img_width = columns * box_width
|
||||||
|
img_height = rows * box_height
|
||||||
|
|
||||||
|
print(f"Fuente : {os.path.basename(ttf_path)}, size={size}")
|
||||||
|
print(f"Caja : {box_width}×{box_height} px | {columns} columnas, {rows} filas")
|
||||||
|
print(f"Bitmap : {img_width}×{img_height} px | {len(chars_to_render)} caracteres")
|
||||||
|
|
||||||
|
# --- Buffer de píxeles: 0 = fondo transparente, 1 = glifo ---
|
||||||
|
pixels = bytearray(img_width * img_height)
|
||||||
|
|
||||||
|
# --- Renderizar cada carácter ---
|
||||||
|
for i, ch in enumerate(chars_to_render):
|
||||||
|
col = i % columns
|
||||||
|
row = i // columns
|
||||||
|
cell_x = col * box_width
|
||||||
|
cell_y = row * box_height
|
||||||
|
|
||||||
|
bbox = font.getbbox(ch)
|
||||||
|
if not bbox:
|
||||||
|
# Sin glifos visibles (ej. espacio): celda vacía, correcto.
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Renderizar a imagen RGBA con fondo transparente, texto blanco.
|
||||||
|
#
|
||||||
|
# POSICIONAMIENTO VERTICAL: se usa y=0 para respetar la posición del
|
||||||
|
# carácter relativa a la línea base del em-box. draw.text((x, 0), ch)
|
||||||
|
# coloca la parte superior del em-box en y=0, de modo que la línea base
|
||||||
|
# queda en y=ascent y los signos de puntuación (que están cerca de la
|
||||||
|
# línea base) aparecen en la parte inferior de la celda, como es correcto.
|
||||||
|
#
|
||||||
|
# POSICIONAMIENTO HORIZONTAL: -bbox[0] alinea el borde izquierdo del
|
||||||
|
# glifo al inicio de la celda, compensando el bearing izquierdo.
|
||||||
|
char_img = Image.new("RGBA", (box_width, box_height), (0, 0, 0, 0))
|
||||||
|
draw = ImageDraw.Draw(char_img)
|
||||||
|
draw.text((-bbox[0], y_offset), ch, font=font, fill=(255, 255, 255, 255))
|
||||||
|
|
||||||
|
# Umbralizar alpha y volcar al buffer de índices
|
||||||
|
char_bytes = char_img.tobytes()
|
||||||
|
for py in range(box_height):
|
||||||
|
for px in range(box_width):
|
||||||
|
src = (py * box_width + px) * 4
|
||||||
|
if char_bytes[src + 3] > 128:
|
||||||
|
pixels[(cell_y + py) * img_width + (cell_x + px)] = 1
|
||||||
|
|
||||||
|
# Medir ancho visual real: última columna con algún píxel opaco.
|
||||||
|
# Reemplaza el advance tipográfico de getlength() que incluye side-bearings.
|
||||||
|
for px in range(box_width - 1, -1, -1):
|
||||||
|
if any(char_bytes[(py * box_width + px) * 4 + 3] > 128 for py in range(box_height)):
|
||||||
|
char_widths[ch] = px + 1
|
||||||
|
break
|
||||||
|
|
||||||
|
# --- Crear imagen P (paleta indexada 8 bits) ---
|
||||||
|
img = Image.frombytes("P", (img_width, img_height), bytes(pixels))
|
||||||
|
|
||||||
|
# Paleta mínima: índice 0 = negro (transparente), índice 1 = blanco (glifo)
|
||||||
|
palette = [0] * 768
|
||||||
|
palette[3] = palette[4] = palette[5] = 255 # índice 1 → blanco
|
||||||
|
img.putpalette(palette)
|
||||||
|
|
||||||
|
# Guardar GIF: índice 0 = fondo, índice 1 = glifo.
|
||||||
|
# Pillow sin transparency escribe GIF87a. Luego magick reduce la paleta a
|
||||||
|
# 2 colores (lzw_min=2) para compatibilidad exacta con el parser gif.cpp.
|
||||||
|
img.save(output_gif, optimize=False)
|
||||||
|
try:
|
||||||
|
import subprocess
|
||||||
|
subprocess.run(
|
||||||
|
["magick", output_gif, "-colors", "2", f"GIF87:{output_gif}"],
|
||||||
|
check=True, capture_output=True,
|
||||||
|
)
|
||||||
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||||
|
pass # si magick no está disponible se queda como GIF87a de 256 colores
|
||||||
|
print(f"GIF : {output_gif}")
|
||||||
|
|
||||||
|
# --- Generar fichero .fnt ---
|
||||||
|
ttf_name = os.path.basename(ttf_path)
|
||||||
|
with open(output_fnt, "w", encoding="utf-8") as f:
|
||||||
|
f.write(f"# Font: {output_name} — generado desde {ttf_name} size {size}\n")
|
||||||
|
f.write(f"# Generado con tools/font_gen/font_gen.py\n\n")
|
||||||
|
f.write(f"box_width {box_width}\n")
|
||||||
|
f.write(f"box_height {box_height}\n")
|
||||||
|
f.write(f"columns {columns}\n\n")
|
||||||
|
f.write("# codepoint_decimal ancho_visual\n")
|
||||||
|
for ch in chars_to_render:
|
||||||
|
cp = ord(ch)
|
||||||
|
w = char_widths[ch]
|
||||||
|
name = ch if ch.isprintable() and not ch.isspace() else f"U+{cp:04X}"
|
||||||
|
f.write(f"{cp} {w} # {name}\n")
|
||||||
|
|
||||||
|
print(f"FNT : {output_fnt}")
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
# Directorio del proyecto: dos niveles arriba de este script (tools/font_gen/)
|
||||||
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
project_dir = os.path.dirname(os.path.dirname(script_dir))
|
||||||
|
default_dir = os.path.join(project_dir, "data", "font")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Genera fuentes bitmap (.gif + .fnt) desde un archivo .ttf.",
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
epilog="""
|
||||||
|
Ejemplos:
|
||||||
|
python3 font_gen.py --ttf myfont.ttf --size 8 --output myfont
|
||||||
|
python3 font_gen.py --ttf myfont.ttf --size 8 --output myfont --box-width 8
|
||||||
|
python3 font_gen.py --ttf myfont.ttf --size 16 --output myfont --dir data/font
|
||||||
|
|
||||||
|
Notas:
|
||||||
|
- Para pixel fonts (.ttf bitmap), usa el tamaño exacto del bitmap strike.
|
||||||
|
- El GIF resultante usa índice 1 = glifo, índice 0 = transparente.
|
||||||
|
- Se generan 124 caracteres: ASCII 32-126 + extensiones ES/CA/VA.
|
||||||
|
- Usa --box-width para forzar una anchura de celda fija (útil para fuentes
|
||||||
|
cuadradas donde la celda coincide con box_height).
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
parser.add_argument("--ttf", required=True, help="Ruta al archivo .ttf")
|
||||||
|
parser.add_argument("--size", required=True, type=int, help="Tamaño en píxeles")
|
||||||
|
parser.add_argument("--output", required=True, help="Nombre base de salida (sin extensión)")
|
||||||
|
parser.add_argument("--dir", default=default_dir, help="Directorio de salida (default: data/font/)")
|
||||||
|
parser.add_argument("--columns", default=15, type=int, help="Columnas en el bitmap (default: 15)")
|
||||||
|
parser.add_argument("--box-width", default=None, type=int, help="Anchura fija de celda en px (default: auto)")
|
||||||
|
parser.add_argument("--box-height", default=None, type=int, help="Altura fija de celda en px (default: ascent + abs(descent))")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
render_font(
|
||||||
|
ttf_path = args.ttf,
|
||||||
|
size = args.size,
|
||||||
|
output_name = args.output,
|
||||||
|
output_dir = args.dir,
|
||||||
|
columns = args.columns,
|
||||||
|
box_width_override = args.box_width,
|
||||||
|
box_height_override = args.box_height,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||