mirror of
https://github.com/skoelle/dos-tcm-intros.git
synced 2026-09-17 20:30:24 +00:00
188 lines
4.0 KiB
ObjectPascal
188 lines
4.0 KiB
ObjectPascal
{ Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
|
Licensed under the MIT License. See LICENSE file in project root for details. }
|
|
{$S-}
|
|
{$R-}
|
|
{$G+}
|
|
{$D-}
|
|
uses crt,textgraf,WOWTPU,WOWCONST;
|
|
type
|
|
lpi = array[0..2] of byte;
|
|
lp = array[0..255] of lpi;
|
|
var
|
|
f : file;
|
|
k,i,j,x,y,anz : integer;
|
|
n : word;
|
|
b : byte;
|
|
l : lp;
|
|
p : vgacolors;
|
|
s : string;
|
|
c : array[0..130] of byte;
|
|
ch:char;
|
|
sx : array[0..300] of integer;
|
|
sy : array[0..300] of integer;
|
|
sc : array[0..300] of integer;
|
|
sc2: array[0..300] of integer;
|
|
font : array[0..80, 0..7, 0..7] of byte;
|
|
lauf : string;
|
|
lx,li: integer;
|
|
SBPort: word;
|
|
flag:integer;
|
|
procedure writeline(wlx,wly : integer; wls : string);
|
|
begin
|
|
for i:=1 to length(wls) do begin
|
|
for x:=0 to 7 do begin
|
|
for y:=0 to 7 do begin
|
|
if ord(wls[i])<>32 then
|
|
mem[$A000: (wly+y) * word(320) + wlx+x+(i-1)*8]:=font[ord(wls[i])-64,x,y]
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
function Key : boolean;
|
|
var flag : boolean;
|
|
begin
|
|
asm
|
|
mov Flag,0
|
|
in al,$60
|
|
test al,128
|
|
jne @@KeineTaste
|
|
mov Flag,1
|
|
@@KeineTaste:
|
|
end;
|
|
Key:=Flag;
|
|
end;
|
|
begin
|
|
case InitTextGraf of
|
|
1: begin end;
|
|
end;
|
|
GrafikMode($13);
|
|
for i:=0 to 31999 do begin
|
|
mem[$A000:i]:=0;
|
|
end;
|
|
for i:=0 to 31999 do begin
|
|
mem[$A000:i+32000]:=0;
|
|
end;
|
|
|
|
for i:=0 to 255 do begin
|
|
for j:=0 to 2 do begin
|
|
p[i,j]:=0;
|
|
end;
|
|
end;
|
|
setvgacolors(p);
|
|
|
|
assign(f,'star-int.004');
|
|
reset(f);
|
|
blockread(f,c,1,n);
|
|
for i:=0 to 130 do
|
|
begin
|
|
mem[$A000: i]:= c[3+i];
|
|
end;
|
|
blockread(f,mem[$A007:13],500,n);
|
|
close(f);
|
|
for j:=0 to 1 do begin
|
|
for i:=0 to 39 do begin
|
|
for x:=0 to 7 do begin
|
|
for y:=0 to 7 do begin
|
|
font[i+j*40,x,y]:= mem[$A000: (y+j*8) * word(320) + x+i*8];
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
assign(f,'star-int.001');
|
|
reset(f);
|
|
blockread(f,l,sizeof(l),n);
|
|
for i:=0 to 255 do
|
|
begin
|
|
for j:=0 to 2 do
|
|
begin
|
|
p[i,j]:=l[i+1,j];
|
|
end;
|
|
end;
|
|
close(f);
|
|
|
|
assign(f,'star-int.003');
|
|
reset(f);
|
|
blockread(f,l,sizeof(l),n);
|
|
for i:=208 to 223 do
|
|
begin
|
|
for j:=0 to 2 do
|
|
begin
|
|
p[i,j]:=l[i+1-208,j];
|
|
end;
|
|
end;
|
|
close(f);
|
|
|
|
assign(f,'star-int.002');
|
|
reset(f);
|
|
blockread(f,c,1,n);
|
|
for i:=0 to 130 do
|
|
begin
|
|
mem[$A000: i]:= c[3+i];
|
|
end;
|
|
blockread(f,mem[$A007:13],500,n);
|
|
close(f);
|
|
|
|
writeline(74,90, ' star intro');
|
|
writeline(74,106,' code gfx music');
|
|
writeline(74,122,' by stefan koelle');
|
|
writeline(78,138,' press any key');
|
|
|
|
randomize;
|
|
for x:=0 to 150 do
|
|
begin
|
|
sx[x] := random(319);
|
|
repeat
|
|
k:=0;
|
|
sy[x] := random(199)+1;
|
|
for i:=0 to x-1 do
|
|
begin
|
|
if sy[i]=sy[x] then k:=1;
|
|
end;
|
|
for i:=x+1 to 150 do
|
|
begin
|
|
if sy[i]=sy[x] then k:=1;
|
|
end;
|
|
until k=0;
|
|
sc[x] := random(3)+1;
|
|
sc2[x]:= mem[$A000: sy[x] * word(320) + sx[x]];
|
|
end;
|
|
|
|
setvgacolors(p);
|
|
SBPort:=IdentifySB;
|
|
if SBPort=0 then begin (* bei IdentifySB=0 -> Keine Soundblaster *)
|
|
SBPort:=$42; (* Lautsprecherausgabe *)
|
|
end;
|
|
for i:=1 to paramcount do
|
|
if paramstr(i)='-p' then SBPort:=$42;
|
|
if sbport=$42 then begin
|
|
flag:=doit('star-int.005',sbport,0,21000);
|
|
end else begin
|
|
flag:=doit('star-int.005',sbport,0,16000);
|
|
end;
|
|
repeat
|
|
for x:=0 to 150 do begin
|
|
mem[$A000: sy[x] * word(320) + sx[x]]:= sc2[x];
|
|
sx[x]:=sx[x]+SC[X];
|
|
if sx[x]>319 then
|
|
begin
|
|
sx[x]:=0;
|
|
sc[x]:=random(3)+1;
|
|
end;
|
|
sc2[x]:=mem[$A000: sy[x] * word(320) + sx[x]];
|
|
if mem[$A000: sy[x] * word(320) + sx[x]]=0 then
|
|
begin
|
|
mem[$A000: sy[x] * word(320) + sx[x]]:= (-sc[x]*3)+27;
|
|
end;
|
|
end;
|
|
until key;
|
|
ch:=readkey;
|
|
endit;
|
|
for i:=0 to 31999 do begin
|
|
mem[$A000:i]:=0;
|
|
end;
|
|
for i:=0 to 31999 do begin
|
|
mem[$A000:i+32000]:=0;
|
|
end;
|
|
TEXTMODE(co80);
|
|
end. |