55***********************************************************************************/
66#include "../inc/global.h"
77
8+ /*
9+ ASCI: 33 = " (comillas) usar: \"
10+ ASCI: 92 = \ (CUIDADO! escape seuence) usar siempre: \\
11+ */
812
13+ #define topdialogo 128//0-127=X 128=\0
14+ //---------------------|XXXXXXXXXXXXXXXXXXXXXXXXX0|---------
15+ const char dialogo0 []= {"El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja." };
16+ const char dialogo1 []= {" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ " };
917
10- void dialogo (u16 x ,u16 y ,u8 ancho , u8 alto ){
18+
19+ const char dialogo2 []= {"¡¿ÁÉÍÑÓÚÜáéíñóúü" };//ASCII Extendido
20+ const char dialogo3 []= {" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¿ÁÉÍÑÓÚÜáéíñóúü" };
21+
22+ const u8 ascii_SP []= {129 ,159 ,161 ,169 ,173 ,177 ,179 ,186 ,188 ,193 ,201 ,205 ,209 ,211 ,218 ,220 };
23+ /*Message : ¡
24+ Message : letra: 14 >ASCI: 161 >c: 129
25+ Message : ¿
26+ Message : letra: 15 >ASCI: 191 >c: 159
27+ Message : Á
28+ Message : letra: 0 >ASCI: 193 >c: 161
29+ Message : É
30+ Message : letra: 1 >ASCI: 201 >c: 169
31+ Message : Í
32+ Message : letra: 2 >ASCI: 205 >c: 173
33+ Message : Ñ
34+ Message : letra: 5 >ASCI: 209 >c: 177
35+ Message : Ó
36+ Message : letra: 3 >ASCI: 211 >c: 179
37+ Message : Ú
38+ Message : letra: 4 >ASCI: 218 >c: 186
39+ Message : Ü
40+ Message : letra: 6 >ASCI: 220 >c: 188
41+ Message : á
42+ Message : letra: 7 >ASCI: 225 >c: 193
43+ Message : é
44+ Message : letra: 8 >ASCI: 233 >c: 201
45+ Message : í
46+ Message : letra: 9 >ASCI: 237 >c: 205
47+ Message : ñ
48+ Message : letra: 12 >ASCI: 241 >c: 209
49+ Message : ó
50+ Message : letra: 10 >ASCI: 243 >c: 211
51+ Message : ú
52+ Message : letra: 11 >ASCI: 250 >c: 218
53+ Message : ü
54+ Message : letra: 13 >ASCI: 252 >c: 220
55+ */
56+
57+ static u8 ASCII_EXT (u8 charasci ){
58+ u8 i = 0 ;
59+ while (ascii_SP [i ]!= charasci ){
60+ i ++ ;
61+ }
62+ return 96 + i ;
63+ }
64+
65+
66+ const char * dialogos [] = {dialogo0 ,dialogo1 ,dialogo2 ,dialogo3 };
67+
68+ void dialogo (u16 x ,u16 y ,u8 ancho , u8 alto , u8 numdiag ){
1169
1270 u8 i ;
1371 //--------Marco Esquinas---------------------------------------------------------
@@ -43,53 +101,99 @@ void dialogo(u16 x,u16 y,u8 ancho, u8 alto){
43101 SPR_setDepth (dig_marcoV [i ],SPR_MIN_DEPTH + 2 );//-32766
44102 SPR_setDepth (dig_marcoVd [i ],SPR_MIN_DEPTH + 2 );//-32766
45103 }
104+ SPR_update ();SYS_doVBlankProcess ();
46105
47106 //Lienzo 32x32---------------------------------------------------
48- Sprite * dig_lienzo [ancho * alto ];
107+
108+ u16 Start_ind = diag_ind + 1 + 4 + 4 ;
109+
110+ u8 aa = ancho * alto ;
111+ KLog_U3 ("ancho: " ,ancho ,"*alto: " ,alto ," >" ,aa );
112+ Sprite * dig_lienzo [aa ];
113+
49114 u8 spritelienzo3232 = 0 ;
50115 for (u8 v = 0 ;v < alto ;v ++ ){
51116 for (u8 h = 0 ;h < ancho ;h ++ ){
52- dig_lienzo [spritelienzo3232 ]= SPR_addSpriteEx (& dig_marco4 ,x + 8 + (32 * h ),y + 8 + (32 * v ),TILE_ATTR_FULL (2 ,TRUE,FALSE,FALSE,diag_ind + 1 + 4 + 4 + (16 * spritelienzo3232 )),0 ,SPR_FLAG_AUTO_SPRITE_ALLOC | SPR_FLAG_AUTO_TILE_UPLOAD );
117+ dig_lienzo [spritelienzo3232 ]= SPR_addSpriteEx (& dig_marco4 ,x + 8 + (32 * h ),y + 8 + (32 * v ),TILE_ATTR_FULL (2 ,TRUE,FALSE,FALSE,Start_ind + (16 * spritelienzo3232 )),0 ,SPR_FLAG_AUTO_SPRITE_ALLOC | SPR_FLAG_AUTO_TILE_UPLOAD );
118+ if ((spritelienzo3232 & 10 )== 10 ){ //necesario para no llenar el DMA
119+ SPR_update ();SYS_doVBlankProcess ();
120+ }
53121 SPR_setDepth (dig_lienzo [spritelienzo3232 ],SPR_MIN_DEPTH + 2 );//-32766
54122 spritelienzo3232 ++ ;
55123 }
56124 }
57125
58126 SPR_update ();//SPR_FLAG_AUTO_TILE_UPLOAD FUNCIONE! Deve estar VISIBLE! Volvado automatico de tileset de los sprites a la VRAM
59-
60127 SYS_doVBlankProcess ();
61128
62129 //Insertar Caracteres 8x16 en el lienzo VRAM
63130
64- // unpack first
65- TileSet * t = unpackTileSet (& font16 , NULL );//descomprimimos TilSet
66- //KLog_U1("t->numTile:",t->numTile);//numTile:384
131+ //descomprimimos TilSet
132+ TileSet * t = unpackTileSet (& font16 , NULL );
133+ //KLog_U1("t->numTile: ",t->numTile);//numTile:384
134+
67135
68- u16 Start_ind = diag_ind + 1 + 4 + 4 ;
69136 //u16 top_ind=Start_ind+(16*spritelienzo3232);
70137 u16 ind = Start_ind ;
71- u16 copy_ind ;
138+ u16 copy_ind = 0 ;
72139
73140 u8 cancho = 0 ;
74141 u8 tcancho = ancho * 4 ;// 1 ancho = 4 tiles
75142
76143 u8 dig_fila = 0 ;
77144 bool subfila = FALSE;
78145
79- u8 c = 0 ;
146+ char cadena_org [topdialogo ];//tipo cadena completa ""(se auto añade al final \0)
147+ char cadena_temp [1 ];//[0] caracter, [1]=\0
148+
149+ u16 c ;//valor indice de Tileset de la tabla ASCII grafico! 8x16
150+ u8 rc ,ct ;//valor caracter ASCII 0(32)=" "
151+
152+ /*for(rc=32;rc<256;rc++){
153+ cadena_temp[0]=rc;cadena_temp[1]='\0';
154+ KLog_U1(cadena_temp,rc);
155+ }*/
80156
157+ u8 dig_long = strlen (dialogos [numdiag ]);
158+ //VDP_drawInt(dig_long,0,35,ScreenY);
159+
160+ strcpy (cadena_org ,dialogos [numdiag ]);//VDP_drawText(cadena_org,0,ScreenY);
161+
162+ KLog (cadena_org );
163+
164+ u8 letra = 0 ;//numero de posicion de caracteres de la frase
165+ u8 vel_letra = 6 ;
81166 //KLog_U4("ancho:",ancho,"-tcancho:",tcancho,">ind:",Start_ind," -top_ind:",top_ind);
82167 bool skip = FALSE;
83168
84169 do {
85170
171+ cadena_temp [0 ]= cadena_org [letra ];cadena_temp [1 ]= '\0' ;// [0] = H > ASCII:72
172+
173+ KLog (cadena_temp );
174+
175+ rc = cadena_temp [0 ];//32-255
176+ c = rc - 32 ;//32>0 ASCII valor
177+
178+ if (c > 128 ){ c = ASCII_EXT (c ); }
179+
180+
181+ KLog_U3 ("letra: " ,letra ," >ASCI: " ,rc ," >c: " ,c );
182+
86183
87184 //KLog_U1(">ind:",ind);
88185 if (c > 0 ){//0=Espacio,1=!,2=...
186+
187+ if (c > 15 ){//calcular +16 X cada > 16 caracteres ASCII
188+ ct = c /16 ;
189+ ct = 16 * ct ;//necesario para saltar a la siguiente linea tabla ASCII
190+ c += ct ;
191+ KLog_U2 ("/16> " ,ct ," *16= " ,c );
192+ }
89193 //Tails8521
90194 //----No se puede comprimir----Dirección del búfer de origen., Dirección de destino VRAM / CRAM / VSRAM.
91195 //DMA_queueDma(DMA_VRAM, (void *)yourtileset.tiles + yourtileindexinthetileset * 32, yourvramtileindex * 32, 16, 2);
92- DMA_queueDmaFast (DMA_VRAM ,(void * )t -> tiles + c * 32 ,ind * 32 ,16 ,2 );ind ++ ;//0>1 (2>3)
196+ DMA_queueDmaFast (DMA_VRAM ,(void * )t -> tiles + c * 32 ,ind * 32 ,16 ,2 );ind ++ ;//0>1 (2>3)
93197 //ancho> 128/8= 16 tiles | situamos el origen segunda fila de tiles 8x8, parte inferior de chara 8x16
94198 DMA_queueDmaFast (DMA_VRAM ,(void * )t -> tiles + (c + 16 )* 32 ,ind * 32 ,16 ,2 );ind ++ ;//1>2... (3>4...)
95199
@@ -116,22 +220,24 @@ void dialogo(u16 x,u16 y,u8 ancho, u8 alto){
116220 } else ind += 2 ;//saltamos la segunda fila de texto VRAM
117221
118222
119- c ++ ;if (( c & 15 ) == 0 ) c += 16 ; //necesario para saltar a la siguiente linea tabla ASCII
223+ letra ++ ;
120224
121225 if (!skip ){
122- for (i = 0 ;i < 3 ;i ++ ){
123- if (!gat ){
124- if (BUTTONS [6 ]) { skip = TRUE; break ;}//salimos del FOR
226+ if (vel_letra > 0 ){
227+ for (i = 0 ;i < vel_letra ;i ++ ){
228+ if (!gat ){
229+ if (BUTTONS [6 ]) { skip = TRUE; break ;}//salimos del FOR
230+ }
231+ else if (!BUTTONS [6 ]) gat = FALSE;
232+
233+ SYS_doVBlankProcess ();
125234 }
126- else if (!BUTTONS [6 ]) gat = FALSE;
127-
128- SYS_doVBlankProcess ();
129235 }
130236 }
131237 //JOY_waitPressTime(JOY_ALL,BUTTON_B,1000);
132- } while (dig_fila < alto );
238+ } while (dig_fila < alto && letra < dig_long );
133239
134- //liberamos el TileSet de la fuente 8x16 de la RAM
240+ //liberamos el TileSet de la fuente 8x16 ASCII de la RAM
135241 MEM_free (t );
136242
137243
@@ -147,13 +253,11 @@ void dialogo(u16 x,u16 y,u8 ancho, u8 alto){
147253 SYS_doVBlankProcess ();
148254 }while (!BUTTONS [6 ] || gat ); gat = TRUE;
149255
150- for (i = 0 ;i < 4 ;i ++ ) SPR_releaseSprite (dig_marcoE [i ]);
151-
256+ for (i = 0 ;i < spritelienzo3232 ;i ++ ) SPR_releaseSprite (dig_lienzo [i ]);
152257 for (i = 0 ;i < ancho ;i ++ )SPR_releaseSprite (dig_marcoH [i ]);
153258 for (i = 0 ;i < ancho ;i ++ )SPR_releaseSprite (dig_marcoHd [i ]);
154259 for (i = 0 ;i < alto ;i ++ ) SPR_releaseSprite (dig_marcoV [i ]);
155260 for (i = 0 ;i < alto ;i ++ ) SPR_releaseSprite (dig_marcoVd [i ]);
261+ for (i = 0 ;i < 4 ;i ++ ) SPR_releaseSprite (dig_marcoE [i ]);
156262
157- for (i = 0 ;i < spritelienzo3232 ;i ++ ) SPR_releaseSprite (dig_lienzo [i ]);
158-
159263}
0 commit comments