Original source code back to 1994
This commit is contained in:
commit
6bc455f9af
37 changed files with 3240 additions and 0 deletions
163
SRC/MOON.PAS
Normal file
163
SRC/MOON.PAS
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
Unit Moon;
|
||||
Interface
|
||||
Uses
|
||||
CRT,DOS,GRAPHVGA,LIBUSES;
|
||||
const
|
||||
MoonX = 111;
|
||||
MoonY = 89;
|
||||
MaskX = 151;
|
||||
MaskY = 89;
|
||||
|
||||
Procedure InitMoon;
|
||||
Procedure CloseMoon;
|
||||
|
||||
Procedure BouffeLaLune;
|
||||
|
||||
Procedure GerbeLaLune;
|
||||
|
||||
Implementation
|
||||
Var
|
||||
P : RGB;
|
||||
Moon1 : Pointer; { Array of Byte; {10080 }
|
||||
Moon2 : Pointer;
|
||||
Mask1 : Pointer; {13680 }
|
||||
Mask2 : Pointer;
|
||||
|
||||
Procedure PutBob(X1,Y1,X2,Y2 : word; P : Pointer);
|
||||
Begin
|
||||
asm
|
||||
{ Calcul des pts de depart }
|
||||
cli
|
||||
Push DS
|
||||
Mov AX,WriteS
|
||||
Mov ES,AX
|
||||
|
||||
Lds SI,P
|
||||
INC SI
|
||||
INC SI
|
||||
Mov AX,Y1
|
||||
mov BX,320
|
||||
Mul bx
|
||||
add ax,X1 { DI = Y2*320+X2 }
|
||||
Mov Di,AX { DI = DI + 289 (320-31) }
|
||||
Sub BX,X2
|
||||
|
||||
mov DX,Y2
|
||||
@@Bcl:Mov CX,X2
|
||||
rep movsb
|
||||
Add DI,BX
|
||||
dec dx
|
||||
jnz @@Bcl
|
||||
|
||||
pop DS
|
||||
sti
|
||||
end;
|
||||
End;
|
||||
|
||||
Procedure InitMoon;
|
||||
var
|
||||
X,Y,C : Word;
|
||||
Begin
|
||||
FillChar(Screen^,64000,0);
|
||||
PaletteOff;
|
||||
opensub(Moon_walk);
|
||||
|
||||
GetMem(Moon1,10080);
|
||||
GetMem(Moon2,10080);
|
||||
GetMem(Mask1,13680);
|
||||
GetMem(Mask2,13680);
|
||||
|
||||
LoadRaw(P,SizeOf(P));
|
||||
LoadRaw(Moon1^,10080); {SizeOf(Moon1));}
|
||||
LoadRaw(Moon2^,10080); {SizeOf(Moon2));}
|
||||
LoadRaw(Mask1^,13680); {SizeOf(Mask1));}
|
||||
LoadRaw(Mask2^,13680); {SizeOf(Mask2));}
|
||||
SetRgb(P);
|
||||
end;
|
||||
|
||||
Procedure CloseMoon;
|
||||
Begin
|
||||
FreeMem(Moon1,10080);
|
||||
FreeMem(Moon2,10080);
|
||||
FreeMem(Mask1,13680);
|
||||
FreeMem(Mask2,13680);
|
||||
end;
|
||||
|
||||
Procedure AddBob(X1,Y1,X2,Y2 : word; P : Pointer);
|
||||
Begin
|
||||
asm
|
||||
{ Calcul des pts de depart }
|
||||
cli
|
||||
Push DS
|
||||
Mov AX,WriteS
|
||||
Mov ES,AX
|
||||
Lds SI,P
|
||||
inc SI
|
||||
inc SI
|
||||
Mov AX,Y1
|
||||
mov BX,320
|
||||
Mul bx
|
||||
add ax,X1 { DI = Y2*320+X2 }
|
||||
Mov Di,AX { DI = DI + 289 (320-31) }
|
||||
|
||||
Sub BX,X2
|
||||
|
||||
mov DX,Y2
|
||||
@@Bcl:Mov CX,X2
|
||||
@@Bc2:Mov AH,Byte Ptr ES:[DI]
|
||||
xor AL,AL
|
||||
mov AL,Byte Ptr DS:[SI]
|
||||
cmp AL,0
|
||||
je @@go
|
||||
inc AL
|
||||
@@go: inc SI
|
||||
cmp AL,16
|
||||
jbe @@ok
|
||||
xor AL,AL
|
||||
@@ok: Sub AH,AL
|
||||
Mov AL,AH
|
||||
cmp AL,0
|
||||
jnle @@sor
|
||||
Xor AL,AL
|
||||
@@Sor:Stosb
|
||||
Loop @@Bc2
|
||||
Add DI,BX
|
||||
dec dx
|
||||
jnz @@Bcl
|
||||
|
||||
pop DS
|
||||
sti
|
||||
end;
|
||||
End;
|
||||
|
||||
Procedure BouffeLaLune;
|
||||
Var
|
||||
C : Word;
|
||||
Begin
|
||||
For C:=0 to 138 do
|
||||
begin
|
||||
PutBob(160-55,100-44,MoonX,MoonY,Moon1);
|
||||
AddBob(214-C,100-44,MaskX,MaskY,Mask1);
|
||||
Move(Ptr(WriteS,0)^,Ptr($A000,0)^,64000);
|
||||
WaitVbl;
|
||||
WaitVbl;
|
||||
WaitVbl;
|
||||
end;
|
||||
End;
|
||||
|
||||
Procedure GerbeLaLune;
|
||||
Var
|
||||
C : Word;
|
||||
Begin
|
||||
For C:=138 to 138*2 do
|
||||
begin
|
||||
PutBob(160-55,100-44,MoonX,MoonY,Moon2);
|
||||
AddBob(210-C,100-44,MaskX,MaskY,Mask2);
|
||||
Move(Ptr(WriteS,0)^,Ptr($A000,0)^,64000);
|
||||
WaitVbl;
|
||||
WaitVbl;
|
||||
WaitVbl;
|
||||
end;
|
||||
End;
|
||||
|
||||
End.
|
||||
Loading…
Reference in a new issue