mirror of
https://github.com/deater/tb1.git
synced 2024-12-22 13:29:48 +00:00
614 lines
26 KiB
ObjectPascal
614 lines
26 KiB
ObjectPascal
program TOM_BOMB_EM_AND_INVASION_OF_INANIMATE_OBJECTS;
|
||
{by Vincent Weaver....21085-4706}
|
||
|
||
uses vmwgraph,crt;
|
||
|
||
{$I c:\pascal\tb1ans.pas}
|
||
|
||
|
||
type screentype = array [0..3999] of byte;
|
||
Type Toastinfo = Record { This is format of of each of our }
|
||
x,y:integer; { records for the flying toasters }
|
||
speed,frame:integer;
|
||
active:boolean;
|
||
END;
|
||
|
||
icon = Array [1..30*48] of byte; { This is the size of our pictures }
|
||
|
||
Virtual = Array [1..64000] of byte; { The size of our Virtual Screen }
|
||
VirtPtr = ^Virtual; { Pointer to the virtual screen }
|
||
|
||
CONST frame1 : icon = (
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,01,01,
|
||
01,01,01,01,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,02,02,
|
||
02,02,02,02,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,03,03,
|
||
03,03,03,03,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,04,04,04,
|
||
04,04,04,04,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,06,06,06,
|
||
06,06,06,06,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,07,07,
|
||
7,07,07,07,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,07,07,07,
|
||
7,07,07,07,07,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,07,07,07,
|
||
7,07,07,07,07,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,07,07,07,
|
||
7,07,07,07,07,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,07,07,07,
|
||
7,07,07,07,07,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,07,07,07,
|
||
7,07,07,07,07,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,07,07,07,
|
||
7,07,07,07,07,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,07,07,07,
|
||
7,07,07,07,07,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,07,07,07,
|
||
7,07,07,07,07,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,09,07,07,07,
|
||
09,09,07,07,07,09,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,07,08,13,14,15,14,15,09,09,09,07,07,07,
|
||
08,08,07,07,07,09,09,09,13,14,15,14,15,08,07,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,07,08,09,13,14,15,14,15,09,09,09,07,07,07,
|
||
7,07,07,07,07,09,09,09,13,14,15,14,15,09,08,07,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,09,09,09,09,07,07,07,
|
||
10,10,07,07,07,09,09,09,09,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,07,08,08,08,08,08,08,08,08,08,08,08,08,07,07,07,
|
||
11,11,07,07,07,08,08,08,08,08,08,08,08,08,08,08,08,07,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,
|
||
12,12,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,18,
|
||
17,17,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,18,19,
|
||
20,20,19,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,25,24,
|
||
21,21,24,25,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,27,26,25,
|
||
22,22,25,27,00,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,27,24,
|
||
23,23,24,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,26,27,
|
||
24,27,27,27,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,26,25,26,
|
||
26,26,27,25,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00);
|
||
|
||
frame2 : icon = (
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,01,01,
|
||
01,01,01,01,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,02,02,
|
||
02,02,02,02,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,03,03,
|
||
03,03,03,03,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,04,04,04,
|
||
04,04,04,04,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,06,06,06,
|
||
06,06,06,06,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,07,07,
|
||
07,07,07,07,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,07,07,07,
|
||
07,07,07,07,07,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,07,07,07,
|
||
07,07,07,07,07,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,07,07,07,
|
||
07,07,07,07,07,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,09,07,07,07,
|
||
09,09,07,07,07,09,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,07,08,13,14,15,14,15,09,09,09,07,07,07,
|
||
08,08,07,07,07,09,09,09,13,14,15,14,15,08,07,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,07,08,09,13,14,15,14,15,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,13,14,15,14,15,09,08,07,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,09,09,09,09,07,07,07,
|
||
10,10,07,07,07,09,09,09,09,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,07,08,08,08,08,08,08,08,08,08,08,08,08,07,07,07,
|
||
11,11,07,07,07,08,08,08,08,08,08,08,08,08,08,08,08,07,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,
|
||
12,12,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,18,
|
||
17,17,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,18,19,
|
||
20,20,19,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,25,24,
|
||
21,21,25,25,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,27,26,25,
|
||
22,22,27,27,00,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,27,24,
|
||
24,23,23,27,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,26,27,
|
||
24,27,27,27,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,26,25,26,
|
||
26,26,27,25,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00);
|
||
|
||
|
||
frame3 : icon = (
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,01,01,
|
||
01,01,01,01,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,02,02,
|
||
02,02,02,02,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,03,03,
|
||
03,03,03,03,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,04,04,04,
|
||
04,04,04,04,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,06,06,06,
|
||
06,06,06,06,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,05,05,
|
||
05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,07,07,
|
||
07,07,07,07,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,07,07,07,
|
||
07,07,07,07,07,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,07,07,07,
|
||
07,07,07,07,07,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,07,07,07,
|
||
07,07,07,07,07,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,09,07,07,07,
|
||
09,09,07,07,07,09,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,07,08,13,14,15,14,15,09,09,09,07,07,07,
|
||
08,08,07,07,07,09,09,09,13,14,15,14,15,08,07,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,07,08,09,13,14,15,14,15,09,09,09,07,07,07,
|
||
07,07,07,07,07,09,09,09,13,14,15,14,15,09,08,07,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,07,08,09,09,09,09,09,09,09,09,09,09,07,07,07,
|
||
10,10,07,07,07,09,09,09,09,09,09,09,09,09,09,08,07,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,07,08,08,08,08,08,08,08,08,08,08,08,08,07,07,07,
|
||
11,11,07,07,07,08,08,08,08,08,08,08,08,08,08,08,08,07,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,
|
||
12,12,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,18,
|
||
17,17,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,18,19,
|
||
20,20,19,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,25,24,
|
||
21,21,24,25,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,27,26,25,
|
||
22,22,25,27,00,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,27,24,
|
||
23,23,24,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,26,27,
|
||
24,27,27,27,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
|
||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,26,25,26,
|
||
26,26,27,25,26,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
||
|
||
);
|
||
|
||
|
||
VAR Virscr : VirtPtr; { Our first Virtual screen }
|
||
VirScr2 : VirtPtr; { Our second Virtual screen }
|
||
Vaddr : word; { The segment of our virtual screen}
|
||
Vaddr2 : Word; { The segment of our 2nd virt. screen}
|
||
ourpal : Array [0..255,1..3] of byte; { A virtual pallette }
|
||
toaster : Array [1..1] of toastinfo; { The toaster info }
|
||
Sound : Pointer;
|
||
Check : BOOLEAN;
|
||
|
||
|
||
var grapherror:byte;
|
||
temp:array[1..3] of byte;
|
||
palf:text;
|
||
i,j:byte;
|
||
x,y,barpos:integer;
|
||
screen:screentype absolute $B800:0000;
|
||
ch:char;
|
||
|
||
function menuread:char;
|
||
var chtemp,ch2:char;
|
||
begin
|
||
repeat until keypressed;
|
||
ch2:=#0;
|
||
chtemp:=readkey;
|
||
if chtemp=chr(0) then ch2:=readkey;
|
||
chtemp:=upcase(chtemp);
|
||
if (ord(chtemp)<10) and (ord(chtemp)<128) then begin
|
||
if ch2='H' then chtemp:='<27>';
|
||
if ch2='M' then chtemp:='<27>';
|
||
if ch2='P' then chtemp:='<27>';
|
||
if ch2='K' then chtemp:='<27>';
|
||
end;
|
||
menuread:=chtemp;
|
||
end;
|
||
procedure coolbox(x1,y1,x2,y2:integer);
|
||
begin
|
||
for i:=0 to 5 do box(x1+i,y1+i,x2-i,y2-i,31-i,vga);
|
||
for i:=y1+5 to y2-5 do line(x1+5,i,x2-5,i,7,vga);
|
||
end;
|
||
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
Procedure ShutDown;
|
||
{ This frees the memory used by the virtual screen }
|
||
BEGIN
|
||
FreeMem (VirScr,64000);
|
||
FreeMem (VirScr2,64000);
|
||
END;
|
||
|
||
|
||
|
||
procedure QUIT;
|
||
label menu2;
|
||
begin
|
||
coolbox(90,75,230,125);
|
||
barpos:=0;
|
||
outtextxy('QUIT??? ARE YOU',97,82,9,7,vga,false);
|
||
outtextxy('ABSOLUTELY SURE?',97,90,9,7,vga,false);
|
||
repeat
|
||
if barpos=0 then outtextxy('YES-RIGHT NOW!',97,98,150,0,vga,true)
|
||
else outtextxy('YES-RIGHT NOW!',97,98,150,7,vga,true);
|
||
if barpos=1 then outtextxy('NO--NOT YET.',97,106,150,0,vga,true)
|
||
else outtextxy('NO--NOT YET.',97,106,150,7,vga,true);
|
||
ch:=menuread;
|
||
if (ord(ch)>219) and (ord(ch)<224) then inc(barpos);
|
||
if ch='Y' then barpos:=0;
|
||
if ch='N' then barpos:=1;
|
||
if barpos=2 then barpos:=0;
|
||
until ch=#13;
|
||
if barpos=1 then goto menu2;
|
||
settext;
|
||
shutdown;
|
||
move(imagedata,screen,4000);
|
||
gotoxy(1,23);
|
||
halt;
|
||
menu2:
|
||
end;
|
||
Procedure SetUpVirtual;
|
||
{ This sets up the memory needed for the virtual screen }
|
||
BEGIN
|
||
GetMem (VirScr,64000);
|
||
vaddr := seg (virscr^);
|
||
GetMem (VirScr2,64000);
|
||
vaddr2 := seg (virscr2^);
|
||
END;
|
||
|
||
|
||
|
||
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
Procedure putico(X,Y:Word;VAR sprt : icon;Where:Word); ASSEMBLER;
|
||
{ This puts an icon, EXCEPT it's color 0 (black) pixels, onto the screen
|
||
"where", at position X,Y }
|
||
label
|
||
_Redraw, _DrawLoop, _Exit, _LineLoop, _NextLine, _Store, _NoPaint;
|
||
|
||
asm
|
||
push ds
|
||
push es
|
||
lds si,Sprt
|
||
mov ax,X { ax = x }
|
||
mov bx,Y { bx = y }
|
||
_Redraw:
|
||
push ax
|
||
mov ax,[where]
|
||
mov es,ax
|
||
|
||
mov ax, bx {; ax = bx x = y}
|
||
mov bh, bl {; y = y * 256 bx = bx * 256}
|
||
xor bl, bl
|
||
shl ax, 1
|
||
shl ax, 1
|
||
shl ax, 1
|
||
shl ax, 1
|
||
shl ax, 1
|
||
shl ax, 1 {; y = y * 64 ax = ax * 64}
|
||
add bx, ax {; y = (y*256) + (Y*64) bx = bx + ax (ie y*320)}
|
||
|
||
pop ax {; get back our x}
|
||
|
||
|
||
add ax, bx {; finalise location}
|
||
mov di, ax
|
||
|
||
mov dl,30 { dl = height of sprite }
|
||
xor ch,ch
|
||
mov cl,48 { cx = width of sprite }
|
||
cld
|
||
push ax
|
||
mov ax,cx
|
||
_DrawLoop:
|
||
push di { store y adr. for later }
|
||
mov cx,ax { store width }
|
||
_LineLoop:
|
||
mov bl,byte ptr [si]
|
||
or bl,bl
|
||
jnz _Store
|
||
_NoPaint:
|
||
inc si
|
||
inc di
|
||
loop _LineLoop
|
||
jmp _NextLine
|
||
_Store:
|
||
movsb
|
||
loop _LineLoop
|
||
_NextLine:
|
||
pop di
|
||
dec dl
|
||
jz _Exit
|
||
add di,320 { di = next line of sprite }
|
||
jmp _DrawLoop
|
||
_Exit:
|
||
pop ax
|
||
pop es
|
||
pop ds
|
||
end;
|
||
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
Procedure SetUpScreen;
|
||
{ This procedure sets up the static background to be used in the program }
|
||
|
||
CONST circ : Array [1..5,1..5] of byte =
|
||
((00,00,10,00,00),
|
||
(00,00,09,00,00),
|
||
(10,09,8,09,10),
|
||
(00,00,09,00,00),
|
||
(00,00,10,00,00));
|
||
|
||
VAR x,y:integer;
|
||
loop1,loop2,loop3:integer;
|
||
|
||
BEGIN
|
||
|
||
For loop1:=1 to 200 do BEGIN
|
||
x:=random (315);
|
||
y:=random (195);
|
||
For loop2:=1 to 5 do
|
||
For loop3:=1 to 5 do
|
||
if circ [loop2,loop3]<>0 then
|
||
putpixel (x+loop2,y+loop3,circ [loop2,loop3],vaddr);
|
||
END;
|
||
flip (vaddr,vga); { Copy the entire screen at vaddr, our virtual screen }
|
||
{ on which we have done all our graphics, onto the }
|
||
{ screen you see, VGA }
|
||
flip (vaddr,vaddr2);
|
||
END;
|
||
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
Procedure ScreenTrans (x,y:word);
|
||
{ This is a small procedure to copy a 30x30 pixel block from coordinates
|
||
x,y on the virtual screen to coordinates x,y on the true vga screen }
|
||
BEGIN
|
||
asm
|
||
push ds
|
||
push es
|
||
mov ax,vaddr
|
||
mov es,ax
|
||
mov ax,vaddr2
|
||
mov ds,ax
|
||
mov bx,[X]
|
||
mov dx,[Y]
|
||
push bx {; and this again for later}
|
||
mov bx, dx {; bx = dx}
|
||
mov dh, dl {; dx = dx * 256}
|
||
xor dl, dl
|
||
shl bx, 1
|
||
shl bx, 1
|
||
shl bx, 1
|
||
shl bx, 1
|
||
shl bx, 1
|
||
shl bx, 1 {; bx = bx * 64}
|
||
add dx, bx {; dx = dx + bx (ie y*320)}
|
||
pop bx {; get back our x}
|
||
add bx, dx {; finalise location}
|
||
mov di, bx {; es:di = where to go}
|
||
mov si, di
|
||
mov al,60
|
||
mov bx, 30 { Hight of block to copy }
|
||
@@1 :
|
||
mov cx, 24 { Width of block to copy divided by 2 }
|
||
rep movsw
|
||
add di,110h { 320 - 48 = 272 .. or 110 in hex }
|
||
add si,110h
|
||
dec bx
|
||
jnz @@1
|
||
|
||
pop es
|
||
pop ds
|
||
end;
|
||
{ I wrote this procedure late last night, so it may not be in it's
|
||
most optimised state. Sorry :-)}
|
||
END;
|
||
|
||
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
Procedure NewToaster;
|
||
{ This adds a new toaster to the screen }
|
||
VAR loop1:integer;
|
||
BEGIN
|
||
loop1:=0;
|
||
repeat
|
||
inc (loop1);
|
||
if not (toaster[loop1].active) then BEGIN
|
||
toaster[loop1].x:=36;
|
||
toaster[loop1].y:=165;
|
||
toaster[loop1].active:=true;
|
||
toaster[loop1].frame:=1;
|
||
toaster[loop1].speed:=5;
|
||
loop1:=10;
|
||
END;
|
||
until loop1=10;
|
||
END;
|
||
|
||
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
Procedure Fly;
|
||
{ This is the procedure where we move and put the toasters }
|
||
VAR loop1,loop2:integer;
|
||
ch:char;
|
||
BEGIN
|
||
For loop1:=1 to 10 do
|
||
toaster[loop1].active:=FALSE;
|
||
ch:=#0;
|
||
NewToaster;
|
||
Repeat
|
||
if keypressed then BEGIN
|
||
ch:=readkey;
|
||
if ch='+' then inc(toaster[1].x,5);
|
||
if ch='-' then dec(toaster[1].x,5); { If '+' is pressed, add a toaster }
|
||
end;
|
||
|
||
|
||
|
||
|
||
for loop1:=1 to 10 do
|
||
if toaster[loop1].active then BEGIN
|
||
screentrans (toaster[loop1].x,toaster[loop1].y);
|
||
{ Restore the backgrond the toaster was over }
|
||
|
||
{ Move the toaster }
|
||
if (toaster[loop1].x<1) or (toaster[loop1].y>170) then BEGIN
|
||
toaster[loop1].active:=FALSE;
|
||
NewToaster;
|
||
END;
|
||
{ When toaster reaches the edge of the screen, render it inactive
|
||
and bring a new one into existance. }
|
||
END;
|
||
for loop1:=1 to 10 do
|
||
if toaster[loop1].active then BEGIN
|
||
CASE toaster [loop1].frame of
|
||
1 : putico (toaster[loop1].x,toaster[loop1].y,frame1,vaddr);
|
||
3 : putico (toaster[loop1].x,toaster[loop1].y,frame2,vaddr);
|
||
2,4 : putico (toaster[loop1].x,toaster[loop1].y,frame3,vaddr);
|
||
END;
|
||
toaster[loop1].frame:=toaster[loop1].frame+1;
|
||
if toaster [loop1].frame=5 then toaster[loop1].frame:=1;
|
||
{ Draw all the toasters on the VGA screen }
|
||
END;
|
||
waitretrace;
|
||
flip (vaddr,vga);
|
||
until ch=#27;
|
||
END;
|
||
|
||
procedure playthegame;
|
||
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
||
begin
|
||
cls(0,vaddr);
|
||
SetupScreen; { Draw the background screen to VADDR, then flip it to
|
||
the VGA screen }
|
||
Fly; { Make the toasters fly around the screen }
|
||
{ Free the memory taken up by virtual page }
|
||
end;
|
||
|
||
label picloader,menu;
|
||
|
||
begin
|
||
randomize;
|
||
setupvirtual;
|
||
fade;
|
||
setmcga;
|
||
for x:=0 to 40 do begin
|
||
pal(100+x,x+20,0,0);
|
||
pal(141+x,0,0,x+20);
|
||
pal(182+x,0,x+20,0);
|
||
end;
|
||
fade;
|
||
for x:=0 to 40 do begin
|
||
line(x+40,45,x+40,45+(2*x),100+x,vga);
|
||
line(x+120,45,x+120,45+(2*x),141+x,vga);
|
||
line(x+200,45,x+200,45+(2*x),141+x,vga);
|
||
line(x+80,125,x+80,125-(2*x),182+x,vga);
|
||
line(x+160,125,x+160,125-(2*x),182+x,vga);
|
||
end;
|
||
for x:=40 downto 0 do begin
|
||
line(x+80,45,x+80,125-(2*x),140-x,vga);
|
||
line(x+160,45,x+160,125-(2*x),181-x,vga);
|
||
line(x+240,45,x+240,125-(2*x),181-x,vga);
|
||
line(x+120,125,x+120,45+(2*x),222-x,vga);
|
||
line(x+200,125,x+200,45+(2*x),222-x,vga);
|
||
end;
|
||
unfade;
|
||
|
||
outtextxy('A VMW SOFTWARE PRODUCTION',60,140,15,15,VGA,false);
|
||
y:=0;
|
||
repeat until keypressed;
|
||
ch:=readkey;
|
||
fade;
|
||
cls(0,vga);
|
||
assign(palf,'pal.tb1');
|
||
reset(palf);
|
||
for i:=0 to 255 do begin
|
||
for j:=1 to 3 do readln(palf,temp[j]);
|
||
pal(i,temp[1],temp[2],temp[3]);
|
||
end;
|
||
close(palf);
|
||
fade;
|
||
PICLOADER:
|
||
grapherror:=loadpicsuperpacked(0,0,vaddr,'tbomb1.tb1');
|
||
MENU:
|
||
flip(vaddr,vga);
|
||
unfade;
|
||
repeat until keypressed;
|
||
ch:=readkey;
|
||
barpos:=0;
|
||
outtextxy('F1 HELP',0,190,9,7,vga,false);
|
||
coolbox(117,61,199,140);
|
||
repeat
|
||
if barpos=0 then outtextxy('NEW GAME',123,67,32,0,vga,true)
|
||
else outtextxy('NEW GAME',123,67,32,7,vga,true);
|
||
if barpos=1 then outtextxy('OPTIONS',123,77,32,0,vga,true)
|
||
else outtextxy('OPTIONS',123,77,32,7,vga,true);
|
||
if barpos=2 then outtextxy('REGISTER',123,87,32,0,vga,true)
|
||
else outtextxy('REGISTER',123,87,32,7,vga,true);
|
||
if barpos=3 then outtextxy('LOAD GAME',123,97,32,0,vga,true)
|
||
else outtextxy('LOAD GAME',123,97,32,7,vga,true);
|
||
if barpos=4 then outtextxy('STORY',123,107,32,0,vga,true)
|
||
else outtextxy('STORY',123,107,32,7,vga,true);
|
||
if barpos=5 then outtextxy('CREDITS',123,117,32,0,vga,true)
|
||
else outtextxy('CREDITS',123,117,32,7,vga,true);
|
||
if barpos=6 then outtextxy('QUIT',123,127,32,0,vga,true)
|
||
else outtextxy('QUIT',123,127,32,7,vga,true);
|
||
|
||
ch:=menuread;
|
||
if (ord(ch)=222) or (ord(ch)=220) then inc(barpos);
|
||
if (ord(ch)=223) or (ord(ch)=221) then dec(barpos);
|
||
if ch='N' then barpos:=0;
|
||
if ch='O' then barpos:=1;
|
||
if ch='R' then barpos:=2;
|
||
if ch='L' then barpos:=3;
|
||
if ch='S' then barpos:=4;
|
||
if ch='C' then barpos:=5;
|
||
if ch='Q' then barpos:=6;
|
||
if ch=#27 then begin
|
||
barpos:=6;
|
||
ch:=#13;
|
||
end;
|
||
if barpos=7 then barpos:=0;
|
||
if barpos=-1 then barpos:=6;
|
||
until ch=#13;
|
||
if barpos=6 then quit;
|
||
if barpos=0 then playthegame;
|
||
if barpos=0 then goto picloader;
|
||
goto menu;
|
||
|
||
end. |