From 783cd7ae8265b7c2e36eb3f9233165e852d19d3a Mon Sep 17 00:00:00 2001 From: jdg Date: Sun, 12 Sep 2021 19:55:53 +0200 Subject: [PATCH] First commit 06/08/1997 --- GO.CPP | 584 ++++++++++++++++++++++++++++++++++++++++++++++++ GO.EXE | Bin 0 -> 54466 bytes PRUEBA1.CPP | 255 +++++++++++++++++++++ README.md | 9 + SNES.CPP | 623 ++++++++++++++++++++++++++++++++++++++++++++++++++++ SNES.EXE | Bin 0 -> 59284 bytes T.EXE | Bin 0 -> 35236 bytes TEXTO.CPP | 281 ++++++++++++++++++++++++ TEXTO.EXE | Bin 0 -> 35127 bytes 9 files changed, 1752 insertions(+) create mode 100644 GO.CPP create mode 100644 GO.EXE create mode 100644 PRUEBA1.CPP create mode 100644 README.md create mode 100644 SNES.CPP create mode 100644 SNES.EXE create mode 100644 T.EXE create mode 100644 TEXTO.CPP create mode 100644 TEXTO.EXE diff --git a/GO.CPP b/GO.CPP new file mode 100644 index 0000000..00c15e9 --- /dev/null +++ b/GO.CPP @@ -0,0 +1,584 @@ +#include +#include +#include +#include +#include +#include + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +/////////////////// Otro tipo de fondo: LLuvia de estrellas +typedef struct +{ + int Ex, Ey, Ez; + char Ecolor; +} CAMPO_de_ESTRELLAS; + +CAMPO_de_ESTRELLAS *Cestrellas, *o; + + +void Actualiza(CAMPO_de_ESTRELLAS *Cest); +void Star3d(CAMPO_de_ESTRELLAS *Cest); +void pon_estrella(CAMPO_de_ESTRELLAS *Cest); +void llena_campo(CAMPO_de_ESTRELLAS *Cest); +void deinit_star(void); +void init_star(void); +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +/* +( (Fon<<4)+Col ) + +( ( (int)( (char)Fon << 4) + Col )<< 8 ) + + 7 6 5 4 º 3 2 1 0 + ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ×ÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ + ³ B ³ b ³ b ³ b º f ³ f ³ f ³ f ³ + ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ×ÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ + º + +In this 8-bit newattr parameter, + þ ffff = 4-bit foreground color (0 to 15) + þ bbb = 3-bit background color (0 to 7) + þ B = blink-enable bit +*/ + +// Proyecto para mostrar cosas en modo texto: 80x50 + +// Preparamos un buffer virtual a pantalla: 80x50*2 bytes/punto = 8000 bytes +int *textoVirtual; + + +int XSinMov[256], YSinMov[256]; +int TSin[360+90]; + +void RellenaTablas(void) +{ + float angle; + + angle = 0; + while( angle < 256 ) + { + XSinMov[angle] = YSinMov[angle] = (int)( sin( (2*M_PI*angle*1.4)/360 ) * 360) / (2*M_PI); + YSinMov[angle] = 0; + angle+=1; + }; + + angle = 0; + while( angle < (360+90) ) + { + TSin[angle] = (int)(sin( (2*M_PI*angle)/360 ) * 360 / (2*M_PI) ); + angle+=1; + }; + +} + +char PRIMARIO8 = YELLOW; char SECUNDARIO1 = RED; +void Put( int x, int y, unsigned char c) +{ + if ( x < 0 || x >= 80 ) return; + if ( y < 0 || y >= 50 ) return; + + WriteChar50( x, y, '±', (c==0 ? 0 : PRIMARIO8), SECUNDARIO1, textoVirtual ); +}; + +//#define RADIO 255 +// Radio de partida +#define RADIO 255 +#define SALTOS_ANCHOS 7 + +//#define SALTOS_PROFUNDOS 8 +// Grado de torcion +#define SALTOS_PROFUNDOS 8 +//#define SALTOS_ANCHOS 7 + +// Saltos de radio +#define BLOQUEO_RADIO 1 + + +#define INCREMENTAL 1 + +//#define PROFUNDIDAD_TUNEL 35 +#define PROFUNDIDAD_TUNEL 35 +#define FACTOR_SERPIENTE 0.015F + +//#define TODO_BLANCO +//#define TODO_GRIS + +int PERFECCION_CIRCULO = 8; +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void Circulo( int x, int y, int radio, int giro, int Color ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), angle >= 0 && angle <= 50 ? (Color-PROFUNDIDAD_TUNEL) : Color ); + +}; + +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void CirculoB( int x, int y, int radio, int giro ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), 0 ); +}; + +void TunelEstrellas(void) +{ + int depth, Color; + static unsigned char ZMov = 0; + static int GiroAngular = 0; + unsigned char Movimiento = ZMov; + static Subidon = 255; + + static Velocidad = 0; + // Controles de giro por JD: + // SUAVE ZMov + // DURO Movimiento + int OGiroAngular = GiroAngular; + GiroAngular = ( GiroAngular++ ) % 360; + + + + ZMov ++; + Movimiento = ZMov; + Color = 255-PROFUNDIDAD_TUNEL; +// Color = 255; + Velocidad++; + if ( Velocidad == 5 ) + { + Velocidad = 0; + // Subidon --; if ( Subidon < 255-PROFUNDIDAD_TUNEL ) Subidon = 255; + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + } +int Retorcido = 0; + + for ( depth=0; depth=0; depth-=SALTOS_ANCHOS*INCREMENTAL, Movimiento+=SALTOS_PROFUNDOS, Color-- ) + { + Retorcido+=15; +/* +OGiroAngular = GiroAngular; +GiroAngular = ( GiroAngular++ ) % 360; +*/ + + // Borra el anterior + CirculoB( XSinMov[(unsigned char)(Movimiento-1)] + 40, YSinMov[(unsigned char)(Movimiento-1)] + 25, RADIO - depth*BLOQUEO_RADIO, OGiroAngular + 0*Movimiento + Retorcido ); + + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + + // Dibuja el nuevo circulo +// Circulo( XSinMov[Movimiento] + 160, YSinMov[Movimiento] + 100, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento, (Subidon >= Color && Subidon <= Color + 2 ) ? 1: Color ); + Circulo( XSinMov[Movimiento] + 40, YSinMov[Movimiento] + 25, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento + Retorcido, Subidon%6 == 0 || Subidon%6 == 1 ? 1+Subidon : Color); + } + + delay(10); +} + + + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +class TextoAnimado +{ + private: + int *pPlanoVirtual; + int *sPlanoVirtual; + int *tPlanoVirtual; + public: + TextoAnimado(void); + ~TextoAnimado(void){ delete [] pPlanoVirtual; delete [] sPlanoVirtual; delete [] tPlanoVirtual; }; + void locateText( int x, int y, unsigned char *texto, char color, char fondo ); + void VuelcaPantallas(void); + void BorraTodo(void) { memset( MK_FP( 0xB800, 0 ), 0, 8000 ); + memset( tPlanoVirtual, 0, 8000 ); + memset( pPlanoVirtual, 0, 8000 ); + memset( sPlanoVirtual, 0, 8000 ); }; + int *pPlano(void){ return pPlanoVirtual; }; + int *sPlano(void){ return sPlanoVirtual; }; +}; + +void TextoAnimado::locateText( int x, int y, unsigned char *texto, char color, char fondo ) +{ + while( *texto != '\0' ) + { + if ( (*texto) != (unsigned char)'ú' ) + { + WriteChar50( x++, y, *(texto++), color, fondo, pPlanoVirtual ) + } else { + WriteChar50( x++, y, 0, 0, 0, pPlanoVirtual ) + texto++; + } + } +} + +TextoAnimado::TextoAnimado(void) +{ + if ( ( pPlanoVirtual = new int [4000] ) == NULL ) + { + pPlanoVirtual = sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( sPlanoVirtual = new int [4000] ) == NULL ) + { + sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( tPlanoVirtual = new int [4000] ) == NULL ) + tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + +} + +void TextoAnimado::VuelcaPantallas(void) +{ + int count = 3999;//4000; + int * dest, * scr; + + // Volcamos el segundo plano, ENTERO + memcpy( tPlanoVirtual, sPlanoVirtual, 8000 ); + // Volcamos el primer plano, pero cuidado caracter ú == transparente + dest = tPlanoVirtual; + scr = pPlanoVirtual; + while( count-- ) + { + if ( *scr ) + { + *(dest++) = *(scr++); + } else { + scr++; dest++; + } + }; + + + memcpy( MK_FP( 0xB800, 0 ), tPlanoVirtual, 8000 ); + +} +TextoAnimado prueba1; + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +#include +#include +#include +#include +#include + +typedef struct +{ + int x, y; // Posicion en la pantalla + + char Direc[80]; // Directorio donde localizarlo + char Passw[10]; // Password + +} DATOS_CD; + + +DATOS_CD ArbolActual[] = { + { 2, 3, "\\arcade\\ALIEN.RAR", "neila" }, + { 2, 4, "\\arcade\\BLAM.RAR", "malb" }, + { 2, 5, "\\arcade\\BUBBLE.RAR", "elbbub" }, + { 2, 6, "\\arcade\\ERADICAT.RAR", "tacidare" }, + { 2, 7, "\\arcade\\SYNDICA2.RAR", "2acidnys" }, + { 2, 8, "\\arcade\\TOMBRAID.RAR", "diarbmot" }, + + { 2, 12, "\\deportiv\\AIRBORNE.RAR", "enrobria" }, + { 2, 13, "\\deportiv\\RLA.RAR", "lra" }, + { 2, 14, "\\deportiv\\FIFA97.RAR", "79afif" }, + { 2, 15, "\\deportiv\\FUTBOL5.RAR", "5lobtuf" }, + { 2, 16, "\\deportiv\\SPACEJAM.RAR", "majecaps" }, + + {47, 3, "\\estrateg\\BC.RAR", "cb" }, + {47, 4, "\\estrateg\\DEADLY.RAR", "yldaed" }, + {47, 5, "\\estrateg\\REICH.RAR", "hcier" }, + {47, 6, "\\estrateg\\RIFLES.RAR", "selfir" }, + {47, 7, "\\estrateg\\HARPOON2.RAR", "2nooprah" }, + {47, 8, "\\estrateg\\REDALERT.RAR", "trelader" }, + + {47, 12, "\\simulado\\AMOK.RAR", "koma" }, + {47, 13, "\\simulado\\SCREAM2.RAR", "2maercs" }, + {47, 14, "\\simulado\\SWIV3.RAR", "3viws" }, + + {47, 18, "\\aventura\\FABLE.RAR", "elbaf" }, + {47, 19, "\\aventura\\HAVE.RAR", "evah" } + }; + + +void DibujaPantalla(void) +{ + clrscr(); + + prueba1.locateText( 0, 0, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 1, " Arcade úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú Estrategia úúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 2, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 3, "úú Alien Trilogy úúúúúúúúúúúúúúúúúú Battle Cruiser 3000 AD ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 4, "úú Balm Machine Head úúúúúúúúúúúúúúúúúú Jagged Alliance ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 5, "úú Bubble Bobble Combo úúúúúúúúúúúúúúúúúú Third Reich ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 6, "úú Eradicator úúúúúúúúúúúúúúúúúú Age of Rifles ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 7, "úú Syndicate Wars 2 úúúúúúúúúúúúúúúúúú Harpoon 2 ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 8, "úú Tomb Raider úúúúúúúúúúúúúúúúúú Command Conquer Red Alert ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 9, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,10, " Deportivos úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú Simuladores úúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,11, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,12, "úú Espn NBA AirBorne'96 úúúúúúúúúúúúúúúúúú Amok ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,13, "úú Australian Rugby League úúúúúúúúúúúúúúúúúú Screamer 2 ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,14, "úú Fifa Soccer 97 úúúúúúúúúúúúúúúúúú Swiv 3D ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,15, "úú Pc Futbol v5.0 úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,16, "úú Space Jam úúúúúúúúúúúúúúúú Aventuras úúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,17, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,18, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú Fable ", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,19, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú No tengo boca y quiero gr.", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,20, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,21, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + + + + prueba1.locateText( 1,46, "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ", WHITE, LIGHTGRAY);textcolor(BLACK); prueba1.locateText(78,46, "¿", BLACK, LIGHTGRAY); + prueba1.locateText( 1,47, "³", WHITE, LIGHTGRAY);prueba1.locateText( 2,47, " ³", BLACK, LIGHTGRAY); + prueba1.locateText( 1,48, "À", WHITE, LIGHTGRAY);textcolor(BLACK); prueba1.locateText( 2,48, "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ", BLACK, LIGHTGRAY); +}; + +char far *screen;// = (char far *)0xB8000000; + + +void Kit(void) +{ + static char Dir = 1; + static char Pos = 0; + char longt; + + for ( longt = 0; longt < 10; longt++ ) + { + if ( (Dir*longt + Pos) >= 0 && (Dir*longt + Pos) <= 75 ) + { + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] &= 0x8F; + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] |= 7<<4; +/* + gotoxy( Pos + Dir*longt + 3, 24 ); + prueba1.locateText( 0, 0, " " ); +*/ + } + } + + Pos += Dir; + if ( Pos < 0 -2 ) Dir = 1; + if ( Pos > 75 +2 ) Dir = -1; + + for ( longt = 0; longt < 10; longt++ ) + { + if ( (Dir*longt + Pos) >= 0 && (Dir*longt + Pos) <= 75 ) + { +/* + gotoxy( Pos + Dir*longt + 3, 24 ); + prueba1.locateText( 0, 0, "þ" ); +*/ + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] &= 0x8F; + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] |= 3<<4; + } + } + + delay( /*1000*/25 ); +} + +void main(void) +{ + int ok = 0; + int Item = 0, i; + char buffer[80]; + char *p; + + screen =(char *) prueba1.pPlano(); + + p = searchpath("rar.EXE"); + printf("Search for rar.EXE : %s\n", p); + if ( p == NULL ) + { + printf( "Debes copiar el archivo rar.ex al path como rar.exe\n"); + printf( "Ejemplo: \n"); + printf( " copy rar.ex C:\\dos\\RAR.EXE \n"); + return; + } + + textmode( C4350 ); + RellenaTablas(); _setcursortype( _NOCURSOR ); prueba1.BorraTodo(); textoVirtual = prueba1.sPlano(); + init_star(); + + DibujaPantalla(); + + for ( i = 0; i < 27; i++ ) + { + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] &= 0x8F; + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] |= 5<<4; + prueba1.locateText( 4, 47, " ", LIGHTGRAY, LIGHTGRAY ); + sprintf( buffer, "Linea de comandos: rar x -p%s %s C:", /*strrev( */ArbolActual[Item].Passw/* )*/, ArbolActual[Item].Direc ); + prueba1.locateText( 4,47, buffer, RED, LIGHTGRAY ); + } + + + + while ( !ok ) + { + TunelEstrellas(); + Actualiza(Cestrellas); + + prueba1.VuelcaPantallas(); + + Kit(); + + if ( kbhit() && (ok = getch()) == 0 ) + { + for ( i = 0; i < 27; i++ ) + { + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] &= 0x8F; + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] |= 7<<4; + } + switch ( getch() ) + { + case 72: + Item--; if ( Item < 0 ) Item = 21; + break; + case 80: + Item++; if ( Item >= 22 ) Item = 0; + break; + } + for ( i = 0; i < 27; i++ ) + { + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] &= 0x8F; + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] |= 5<<4; + prueba1.locateText( 4, 47, " ", LIGHTGRAY, LIGHTGRAY ); + sprintf( buffer, "Linea de comandos: rar x -p%s %s C:", /*strrev( */ArbolActual[Item].Passw/* )*/, ArbolActual[Item].Direc ); + prueba1.locateText( 4,47, buffer, RED, LIGHTGRAY ); + } + } + if ( ok == 13 ) + { + sprintf( buffer, "-p%s", ArbolActual[Item].Passw ); + execl ( p, p, "x", buffer, ArbolActual[Item].Direc, "C:", NULL); + ok = 1; + } + if ( ok == 27 ) ok = 1; else ok = 0; + } + + textbackground( BLACK ); + textcolor( LIGHTGRAY ); + textmode( C80 ); + clrscr(); + deinit_star(); +} + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +void init_star(void) +{ + randomize(); + if ( ( Cestrellas = (CAMPO_de_ESTRELLAS *)malloc( sizeof(CAMPO_de_ESTRELLAS)*200 ) ) == NULL ) return; + if ( ( o = (CAMPO_de_ESTRELLAS *)malloc( sizeof(CAMPO_de_ESTRELLAS)*200 ) ) == NULL ) return; + + llena_campo(Cestrellas); +} + +void deinit_star(void) +{ + free( Cestrellas ); + free( o ); +} + + + +void llena_campo(CAMPO_de_ESTRELLAS *Cest) +{ + int estrellas; + for ( estrellas = 0; estrellas < 200; estrellas++ ) + pon_estrella( &Cest[estrellas] ); +} + +void pon_estrella(CAMPO_de_ESTRELLAS *Cest) +{ + + Cest -> Ex = random(40)+1; + Cest -> Ey = random(25)+1; + Cest -> Ez = 100 ; + Cest -> Ecolor = WHITE; + +} + +void Star3d(CAMPO_de_ESTRELLAS *Cest) +{ +// Star3d( Cestrellas ); + while( !kbhit() ) Actualiza(Cest); + +} + +void Actualiza(CAMPO_de_ESTRELLAS *Cest) +{ + int Ex, Ey, conta; + static float FactorMovimientoX = 0, FactorMovimientoY = 0, ox = 0, oy = 0; + static float x=0.1, y=0.1; + static char color = 0; + + + for( conta=0; conta<200; conta++ ) + { +if ( o[conta].Ex+ox> 0 && o[conta].Ex+ox < 79 && o[conta].Ey+oy > 0 && o[conta].Ey+oy < 49 ) + WriteChar50 ( o[conta].Ex+ox, o[conta].Ey+oy, '*', 0, 0, textoVirtual ); + +// putpixel ( o[conta].Ex+ox+5, o[conta].Ey+oy+(317/2), 0 ); + Ex = ( ((200*Cest[conta].Ex)/Cest[conta].Ez));//+40; + Ey = ( ((200*Cest[conta].Ey)/Cest[conta].Ez));//+25;//240; + Cest[conta].Ez = Cest[conta].Ez - 5 ; + + o[conta].Ex = Ex; + o[conta].Ey = Ey; + +color++; +if ( color > 10 ) +{ +if ( Cest[conta].Ecolor == WHITE ) + Cest[conta].Ecolor = LIGHTGRAY; +else if ( Cest[conta].Ecolor == LIGHTGRAY ) + Cest[conta].Ecolor = DARKGRAY; +else + Cest[conta].Ecolor = WHITE; +color = 0; +} + + if ( Ex>79 && Ey>49 ) + pon_estrella ( &Cest[conta] ); + + if ( Cest[conta].Ez <= 20 || Ex>79 || Ey>49 || Ex<0 || Ey<0 ) +// if ( Cest[conta].Ez <= 20 || Ex>635 || Ey>470 || Ex<5 || Ey<317 ) + pon_estrella ( &Cest[conta] ); + +if ( Ex+FactorMovimientoX > 0 && Ex+FactorMovimientoX < 79 && Ey+FactorMovimientoY > 0 && Ey+FactorMovimientoY < 49 ) +// putpixel ( Ex+FactorMovimientoX, Ey+FactorMovimientoY+100, Cest[conta].Ecolor ); + WriteChar50 ( Ex+FactorMovimientoX, Ey+FactorMovimientoY, '*', Cest[conta].Ecolor%16, 0, textoVirtual ); +// putpixel ( Ex+FactorMovimientoX+5, Ey+FactorMovimientoY+(317/2), Cest[conta].Ecolor ); + + + } + + ox = FactorMovimientoX; + oy = FactorMovimientoY; + + FactorMovimientoX+= x; + FactorMovimientoY+= y; + + if ( FactorMovimientoX > 1 ) x = -0.1; + if ( FactorMovimientoX < -1 ) x = 0.1; + if ( FactorMovimientoY > 1 ) y = -0.1; + if ( FactorMovimientoY < -1 ) y = 0.1; + +} diff --git a/GO.EXE b/GO.EXE new file mode 100644 index 0000000000000000000000000000000000000000..9b1060733b3dea65e3acd634ee467c954e087fe8 GIT binary patch literal 54466 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

A)rr5r^i0STwtwM#LLV_=OqbV+6E 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 literal 0 HcmV?d00001 diff --git a/PRUEBA1.CPP b/PRUEBA1.CPP new file mode 100644 index 0000000..5a7f14a --- /dev/null +++ b/PRUEBA1.CPP @@ -0,0 +1,255 @@ +#include +#include +#include +#include + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +/* +( (Fon<<4)+Col ) + +( ( (int)( (char)Fon << 4) + Col )<< 8 ) + + 7 6 5 4 º 3 2 1 0 + ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ×ÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ + ³ B ³ b ³ b ³ b º f ³ f ³ f ³ f ³ + ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ×ÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ + º + +In this 8-bit newattr parameter, + þ ffff = 4-bit foreground color (0 to 15) + þ bbb = 3-bit background color (0 to 7) + þ B = blink-enable bit +*/ + +// Proyecto para mostrar cosas en modo texto: 80x50 + +// Preparamos un buffer virtual a pantalla: 80x50*2 bytes/punto = 8000 bytes +int *textoVirtual; + + +int XSinMov[256], YSinMov[256]; +int TSin[360+90]; + +void RellenaTablas(void) +{ + float angle; + + angle = 0; + while( angle < 256 ) + { + XSinMov[angle] = YSinMov[angle] = (int)( sin( (2*M_PI*angle*1.4)/360 ) * 360) / (2*M_PI); + YSinMov[angle] = 0; + angle+=1; + }; + + angle = 0; + while( angle < (360+90) ) + { + TSin[angle] = (int)(sin( (2*M_PI*angle)/360 ) * 360 / (2*M_PI) ); + angle+=1; + }; + +} + +char PRIMARIO8 = YELLOW; char SECUNDARIO1 = RED; +void Put( int x, int y, unsigned char c) +{ + if ( x < 0 || x >= 80 ) return; + if ( y < 0 || y >= 50 ) return; + + WriteChar50( x, y, '±', (c==0 ? 0 : PRIMARIO8), SECUNDARIO1, textoVirtual ); +}; + +//#define RADIO 255 +// Radio de partida +#define RADIO 255 +#define SALTOS_ANCHOS 7 + +//#define SALTOS_PROFUNDOS 8 +// Grado de torcion +#define SALTOS_PROFUNDOS 8 +//#define SALTOS_ANCHOS 7 + +// Saltos de radio +#define BLOQUEO_RADIO 1 + + +#define INCREMENTAL 1 + +//#define PROFUNDIDAD_TUNEL 35 +#define PROFUNDIDAD_TUNEL 35 +#define FACTOR_SERPIENTE 0.015F + +//#define TODO_BLANCO +//#define TODO_GRIS + +int PERFECCION_CIRCULO = 8; +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void Circulo( int x, int y, int radio, int giro, int Color ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), angle >= 0 && angle <= 50 ? (Color-PROFUNDIDAD_TUNEL) : Color ); + +}; + +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void CirculoB( int x, int y, int radio, int giro ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), 0 ); +}; + +void TunelEstrellas(void) +{ + int depth, Color; + static unsigned char ZMov = 0; + static int GiroAngular = 0; + unsigned char Movimiento = ZMov; + static Subidon = 255; + + static Velocidad = 0; + // Controles de giro por JD: + // SUAVE ZMov + // DURO Movimiento + int OGiroAngular = GiroAngular; + GiroAngular = ( GiroAngular++ ) % 360; + + + + ZMov ++; + Movimiento = ZMov; + Color = 255-PROFUNDIDAD_TUNEL; +// Color = 255; + Velocidad++; + if ( Velocidad == 5 ) + { + Velocidad = 0; + // Subidon --; if ( Subidon < 255-PROFUNDIDAD_TUNEL ) Subidon = 255; + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + } +int Retorcido = 0; + + for ( depth=0; depth=0; depth-=SALTOS_ANCHOS*INCREMENTAL, Movimiento+=SALTOS_PROFUNDOS, Color-- ) + { + Retorcido+=15; +/* +OGiroAngular = GiroAngular; +GiroAngular = ( GiroAngular++ ) % 360; +*/ + + // Borra el anterior + CirculoB( XSinMov[(unsigned char)(Movimiento-1)] + 40, YSinMov[(unsigned char)(Movimiento-1)] + 25, RADIO - depth*BLOQUEO_RADIO, OGiroAngular + 0*Movimiento + Retorcido ); + + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + + // Dibuja el nuevo circulo +// Circulo( XSinMov[Movimiento] + 160, YSinMov[Movimiento] + 100, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento, (Subidon >= Color && Subidon <= Color + 2 ) ? 1: Color ); + Circulo( XSinMov[Movimiento] + 40, YSinMov[Movimiento] + 25, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento + Retorcido, Subidon%6 == 0 || Subidon%6 == 1 ? 1+Subidon : Color); + } + + delay(10); +} + + + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +class TextoAnimado +{ + private: + int *pPlanoVirtual; + int *sPlanoVirtual; + int *tPlanoVirtual; + public: + TextoAnimado(void); + ~TextoAnimado(void){ delete [] pPlanoVirtual; delete [] sPlanoVirtual; delete [] tPlanoVirtual; }; + void locateText( int x, int y, unsigned char *texto, char color, char fondo ); + void VuelcaPantallas(void); + void BorraTodo(void) { memset( MK_FP( 0xB800, 0 ), 0, 8000 ); + memset( tPlanoVirtual, 0, 8000 ); + memset( pPlanoVirtual, 0, 8000 ); + memset( sPlanoVirtual, 0, 8000 ); }; + int *pPlano(void){ return pPlanoVirtual; }; + int *sPlano(void){ return sPlanoVirtual; }; +}; + +void TextoAnimado::locateText( int x, int y, unsigned char *texto, char color, char fondo ) +{ + while( *texto != '\0' ) WriteChar50( x++, y, *(texto++), color, fondo, pPlanoVirtual ) +} + +TextoAnimado::TextoAnimado(void) +{ + if ( ( pPlanoVirtual = new int [4000] ) == NULL ) + { + pPlanoVirtual = sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( sPlanoVirtual = new int [4000] ) == NULL ) + { + sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( tPlanoVirtual = new int [4000] ) == NULL ) + tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + +} + +void TextoAnimado::VuelcaPantallas(void) +{ + int count = 3999;//4000; + int * dest, * scr; + + // Volcamos el segundo plano, ENTERO + memcpy( tPlanoVirtual, sPlanoVirtual, 8000 ); + // Volcamos el primer plano, pero cuidado caracter ú == transparente + dest = tPlanoVirtual; + scr = pPlanoVirtual; + while( count-- ) + { + if ( *scr && ((*scr)&0x00FF) != 'ú' ) + { + *(dest++) = *(scr++); + } else { + scr++; dest++; + } + }; + + + memcpy( MK_FP( 0xB800, 0 ), tPlanoVirtual, 8000 ); + +} + + + +void main(void) +{ + TextoAnimado prueba1; + + textmode( C4350 ); + + + RellenaTablas(); + _setcursortype( _NOCURSOR ); + + prueba1.BorraTodo(); + prueba1.locateText( 10, 10, "Esto es una prueba de mis librerias", WHITE, BLACK ); + + prueba1.locateText( 10, 15, "Los espacio pueden aparecer. ¨Lo ves?", WHITE, BLACK ); + prueba1.locateText( 10, 17, "Oúnoúaparecer,úcomoúmasúteúguste,úoúconvenga!!!.", WHITE, BLACK ); + + textoVirtual = prueba1.sPlano(); + + while ( !kbhit() ) + { + TunelEstrellas(); + prueba1.VuelcaPantallas(); + } + + textmode( C80 ); +} + diff --git a/README.md b/README.md new file mode 100644 index 0000000..c3af843 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#TEXTO + + +*06/08/1997* + +ToDo: wwtcf? + + +![screenshot](/TEXTO.png "Screenshot") diff --git a/SNES.CPP b/SNES.CPP new file mode 100644 index 0000000..d8ff2bc --- /dev/null +++ b/SNES.CPP @@ -0,0 +1,623 @@ +#include +#include +#include +#include +#include +#include + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +/////////////////// Otro tipo de fondo: LLuvia de estrellas +typedef struct +{ + int Ex, Ey, Ez; + char Ecolor; +} CAMPO_de_ESTRELLAS; + +CAMPO_de_ESTRELLAS *Cestrellas, *o; + + +void Actualiza(CAMPO_de_ESTRELLAS *Cest); +void Star3d(CAMPO_de_ESTRELLAS *Cest); +void pon_estrella(CAMPO_de_ESTRELLAS *Cest); +void llena_campo(CAMPO_de_ESTRELLAS *Cest); +void deinit_star(void); +void init_star(void); +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +/* +( (Fon<<4)+Col ) + +( ( (int)( (char)Fon << 4) + Col )<< 8 ) + + 7 6 5 4 º 3 2 1 0 + ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ×ÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ + ³ B ³ b ³ b ³ b º f ³ f ³ f ³ f ³ + ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ×ÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ + º + +In this 8-bit newattr parameter, + þ ffff = 4-bit foreground color (0 to 15) + þ bbb = 3-bit background color (0 to 7) + þ B = blink-enable bit +*/ + +// Proyecto para mostrar cosas en modo texto: 80x50 + +// Preparamos un buffer virtual a pantalla: 80x50*2 bytes/punto = 8000 bytes +int *textoVirtual; + + +int XSinMov[256], YSinMov[256]; +int TSin[360+90]; + +void RellenaTablas(void) +{ + float angle; + + angle = 0; + while( angle < 256 ) + { + XSinMov[angle] = YSinMov[angle] = (int)( sin( (2*M_PI*angle*1.4)/360 ) * 360) / (2*M_PI); + YSinMov[angle] = 0; + angle+=1; + }; + + angle = 0; + while( angle < (360+90) ) + { + TSin[angle] = (int)(sin( (2*M_PI*angle)/360 ) * 360 / (2*M_PI) ); + angle+=1; + }; + +} + +char PRIMARIO8 = YELLOW; char SECUNDARIO1 = RED; +void Put( int x, int y, unsigned char c) +{ + if ( x < 0 || x >= 80 ) return; + if ( y < 0 || y >= 50 ) return; + + WriteChar50( x, y, '±', (c==0 ? 0 : PRIMARIO8), SECUNDARIO1, textoVirtual ); +}; + +//#define RADIO 255 +// Radio de partida +#define RADIO 255 +#define SALTOS_ANCHOS 7 + +//#define SALTOS_PROFUNDOS 8 +// Grado de torcion +#define SALTOS_PROFUNDOS 8 +//#define SALTOS_ANCHOS 7 + +// Saltos de radio +#define BLOQUEO_RADIO 1 + + +#define INCREMENTAL 1 + +//#define PROFUNDIDAD_TUNEL 35 +#define PROFUNDIDAD_TUNEL 35 +#define FACTOR_SERPIENTE 0.015F + +//#define TODO_BLANCO +//#define TODO_GRIS + +int PERFECCION_CIRCULO = 8; +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void Circulo( int x, int y, int radio, int giro, int Color ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), angle >= 0 && angle <= 50 ? (Color-PROFUNDIDAD_TUNEL) : Color ); + +}; + +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void CirculoB( int x, int y, int radio, int giro ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), 0 ); +}; + +void TunelEstrellas(void) +{ + int depth, Color; + static unsigned char ZMov = 0; + static int GiroAngular = 0; + unsigned char Movimiento = ZMov; + static Subidon = 255; + + static Velocidad = 0; + // Controles de giro por JD: + // SUAVE ZMov + // DURO Movimiento + int OGiroAngular = GiroAngular; + GiroAngular = ( GiroAngular++ ) % 360; + + + + ZMov ++; + Movimiento = ZMov; + Color = 255-PROFUNDIDAD_TUNEL; +// Color = 255; + Velocidad++; + if ( Velocidad == 5 ) + { + Velocidad = 0; + // Subidon --; if ( Subidon < 255-PROFUNDIDAD_TUNEL ) Subidon = 255; + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + } +int Retorcido = 0; + + for ( depth=0; depth=0; depth-=SALTOS_ANCHOS*INCREMENTAL, Movimiento+=SALTOS_PROFUNDOS, Color-- ) + { + Retorcido+=15; +/* +OGiroAngular = GiroAngular; +GiroAngular = ( GiroAngular++ ) % 360; +*/ + + // Borra el anterior + CirculoB( XSinMov[(unsigned char)(Movimiento-1)] + 40, YSinMov[(unsigned char)(Movimiento-1)] + 25, RADIO - depth*BLOQUEO_RADIO, OGiroAngular + 0*Movimiento + Retorcido ); + + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + + // Dibuja el nuevo circulo +// Circulo( XSinMov[Movimiento] + 160, YSinMov[Movimiento] + 100, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento, (Subidon >= Color && Subidon <= Color + 2 ) ? 1: Color ); + Circulo( XSinMov[Movimiento] + 40, YSinMov[Movimiento] + 25, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento + Retorcido, Subidon%6 == 0 || Subidon%6 == 1 ? 1+Subidon : Color); + } + + delay(10); +} + + + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +class TextoAnimado +{ + private: + int *pPlanoVirtual; + int *sPlanoVirtual; + int *tPlanoVirtual; + public: + TextoAnimado(void); + ~TextoAnimado(void){ delete [] pPlanoVirtual; delete [] sPlanoVirtual; delete [] tPlanoVirtual; }; + void locateText( int x, int y, unsigned char *texto, char color, char fondo ); + void VuelcaPantallas(void); + void BorraTodo(void) { memset( MK_FP( 0xB800, 0 ), 0, 8000 ); + memset( tPlanoVirtual, 0, 8000 ); + memset( pPlanoVirtual, 0, 8000 ); + memset( sPlanoVirtual, 0, 8000 ); }; + int *pPlano(void){ return pPlanoVirtual; }; + int *sPlano(void){ return sPlanoVirtual; }; +}; + +void TextoAnimado::locateText( int x, int y, unsigned char *texto, char color, char fondo ) +{ + while( *texto != '\0' ) + { + if ( (*texto) != (unsigned char)'ú' ) + { + WriteChar50( x++, y, *(texto++), color, fondo, pPlanoVirtual ) + } else { + WriteChar50( x++, y, 0, 0, 0, pPlanoVirtual ) + texto++; + } + } +} + +TextoAnimado::TextoAnimado(void) +{ + if ( ( pPlanoVirtual = new int [4000] ) == NULL ) + { + pPlanoVirtual = sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( sPlanoVirtual = new int [4000] ) == NULL ) + { + sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( tPlanoVirtual = new int [4000] ) == NULL ) + tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + +} + +void TextoAnimado::VuelcaPantallas(void) +{ + int count = 3999;//4000; + int * dest, * scr; + + // Volcamos el segundo plano, ENTERO + memcpy( tPlanoVirtual, sPlanoVirtual, 8000 ); + // Volcamos el primer plano, pero cuidado caracter ú == transparente + dest = tPlanoVirtual; + scr = pPlanoVirtual; + while( count-- ) + { + if ( *scr ) + { + *(dest++) = *(scr++); + } else { + scr++; dest++; + } + }; + + + memcpy( MK_FP( 0xB800, 0 ), tPlanoVirtual, 8000 ); + +} +TextoAnimado prueba1; + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +#include +#include +#include +#include +#include + +typedef struct +{ + int x, y; // Posicion en la pantalla + + char Direc[80]; // Directorio donde localizarlo + char Passw[10]; // Password + +} DATOS_CD; + + +DATOS_CD ArbolActual[] = { + { 2, 2, "a\\Aerofght.smc", "neila" }, + { 2, 5, "d\\darkness.smc", "neila" }, + { 2, 6, "d\\dazebefo.smc", "neila" }, + { 2, 7, "d\\dbzlots.smc", "neila" }, + { 2, 8, "d\\demonbla.smc", "neila" }, + { 2, 9, "d\\demoncre.smc", "neila" }, + { 2, 10, "d\\devilsto.smc", "neila" }, + { 2, 11, "d\\dezaemon.smc", "neila" }, + { 2, 12, "d\\dochers.smc", "neila" }, + { 2, 13, "d\\dokapon2.smc", "neila" }, + { 2, 14, "d\\doluckyp.smc", "neila" }, + { 2, 15, "d\\donkeykc.smc", "neila" }, + { 2, 16, "d\\donkeyko.smc", "neila" }, + { 2, 17, "d\\doraemon.smc", "neila" }, + { 2, 18, "d\\doubled5.smc", "neila" }, + { 2, 19, "d\\doenworl.smc", "neila" }, + { 2, 20, "d\\dragon.smc", "neila" }, + { 2, 21, "d\\dragonvi.smc", "neila" }, + { 2, 22, "d\\dreambak.smc", "neila" }, + { 2, 23, "d\\dropzone.smc", "neila" }, + { 2, 26, "f\\F1hero94.smc", "neila" }, + { 2, 27, "f\\F1polep2.smc", "neila" }, + { 2, 28, "f\\Famfishm.smc", "neila" }, + { 2, 29, "f\\Familyci.smc", "neila" }, + { 2, 30, "f\\Fantasy3.smc", "neila" }, + { 2, 31, "f\\Fzero.smc", "neila" }, + { 50, 2,"g\\Ghostsan.smc", "neila" }, + { 50, 5, "M\\Madden95.smc", "neila" }, + { 50, 6, "M\\Magnabra.smc", "neila" }, + { 50, 7, "M\\Mahjong2.smc", "neila" }, + { 50, 8, "M\\Mahjongg.smc", "neila" }, + { 50, 9, "M\\Majang3.smc", "neila" }, + { 50, 10, "M\\Makeruna.smc", "neila" }, + { 50, 11, "M\\Mario-ea.smc", "neila" }, + { 50, 12, "M\\Marioall.smc", "neila" }, + { 50, 13, "M\\Mariowor.smc", "neila" }, + { 50, 16, "P\\Parodius.smc", "neila" }, + { 50, 17, "P\\Pbobble.smc", "neila" }, + { 50, 18, "P\\Pilot.smc", "neila" }, + { 50, 19, "P\\Punchout.smc", "neila" }, + { 50, 22, "S\\Sunsetro.smc", "neila" }, + { 50, 23, "S\\Superbom.smc", "neila" }, + { 50, 26, "U\\Uniracer.smc", "neila" }, + { 50, 27, "U\\Unsquadr.smc", "neila" }, + { 50, 30, "W\\Wings2.smc", "neila" }, + }; +void DibujaPantalla(void) +{ + clrscr(); + + prueba1.locateText( 0, 0, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 1, "úAúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúGúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 2, "úú Aero Fighter úúúúúúúúúúúúúúúúúúúúúúúúúú Ghost'an'Gobblinsúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 3, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 4, "úDúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúMúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 5, "úú Lord of Darkness úúúúúúúúúúúúúúúúúúúúúúúúúú Madden NFL'95 úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 6, "úú Daze Before Chrismas úúúúúúúúúúúúúúúúúúúúúúúúúú Magna Braban úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 7, "úú Dragon Ball Z LOTS úúúúúúúúúúúúúúúúúúúúúúúúúú Super Mahjongg2 úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 8, "úú Demon's Blazon úúúúúúúúúúúúúúúúúúúúúúúúúú Mahjong Goku Tenjiku úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0, 9, "úú Demon's Crest úúúúúúúúúúúúúúúúúúúúúúúúúú Majang 3 úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,10, "úú Devil Storm úúúúúúúúúúúúúúúúúúúúúúúúúú Makeruna MakeDou úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,11, "úú Dezaemon úúúúúúúúúúúúúúúúúúúúúúúúúú Fun with Numbers úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,12, "úú Bakto! Dochers úúúúúúúúúúúúúúúúúúúúúúúúúú Super Mario all Star úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,13, "úú Dokapon2 úúúúúúúúúúúúúúúúúúúúúúúúúú Super Mario World úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,14, "úú Dolucky Puzzle Tour úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,15, "úú Donkey Kong Country úúúúúúúúúúúúúúúúúúúúúúúúúPúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,16, "úú Donkey Kong Country2 úúúúúúúúúúúúúúúúúúúúúúúúúú Parodius úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,17, "úú Doraemon Tokihougyok úúúúúúúúúúúúúúúúúúúúúúúúúú Puzzle Bobble úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,18, "úú DD5 The Shadow Falls úúúúúúúúúúúúúúúúúúúúúúúúúú Pilot Wings úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,19, "úú Down the World úúúúúúúúúúúúúúúúúúúúúúúúúú Super Punch-Out! úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,20, "úú Dragon - Bruce Lee úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,21, "úú Dragon View úúúúúúúúúúúúúúúúúúúúúúúúúSúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,22, "úú Dream Basketball DH úúúúúúúúúúúúúúúúúúúúúúúúúú Sunset Riders úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,23, "úú DropZone úúúúúúúúúúúúúúúúúúúúúúúúúú Super Bomberman úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,24, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,25, "úFúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúUúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,26, "úú F-1 Hero 94 úúúúúúúúúúúúúúúúúúúúúúúúúú Uniracer úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,27, "úú F1 Pole Position 2 úúúúúúúúúúúúúúúúúúúúúúúúúú U.N. Squadron úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,28, "úú FamFishM úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,29, "úú Family City úúúúúúúúúúúúúúúúúúúúúúúúúWúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,30, "úú Final Fantasy 3 úúúúúúúúúúúúúúúúúúúúúúúúúú Wings races high úú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,31, "úú F-Zero úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", BLACK, LIGHTGRAY ); + prueba1.locateText( 0,32, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúNúúúúúúúúúlúúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,33, "úúúúúúúúúúúúúúúúúúúúúúúúúúúlúúúúúúúlúúúúúúúúúoúúúúúúúúúoúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,34, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúúoúúúúúúúúúúúúúSúúúúúúgúrúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,35, "úúúúúúúúúúúúúúúúúúúúúúúúúgúeúúúSú Sol NegúúúúúNúeúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,36, "úúúúúúúúúúúúúúúúúúúúúlúoúúúúNúúúegro Sol Núúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,37, "úúúúúúúúúúúúúúúúúúúúúúúúúSúúúúgro Sol NegroúúúúSúoúúúúNúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,38, "úúúúúúúúúúúúúúúúoúrúúúúúúúúúSol Negro Sol Negúúúúúúlúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,39, "úúúúúúúúúúúúúúúúúúúúgúeúNúúSol Negro Sol Negroúúúúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,40, "úúúúúúúúúúúúúúúúúúúúúúúúúúúúl Negro Sol Negroúúúeúúúúoúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,41, "úúúúúúúúúúúúúúúúúúúúúlúoúSúúúNegro Sol Negroúúúúúgúrúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,42, "úúúúúúúúúúúúúúúúúeúNúúúúúúúúúúro Sol NegroúúúúSúúúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,43, "úúúúúúúúúúúúúúúúúúúúúúgúeúNúúúúúSol NegrúúúNúúúúoúlúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,44, "úúúúúúúúúúúúúúúúúúoúrúúúúúúúoúúúúúúúúúúúúúúúeúúúúúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 0,45, "úúúúúúúúúúúúúúúúúúúúúúúúúúlúúúúoúúúúSúúúúúúúúgúúúúúúúúúúúúúúúúúúúúúúúúúúúú", WHITE, BLACK ); + prueba1.locateText( 1,46, "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ", WHITE, LIGHTGRAY);textcolor(BLACK); prueba1.locateText(78,46, "¿", BLACK, LIGHTGRAY); + prueba1.locateText( 1,47, "³", WHITE, LIGHTGRAY);prueba1.locateText( 2,47, " ³", BLACK, LIGHTGRAY); + prueba1.locateText( 1,48, "À", WHITE, LIGHTGRAY);textcolor(BLACK); prueba1.locateText( 2,48, "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ", BLACK, LIGHTGRAY); +}; + +char far *screen;// = (char far *)0xB8000000; + + +void Kit(void) +{ + static char Dir = 1; + static char Pos = 0; + char longt; + + for ( longt = 0; longt < 10; longt++ ) + { + if ( (Dir*longt + Pos) >= 0 && (Dir*longt + Pos) <= 75 ) + { + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] &= 0x8F; + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] |= 7<<4; +/* + gotoxy( Pos + Dir*longt + 3, 24 ); + prueba1.locateText( 0, 0, " " ); +*/ + } + } + + Pos += Dir; + if ( Pos < 0 -2 ) Dir = 1; + if ( Pos > 75 +2 ) Dir = -1; + + for ( longt = 0; longt < 10; longt++ ) + { + if ( (Dir*longt + Pos) >= 0 && (Dir*longt + Pos) <= 75 ) + { +/* + gotoxy( Pos + Dir*longt + 3, 24 ); + prueba1.locateText( 0, 0, "þ" ); +*/ + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] &= 0x8F; + screen[ 47*80*2 + ( Pos + Dir*longt + 2)*2 + 1 ] |= 3<<4; + } + } + + delay( /*1000*/25 ); +} + +void main(void) +{ + int ok = 0; + int Item = 0, i; + char buffer[80]; + char *p; + + screen =(char *) prueba1.pPlano(); + + p = searchpath("snes.EXE"); + printf("Search for snes.EXE : %s\n", p); + if ( p == NULL ) + { + printf( "Debes copiar el EMULADOR SNES al path como snes.exe\n"); + printf( "Ejemplo: \n"); + printf( " copy snes.ex C:\\dos\\snes.EXE \n"); + return; + } + + textmode( C4350 ); + RellenaTablas(); _setcursortype( _NOCURSOR ); prueba1.BorraTodo(); textoVirtual = prueba1.sPlano(); + init_star(); + + DibujaPantalla(); + + for ( i = 0; i < 22; i++ ) + { + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] &= 0x8F; + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] |= 5<<4; + } + prueba1.locateText( 4, 47, " ", LIGHTGRAY, LIGHTGRAY ); + sprintf( buffer, "Linea de comandos: snes %s", /*ArbolActual[Item].Passw,*/ ArbolActual[Item].Direc ); + prueba1.locateText( 4,47, buffer, RED, LIGHTGRAY ); + + + + while ( !ok ) + { + TunelEstrellas(); +// Actualiza(Cestrellas); + + prueba1.VuelcaPantallas(); + + Kit(); + + if ( kbhit() && (ok = getch()) == 0 ) + { + for ( i = 0; i < 22; i++ ) + { + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] &= 0x8F; + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] |= 7<<4; + } + switch ( getch() ) + { + case 72: + Item--; if ( Item < 0 ) Item = 44; + break; + case 80: + Item++; if ( Item > 44 ) Item = 0; + break; + } + for ( i = 0; i < 22; i++ ) + { + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] &= 0x8F; + screen[ ArbolActual[Item].y*80*2 + (ArbolActual[Item].x+i)*2 + 1 ] |= 5<<4; + } + prueba1.locateText( 4, 47, " ", LIGHTGRAY, LIGHTGRAY ); +// sprintf( buffer, "Linea de comandos: rar x -p%s %s C:", /*strrev( */ArbolActual[Item].Passw/* )*/, ArbolActual[Item].Direc ); + sprintf( buffer, "Linea de comandos: snes %s", /*ArbolActual[Item].Passw,*/ ArbolActual[Item].Direc ); + prueba1.locateText( 4,47, buffer, RED, LIGHTGRAY ); + } + if ( ok == 13 ) + { +// sprintf( buffer, "-p%s", ArbolActual[Item].Passw ); + execl ( p, p, ArbolActual[Item].Direc, NULL); + ok = 1; + } + if ( ok == 27 ) ok = 1; else ok = 0; + } + + textbackground( BLACK ); + textcolor( LIGHTGRAY ); + textmode( C80 ); + clrscr(); + deinit_star(); +} + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +void init_star(void) +{ + randomize(); + if ( ( Cestrellas = (CAMPO_de_ESTRELLAS *)malloc( sizeof(CAMPO_de_ESTRELLAS)*200 ) ) == NULL ) return; + if ( ( o = (CAMPO_de_ESTRELLAS *)malloc( sizeof(CAMPO_de_ESTRELLAS)*200 ) ) == NULL ) return; + + llena_campo(Cestrellas); +} + +void deinit_star(void) +{ + free( Cestrellas ); + free( o ); +} + + + +void llena_campo(CAMPO_de_ESTRELLAS *Cest) +{ + int estrellas; + for ( estrellas = 0; estrellas < 200; estrellas++ ) + pon_estrella( &Cest[estrellas] ); +} + +void pon_estrella(CAMPO_de_ESTRELLAS *Cest) +{ + + Cest -> Ex = random(40)+1; + Cest -> Ey = random(25)+1; + Cest -> Ez = 100 ; + Cest -> Ecolor = WHITE; + +} + +void Star3d(CAMPO_de_ESTRELLAS *Cest) +{ +// Star3d( Cestrellas ); + while( !kbhit() ) Actualiza(Cest); + +} + +void Actualiza(CAMPO_de_ESTRELLAS *Cest) +{ + int Ex, Ey, conta; + static float FactorMovimientoX = 0, FactorMovimientoY = 0, ox = 0, oy = 0; + static float x=0.1, y=0.1; + static char color = 0; + + + for( conta=0; conta<200; conta++ ) + { +if ( o[conta].Ex+ox> 0 && o[conta].Ex+ox < 79 && o[conta].Ey+oy > 0 && o[conta].Ey+oy < 49 ) + WriteChar50 ( o[conta].Ex+ox, o[conta].Ey+oy, '*', 0, 0, textoVirtual ); + +// putpixel ( o[conta].Ex+ox+5, o[conta].Ey+oy+(317/2), 0 ); + Ex = ( ((200*Cest[conta].Ex)/Cest[conta].Ez));//+40; + Ey = ( ((200*Cest[conta].Ey)/Cest[conta].Ez));//+25;//240; + Cest[conta].Ez = Cest[conta].Ez - 5 ; + + o[conta].Ex = Ex; + o[conta].Ey = Ey; + +color++; +if ( color > 10 ) +{ +if ( Cest[conta].Ecolor == WHITE ) + Cest[conta].Ecolor = LIGHTGRAY; +else if ( Cest[conta].Ecolor == LIGHTGRAY ) + Cest[conta].Ecolor = DARKGRAY; +else + Cest[conta].Ecolor = WHITE; +color = 0; +} + + if ( Ex>79 && Ey>49 ) + pon_estrella ( &Cest[conta] ); + + if ( Cest[conta].Ez <= 20 || Ex>79 || Ey>49 || Ex<0 || Ey<0 ) +// if ( Cest[conta].Ez <= 20 || Ex>635 || Ey>470 || Ex<5 || Ey<317 ) + pon_estrella ( &Cest[conta] ); + +if ( Ex+FactorMovimientoX > 0 && Ex+FactorMovimientoX < 79 && Ey+FactorMovimientoY > 0 && Ey+FactorMovimientoY < 49 ) +// putpixel ( Ex+FactorMovimientoX, Ey+FactorMovimientoY+100, Cest[conta].Ecolor ); + WriteChar50 ( Ex+FactorMovimientoX, Ey+FactorMovimientoY, '*', Cest[conta].Ecolor%16, 0, textoVirtual ); +// putpixel ( Ex+FactorMovimientoX+5, Ey+FactorMovimientoY+(317/2), Cest[conta].Ecolor ); + + + } + + ox = FactorMovimientoX; + oy = FactorMovimientoY; + + FactorMovimientoX+= x; + FactorMovimientoY+= y; + + if ( FactorMovimientoX > 1 ) x = -0.1; + if ( FactorMovimientoX < -1 ) x = 0.1; + if ( FactorMovimientoY > 1 ) y = -0.1; + if ( FactorMovimientoY < -1 ) y = 0.1; + +} diff --git a/SNES.EXE b/SNES.EXE new file mode 100644 index 0000000000000000000000000000000000000000..8a9150885a1e6ea212fd46be8405e3026f8a5a8a GIT binary patch literal 59284 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 EA4ckXng9R* literal 0 HcmV?d00001 diff --git a/T.EXE b/T.EXE new file mode 100644 index 0000000000000000000000000000000000000000..43ba8cdf7497abab3d41871119c846cac56dd5e0 GIT binary patch literal 35236 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 +#include +#include +#include + +// José David Guillen (Pruebas para el muestreo de multiplanos en modo texto) +// 1997 (c) || Sol Negro +// http://www.arrakis.es/~infomundo/JD + +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +/* +( (Fon<<4)+Col ) + +( ( (int)( (char)Fon << 4) + Col )<< 8 ) + + 7 6 5 4 º 3 2 1 0 + ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ×ÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ + ³ B ³ b ³ b ³ b º f ³ f ³ f ³ f ³ + ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ×ÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ + º + +In this 8-bit newattr parameter, + þ ffff = 4-bit foreground color (0 to 15) + þ bbb = 3-bit background color (0 to 7) + þ B = blink-enable bit +*/ + +// Proyecto para mostrar cosas en modo texto: 80x50 + +// Preparamos un buffer virtual a pantalla: 80x50*2 bytes/punto = 8000 bytes +int *textoVirtual; + + +int XSinMov[256], YSinMov[256]; +int TSin[360+90]; + +void RellenaTablas(void) +{ + float angle; + + angle = 0; + while( angle < 256 ) + { + XSinMov[angle] = YSinMov[angle] = (int)( sin( (2*M_PI*angle*1.4)/360 ) * 360) / (2*M_PI); + YSinMov[angle] = 0; + angle+=1; + }; + + angle = 0; + while( angle < (360+90) ) + { + TSin[angle] = (int)(sin( (2*M_PI*angle)/360 ) * 360 / (2*M_PI) ); + angle+=1; + }; + +} + +char PRIMARIO8 = YELLOW; char SECUNDARIO1 = RED; +void Put( int x, int y, unsigned char c) +{ + if ( x < 0 || x >= 80 ) return; + if ( y < 0 || y >= 50 ) return; + + WriteChar50( x, y, '±', (c==0 ? 0 : PRIMARIO8), SECUNDARIO1, textoVirtual ); +}; + +//#define RADIO 255 +// Radio de partida +#define RADIO 255 +#define SALTOS_ANCHOS 7 + +//#define SALTOS_PROFUNDOS 8 +// Grado de torcion +#define SALTOS_PROFUNDOS 8 +//#define SALTOS_ANCHOS 7 + +// Saltos de radio +#define BLOQUEO_RADIO 1 + + +#define INCREMENTAL 1 + +//#define PROFUNDIDAD_TUNEL 35 +#define PROFUNDIDAD_TUNEL 35 +#define FACTOR_SERPIENTE 0.015F + +//#define TODO_BLANCO +//#define TODO_GRIS + +int PERFECCION_CIRCULO = 8; +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void Circulo( int x, int y, int radio, int giro, int Color ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), angle >= 0 && angle <= 50 ? (Color-PROFUNDIDAD_TUNEL) : Color ); + +}; + +// Circulo con impresi¢n de giro ( MEJORA POR JD ) +void CirculoB( int x, int y, int radio, int giro ) +{ + int angle; + + for ( angle = 0; angle < 360; angle+=PERFECCION_CIRCULO ) + Put( x + (radio*FACTOR_SERPIENTE*TSin[ (giro + angle)%360 + 90 ]), y + (radio*FACTOR_SERPIENTE*TSin[ (giro+angle)%360 ]), 0 ); +}; + +void TunelEstrellas(void) +{ + int depth, Color; + static unsigned char ZMov = 0; + static int GiroAngular = 0; + unsigned char Movimiento = ZMov; + static Subidon = 255; + + static Velocidad = 0; + // Controles de giro por JD: + // SUAVE ZMov + // DURO Movimiento + int OGiroAngular = GiroAngular; + GiroAngular = ( GiroAngular++ ) % 360; + + + + ZMov ++; + Movimiento = ZMov; + Color = 255-PROFUNDIDAD_TUNEL; +// Color = 255; + Velocidad++; + if ( Velocidad == 5 ) + { + Velocidad = 0; + // Subidon --; if ( Subidon < 255-PROFUNDIDAD_TUNEL ) Subidon = 255; + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + } +int Retorcido = 0; + + for ( depth=0; depth=0; depth-=SALTOS_ANCHOS*INCREMENTAL, Movimiento+=SALTOS_PROFUNDOS, Color-- ) + { + Retorcido+=15; +/* +OGiroAngular = GiroAngular; +GiroAngular = ( GiroAngular++ ) % 360; +*/ + + // Borra el anterior + CirculoB( XSinMov[(unsigned char)(Movimiento-1)] + 40, YSinMov[(unsigned char)(Movimiento-1)] + 25, RADIO - depth*BLOQUEO_RADIO, OGiroAngular + 0*Movimiento + Retorcido ); + + Subidon = (Subidon++)%PROFUNDIDAD_TUNEL; + + // Dibuja el nuevo circulo +// Circulo( XSinMov[Movimiento] + 160, YSinMov[Movimiento] + 100, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento, (Subidon >= Color && Subidon <= Color + 2 ) ? 1: Color ); + Circulo( XSinMov[Movimiento] + 40, YSinMov[Movimiento] + 25, RADIO - depth*BLOQUEO_RADIO, GiroAngular + 0*Movimiento + Retorcido, Subidon%6 == 0 || Subidon%6 == 1 ? 1+Subidon : Color); + } + + delay(10); +} + + + +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// Escribe un caracter en (x,y) -> Color|Fondo en VText 0x7900 +#define WriteChar50( x, y, caracter, Col, Fon, VText ) VText[80*y + x] = (((unsigned)caracter)&0x00FF) | (((unsigned)( (Fon<<4)+Col )<<8)&0xFF00); +class TextoAnimado +{ + private: + int *pPlanoVirtual; + int *sPlanoVirtual; + int *tPlanoVirtual; + public: + TextoAnimado(void); + ~TextoAnimado(void){ delete [] pPlanoVirtual; delete [] sPlanoVirtual; delete [] tPlanoVirtual; }; + void locateText( int x, int y, unsigned char *texto, char color, char fondo ); + void VuelcaPantallas(void); + void BorraTodo(void) { memset( MK_FP( 0xB800, 0 ), 0, 8000 ); + memset( tPlanoVirtual, 0, 8000 ); + memset( pPlanoVirtual, 0, 8000 ); + memset( sPlanoVirtual, 0, 8000 ); }; + int *pPlano(void){ return pPlanoVirtual; }; + int *sPlano(void){ return sPlanoVirtual; }; +}; + +void TextoAnimado::locateText( int x, int y, unsigned char *texto, char color, char fondo ) +{ + while( *texto != '\0' ) + { + if ( (*texto) != (unsigned char)'ú' ) + { + WriteChar50( x++, y, *(texto++), color, fondo, pPlanoVirtual ) + } else { + WriteChar50( x++, y, 0, 0, 0, pPlanoVirtual ) + texto++; + } + } +} + +TextoAnimado::TextoAnimado(void) +{ + if ( ( pPlanoVirtual = new int [4000] ) == NULL ) + { + pPlanoVirtual = sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( sPlanoVirtual = new int [4000] ) == NULL ) + { + sPlanoVirtual = tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + } else + if ( ( tPlanoVirtual = new int [4000] ) == NULL ) + tPlanoVirtual = (int *)MK_FP( 0xB800, 0 ); + +} + +void TextoAnimado::VuelcaPantallas(void) +{ + int count = 3999;//4000; + int * dest, * scr; + + // Volcamos el segundo plano, ENTERO + memcpy( tPlanoVirtual, sPlanoVirtual, 8000 ); + // Volcamos el primer plano, pero cuidado caracter ú == transparente + dest = tPlanoVirtual; + scr = pPlanoVirtual; + while( count-- ) + { + if ( *scr ) + { + *(dest++) = *(scr++); + } else { + scr++; dest++; + } + }; + + + memcpy( MK_FP( 0xB800, 0 ), tPlanoVirtual, 8000 ); + +} +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +void main(void) +{ + TextoAnimado prueba1; + + textmode( C4350 ); + + + RellenaTablas(); + _setcursortype( _NOCURSOR ); + + prueba1.BorraTodo(); + prueba1.locateText( 10, 10, "Esto es una prueba de mis librerias", WHITE, BROWN ); + + prueba1.locateText( 10, 15, "Los espacio pueden aparecer. ¨Lo ves?", WHITE, BROWN ); + prueba1.locateText( 10, 17, "Oúnoúaparecer,úcomoúmasúteúguste,úoúconvenga!!!.", WHITE, BROWN ); + + textoVirtual = prueba1.sPlano(); + + while ( !kbhit() ) + { + TunelEstrellas(); + prueba1.VuelcaPantallas(); + } + + textmode( C80 ); +} + diff --git a/TEXTO.EXE b/TEXTO.EXE new file mode 100644 index 0000000000000000000000000000000000000000..decb9875a3e9300bf3d888e34a8c412276e08489 GIT binary patch literal 35127 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�@~= z8&L-`^U~>Os(mE1hVMm&ZwxW*rP zaz}Zd6Sm5fjr4v4yc)a#($o{%H)N%(U;hOwIbQCSHD*(G8MJcDk&L2y(DC2M9Urnk zUN{mJK!C}_)TXb`bZg9NLkp$(z{3i12=f+m9T~Spi390-jW|n&Gbn4%;q3Vu&mMAk z5*c|V(WH;L5Wy@P&ZuUd*+O+v#{D0 z^Y2mf)TorBH>og$QXx)8hs9_I6*z6PWu!P~9b+w46U#Ku!;-ee682J!MWd`w`!@fA z$kBW5Y1?IWVTiJ3-3)c-cVf7*#y&%BG?sAIg=&)P%~N-~b2zxm(fPdu>n+xG-bnZy zhJLrg#K8!XPj~I`w6XcyO9t>=ybI#~b3?tYI>J~I)@K59pBAsUFMI|z1T9#UA~}pb zlf{esu=dH86j)E-_>HrA1~Sr(W`f3vC@3mxfN>$oxE>=9KLmeL3B2u#)xX zXT7b#3XB}Jf5?^H5+mDYqNILP0EhfA5ZH5wJ(IEH6^&x9+NgyK8D8X<=|E2j;E)Vl$ao6C0b)%G0*xdSJ%F@-SWzM8<^oMYwfF?Fw;|B8LpjWCohp zf%)7D(I!jJk2Zg_@uN*2ZT;v&S%Q{%@y?;bGO)iwYCDYbijmlh1vI>XIWfvRXJ;7M z8Zi0MT_*M6mmS$zLO*73^Y_nP^6xJC*(haFBK=WagM56J45%Xm04c~C&D@%_=sOy!iAEMbaYg5H2_ z?%Sfg$8`xKY3l1Sm2V<-gx@7h@(K|*gi^0?LV~M=t52_@P4+bqs62a#{6hlP)p05K zDdmKsxcfIH;e#_Y{$Kv;-wz99C(EUn6#-B|8V}tY=mR3OVR9ej{K2djZa``K^qrG0 zTz+i%$5esa|I!?vdF;TQ!E}1F(h6Sdd2G)=hO5u}k*5!)`L7?E%Nk8DeMmE&U(+<= z(~uqy&9mW!37ihKQ^99RJ*8$D0ghxWClJ4B>lG znxUnsMwq=}_O-XeaEP>2pbf=e6cVmelfwf-kSQ%PQ-;8gg)jD()|?uQ(pA^X`gk@< z2-+p+&f1hMY`AVK)U=kUVU;*^T}-4+*k)^#LRK$WI&W}g=HM)0o@~_E?+KQ4(SdsN z7vLDlpfP_93~+hKJ=f1$Xk8=a!7djXW@!B5-Hr0NC%*2K4CQz^nnW*Dj?V~I7WZ`j z93b=doWR+7;I~nC{*E9>7UYlU=l`)W_-I=27hGpI6w5lVkbRAkr%SNYwYN}Xlbprb zx14v(!LBrT&@iX)I&{f?Q79HQktYK5kiXA%a6BFBDRSETuKPA6-5==T11l11`UZQFNnCCY_Hgn?m-a>l zYr1jL8s69O{eL(c(bs@%)X_l5+_dPF_New3MD%U>4&&=}nQ&|SrB(x(YmlJS4BfnO z6O1aLQOTA5y@sH_D&9?v{6RC&^Vdz;3l}WP;;#uWki%o{5LRE6_Yqa5ER*oc1-uNi zA>V(q^nt4zEMcbXY+?5~oFn_FFWB!c(2+Ex-(?6mdj(dmMHnqt86`iMHkiXe-Si9a zv4InrUl{j`f*8EcV&l!$qC2G7ph31UqE~91SBBc7b=3?x?)?4tR)n z)A@oKbn3h`OSaVo@!3m6ZZEWmy)66|FH!b8p3yGIvK3*LKr?{LgYfq&o`VDt8O5Q( zgpQioTmtd@6&nLB*y6I99&RuJu_bT?2m)B|+2*Y}pS-TY$-2$PtU3x%6=T&{%vUN{uX`fv@ z3^7`vx_#-oSz4Gs#f!H$@Kw8*czetf?PA33F|W1@PhPPW!K^xz$7|R?WB^4e49=Hw z6Z=__!Or=QA=oDI{=G!l*>1g|u(W{%#3_DP*)~Ab_17p4tE?Z;|3o`2)zKyM$FsC9 z{t~w2S+vh#q$G2SQ!2Iyb?q2DQYu5NdL_AP#V(Y^z?^vfPjJxA;(fwBSJ1Bwg<)9Y zg{Cu0-CcPrYS@<^tC_`|>aLl^rd+L=#j*Rvhk&z%zH~lv78g2;4V}e=vX(fg&BUVT z{ZQnO!VfG1*th*8F2TC{@K0hUN)jg$6~en35q%T({sfnN2sKnrFERw*`waUmP4z4- zcI}u|LR2s9(6F=gIuEa1!GOv_3slG*Jm|Tn&DYVc_gYi zs^>6jI!}w9-y)}f8P$c26_4qiDJdJN(gsUgJ;BQpSdj+YjrU!~lzm&)UG|0e({rKs zQQg-4E!}DH`9AwF`#i>8$l4ckpi5vqp~q%tvli@mY%ja169&Prwe@GUt()XqmE-*G zWlIAc^-+uOFl?r&Ez`_G8W&EwJDn7cC`l>p2|blNxWG{AzxQ{!;RPe{Rh|4?bwRAH zx4j@{9~r~45hW3h3sj-zI}G(=yZE@cW=up8J+eMU&!p?V^E(SWn6p7yg0ruBvW51$ z6DIo2-cBJ$GSmk^T!k!&Z@`^`vn8CsbP7|YuR(nvUbPE^!AXDJae8p-+CvV6kgL1I zix@?P+@9@X`(G12PWUvTCc&N1n9!MUI-zWoZ`9NJHF|rfBVt2Xm#!?aJaJp%UlQL; zd?WGw#P<^W;=@DFM4S&z3m-9Z=t%3x%OgjR^aDCIG6mP=BV&{PF>-X$CnI%97?Dw& zXPc@Zsk18Ha%G02YW?XXr&*V7UH@$^&Xh?3Uf+w>fB151l3KhkJ;X91bqBtqH`j71Sk?T*1tMngwA#9Id|I>fh{BvA4o3F% zC%0Jfkrl;OIJzT=Cfs4Y;lyVSx0B9e@$e3s#Nf+uiA{JZ^27MbNhI+YeN+E0G|yeK zD)mzsU3h|dw(g6kmbSxKeNJy6eBFVq`ef<7f5m@7WPK0Hgc5DAe4QER4u;OoBUrML zxi4GRqJ;}Qt4_(c(XF=Xu&hN3JZTp;%MtgV3f#Z@;Zu%`^ib?(bRLVa+|hYVV_8gb zsk|mByWVC=08e z%!}Klc#lnq!O^L7VVS_O2ORogSHVjr`-$fVrBFzOVzLu&bU@M{c$lOe$yIFpM_6aa zM&$|k3N;8pJFQFj8m`7+DEdsN_xlIT;lg(w^vqVHb)R#e6MqUw79gtUpJr)>O}1*R zCR!LXe$4Y?Pbf5bf{(dZY}GzWZG5L>Cqs6-e%89Tac@{>canOqvc8o%{aeq~XoZct zT|qtx=YN#di2moFdTxJy))RaNy26;tvN9~&IfTFU-tsUkpeDP_Nna+FCH*n!8{EIa z-wE8$Ctbncm-02pblQ34)sKfHesBGO(>D3w--E$4A*o-bx%#f>4(2nweWm;iUqg%_ z*fOWJnGb?l!TTvLXl{2uNU866O~D3#K~0loHJpZH8KTu7LCdla zk6JY<7k}He-)QOm$bk9*Z3C_iQ0ZcHztZK7`rFX=?if2*KjbMnSMDgcW<{(@lRIi+ zR8$1bPeqoCN;SG6S$h$dXW;m{0`8ZtS4X)=eKhJ{qnbut8g*y{N&G(9QAS2>+e#<= zyDy9i@-A808b3;A{ZE8;g7*go^!xFn0*};q(4XfEBD2fml22_RM*~T;uY3BU`pa9- zjj-NOT9(vslL&oPYdl%?ObwSxEM;`6;Jg%6rY-YvI$}8OZ3%ECM1Yytxxu0Z19%-$ zzVbG?JvXktTLX_oGM&EhHBBiF#3`XgT}`9l38D~o!P`j0gdAb%z*=D7BFKLjvG&Xe zQJc!AvLuyqK6R&#q)x^p%MDNE_2UTa_A5p_^x(3kU+vH6!wqkU{agIu$Ji^e*JA_M zlfxzszkm2c!#^1Q(eTRQKUlH5iT8BYWi5z{ z8L@*92VR-7{!n7QQldTPXifZKTx(~Q#>|Apzj(wP9%g-uki;YD@sFgjRFCH>zHh8(!Z#Gnx);JIjIZrQlZvLZ zVpzqgrv4|-`-uCYBDn=NnTnG(I7q73!**@vcmZ8GML)i>VA zjj-H_W)LCs+4ByO!CSbUOyEHehI{NZ=@fViJ~zh16IxM4r}4&gkhrN`#^Z?iAiXz% zQ%GyNVa>b|UeUA$pwGJc##I?SZSu=3YL%}yDAOta!3x}K{COdioJk<(iHg(4KxUea zl7y3+k-ND_R-sy;LdEszP$OjZJj)c7BretKq6_5ngY=w1};vIWFBWAX=Ar@a=#GILq8`dHE9mXU)rb4)+!nA}( zy0D2O3+|*U-#w@RB~gdbQ8mh`ro*&O7(Ya%Z?v<*B56d<(iLB&hZKY$Uk&?8g}CkC zqA-r6l6#3k@rL5hitUQQOb9c8>CH0H_q(d{HF~Tqnr&MaBujs;RxVqi&RO~u8oc>i zNxy25GotH@9r&b%9-p0_c&4+;Y8E={601CSDyj;(PM5}_S??-sBkg#FuTy2UDCX$- z;V<`!v&AK^#F^+Is%>#S!= z)-7f#nvzg?wKh(Tqb+68>(&cu$5rcjr`3lROAt^^7?^!E^a zuiK(@nN_*W3mTU^OD?-ATBhnr#pz@{*_jL#)q374$Ba8)q2!Xu-BUBhoqszS?IMGV z%DscHTwKUESlghSQ&N4dwtm_8a>v4h75ati>&L~Y$wK~Xd?0IK)pG3@H#tnmjJ3H> zKeFbr_?ZSn{N3?0*FO7v?vsx{VUE9N^5lEs`x5V8V}3fB%z85a$;Vd3ugc9`n>#=| z{kLn@=05Yt)A7&du6;cBk!Rw~t8$-ta?K;=C)chSAR8WUZRUT5FG2;p<)>q1%QTfG z5Fj&$+&yb?Z^F=w)$*?sLS^4fLVlR}r=yni*?H!*@vHLUEo&YD5|&lJeIy>}J@aH< z{L@eVHg{F-laJ()d292K<=ICbeR6I5vzAqlty&ZR$g_{+u6lG;ZgTtw^VY`augaT7 z=J%{w+tU|6rsvVM&#div=8?P}^QxZ5EqUfuV|vyia!vlKHIF}%kdT1oTK-YX^Ur@{ zqa>-MBw+pjDR`G8e+eN@1o;PR_a^)w5!(^oKzJWvFTy7Xv*tfA{r*g{=>E((WWH(k zLgT#o*_-uy+2NS1s>RaVq!1rD@kS^6Tby`+>7=DO;SM2)MBMBw@&8HVdi zWE8G1lV9UnM()RT*4k$td2$VzwJN~LJ_i5x`S`J9e*UW5)laW2AWPOf7KE}M$u&O- zhCjVFFE4)WYS4Vuqfh36-DHvZkwL*~Z+>+n2cZJqeMYx>ML_CIU*;G<)& zKbi5(dtXWSk9h8ALq_X*kM+cygPT8?UVf_k^%74LMQXrZr9%k^z?qGKOGWFIN`S2@> zVOSN1F%~^Y6{U+&4P@f(95b5!c8f9s~&?4S{OX|37nG^h25PnST}lL{J?Pu^p8Y*LDQMs zp}0mI8$qv+C(!FlHxIG!_}|}uDezwk{Feg%rNDnF@Lvl2mjeIqP@s2Vgi^qEyP3=+ zp~Oq}LD?c?2>zEu1^!r)_4`0y1G;~_oZ1(&g8cpVjXM(h_6VxJje)9fH-Psx2+p$z zQBk*>MKmL|e66N{8sTvY(2f7UC_vS+d|C(HnDG>#3fTqsv@>KN3XDTLsz?$~9t1EX3jcd#Jq4oiAAl60)MQR#5u6mD4sqi^2-R=^1U^72eEp2< zqAgQ}au0PDibt4<|1pjvAcVoS32hTHm;xh7GMP>RG)Xp6U=+eQ?7~!fGKQoAAiqNR zEd@rC3FKu8+=+0O0(T)?rGNoJH5ivM2vHQc8({AD9#sbKoG4~+Mq`0(hPRMF3u)Krw(K3Y7E#);^#VKrv1FBY+YL*Z`DL;6(s0QQ##2 zWfXWB08fE30Dq#uI>L}YQ@{@3FBEWK5!^xn9(gigpCju5WKm!PfCUsN2e6m|e*$2l zz$*YAq`*c1zooz?08dk3Gk|9)@Mi#jpuk@MXq5oA00^VNRscE{z%~F86xa?Rk^-*+ zh^9aVfOk{?UIXwR1zrd6B?aC9P)C6`0n}4q2Y@jgfd8+ytB;ZDs^Vwn&HI=_0Rcan zYC>gGsa0HBDT}6Mx3fF!;IcF9%#JKkU*EiWv-8~9dBdAG%Ys#b)EE;98VcA}nxG(G z+lsUWvBlC>ph$5kf{}#S##U-lfq*q>D0Tgv`(~!QYwr>1aO0T4j_wb4%KU} zRVYfS+(f;e|6k3&MK`#u(DMM-c$08<#ejIB(lg$F3q!b28nIgSGWYc*I0oHbUx_2Tsk>rK>4{WthM z4C!6&{0RUtr>~%9q42u!NxFsJVVOVNxIdi5r6$%({SRct(NA} zMyUx$kT20z>B}@E-Af0g`{6-Kn8j&8LM?)qKCB3vGl&7JPO>^ZwoJ~r! zKwd#@@*sUhevrN$V zzCyRDCuycSO!L)K6jxuRCF*JFRnJga{S(eZf2OtSdHSCE7uu%2Mtjx2(joOtI;viv zGwSPfUVWS1P%qMT^*tP!-X}>Lp-EaWFkO=ZAJ^o-r!*xnOVa`iv~VD;O$hXBlLKqC zDS?Nyn*-~$X@O1J^uR9dNu08<@WcCPTKFltBm6Yo7v3+w_BNTzN+DgMqL4;llm^0&>A`f zZk2(R1cKL-&w&$wJi7vfspCKN1bOxm{G;mvL7trl(<39$3ut0Jh(ho$LU>ZO(plB_ z0+c|#JbJ%g%!`nRzD0UxwH%JKsP7h+pgE?sY8ny;Tb#+oB1UafJ}+tv2pY1D zqiHz3G5OQS(a>#G{?@8fpdb0=eH!Q0G5Ji-f1JU`B7P-`@yky;za_Qvi%~nj z0=1u`+o_%3fe!OzWA5;O7@re;$o98BxFNVD2;V3*Nvoxe(q?I^v|ZXQ4M}^YXQTtt z5$U*eQo1Bvk*-N2k`&THlS5NO>q0*cJsNsEv?DYWnk9cuo-5Cn7svzhI{9JwqWqp5 zP(sRlWucN#(#kR=tK<|%8B&fa!^&ypta4tttc28=>U?#H+N+k;Z>d;`>LK;0dPY63 zzM)=MM^s5$qpjCAX}h#N+CJ@|_O^CKdtZYi52wQEa8EeLi=TAetGF2_GT_yr%g`L~ zaz-COOM9|C7ELj$U>U_qiBaA%`}igVxOU@h0lOA%qg`v2xX!jdgr@7#mhG#L03l=NpD*PKK(~vPeSF}H-Xu4t*Oe0|w zJ)_oyE^dg&w$PBtepqP)3%Ewg$zlW;*qDmT3B(u(zOL&z+#8oIR&=gZ!Icg`M{BC9 zyE8)3ScC_}nvZoxx&W3&(yaenNkkn0CE{P5(@1*BS-}bJeDcU4ov(EDIvI_%aXp=S zG!^f_1VAB!wnxqAxmBE16s@K{ z1#YtYe!&%~Pw9Fr-qzI>=W(>glT~P!4bNK%R!6*ZVJhAN)Gd-i*|Pem8LH8X)(Sn3 zsEmSzSt>0bXn;Z+GT=5Wuhd8nv(ZiO8(v^}86V%g*u2^TP zjT=uRY{Nke2cX$#;u60IWdPR^N|_b645M9Hf-yr$2KP|U*>0I7br_sTT?b(Sq~}}< zVmZV00ir-)b%IfYuJr-0j`fVo%c?ArzD!>9qN}Z?LrgL{kwG<(z-)Q_P8Ln{S{@U2 zF~>t%fw{H@(K8=ZQ_#6wp;FEx)fY7R*^RQ}QFIK-*3X=9J9#W~yF3u@ql0{qx<9_3tqVX|28xbQ|Latln zc|rJx>!s{|u7c;dFu>k1ZyBYGQD){Cp68$u80X@au2{T@^kiEE5iU&30UwbrZIMVU z-l<1oU6JmNIEptxGe{6<@%@nw4feTf_Ml4H? zt)FvXRV(#c4m*++c{Y0ASD5~4@z;a!3I6P}o5(pOOK1|f3fU_g{bdv{=4{a}XXLo2 zxl-BdgVzVlI^~+m0NXf@D&-{8$f=8PgcVepwGmt6RSDgU77U&!GveE17Zw+Gt@?x~ zaVHMPTcdf!IBDDUDhB3ZY0@q(c3=fPHIM>8ZT>*9=72{z98h}F?kyUHgvUl_^;amm zNNhCK4O2w;AV*xmi?AqccF`FA7;yT({lw;x>ok5B? z1=vt8tdd+K3zyYp!OBfL>ri|lxGlxrN&!nSZNVwnStCoyN(Q+_!f5P%+bVhvjTT(S zqs&?*FHbqAh-ysHg3tzedAm$y(}e&$ndww8zkbZv9Iy%&EF#5ftL~yy#)8lx;<;Hn umt!Qhu$or=4Xs9bWAd6uS2Sun9=9is+ib_>);H5}e7_qX%DmCGOaB3)Q39p_ literal 0 HcmV?d00001