Files
pepe-runner-ascii/original_turbopascal/UTEXT.BAK
T

150 lines
4.5 KiB
Plaintext

unit utext;
interface
uses grafix;
procedure PutSprite(posX, posY, color, lletra : word);
{ Funci¢: Coloca un caracter en pantalla }
procedure PutString(posX, posY, color : word; frase : string);
{ Funci¢: Coloca una frase en pantalla }
procedure PutStringCENTERED(posY, color : word; frase : string);
{ Funci¢: Coloca una frase en pantalla i centrada horitzontalment }
procedure PutStringWINDOWED(posY, color : word; frase : string);
{ Funci¢: Coloca una frase dins d'una finestra centrada }
procedure cls(pant : word);
{ Funci¢: Borra la pantalla }
procedure PintaPantalla;
{ Funci¢: Pinta la pantalla }
procedure SetupVirtualText(var screen:ptr_pantalla;var virtual_addr:word);
{ Funci¢: Crea una pantalla virtual de text (2K) }
procedure TancarVirtualText(var screen:ptr_pantalla);
{ Funci¢: Tanca la pantalla virtual de text (2k) }
procedure HideCursor;
procedure ShowCursor;
implementation
uses crt, tipos;
{##############################################################}
procedure SetupVirtualText(var screen:ptr_pantalla;var virtual_addr:word);
begin
getmem(screen,2000);
virtual_addr:=seg(screen^);
end;
{##############################################################}
procedure TancarVirtualText(var screen:ptr_pantalla);
begin
freemem(screen,2000);
end;
{##############################################################}
procedure PutSprite(posX, posY, color, lletra : word);
var i : word;
begin
mem[$B800:((posX) shl 1)+(posY*80)]:=lletra;
mem[$B800:((posX) shl 1)+1+(posY*80)]:=color;
end;
{##############################################################}
procedure PutString(posX, posY, color : word; frase : string);
var i : word;
begin
for i:=0 to LENGTH(frase)-1 do
begin
mem[$B800:((i+posX) shl 1)+(posY*80)]:=ord(frase[i+1]);
mem[$B800:((i+posX) shl 1)+1+(posY*80)]:=color;
end;
end;
{##############################################################}
procedure PutStringCENTERED(posY, color : word; frase : string);
var i : word;
ini : word;
begin
ini := (40 - LENGTH(frase)) div 2;
for i:=0 to LENGTH(frase)-1 do
begin
mem[$B800:((i+ini) shl 1)+(posY*80)]:=ord(frase[i+1]);
mem[$B800:((i+ini) shl 1)+1+(posY*80)]:=color;
end;
end;
{##############################################################}
procedure PutStringWINDOWED(posY, color : word; frase : string);
var i : word;
ini : word;
ample : word;
begin
ini := (40 - LENGTH(frase)) div 2;
ample := LENGTH(frase) + 4;
for i:=0 to LENGTH(frase)-1 do
begin
mem[$B800:((i+ini) shl 1)+(posY*80)]:=ord(frase[i+1]);
mem[$B800:((i+ini) shl 1)+1+(posY*80)]:=color;
end;
for i:=0 to LENGTH(frase)+3 do
begin
mem[$B800:((i+ini-2) shl 1)+((posY-1)*80)]:=196;
mem[$B800:((i+ini-2) shl 1)+1+((posY-1)*80)]:=color;
mem[$B800:((i+ini-2) shl 1)+((posY+1)*80)]:=196;
mem[$B800:((i+ini-2) shl 1)+1+((posY+1)*80)]:=color;
end;
end;
{##############################################################}
procedure cls(pant : word);
var i : word;
begin
for i:=0 to 1999 do mem[pant:i]:=0;
end;
{##############################################################}
procedure PintaPantalla;
var i,j : word;
begin
for i:=0 to 39 do
for j:=0 to 24 do
begin
mem[pant1:(i shl 1)+(j*80)]:=mapa[i,j].tipo;
mem[pant1:(i shl 1)+1+(j*80)]:=mapa[i,j].color;
end;
{ pepe }
mem[pant1:((pepe.posX) shl 1)+(pepe.posY*80)]:=pepe.dibuix;
mem[pant1:((pepe.posX) shl 1)+(pepe.posY*80)+1]:=pepe.color;
{ malos }
mem[pant1:((malo[0].posX) shl 1)+(malo[0].posY*80)]:=malo[0].dibuix;
mem[pant1:((malo[0].posX) shl 1)+(malo[0].posY*80)+1]:=malo[0].color;
mem[pant1:((malo[1].posX) shl 1)+(malo[1].posY*80)]:=malo[1].dibuix;
mem[pant1:((malo[1].posX) shl 1)+(malo[1].posY*80)+1]:=malo[1].color;
mem[pant1:((malo[2].posX) shl 1)+(malo[2].posY*80)]:=malo[2].dibuix;
mem[pant1:((malo[2].posX) shl 1)+(malo[2].posY*80)+1]:=malo[2].color;
espera_VGA;espera_VGA;espera_VGA;espera_VGA;
move(mem[pant1:0], mem[$B800:0], 2000);
GotoXY(1,1); TextBackGround(Blue); TextColor(LightGray);
Write('LEVEL ', level:2, ' SCORE ', score:3, ' LIVES ', pepe.vides:1);
GotoXY(14,2);
Write('HI-SCORE ', hi_score:3, ' ', nom_hi_score);
inc(clock);
end;
{##############################################################}
procedure HideCursor;assembler;
asm
mov ax,0100h
mov cx,0100h
int 10h
end;
{##############################################################}
procedure ShowCursor;assembler;
asm
mov ax,0100h
mov cx,0607h
int 10h
end;
{##############################################################}
begin
end.