diff --git a/cc.tb1 b/cc.tb1 new file mode 100644 index 0000000..1af2f9a Binary files /dev/null and b/cc.tb1 differ diff --git a/config.tb1 b/config.tb1 new file mode 100644 index 0000000..7ab5cc1 --- /dev/null +++ b/config.tb1 @@ -0,0 +1,5 @@ +1 +1 +544 +7 +1 diff --git a/detect.pas b/detect.pas new file mode 100644 index 0000000..45fabf0 --- /dev/null +++ b/detect.pas @@ -0,0 +1,79 @@ +{ SMIX is Copyright 1995 by Ethan Brodsky. All rights reserved. } +unit Detect; + interface + function GetSettings + ( + var BaseIO : word; + var IRQ : byte; + var DMA : byte; + var DMA16 : byte + ): boolean; + {Gets sound card settings from BLASTER environment variable } + {Parameters: } + { BaseIO: Sound card base IO address } + { IRQ: Sound card IRQ } + { DMA: Sound card 8-bit DMA channel } + { DMA16: Sound card 16-bit DMA channel (0 if none) } + {Returns: } + { TRUE: Sound card settings found successfully } + { FALSE: Sound card settings could not be found } + + implementation + uses + DOS; + function UpcaseStr(Str: string): string; + var + i: byte; + Temp: string; + begin + Temp[0] := Str[0]; + for i := 1 to Length(Str) do + Temp[i] := Upcase(Str[i]); + UpcaseStr := Temp; + end; + function GetSetting(Str: string; ID: char; Hex: boolean): word; + var + Temp : string; + Num : word; + Code : integer; + begin + Temp := Str; + if Pos(ID, Temp) <> 0 + then + begin + Delete(Temp, 1, Pos(ID, Temp)); + Delete(Temp, Pos(' ', Temp), 255); + if Hex then Insert('$', Temp, 1); + Val(Temp, Num, Code); + if Code = 0 + then GetSetting := Num + else GetSetting := $FF; + end + else + GetSetting := $FF; + + end; + function GetSettings + ( + var BaseIO: word; + var IRQ: byte; + var DMA: byte; + var DMA16: byte + ): boolean; + var + BLASTER: string; + begin + BLASTER := UpcaseStr(GetEnv('BLASTER')); + BaseIO := GetSetting(BLASTER, 'A', true); {Hex} + IRQ := GetSetting(BLASTER, 'I', false); {Decimal} + DMA := GetSetting(BLASTER, 'D', false); {Decimal} + DMA16 := GetSetting(BLASTER, 'H', false); {Decimal} + + GetSettings := true; + if BLASTER = '' then GetSettings := false; + if BaseIO = $FF then GetSettings := false; + if IRQ = $FF then GetSettings := false; + if DMA = $FF then GetSettings := false; + {We can survive if there isn't a DMA16 channel} + end; + end. \ No newline at end of file diff --git a/file_id.diz b/file_id.diz new file mode 100644 index 0000000..5b6c063 --- /dev/null +++ b/file_id.diz @@ -0,0 +1,12 @@ +TOM BOMBEM 2.4a: Invasion Of The Inanimate Objects + Outer Space action game full of galactic intrigue! + Blow up incoming inanimate objects! + Fly low over a hostile spacecraft! + Beat the game! What fun! +By Vince Weaver + Internet: vmweaver@wam.umd.edu + Hate Mail: askbill@microsoft.com + + + + diff --git a/hiscore.tb1 b/hiscore.tb1 new file mode 100644 index 0000000..d4468d5 --- /dev/null +++ b/hiscore.tb1 @@ -0,0 +1,20 @@ +Tom Bombem +VINCE +Vince +STEVE +aViince + + +HAIROLD + +vinc +1500 +1300 +1120 +1000 +930 +890 +810 +800 +760 +740 diff --git a/kapow.tb1 b/kapow.tb1 new file mode 100644 index 0000000..b74c19c Binary files /dev/null and b/kapow.tb1 differ diff --git a/level2.pas b/level2.pas new file mode 100644 index 0000000..b882ede --- /dev/null +++ b/level2.pas @@ -0,0 +1,1753 @@ +program TOM_BOMB_EM_AND_INVASION_OF_INANIMATE_OBJECTS; + {by Vincent Weaver....21085-4706} + +uses svmwgraph,nvmwgraph,crt,detect,smix,dos; + +{$G+} +const + {Shape Table Values for Game} + shape1off = 8000; + shape2off = 8400; + shape3off = 8800; + shape4off = 9200; + shape5off = 9600; + shape6off = 10000; + shape7off = 10400; + shape8off = 10800; + shape9off = 11200; + shape10off = 11600; + shape11off = 12000; + shape12off = 12400; + shape13off = 12800; + shape14off = 13200; + shape15off = 13600; + shape16off = 14000; + shape17off = 14400; + shape18off = 14800; + shape19off = 15200; + shape20off = 15600; + bigship1off = 0; + bigship2off = 1600; + bigship3off = 3200; + shapearray : + array [1..20] of word =(8000,8400,8800,9200, + 9600,10000,10400,10800, + 11200,11600,12000,12400, + 12800,13200,13600,14000, + 14400,14800,15200,15600); + shape2array : + array [0..39] of word =(8000,8200,8400,8600,8800, + 9000,9200,9400,9600,9800, + 10000,10200,10400,10600,10800, + 11000,11200,11400,11600,11800, + 12000,12200,12400,12600,12800, + 13000,13200,13400,13600,13800, + 14000,14200,14400,14600,14800, + 15000,15200,15400,15600,15800); + + + +type ScreenType = array [0..3999] of byte; {For Ansi Loading} + + Obstruction = record + x,y:integer; + shooting,dead,exploding:boolean; + explodeprogress:byte; + howmanyhits:integer; + kind,lastshot:byte; + end; + + + EnemyInfo = record + x,y:integer; + kind:byte; + out,exploding,boundarycheck,dead:boolean; + explodprogress:byte; + minx,maxx,xspeed,yspeed:integer; + hitsneeded:integer; + end; + + Virtual = Array [1..64000] of byte; { The size of our Virtual Screen } + VirtPtr = ^Virtual; { Pointer to the virtual screen } + + ShapeTable = Array [0..16000] of byte; + ShapePtr = ^ShapeTable; + + +var ho,mi,se,s100:word; + background:array[0..200,0..11] of byte; + tempsec:integer; + flames:boolean; + inte:integer; + dev,mix,stat,pro,loop : integer; + md : string; + howmuchscroll:byte; + filestuff:searchrec; {for load game} + savegamef:text; + ondisk:string; + tempch:char; + +VAR Virscr,VirScr2,VirScr3 : VirtPtr; { Our first Virtual screen } + ShapeTable1:ShapePtr; + num:byte; + vaddr,vaddr2,Vaddr3 : Word; { The segment of our 2nd virt. screen} + ShapeAddr:word; { The segment of the shape table} + ShapeOfs:word; + backofs,backseg:word; + ourpal : Array [0..255,1..3] of byte; { A virtual pallette } + enemy:array[0..5] of enemyinfo; + passive:array[0..30] of obstruction; + numpassive:integer; + Soundp : Pointer; + Check : BOOLEAN; + + hiscore,level,shields:integer; + beginscore,beginshields:integer; + score:longint; + axel_und_carmen:boolean; + tempi,tempj:integer; + scorest:string[8]; + soundeffects:boolean; + lowscore:integer; + it,hiname:string[10]; + shipadd,shipx,shipy,shipspeed,shipframe:integer; + + +var grapherror:byte; + temp:array[1..3] of byte; + i,j:byte; + x,y,barpos:integer; + screen:screentype absolute $B800:0000; + ch:char; + +procedure fillblock(xx1,yy1,xx2,yy2:integer;colo:byte;where:word); +label gus3,gus; +begin + asm + push es {Save Variables} + push ds + mov ax,where {Load where output Goes} + mov es,ax + mov ah,colo {Color To Block} + mov al,colo + mov bx,yy1 + mov dx,bx {Multiply by 320 to find start row} + shl dx,5 + mov cx,dx + shl dx,1 + shl cx,3 + add dx,cx + add dx,xx1 {Add x to get column} + mov di,dx {Load into register} + + mov dx,[xx2] {Calculate width and store in dx} + sub dx,[xx1] + mov bx,320 {Calcualte and store skipover} + sub bx,dx + push bx + mov bx,[yy2] {calculate height and store in bx} + sub bx,[yy1] + +gus3: + mov cx,dx + shr cx,1 {Divide width in half} + jnc gus {If even, jump} + + stosb {then store odd byte} + {Jump Past} +gus: + rep stosw {Its even.. so store words} + + pop cx {restore and add skipover} + add di,cx + push cx + dec bx {decrement y line} + jnz gus3 {if not zero, go back} + pop cx + pop ds {restore registers} + pop es + end; +end; + +procedure ReadConfigFile; +var ff:text; +begin +(* {$I-} + assign(ff,'config.tb1'); + reset(ff); + close(ff); + {$I+} + if IOresult<>0 then begin + writeln('Warning: Missing or Invalid "config.tb1" file'); + writeln; + writeln('Please run the "tbsetup" utility included to set up your computer. Thank You.'); + halt(5); + end; + assign(ff,'config.tb1'); + reset(ff); + readln(ff,Xsoundeffects); + readln(ff,Xsbsound); + readln(ff,Xbaseio); + readln(ff,Xirq); + readln(ff,Xdma); + close(ff); *) +end; + + + +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:='ß'; {up} + if ch2='M' then chtemp:='Þ'; {right} + if ch2='P' then chtemp:='Ü'; {down} + if ch2='K' then chtemp:='Ý'; {left} + if ch2=';' then chtemp:='¨'; {f1} + if ch2='I' then chtemp:='ô'; {pgup} + if ch2='Q' then chtemp:='õ'; {pgdown} + end; + menuread:=chtemp; +end; + + +procedure coolbox(x1,y1,x2,y2:integer;fill:boolean;page:word); +begin + for i:=0 to 5 do box(x1+i,y1+i,x2-i,y2-i,31-i,page); + if fill then for i:=y1+5 to y2-5 do + horizontalline(x1+5,x2-5,i,7,page); +end; + + +Procedure ShutDown; + { This frees the memory used by the virtual screen } +BEGIN + FreeMem (VirScr,64000); + FreeMem (VirScr2,64000); + FreeMem (VirScr3,16800); + FreeMem (ShapeTable1,16000); +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^); + GetMem (VirScr3,16800); + vaddr3:=seg(virscr3^); + GetMem (ShapeTable1,16000); + shapeaddr:= seg (ShapeTable1^); + shapeofs:=ofs (ShapeTable1^); + backofs:=ofs(background); + backseg:=seg(background); +END; + +function showhiscore(showchart,savelist:boolean):integer; +var hilist:text; + testr:string[10]; + place,tempi:integer; + names:array[0..9] of string[10]; + scores:array[0..9] of longint; +label bob; +begin + assign(hilist,'HISCORE.TB1'); + reset(hilist); + for i:=0 to 9 do readln(hilist,names[i]); + for i:=0 to 9 do readln(hilist,scores[i]); + close(hilist); + lowscore:=scores[9]; + showhiscore:=scores[0]; + if showchart then begin + fillblock(45,40,285,160,7,vga); + coolbox(45,40,285,160,false,vga); + for i:=0 to 9 do + outtextxy(names[i],51,46+(i*10),9,7,vga,true); + for i:=0 to 9 do begin + str(scores[i],testr); + outtextxy(testr,181,46+(i*10),9,7,vga,true); + end; + repeat until keypressed; + ch:=readkey; + end; + if savelist then begin + place:=0; + for tempi:=0 to 9 do if score>scores[tempi] then inc(place); + place:=10-place; + for tempi:=9 downto place do scores[tempi]:=scores[tempi-1]; + for tempi:=9 downto place do names[tempi]:=names[tempi-1]; + scores[place]:=score; + names[place]:=hiname; + assign(hilist,'HISCORE.TB1'); + rewrite(hilist); + for i:=0 to 9 do writeln(hilist,names[i]); + for i:=0 to 9 do writeln(hilist,scores[i]); + close(hilist); + end; +end; + +procedure putshape240over(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor cx,cx + xor dx,dx + mov ax,240 + sub ax,[xacross] {xacross?} + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + rep movsb + cmp dx,bx + jz bob3 + xor cx,cx + add di,ax + inc dx + jmp bob + bob3: + {restore variables} + pop ds + end; +end; + +procedure putshape240(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + mov bx,240 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; + + + +procedure putshape(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; + +procedure putshapeline(fromwhereo,towhere,xacross,yacross,xx,yy,line:word); +var int,color:integer; +{draws just one line of a shape with same syntax as putshape} +begin + for int:=0 to xacross do begin + {does not work. stack overflow} + (*asm + push ax + push bx + push cx + mov ax,[line] {multiplies y value by 320} + mul [xacross] + add ax,[int] + mov bx,ax + mov ax,[ShapeAddr] {moves segment of array} + mov ds,ax + {mov ax,[ShapeOfs]} {moves offset of array} + mov ax,[fromwhereo] + add ax,bx + mov si,ax + xor ax,ax + lodsb + mov [color],ax + pop cx + pop bx + pop ax + end;*) + color:=ShapeTable1^[fromwhereo+((xacross*line)+int)]; + if color<>0 then putpixel(xx+int,yy+line,color,towhere); + end; +end; + +procedure putshapeover(fromwhereo,towhere,xacross,yacross,xx,yy:word); +label bbob,bbob4,bbob2,bbob3; +begin + asm + push ax {saves registers} + push dx + push cx + push bx + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + (*add ax,[shapeofs] *) {moves offsett if array} + mov ax,[fromwhereo] + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bbob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bbob4: + rep movsb {copies, overwriting} + bbob2: {Adds when x-value must be increased} + cmp dx,bx + jz bbob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bbob + bbob3: + pop bx {restore variables} + pop ds + pop bx + pop cx + pop dx + pop ax + end; +end; + + +procedure flip240(hm:word); +label gus; + { This copies 240 columns from vaddr2 to vaddr } +begin + asm + push ds + mov ax, vaddr + mov es, ax + mov ax, vaddr2 + + mov bx,[hm] + mov cx,bx + shl bx,4 + sub bx,cx + add ax,bx + + mov ds, ax + xor si,si + xor di, di + mov ax,200 + gus: + mov cx, 120 + rep movsw + add di,80 + + dec ax + jnz gus + + pop ds + end; +end; + + +procedure flip50(fromwhere,off1,whereto,off2:word); +label gus; + { This copies 240 columns from vaddr2 to vaddr } +begin + asm + push ds + mov ax, [whereto] + add ax, [off2] + mov es, ax + mov ax, [fromwhere] + add ax,[off1] + mov ds, ax + xor si,si + xor di, di + mov ax,50 + gus: + mov cx, 120 + rep movsw + dec ax + jnz gus + + pop ds + end; +end; + + +procedure help; +begin + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('HELP',144,10,4,0,vga,false); + outtextxy('--------------------------------------',10,20,12,0,vga,false); + outtextxy('IN THE GAME:',10,30,4,0,vga,false); + outtextxy(' ARROWS MANUEVER',10,40,4,0,vga,false); + outtextxy(' SPACE BAR FIRES MISSILES',10,50,4,0,vga,false); + outtextxy(' F2 SAVES GAME',10,60,4,0,vga,false); + outtextxy(' P=PAUSE S=TOGGLE SOUND ESC=QUIT',10,70,4,0,vga,false); + outtextxy('--------------------------------------',10,80,12,0,vga,false); + outtextxy('MISSION: SHOOT THE INANIMATE OBJECTS',10,90,4,0,vga,false); + outtextxy(' WHY? WATCH THE STORY!',10,100,4,0,vga,false); + outtextxy('--------------------------------------',10,110,12,0,vga,false); + outtextxy('THE SPACE BAR SPEEDS UP MOVIE SCENES',10,120,4,0,vga,false); + outtextxy('ESC QUITS THEM',10,130,4,0,vga,false); + outtextxy('--------------------------------------',10,140,12,0,vga,false); + outtextxy(' SEE "TB1.DOC" FOR MORE HELP/INFO',10,150,4,0,vga,false); + outtextxy('--------------------------------------',10,160,12,0,vga,false); + outtextxy('PRESS ANY KEY TO CONTINUE',64,185,4,0,vga,false); + repeat until keypressed; + ch:=readkey; +end; + + + + +Procedure setupsidebar; + +VAR i,x,y:integer; + loop1,loop2,loop3:integer; + tempaddr:word; + +procedure makehole(y:integer); +begin + fillblock(249,y,314,y+9,0,tempaddr); + horizontalline(249,314,y,24,tempaddr); + horizontalline(249,313,y+10,18,tempaddr); + line(249,y,249,y+9,24,tempaddr); + line(314,y+1,314,y+10,18,tempaddr); +end; + +BEGIN + tempaddr:=vaddr; + fillblock(240,0,320,199,19,tempaddr); + line(240,0,240,199,18,tempaddr); + line(240,0,319,0,18,tempaddr); + line(319,0,319,199,24,tempaddr); + line(241,199,319,199,24,tempaddr); + outtextxy('SCORE',241,1,127,0,tempaddr,false); + outtextxy('SCORE',242,2,143,0,tempaddr,false); + makehole(10); + str(score,it); + outtextxy(it,250+(8*(8-length(it))),11,12,0,tempaddr,true); + + outtextxy('HI-SCORE',241,21,127,0,tempaddr,false); + outtextxy('HI-SCORE',242,22,143,0,tempaddr,false); + str(hiscore,it); + makehole(30); + outtextxy(it,250+(8*(8-length(it))),31,12,0,tempaddr,true); + + outtextxy('LEVEL',241,41,127,0,tempaddr,false); + outtextxy('LEVEL',242,42,143,0,tempaddr,false); + makehole(50); + outtextxy('SHIELDS',241,61,127,0,tempaddr,false); + outtextxy('SHIELDS',242,62,143,0,tempaddr,false); + makehole(70); + for i:=0 to ((4*shields)-1) do line(250+i,71,250+i,78,(47-(i div 4)),tempaddr); + + outtextxy('WEAPONS',241,81,127,0,tempaddr,false); + outtextxy('WEAPONS',242,82,143,0,tempaddr,false); + makehole(90); + + fillblock(249,111,314,189,0,tempaddr); + + line(249,111,249,189,24,tempaddr); + line(315,111,315,189,18,tempaddr); + line(249,111,315,111,24,tempaddr); + line(249,189,315,189,18,tempaddr); + + outtextxy(' TB1 ',251,114,15,0,tempaddr,false); + outtextxy('F1-HELP ',251,124,15,0,tempaddr,false); + outtextxy('ESC-QUIT',251,135,15,0,tempaddr,false); + outtextxy('F2-SAVE ',251,145,15,0,tempaddr,false); + + flipd320 (vaddr,vaddr2); +END; + +procedure ClearKeyboardBuffer; +begin + mem[$0040:$001c]:=mem[$0040:$001a]; +end; + + + +Procedure blockmove(x1,y1,x2,y2,p1,x3,y3,p2:word); + { This is a small procedure to copy block x1,y1,x2,y2, + from page 1 to x3,y3 on page 2} +BEGIN + asm + push ds + push es + mov ax,p1 + mov ds,ax + mov ax,p2 + mov es,ax + + mov bx,[X1] + mov dx,[Y1] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; bx = bx * 64} + add dx, bx {; dx = dx + bx (ie y*320)} + pop bx {; get back our x} + add bx, dx {; finalise location} + mov si, bx {; es:di = where to go} + + mov bx,[X3] + mov dx,[Y3] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; 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 ax,[y2] + sub ax,[y1] + + mov dx,[x2] + sub dx,[x1] + mov bx,320 + sub bx,dx + + +@@1 : + mov cx, dx { Width of block to copy divided by 2 } + shr cx,1 + jnc @@2 + rep movsw + movsb + jmp @@3 +@@2: + rep movsw +@@3: + add di,bx + add si,bx + dec ax + jnz @@1 + + pop es + pop ds + end; +END; + + +procedure pauseawhile(howlong:word); +var i:word; +begin + i:=0; + repeat + waitretrace; + inc(i); + if i>howlong then exit; + until keypressed; +end; + + + +procedure changescore; +var itemp,jtemp:integer; +begin + str(score:8,scorest); + outtextxy(scorest,250,11,12,0,vaddr,true); + if (score mod 400 =0) and (shields<16) then begin + {if sbeffects then startsound(sound[2],0,false);} + inc(shields); + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + + end; +end; + +function collision(x1,y1,xsize1,ysize1,x2,y2,xsize2,ysize2:integer):boolean; +var bob:byte; + hit:boolean; +label aat1,aat2,aat3,aat4; +begin + bob:=0; + asm + mov ax,[x1] + mov bx,[x2] + mov cx,[xsize1] + mov dx,[xsize2] + cmp bx,ax + jnge aat1 + xchg ax,bx + xchg cx,dx + aat1: + add ax,cx + add bx,dx + + sub ax,bx + add cx,dx + cmp cx,ax + jnge aat3 + inc [bob] + + mov ax,[y1] + mov bx,[y2] + mov cx,[ysize1] + mov dx,[ysize2] + cmp bx,ax + jnge aat2 + xchg ax,bx + xchg cx,dx + aat2: + add ax,cx + add bx,dx + + sub ax,bx + add cx,dx + cmp cx,ax + jnge aat3 + inc [bob] + aat3: + mov [hit],0 + cmp [bob],2 + jnz aat4 + mov [hit],1 + aat4: + end; + if hit then collision:=true + else collision:=false; +end; + + + + + + + +{%%} +procedure clearshape; +begin + asm + push es + mov cx,8000 + mov es,[shapeaddr] + xor di,di + mov al,5 + mov ah,al + rep stosw + pop es + end; +end; + + + +procedure outbackline(line,row:word); +label bob,bob2,bob3; +var off2,off:word; +begin + off2:=vaddr3; {not sure why necessary, but keep} + off:=backseg; {losing the values of the original} + asm + {saves registers} + push ds + push es + xor ax,ax {old xx variable (times to repeat)=0} + push ax + + {mov cx,[(4-row)*10)] } {multiplies y value by 2400} + + {calculates initial offset for y value} + + mov ax,4 + sub ax,row + shl ax,5 + mov bx,ax + shl ax,1 + add bx,ax + shl ax,2 + add bx,ax + shl ax,3 + add bx,ax {original row offset is in bx} + + +bob2: {get background array} + mov ax,[off] + mov ds,ax + mov dx,[line] + shl dx, 2 + mov ax,dx + shl dx,1 + add ax,dx + pop cx + add ax,cx + push cx + add ax,[backofs] + mov si,ax + lodsb + xor ah,ah + mov cx,ax + + + shl cx,3 {from background number, get actual offset} + mov ax,cx + shl cx,3 + add ax,cx + shl cx,1 + add ax,cx + add ax,8000 + mov si,ax + + mov ax,[shapeaddr] + mov ds,ax + + + + + mov ax,[off2] {loads place to move it} + mov es,ax + mov di,bx + mov ax,220 {what to add to increase one y} + xor dx,dx + bob: + mov cx,20 {how long to loop across (the x-size of array)} + rep movsb {move, overwriting} + cmp dx,9 {see if longer than y size} + jz bob3 {if so, end} + add di,ax {if not, increase y by one} + inc dx + jmp bob + bob3: + add bx,20 {Increase starting offset value} + + pop cx {jump if not drawn 12 across} + inc cx + cmp cx,12 + push cx + jnz bob2 + {restore variables} + pop cx + pop es + pop ds + end; +end; + +procedure savegame; +begin + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('SAVE GAME',124,10,4,0,vga,false); + outtextxy('THIS WILL ONLY SAVE HOW YOU WERE',10,20,4,0,vga,false); + outtextxy('AT THE BEGINNING OF THE LEVEL!!!',10,30,4,0,vga,false); + findfirst('SG?.TB1',ANYFILE,filestuff); + ondisk:='ALREADY SAVED GAMES:'; + while doserror=0 do with filestuff do + begin + ondisk:=concat(ondisk,name[3]); + findnext(filestuff); + end; + if ondisk='' then ondisk:=concat(ondisk,'NONE'); + outtextxy(ondisk,10,50,4,0,vga,false); + outtextxy('SAVE WHICH GAME?',10,60,4,0,vga,false); + repeat until keypressed; + tempch:=readkey; + if (tempch>='0') and (tempch<='9') then begin + {$I-} + ondisk:=concat('SG',tempch,'.TB1'); + assign(savegamef,ondisk); + rewrite(savegamef); + {$I+} + If IOResult=0 then begin + writeln(savegamef,beginscore); + writeln(savegamef,level); + writeln(savegamef,beginshields); + close(savegamef); + outtextxy('GAME SAVED',120,150,15,0,vga,false); + end + else outtextxy('ERROR! GAME NOT SAVED!',102,150,15,0,vga,false); + outtextxy('PRESS ANY KEY...',96,180,4,0,vga,false); + repeat; until keypressed; tempch:=readkey; + end; +end; + + + + + +Procedure leveltwoengine(l_level:byte); +VAR loop1,loop2:integer; + ch,ch2:char; + saucersout:integer; + bullet1x,bullet1y,bullet2x,bullet2y,i:integer; + bullet1out,bullet2out:boolean; + whichone,temp,temp2:integer; + tempst:string; + what:byte; + k:integer; + itemp,jtemp:byte; + whatdelay:byte; + tempilg:byte; + xx:integer; + + backrow,topblocky:integer; + f:text; + levelover:boolean; + +procedure loadlevel2shapes; +var x,y,i,j,shape:byte; +begin + clearshape; + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'ships.tb1'); + + for i:=0 to 42 do + for j:=0 to 30 do begin + ShapeTable1^[bigship1off+((j*43)+i)]:=getpixel(i,j,vaddr); + ShapeTable1^[bigship2off+((j*43)+i)]:=getpixel(i,j+32,vaddr); + ShapeTable1^[bigship3off+((j*43)+i)]:=getpixel(i,j+64,vaddr); + end; + + + if l_level=2 then + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'tbaship.tb1'); + if l_level=4 then + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'tbeerm.tb1'); + for j:=0 to 3 do + for i:=0 to 9 do + for x:=0 to 19 do + for y:=0 to 9 do + ShapeTable1^[shape2array[(j*10)+i]+((y*20)+x)] + :=getpixel(1+x+(i*21),1+y+(j*11),vaddr); + cls(0,vaddr); +end; + + + +BEGIN + loadlevel2shapes; + if l_level=2 then assign(f,'level2.tb1'); + if l_level=4 then assign(f,'level4.tb1'); + reset(f); + for j:=0 to 200 do + for i:=0 to 11 do read(f,background[j,i]); + close(f); + + for i:=0 to 30 do begin + passive[i].dead:=true; + passive[i].exploding:=false; + end; + for i:=0 to 5 do begin + enemy[i].out:=false; + end; + + + backrow:=0; + whatdelay:=1; + shipx:=36; + shipadd:=0; + shipframe:=1; + shipspeed:=5; + ch:=#1; ch2:=#1; + bullet1out:=false; bullet2out:=false; + bullet1x:=0; bullet1y:=0; + bullet2x:=0; bullet2y:=0; + + flipd320(vaddr2,vaddr); + str(level,tempst); + fillblock(251,52,314,59,0,vaddr); + outtextxy(tempst,307,51,12,0,vaddr,false); + + cls(0,vaddr2); + + for i:=0 to 100 do + begin + putshape240(14400{32}, + vaddr2,20,9,random(237),random(227)); + putshape240(14400{shape2array[32]}, + vaddr2,20,9,random(237),random(227)); + end; + + pal(254,shields*4,0,0); + howmuchscroll:=50; + + cls(0,vga); + coolbox(70,85,240,120,true,vga); + if l_level=2 then begin + outtextxy(' LEVEL TWO:',84,95,4,7,vga,false); + outtextxy('THE "PEACE ENVOY"',84,105,4,7,vga,false); + end; + if l_level=4 then begin + outtextxy(' LEVEL FOUR:',84,95,4,7,vga,false); + outtextxy(' THE PLANET EERM',84,105,4,7,vga,false); + end; + + clearkeyboardbuffer; + pauseawhile(300); + numpassive:=0; + levelover:=false; +{**** GAME LOOP ****} +{*******************} + Repeat + ch2:=#1; + ch:=#1; + dec(howmuchscroll); + if howmuchscroll<1 then begin + flipd50(vaddr2,2250,vaddr2,3000); + flipd50(vaddr2,1500,vaddr2,2250); + flipd50(vaddr2,750,vaddr2,1500); + flipd50(vaddr2,0,vaddr2,750); + for i:=0 to 4 do begin + outbackline(backrow,i); + for xx:=0 to 11 do begin + if (background[backrow,xx]>9) and + (background[backrow,xx]<20) then begin + k:=-1; + for j:=0 to numpassive do + if passive[j].dead=true then k:=j; + if k=-1 then begin + inc(numpassive); k:=numpassive; end; + with passive[k] do begin + dead:=false; + kind:=background[backrow,xx]; + if (kind>10) and + (kind<15) then + shooting:=true + else shooting:=false; + exploding:=false; + x:=xx*20; + y:=-(((i+1)*10)); + howmanyhits:=1; + lastshot:=0; + end; + end; + end; + inc(backrow); + end; + flipd50(vaddr3,0,vaddr2,0); + howmuchscroll:=50; + end; + + flipd240(howmuchscroll,vaddr,vaddr2); + + topblocky:=backrow-(howmuchscroll div 10)-1; + +{ str(passive[1].y,it); + outtextxy(it,10,10,12,0,vaddr,true); + + str(passive[1].x,it); + outtextxy(it,10,20,12,0,vaddr,true); } + + + + +{***Collision Check***} + + for i:=0 to 30 do if (passive[i].dead=false) and (passive[i].exploding=false) then with passive[i] do begin + if (bullet1out) and collision(bullet1x,bullet1y,3,4,x,y,10,5) + then begin + if kind<>10 then begin + {if sbeffects then StartSound(Sound[3], 0, false);} + exploding:=true; + explodeprogress:=0; + bullet1out:=false; + inc(score,10); + changescore; + end + else begin + bullet1out:=false; + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + enemy[tempilg].out:=true; + enemy[tempilg].y:=bullet1y; + enemy[tempilg].x:=bullet1x; + enemy[tempilg].yspeed:=7; + enemy[tempilg].kind:=21; + end; + end; + end; + if (bullet2out) and collision(bullet2x,bullet2y,3,4,x,y,10,5) + then begin + if kind<>10 then begin + {if sbeffects then StartSound(Sound[3], 0, false);} + exploding:=true; + explodeprogress:=0; + bullet2out:=false; + inc(score,10); + changescore; + end + else begin + bullet2out:=false; + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + enemy[tempilg].out:=true; + enemy[tempilg].y:=bullet2y; + enemy[tempilg].x:=bullet2x; + enemy[tempilg].yspeed:=7; + enemy[tempilg].kind:=21; + end; + end; + end; + + if (y>155) and (kind<>10) then begin + if collision(x,y,10,5,shipx+16,165,5,5) + or collision(x,y,10,5,shipx+6,175,18,8) + then begin + {if sbeffects then startsound(Sound[5],0,false);} + {exploding:=true; + explodeprogress:=2;} + dead:=true; + dec(shields); + if shields<0 then levelover:=true; + putshape240over(14800{shape2array[34]},vaddr2, + 20,9,x,y+howmuchscroll); + fillblock(250,71,314,79,0,vaddr); + if shields>0 then begin + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + end; + end; + end; + + for i:=0 to 5 do if (enemy[i].out) then + if collision(enemy[i].x,enemy[i].y,2,5,shipx+16,165,5,5) + or collision(enemy[i].x,enemy[i].y,2,5,shipx+6,175,18,8) + then begin + {if sbeffects then startsound(Sound[5],0,false);} + enemy[i].out:=false; + dec(shields); + if shields<0 then levelover:=true; + {putshape240over(shape2array[34],vaddr2, + 20,9,passive[i].x,passive[i].y+howmuchscroll);} + fillblock(250,71,314,79,0,vaddr); + if shields>0 then begin + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + + end; +{ for i:=0 to 30 do if (passive[i].dead=false) and (passive[i].y>-1) then + putshape(shape2array[16], + vaddr,20,9,passive[i].x,passive[i].y);} + + +{***DO EXPLOSIONS***} + for i:=0 to 30 do + if passive[i].exploding then with passive[i] do begin + inc(explodeprogress); + putshape240(shape2array[35+explodeprogress],vaddr2, + 20,9,x,y+howmuchscroll); + if explodeprogress>4 then begin + dead:=true; + exploding:=false; + putshape240over(14800{shape2array[34]},vaddr2, + 20,9,x,y+howmuchscroll); + end; + end; + + +{***MOVE BULLET***} + if bullet1out then begin + dec(bullet1y,5); + if bullet1y<5 then bullet1out:=false; + if bullet1out then putshape(12000,vaddr,20,9,bullet1x,bullet1y); + end; + if bullet2out then begin + dec(bullet2y,5); + if bullet2y<5 then bullet2out:=false; + if bullet2out then putshape(12000,vaddr,20,9,bullet2x,bullet2y); + end; +{***MOVE ENEMIES***} + for j:=0 to 30 do begin + if passive[j].dead=false then begin + inc(passive[j].y); + if(passive[j].y)>190 then passive[j].dead:=true; + end; + end; + for j:=0 to 30 do begin + if passive[j].lastshot>0 then dec(passive[j].lastshot); + if (passive[j].dead=false) and (passive[j].shooting) + and (passive[j].lastshot=0) and (passive[j].y>0) + then begin + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + passive[j].lastshot:=30; + enemy[tempilg].out:=true; + enemy[tempilg].y:=passive[j].y; + enemy[tempilg].x:=passive[j].x+5; + enemy[tempilg].yspeed:=5; + enemy[tempilg].kind:=25; + if passive[j].kind=11 then enemy[tempilg].kind:=26; + end; + end; + end; + for j:=0 to 5 do begin + if enemy[j].out then begin + putshape(shape2array[enemy[j].kind],vaddr, + 20,9,enemy[j].x,enemy[j].y); + enemy[j].y:=enemy[j].y+enemy[j].yspeed; + if enemy[j].y>189 then enemy[j].out:=false; + end; + end; + + +{***READ KEYBOARD***} + + if keypressed then BEGIN + ch:=readkey; + if ch=chr(0) then ch2:=readkey; + if ch=#27 then levelover:=true; + if ch2='M' then + if shipadd>=0 then inc(shipadd,3) else shipadd:=0; + if ch2='K' then + if shipadd<=0 then dec(shipadd,3) else shipadd:=0; + if ch2=';' then help; + if ch='+' then begin + inc(whatdelay); + if whatdelay>25 then whatdelay:=25; + end; + if (ch='P') or (ch='p') then begin + coolbox(65,85,175,110,true,vga); + outtextxy('GAME PAUSED',79,95,4,7,vga,false); + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if ch='-' then begin + dec(whatdelay); + if whatdelay<1 then whatdelay:=1; + end; + {if (ch='S') or (ch='s') then sbeffects:=not(sbeffects);} + + if ch2='<' then savegame; + + end; + if (ch=' ') then begin + if (bullet1out=false) then begin + {if sbeffects then StartSound(Sound[4], 0, false);} + bullet1out:=true; + bullet1x:=shipx+21; + bullet1y:=165; + putshape(12000,vaddr,20,9,bullet1x,bullet1y); + end + else + if (bullet2out=false) then begin + {if sbeffects then StartSound(Sound[4], 0, false);} + bullet2out:=true; + bullet2x:=shipx+21; + bullet2y:=165; + putshape(12000,vaddr,20,9,bullet2x,bullet2y); + end; + end; + +{***MOVE SHIP***} + shipx:=shipx+shipadd; + if (shipx<1) then shipx:=1; + if (shipx>190) then shipx:=190; + CASE shipframe of + 1 : putshape (bigship1off,vaddr,43,30,shipx,165); + 3 : putshape (bigship3off,vaddr,43,30,shipx,165); + 2,4 : putshape (bigship2off,vaddr,43,30,shipx,165); + END; + inc(shipframe); + if shipframe=5 then shipframe:=1; + waitretrace; + flipd320 (vaddr,vga); + for i:=0 to whatdelay do waitretrace; + {str(backrow,testr); + outtextxy(testr,181,46+(i*10),9,7,vga,true);} + if backrow>=200 then begin + clearkeyboardbuffer; + pauseawhile(200); + fade; + grapherror:=LoadPicSuperPacked(0,0,vaddr,false,true,'viewscr.tb1'); + cls(0,vga); + blockmove(0,79,58,116,vaddr,10,10,vga); + clearkeyboardbuffer; + outsmalltextxy('UNIDENTIFIED SPACECRAFT!',70,10,2,0,vga,true); + outsmalltextxy('DO YOU WISH TO DEACTIVATE ',70,20,2,0,vga,true); + outsmalltextxy('THIS SHIP''S SECURITY SYSTEMS? (Y/N)',70,30,2,0,vga,true); + unfade; + clearkeyboardbuffer; + ch:='!'; + repeat + if keypressed then ch:=readkey; + until (upcase(ch)='Y') or (upcase(ch)='N'); + + if upcase(ch)='N' then begin + blockmove(0,79,58,116,vaddr,10,50,vga); + outsmalltextxy('NO? AFFIRMATIVE. ',70,50,9,0,vga,true); + outsmalltextxy('ARMING REMOTE DESTRUCTION RAY.',70,60,9,0,vga,true); + outsmalltextxy('GOOD-BYE.',70,70,9,0,vga,true); + pauseawhile(400); + fade; + end; + + if upcase(ch)='Y' then begin + blockmove(0,79,58,116,vaddr,10,50,vga); + outsmalltextxy('"Y"=CORRECT PASSWORD. ',70,50,2,0,vga,true); + outsmalltextxy('WELCOME SUPREME TENTACLEE COMMANDER.',70,60,2,0,vga,true); + outsmalltextxy('INITIATING TRACTOR BEAM AND AUTOMATIC',70,70,2,0,vga,true); + outsmalltextxy('LANDING PROCEDURE.',70,80,2,0,vga,true); + outsmalltextxy('WE WILL BE DEPARTING FOR THE PLANET',70,90,2,0,vga,true); + outsmalltextxy('EERM IN THREE MICROCYCLE UNITS.',70,100,2,0,vga,true); + pauseawhile(550); + clearkeyboardbuffer; + blockmove(0,42,58,79,vaddr,10,110,vga); + outsmalltextxy('Wha? Wait!',70,110,9,0,vga,true); + outsmalltextxy('What''s happening?',70,120,9,0,vga,true); + pauseawhile(550); + fade; + end; + + grapherror:=LoadPicSuperPacked(0,0,vaddr,false,true,'tbtract.tb1'); + for i:=0 to 239 do + for j:=0 to 49 do + putpixel240(i,j,getpixel(i,j,vaddr),vaddr2); + cls(0,vga); + unfade; + for howmuchscroll:=50 downto 1 do begin + flipd240(howmuchscroll,vaddr,vaddr2); + putshape (bigship3off,vaddr,43,30,shipx,165); + waitretrace; + flipd320(vaddr,vga); + end; + + if upcase(ch)='N' then begin + clearkeyboardbuffer; + line(7,6,shipx+10,180,4,vga); + line(shipx+37,180,231,6,4,vga); + pauseawhile(50); + clearkeyboardbuffer; + for i:=shipx to shipx+48 do + verticalline(165,195,i,4,vga); + pauseawhile(200); + flipd240(howmuchscroll,vaddr,vaddr2); + flipd320(vaddr,vga); + pauseawhile(150); + end; + + + if upcase(ch)='Y' then begin; + shipadd:=sgn(shipx-95); + shipy:=165; + repeat + if shipx<>95 then shipx:=shipx-shipadd; + if shipy>9 then dec(shipy); + flipd240(howmuchscroll,vaddr,vaddr2); + line(7,6,shipx+10,shipy+15,2,vaddr); + line(shipx+37,shipy+15,231,6,2,vaddr); + putshape (bigship3off,vaddr,43,30,shipx,shipy); + waitretrace; + flipd320(vaddr,vga); + until (shipx=95) and (shipy=9); + clearkeyboardbuffer; + pauseawhile(850); + fade; + cls(0,vga); + + + while keypressed do ch:=readkey; + if level=4 then begin + outsmalltextxy('THE PLANET EERM?',20,20,10,0,vga,true); + outsmalltextxy('XENOCIDE FLEET?',20,30,10,0,vga,true); + outsmalltextxy('WHAT''S GOING ON?',20,40,10,0,vga,true); + outsmalltextxy('A MAJOR GOVERNMENT CONSPIRACY? MASS HALUCINATIONS?',20,50,10,0,vga,true); + + outsmalltextxy('WATCH FOR TOM BOMBEM LEVEL 3 (CURRENTLY IN THE DESIGN PHASE).',10,70,12,0,vga,true); + outsmalltextxy('ALL THESE QUESTIONS WILL BE ANSWERED!',10,80,12,0,vga,true); + outsmalltextxy('ALSO MORE FEATURES WILL BE ADDED:',10,90,12,0,vga,true); + outsmalltextxy(' BETTER GRAPHICS, SOUND AND SPEED.',10,100,12,0,vga,true); + + outsmalltextxy('TO HASTEN COMPLETION, SEND QUESTIONS/COMMENTS/DONATIONS TO ',9,120,9,0,vga,true); + outsmalltextxy('THE AUTHOR (SEE THE REGISTER MESSAGE FOR RELEVANT ADDRESSES).',9,130,9,0,vga,true); + + outsmalltextxy('THANK YOU FOR PLAYING TOM BOMBEM',80,150,14,0,vga,true); + unfade; + pauseawhile(1800); + end; + inc(level); + levelover:=true; + end; + end; + +until levelover; +END; + + + + + + + + +function grinput(xv,yv,howlong,forecol,backcol:integer):string; +var tempst:string; + ch3:char; + label bob; +begin + tempst:=''; + ch3:='Û'; + repeat + repeat until keypressed; + ch3:=readkey; + if (ch3=#8) and (ord(tempst[0])>0) then begin + fillblock(xv,yv,ord(tempst[0])*8+xv,yv+8,backcol,vga); + dec(tempst[0]); + end; + if length(tempst)>=howlong then goto bob; + if ch3>#20 then tempst:=concat(tempst,ch3); + if tempst[0]>#0 then + outtextxy(tempst,xv,yv,forecol,backcol,vga,true); + bob: + until ch3=#13; + grinput:=tempst; +end; + +procedure loadshapes; +var x,y,i,j,shape:byte; +begin + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'ships.tb1'); + for i:=0 to 47 do + for j:=0 to 29 do begin + ShapeTable1^[bigship1off+((j*43)+i)]:=getpixel(i,j,vaddr); + ShapeTable1^[bigship2off+((j*43)+i)]:=getpixel(i,j+32,vaddr); + ShapeTable1^[bigship3off+((j*43)+i)]:=getpixel(i,j+64,vaddr); + end; + + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'tbshapes.tb1'); + for j:=0 to 1 do + for i:=0 to 9 do + for x:=0 to 17 do + for y:=0 to 17 do + ShapeTable1^[shapearray[(((j*10)+1)+i)]+((y*18)+x)] + :=getpixel(1+x+(i*19),1+y+(j*19),vaddr); + cls(0,vaddr); +end; + + + +procedure littleopener; +begin + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'moon2.tb1'); + fade; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,false,true,'moon2.tb1'); + for i:=0 to 15 do + for j:=0 to 18 do begin + ShapeTable1^[6000+((j*16)+i)]:=getpixel(i+9,j+178,vga); + ShapeTable1^[6400+((j*16)+i)]:=getpixel(i+30,j+178,vga); + end; + fillblock(0,178,319,199,0,vga); + unfade; + flipd320(vga,vaddr); + flipd320(vaddr,vaddr2); + for i:=100 downto 0 do begin + flipd320(vaddr2,vaddr); + putshape(6400,vaddr,16,18,i,100); + waitretrace; + if keypressed then if readkey=#27 then exit; + flipd320(vaddr,vga); + end; + flipd320(vaddr2,vga); + outtextxy('>KCHK< TOM! WHERE ARE YOU GOING?',5,180,15,0,vga,true); + pauseawhile(500); if keypressed then ch:=readkey; + waitretrace; + fillblock(0,178,319,199,0,vga); + outtextxy('Ooops. ',5,180,24,0,vga,true); + pauseawhile(500); if keypressed then ch:=readkey; + for inte:=0 to 151 do begin + flipd320(vaddr2,vaddr); + putshape(6000,vaddr,16,18,inte*2,100); + waitretrace; + flipd320(vaddr,vga); + if keypressed then if readkey=#27 then exit; + end; + flipd320(vaddr2,vga); + pauseawhile(5); + fade; + cls(0,vga); + unfade; +end; + +procedure littleopener2; +begin + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'tbl2ship.tb1'); + fade; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,false,true,'tbl2ship.tb1'); + unfade; + outtextxy('Hmmmm... ',10,10,4,0,vga,false); + outtextxy('This Might Be Harder Than I Thought.',10,20,4,0,vga,false); + pauseawhile(500); if keypressed then ch:=readkey; + fade; + cls(0,vga); + unfade; +end; + + +procedure playthegame(lev:integer); + +begin + + fade; + cls(0,vga); + unfade; + cls(0,vaddr); + level:=lev; + if level=0 then begin + littleopener; + shields:=10; + score:=0; + inc(level); + end; + beginscore:=score; + beginshields:=shields; + loadshapes; + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'tbsobj.tb1'); + + hiscore:=showhiscore(false,false); + + + if level=1 then begin + setupsidebar; + y:=0; + {levelone}; + end; + if level=2 then begin + littleopener2; + setupsidebar; + beginscore:=score; + beginshields:=shields; + leveltwoengine(2); + end; + + + clearkeyboardbuffer; + + coolbox(70,85,170,110,true,vga); + outtextxy('GAME OVER',84,94,4,7,vga,false); + for inte:=0 to 100 do waitretrace; + repeat until keypressed; tempch:=readkey; + clearkeyboardbuffer; + + hiscore:=showhiscore(false,false); + if score>lowscore then begin + coolbox(10,75,310,125,true,vga); + outtextxy('NEW HIGH SCORE!',90,80,12,7,vga,false); + outtextxy('ENTER YOUR NAME (10 Chars)',30,90,0,7,vga,false); + hiname:=grinput(110,110,10,11,7); + hiscore:=showhiscore(false,true); + end; + hiscore:=showhiscore(true,false); + fade; + cls(0,vga); +end; + + + +procedure shadowrite(st:string;x5,y5,forecol,backcol:integer); +begin + outtextxy(st,x5+1,y5+1,backcol,0,vga,false); + outtextxy(st,x5,y5,forecol,0,vga,false); +end; + + + +procedure QUIT; +label menu2; +begin + coolbox(90,75,230,125,true,vga); + 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; + gotoxy(1,23); + textcolor(7); + {if sbsound then shutdownsb1;} + shutdown; + halt; + menu2: + barpos:=6; +end; + + + + + +label picloader,menu; + +begin + setuptb1; + ReadConfigFile; + axel_und_carmen:=true; + {as_of_9-22-94} {change_back_10-6-94} {uh_oh 2-21-95} {gone for real long time 10-12-95} + {not carmen anymore, but Gus} + + randomize; + setupvirtual; + fade; + setmcga; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'tbomb1.tb1'); + score:=500; + shields:=10; + playthegame(2); + unfade; + quit; + +end. \ No newline at end of file diff --git a/level2.tb1 b/level2.tb1 new file mode 100644 index 0000000..0109bd5 --- /dev/null +++ b/level2.tb1 @@ -0,0 +1,202 @@ +31 31 31 31 31 31 31 31 31 31 31 31 +5 7 5 5 5 5 5 5 5 5 7 5 +5 5 3 5 30 30 30 30 5 3 5 5 +5 5 5 5 4 4 4 4 5 5 5 5 +15 15 15 15 31 31 31 31 15 15 15 15 +17 17 17 17 16 16 16 16 17 17 17 17 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +7 9 9 9 9 9 9 9 9 9 9 7 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +12 9 9 9 12 9 9 12 9 9 9 12 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +2 2 18 19 0 0 0 0 19 18 2 2 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 19 0 0 0 0 +0 0 0 0 18 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 10 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 11 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 13 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 12 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +15 15 15 15 15 15 15 15 15 15 15 15 +0 0 0 0 0 0 0 0 0 0 0 0 +0 4 4 4 4 4 4 4 4 4 4 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 13 0 0 0 0 0 0 13 0 0 +0 0 0 13 0 0 0 0 13 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 0 0 0 14 0 0 14 0 0 0 14 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +11 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 11 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 11 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 11 0 14 14 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +31 31 31 31 31 31 31 31 31 31 31 31 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +10 10 10 10 10 10 10 10 10 10 10 10 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 11 11 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +12 0 0 0 0 0 0 0 0 0 0 12 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 13 0 0 18 18 18 18 0 0 13 14 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +19 19 0 0 0 0 0 0 0 0 19 19 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 13 0 0 0 0 0 0 0 0 13 0 +31 31 31 31 31 31 31 31 31 31 31 31 +5 5 5 5 5 5 5 5 5 5 5 5 +8 7 8 3 8 8 8 8 3 8 7 8 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +9 13 9 9 9 9 9 9 9 9 13 9 +9 9 13 9 9 9 9 9 9 13 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 14 9 9 9 9 14 9 9 9 +9 9 9 9 14 9 9 14 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +15 15 15 15 15 15 15 15 15 15 15 15 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +19 0 0 0 0 0 0 0 0 0 0 19 +0 0 0 19 0 11 11 0 19 0 0 0 +0 12 0 0 0 0 0 0 0 0 12 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 0 0 0 14 0 0 0 14 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 14 0 0 0 14 0 0 0 14 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +13 0 13 0 0 0 0 13 0 13 0 13 +0 0 0 0 13 0 0 13 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 0 0 0 14 0 0 14 0 0 0 14 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +17 17 0 0 0 17 17 0 0 0 17 17 +0 0 0 14 0 10 0 0 14 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 14 0 0 0 0 0 0 0 0 14 0 +0 0 0 0 0 0 0 0 13 0 0 0 +0 0 0 0 0 0 0 0 0 0 10 0 +0 0 0 0 0 0 10 0 0 0 0 0 +11 0 0 0 0 0 0 0 0 0 0 11 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +16 13 16 16 16 16 16 16 16 16 13 16 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +15 5 5 5 5 5 5 5 5 5 5 15 +15 10 0 0 0 0 0 0 0 0 10 15 +15 0 0 10 3 3 3 3 10 0 0 15 +15 0 0 0 10 10 10 10 0 0 0 15 +15 0 10 0 10 4 4 10 0 10 0 15 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/level3.pas b/level3.pas new file mode 100644 index 0000000..5a172e5 --- /dev/null +++ b/level3.pas @@ -0,0 +1,2214 @@ +program TOM_BOMB_EM_AND_INVASION_OF_INANIMATE_OBJECTS; + {by Vincent Weaver....21085-4706} + +uses nvmwgraph,crt,detect,smix,dos; + +{$G+} +const + {Shape Table Values for Game} + shape1off = 8000; + shape2off = 8400; + shape3off = 8800; + shape4off = 9200; + shape5off = 9600; + shape6off = 10000; + shape7off = 10400; + shape8off = 10800; + shape9off = 11200; + shape10off = 11600; + shape11off = 12000; + shape12off = 12400; + shape13off = 12800; + shape14off = 13200; + shape15off = 13600; + shape16off = 14000; + shape17off = 14400; + shape18off = 14800; + shape19off = 15200; + shape20off = 15600; + bigship1off = 0; + bigship2off = 1600; + bigship3off = 3200; + tbnoff = 0; + tbeoff = 150; + tbsoff = 300; + tbwoff = 450; + shapearray : + array [1..20] of word =(8000,8400,8800,9200, + 9600,10000,10400,10800, + 11200,11600,12000,12400, + 12800,13200,13600,14000, + 14400,14800,15200,15600); + shape2array : + array [0..39] of word =(8000,8200,8400,8600,8800, + 9000,9200,9400,9600,9800, + 10000,10200,10400,10600,10800, + 11000,11200,11400,11600,11800, + 12000,12200,12400,12600,12800, + 13000,13200,13400,13600,13800, + 14000,14200,14400,14600,14800, + 15000,15200,15400,15600,15800); + shape3array : + array [0..79] of word =(8000,8100,8200,8300,8400, + 8500,8600,8700,8800,8900, + 9000,9100,9200,9300,9400, + 9500,9600,9700,9800,9900, + 10000,10100,10200,10300,10400, + 10500,10600,10700,10800,10900, + 11000,11100,11200,11300,11400, + 11500,11600,11700,11800,11900, + 12000,12100,12200,12300,12400, + 12500,12600,12700,12800,12900, + 13000,13100,13200,13300,13400, + 13500,13600,13700,13800,13900, + 14000,14100,14200,14300,14400, + 14500,14600,14700,14800,14900, + 15000,15100,15200,15300,15400, + 15500,15600,15700,15800,15900); + + + +type ScreenType = array [0..3999] of byte; {For Ansi Loading} + + Obstruction = record + x,y:integer; + shooting,dead,exploding:boolean; + explodeprogress:byte; + howmanyhits:integer; + kind,lastshot:byte; + end; + + + EnemyInfo = record + x,y:integer; + kind:byte; + out,exploding,boundarycheck,dead:boolean; + explodprogress:byte; + minx,maxx,xspeed,yspeed:integer; + hitsneeded:integer; + end; + + Virtual = Array [1..64000] of byte; { The size of our Virtual Screen } + VirtPtr = ^Virtual; { Pointer to the virtual screen } + + ShapeTable = Array [0..16000] of byte; + ShapePtr = ^ShapeTable; + + +var ho,mi,se,s100:word; + background:array[0..200,0..11] of byte; + tempsec:integer; + flames:boolean; + inte:integer; + dev,mix,stat,pro,loop : integer; + md : string; + howmuchscroll:byte; + filestuff:searchrec; {for load game} + savegamef:text; + ondisk:string; + tempch:char; + +VAR Virscr,VirScr2,VirScr3 : VirtPtr; { Our first Virtual screen } + ShapeTable1:ShapePtr; + num:byte; + Vaddr,Vaddr2,Vaddr3 : Word; { The segment of our 2nd virt. screen} + ShapeAddr:word; { The segment of the shape table} + ShapeOfs:word; + backofs,backseg:word; + ourpal : Array [0..255,1..3] of byte; { A virtual pallette } + enemy:array[0..5] of enemyinfo; + passive:array[0..30] of obstruction; + numpassive:integer; + Soundp : Pointer; + Check : BOOLEAN; + + hiscore,level,shields:integer; + beginscore,beginshields:integer; + score:longint; + axel_und_carmen:boolean; + tempi,tempj:integer; + scorest:string[8]; + soundeffects:boolean; + lowscore:integer; + it,hiname:string[10]; + shipxadd,shipyadd,shipx,shipy,shipspeed,shipframe:integer; + + +var grapherror:byte; + temp:array[1..3] of byte; + i,j:byte; + x,y,barpos:integer; + screen:screentype absolute $B800:0000; + ch:char; + +procedure fillblock(xx1,yy1,xx2,yy2:integer;colo:byte;where:word); +label gus3,gus; +begin + asm + push es {Save Variables} + push ds + mov ax,where {Load where output Goes} + mov es,ax + mov ah,colo {Color To Block} + mov al,colo + mov bx,yy1 + mov dx,bx {Multiply by 320 to find start row} + shl dx,5 + mov cx,dx + shl dx,1 + shl cx,3 + add dx,cx + add dx,xx1 {Add x to get column} + mov di,dx {Load into register} + + mov dx,[xx2] {Calculate width and store in dx} + sub dx,[xx1] + mov bx,320 {Calcualte and store skipover} + sub bx,dx + push bx + mov bx,[yy2] {calculate height and store in bx} + sub bx,[yy1] + +gus3: + mov cx,dx + shr cx,1 {Divide width in half} + jnc gus {If even, jump} + + stosb {then store odd byte} + {Jump Past} +gus: + rep stosw {Its even.. so store words} + + pop cx {restore and add skipover} + add di,cx + push cx + dec bx {decrement y line} + jnz gus3 {if not zero, go back} + pop cx + pop ds {restore registers} + pop es + end; +end; + +procedure ReadConfigFile; +var ff:text; +begin +(* {$I-} + assign(ff,'config.tb1'); + reset(ff); + close(ff); + {$I+} + if IOresult<>0 then begin + writeln('Warning: Missing or Invalid "config.tb1" file'); + writeln; + writeln('Please run the "tbsetup" utility included to set up your computer. Thank You.'); + halt(5); + end; + assign(ff,'config.tb1'); + reset(ff); + readln(ff,Xsoundeffects); + readln(ff,Xsbsound); + readln(ff,Xbaseio); + readln(ff,Xirq); + readln(ff,Xdma); + close(ff); *) +end; + + + +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:='ß'; {up} + if ch2='M' then chtemp:='Þ'; {right} + if ch2='P' then chtemp:='Ü'; {down} + if ch2='K' then chtemp:='Ý'; {left} + if ch2=';' then chtemp:='¨'; {f1} + if ch2='I' then chtemp:='ô'; {pgup} + if ch2='Q' then chtemp:='õ'; {pgdown} + end; + menuread:=chtemp; +end; + + +procedure coolbox(x1,y1,x2,y2:integer;fill:boolean;page:word); +begin + for i:=0 to 5 do box(x1+i,y1+i,x2-i,y2-i,31-i,page); + if fill then for i:=y1+5 to y2-5 do + horizontalline(x1+5,x2-5,i,7,page); +end; + + +Procedure ShutDown; + { This frees the memory used by the virtual screen } +BEGIN + FreeMem (VirScr,64000); + FreeMem (VirScr2,64000); + FreeMem (VirScr3,16800); + FreeMem (ShapeTable1,16000); +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^); + GetMem (VirScr3,16800); + vaddr3:=seg(virscr3^); + GetMem (ShapeTable1,16000); + shapeaddr:= seg (ShapeTable1^); + shapeofs:=ofs (ShapeTable1^); + backofs:=ofs(background); + backseg:=seg(background); +END; + +function showhiscore(showchart,savelist:boolean):integer; +var hilist:text; + testr:string[10]; + place,tempi:integer; + names:array[0..9] of string[10]; + scores:array[0..9] of longint; +label bob; +begin + assign(hilist,'HISCORE.TB1'); + reset(hilist); + for i:=0 to 9 do readln(hilist,names[i]); + for i:=0 to 9 do readln(hilist,scores[i]); + close(hilist); + lowscore:=scores[9]; + showhiscore:=scores[0]; + if showchart then begin + fillblock(45,40,285,160,7,vga); + coolbox(45,40,285,160,false,vga); + for i:=0 to 9 do + outtextxy(names[i],51,46+(i*10),9,7,vga,true); + for i:=0 to 9 do begin + str(scores[i],testr); + outtextxy(testr,181,46+(i*10),9,7,vga,true); + end; + repeat until keypressed; + ch:=readkey; + end; + if savelist then begin + place:=0; + for tempi:=0 to 9 do if score>scores[tempi] then inc(place); + place:=10-place; + for tempi:=9 downto place do scores[tempi]:=scores[tempi-1]; + for tempi:=9 downto place do names[tempi]:=names[tempi-1]; + scores[place]:=score; + names[place]:=hiname; + assign(hilist,'HISCORE.TB1'); + rewrite(hilist); + for i:=0 to 9 do writeln(hilist,names[i]); + for i:=0 to 9 do writeln(hilist,scores[i]); + close(hilist); + end; +end; + +procedure putshape240over(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor cx,cx + xor dx,dx + mov ax,240 + sub ax,[xacross] {xacross?} + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + rep movsb + cmp dx,bx + jz bob3 + xor cx,cx + add di,ax + inc dx + jmp bob + bob3: + {restore variables} + pop ds + end; +end; + +procedure putshape240(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + mov bx,240 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; + + + +procedure put10shape240(shapeoffset,towhere,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + mov bx,240 + sub bx,10 {xacross?} + push bx + mov bx,9 + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,10 {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; + + + +procedure putshape(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; + +procedure putshapeline(fromwhereo,towhere,xacross,yacross,xx,yy,line:word); +var int,color:integer; +{draws just one line of a shape with same syntax as putshape} +begin + for int:=0 to xacross do begin + {does not work. stack overflow} + (*asm + push ax + push bx + push cx + mov ax,[line] {multiplies y value by 320} + mul [xacross] + add ax,[int] + mov bx,ax + mov ax,[ShapeAddr] {moves segment of array} + mov ds,ax + {mov ax,[ShapeOfs]} {moves offset of array} + mov ax,[fromwhereo] + add ax,bx + mov si,ax + xor ax,ax + lodsb + mov [color],ax + pop cx + pop bx + pop ax + end;*) + color:=ShapeTable1^[fromwhereo+((xacross*line)+int)]; + if color<>0 then putpixel(xx+int,yy+line,color,towhere); + end; +end; + +procedure putshapeover(fromwhereo,towhere,xacross,yacross,xx,yy:word); +label bbob,bbob4,bbob2,bbob3; +begin + asm + push ax {saves registers} + push dx + push cx + push bx + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + (*add ax,[shapeofs] *) {moves offsett if array} + mov ax,[fromwhereo] + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bbob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bbob4: + rep movsb {copies, overwriting} + bbob2: {Adds when x-value must be increased} + cmp dx,bx + jz bbob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bbob + bbob3: + pop bx {restore variables} + pop ds + pop bx + pop cx + pop dx + pop ax + end; +end; + + +procedure flip240(hm:integer); +label gus; + { This copies 240 columns from vaddr2 to vaddr } +begin + asm + push ds + mov ax, vaddr + mov es, ax + mov ax, vaddr2 + + mov bx,[hm] + mov cx,bx + shl bx,4 + sub bx,cx + add ax,bx + + mov ds, ax + xor si,si + xor di, di + mov ax,200 + gus: + mov cx, 120 + rep movsw + add di,80 + + dec ax + jnz gus + + pop ds + end; +end; + + +procedure flip50(fromwhere,off1,whereto,off2:word); +label gus; + { This copies 240 columns from vaddr2 to vaddr } +begin + asm + push ds + mov ax, [whereto] + add ax, [off2] + mov es, ax + mov ax, [fromwhere] + add ax,[off1] + mov ds, ax + xor si,si + xor di, di + mov ax,50 + gus: + mov cx, 120 + rep movsw + dec ax + jnz gus + + pop ds + end; +end; + + +procedure help; +begin + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('HELP',144,10,4,0,vga,false); + outtextxy('--------------------------------------',10,20,12,0,vga,false); + outtextxy('IN THE GAME:',10,30,4,0,vga,false); + outtextxy(' ARROWS MANUEVER',10,40,4,0,vga,false); + outtextxy(' SPACE BAR FIRES MISSILES',10,50,4,0,vga,false); + outtextxy(' F2 SAVES GAME',10,60,4,0,vga,false); + outtextxy(' P=PAUSE S=TOGGLE SOUND ESC=QUIT',10,70,4,0,vga,false); + outtextxy('--------------------------------------',10,80,12,0,vga,false); + outtextxy('MISSION: SHOOT THE INANIMATE OBJECTS',10,90,4,0,vga,false); + outtextxy(' WHY? WATCH THE STORY!',10,100,4,0,vga,false); + outtextxy('--------------------------------------',10,110,12,0,vga,false); + outtextxy('THE SPACE BAR SPEEDS UP MOVIE SCENES',10,120,4,0,vga,false); + outtextxy('ESC QUITS THEM',10,130,4,0,vga,false); + outtextxy('--------------------------------------',10,140,12,0,vga,false); + outtextxy(' SEE "TB1.DOC" FOR MORE HELP/INFO',10,150,4,0,vga,false); + outtextxy('--------------------------------------',10,160,12,0,vga,false); + outtextxy('PRESS ANY KEY TO CONTINUE',64,185,4,0,vga,false); + repeat until keypressed; + ch:=readkey; +end; + + + + +Procedure setupsidebar; + +VAR i,x,y:integer; + loop1,loop2,loop3:integer; + tempaddr:word; + +procedure makehole(y:integer); +begin + fillblock(249,y,314,y+9,0,tempaddr); + horizontalline(249,314,y,24,tempaddr); + horizontalline(249,313,y+10,18,tempaddr); + line(249,y,249,y+9,24,tempaddr); + line(314,y+1,314,y+10,18,tempaddr); +end; + +BEGIN + tempaddr:=vaddr; + fillblock(240,0,320,199,19,tempaddr); + line(240,0,240,199,18,tempaddr); + line(240,0,319,0,18,tempaddr); + line(319,0,319,199,24,tempaddr); + line(241,199,319,199,24,tempaddr); + outtextxy('SCORE',241,1,127,0,tempaddr,false); + outtextxy('SCORE',242,2,143,0,tempaddr,false); + makehole(10); + str(score,it); + outtextxy(it,250+(8*(8-length(it))),11,12,0,tempaddr,true); + + outtextxy('HI-SCORE',241,21,127,0,tempaddr,false); + outtextxy('HI-SCORE',242,22,143,0,tempaddr,false); + str(hiscore,it); + makehole(30); + outtextxy(it,250+(8*(8-length(it))),31,12,0,tempaddr,true); + + outtextxy('LEVEL',241,41,127,0,tempaddr,false); + outtextxy('LEVEL',242,42,143,0,tempaddr,false); + makehole(50); + outtextxy('SHIELDS',241,61,127,0,tempaddr,false); + outtextxy('SHIELDS',242,62,143,0,tempaddr,false); + makehole(70); + for i:=0 to ((4*shields)-1) do line(250+i,71,250+i,78,(47-(i div 4)),tempaddr); + + outtextxy('WEAPONS',241,81,127,0,tempaddr,false); + outtextxy('WEAPONS',242,82,143,0,tempaddr,false); + makehole(90); + + fillblock(249,111,314,189,0,tempaddr); + + line(249,111,249,189,24,tempaddr); + line(315,111,315,189,18,tempaddr); + line(249,111,315,111,24,tempaddr); + line(249,189,315,189,18,tempaddr); + + outtextxy(' TB1 ',251,114,15,0,tempaddr,false); + outtextxy('F1-HELP ',251,124,15,0,tempaddr,false); + outtextxy('ESC-QUIT',251,135,15,0,tempaddr,false); + outtextxy('F2-SAVE ',251,145,15,0,tempaddr,false); + + flip (vaddr,vaddr2); +END; + +procedure ClearKeyboardBuffer; +begin + mem[$0040:$001c]:=mem[$0040:$001a]; +end; + + + +Procedure blockmove(x1,y1,x2,y2,p1,x3,y3,p2:word); + { This is a small procedure to copy block x1,y1,x2,y2, + from page 1 to x3,y3 on page 2} +BEGIN + asm + push ds + push es + mov ax,p1 + mov ds,ax + mov ax,p2 + mov es,ax + + mov bx,[X1] + mov dx,[Y1] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; bx = bx * 64} + add dx, bx {; dx = dx + bx (ie y*320)} + pop bx {; get back our x} + add bx, dx {; finalise location} + mov si, bx {; es:di = where to go} + + mov bx,[X3] + mov dx,[Y3] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; 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 ax,[y2] + sub ax,[y1] + + mov dx,[x2] + sub dx,[x1] + mov bx,320 + sub bx,dx + + +@@1 : + mov cx, dx { Width of block to copy divided by 2 } + shr cx,1 + jnc @@2 + rep movsw + movsb + jmp @@3 +@@2: + rep movsw +@@3: + add di,bx + add si,bx + dec ax + jnz @@1 + + pop es + pop ds + end; +END; + + +procedure pauseawhile(howlong:word); +var i:word; +begin + i:=0; + repeat + waitretrace; + inc(i); + if i>howlong then exit; + until keypressed; +end; + + + +procedure changescore; +var itemp,jtemp:integer; +begin + str(score:8,scorest); + outtextxy(scorest,250,11,12,0,vaddr,true); + if (score mod 400 =0) and (shields<16) then begin + {if sbeffects then startsound(sound[2],0,false);} + inc(shields); + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + + end; +end; + +function collision(x1,y1,xsize1,ysize1,x2,y2,xsize2,ysize2:integer):boolean; +var bob:byte; + hit:boolean; +label aat1,aat2,aat3,aat4; +begin + bob:=0; + asm + mov ax,[x1] + mov bx,[x2] + mov cx,[xsize1] + mov dx,[xsize2] + cmp bx,ax + jnge aat1 + xchg ax,bx + xchg cx,dx + aat1: + add ax,cx + add bx,dx + + sub ax,bx + add cx,dx + cmp cx,ax + jnge aat3 + inc [bob] + + mov ax,[y1] + mov bx,[y2] + mov cx,[ysize1] + mov dx,[ysize2] + cmp bx,ax + jnge aat2 + xchg ax,bx + xchg cx,dx + aat2: + add ax,cx + add bx,dx + + sub ax,bx + add cx,dx + cmp cx,ax + jnge aat3 + inc [bob] + aat3: + mov [hit],0 + cmp [bob],2 + jnz aat4 + mov [hit],1 + aat4: + end; + if hit then collision:=true + else collision:=false; +end; + + + + + + + +{%%} +procedure clearshape; +begin + asm + push es + mov cx,8000 + mov es,[shapeaddr] + xor di,di + mov al,5 + mov ah,al + rep stosw + pop es + end; +end; + + + +procedure outbackline(line,row:word); +label bob,bob2,bob3; +var off2,off:word; +begin + off2:=vaddr3; {not sure why necessary, but keep} + off:=backseg; {losing the values of the original} + asm + {saves registers} + push ds + push es + xor ax,ax {old xx variable (times to repeat)=0} + push ax + + {mov cx,[(4-row)*10)] } {multiplies y value by 2400} + + {calculates initial offset for y value} + + mov ax,4 + sub ax,row + shl ax,5 + mov bx,ax + shl ax,1 + add bx,ax + shl ax,2 + add bx,ax + shl ax,3 + add bx,ax {original row offset is in bx} + + +bob2: {get background array} + mov ax,[off] + mov ds,ax + mov dx,[line] + shl dx, 2 + mov ax,dx + shl dx,1 + add ax,dx + pop cx + add ax,cx + push cx + add ax,[backofs] + mov si,ax + lodsb + xor ah,ah + mov cx,ax + + + shl cx,3 {from background number, get actual offset} + mov ax,cx + shl cx,3 + add ax,cx + shl cx,1 + add ax,cx + add ax,8000 + mov si,ax + + mov ax,[shapeaddr] + mov ds,ax + + + + + mov ax,[off2] {loads place to move it} + mov es,ax + mov di,bx + mov ax,220 {what to add to increase one y} + xor dx,dx + bob: + mov cx,20 {how long to loop across (the x-size of array)} + rep movsb {move, overwriting} + cmp dx,9 {see if longer than y size} + jz bob3 {if so, end} + add di,ax {if not, increase y by one} + inc dx + jmp bob + bob3: + add bx,20 {Increase starting offset value} + + pop cx {jump if not drawn 12 across} + inc cx + cmp cx,12 + push cx + jnz bob2 + {restore variables} + pop cx + pop es + pop ds + end; +end; + +procedure savegame; +begin + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('SAVE GAME',124,10,4,0,vga,false); + outtextxy('THIS WILL ONLY SAVE HOW YOU WERE',10,20,4,0,vga,false); + outtextxy('AT THE BEGINNING OF THE LEVEL!!!',10,30,4,0,vga,false); + findfirst('SG?.TB1',ANYFILE,filestuff); + ondisk:='ALREADY SAVED GAMES:'; + while doserror=0 do with filestuff do + begin + ondisk:=concat(ondisk,name[3]); + findnext(filestuff); + end; + if ondisk='' then ondisk:=concat(ondisk,'NONE'); + outtextxy(ondisk,10,50,4,0,vga,false); + outtextxy('SAVE WHICH GAME?',10,60,4,0,vga,false); + repeat until keypressed; + tempch:=readkey; + if (tempch>='0') and (tempch<='9') then begin + {$I-} + ondisk:=concat('SG',tempch,'.TB1'); + assign(savegamef,ondisk); + rewrite(savegamef); + {$I+} + If IOResult=0 then begin + writeln(savegamef,beginscore); + writeln(savegamef,level); + writeln(savegamef,beginshields); + close(savegamef); + outtextxy('GAME SAVED',120,150,15,0,vga,false); + end + else outtextxy('ERROR! GAME NOT SAVED!',102,150,15,0,vga,false); + outtextxy('PRESS ANY KEY...',96,180,4,0,vga,false); + repeat; until keypressed; tempch:=readkey; + end; +end; + + +function upcollide(x,y,speed:word;add:integer;howfar,where:word):word; +var add2,color:word; +label mree1,mree2,mree3,mree4,mree5,mree6; +begin + add2:=y+add; + asm + {saves registers} + push ds + mov cx,[add2] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov si,ax + mov ax,[where] + mov ds,ax + xor ah,ah + + mov [color],0 + mov dx,[speed] + inc dx + mree2: + dec dx + + mov cx,[howfar] + mree3: + lodsb + cmp ax,3 + je mree1 + cmp ax,5 + je mree4 + jne mree6 + mree4: + cmp bx,3 + je mree6 + mree1: + mov [color],ax + mov bx,ax + mree6: + loop mree3 + add si,240 + sub si,[howfar] + cmp dx,0 + jne mree2 + pop ds + end; + upcollide:=color; +end; + +function leftcollide(x,y,speed:word;add:integer;howfar,where:word):word; +var add2,color:word; +label mree1,mree2,mree3,mree4,mree5,mree6; +begin + add2:=x+add; + asm + {saves registers} + push ds + mov cx,[y] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[add2] {adds the x-value to get offset} + mov si,ax + mov ax,[where] + mov ds,ax + xor ah,ah + + mov [color],0 + mov dx,[howfar] + inc dx + + mree2: + dec dx + + mov cx,[speed] + inc cx + mree3: + lodsb + cmp ax,3 + je mree1 + cmp ax,5 + jne mree6 + cmp bx,3 + je mree6 + mree1: + mov [color],ax + mov bx,ax + mree6: + loop mree3 + add si,240 + sub si,[speed] + cmp dx,0 + jne mree2 + pop ds + end; + leftcollide:=color; +end; + +procedure loadlevel3shapes; +var x,y,i,j,shape:byte; +begin + clearshape; + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'tblev3.tb1'); + + for j:=0 to 3 do + for i:=0 to 19 do + for x:=0 to 9 do + for y:=0 to 9 do + ShapeTable1^[shape3array[(j*20)+i]+((y*10)+x)] + :=getpixel(1+x+(i*11),1+y+(j*11),vaddr); + cls(0,vaddr); +end; + + +Procedure levelthree; +label newroom; +type{ +EnemyInfo = record + x,y:integer; + kind:byte; + out,exploding,boundarycheck,dead:boolean; + explodprogress:byte; + minx,maxx,xspeed,yspeed:integer; + hitsneeded:integer; + end;} +pittype = record + px,py:integer; + end; +kctype = record + kcx,kcy:integer; + kcout:boolean; + end; + +const framedir:array[0..1,0..3] of integer =((0,1,0,-1),(1,0,-1,0)); +VAR loop1,loop2:integer; + ch,ch2:char; + pits:array[0..4] of pittype; + numpits:byte; + + bullet1x,bullet1y,bullet2x,bullet2y,i:integer; + bullet1dir,bullet2dir,collide:byte; + bullet1out,bullet2out:boolean; + whichone,temp,temp2:integer; + tempst:string; + what:byte; + k:integer; + itemp,jtemp:byte; + whatdelay:byte; + tempilg:byte; + xx:integer; + ucollide,dcollide,lcollide,rcollide:word; + walking,feet:byte; + room:byte; + backrow,topblocky:integer; + levelover,odd,changeroom,havegun:boolean; + whichroomnext:array[0..3] of byte; {n,s,e,w} + keycards:array[0..3] of boolean; + keycard:kctype; + shieldup:array[0..11] of boolean; + shieldx,shieldy,laserx,lasery:integer; + laserup:array[0..11] of boolean; + computers:array[0..11] of boolean; + computerx,computery:integer; + computer_0hits:integer; + tempkc:byte; + +procedure horizwalls(x,y,howfar:word); +var i:word; +begin + for i:=0 to howfar do + put10shape240(shape3array[3],vaddr2,x+(i*10),y); +end; + +procedure verticalwalls(x,y,howfar:word); +var i:word; +begin + for i:=0 to howfar do + put10shape240(shape3array[2],vaddr2,x,y+(i*10)); +end; + +procedure dopits; +var i:word; +begin + for i:=0 to (numpits-1) do + with pits[i] do + put10shape240(shape3array[5],vaddr2,px,py); +end; + +procedure clearroom; +var i,j:byte; +begin + for i:=0 to 23 do + for j:=0 to 19 do + put10shape240(shape3array[0], + vaddr2,i*10,j*10); +end; + + +procedure doroom(n,s,e,w:boolean); +var i:byte; +begin + for i:=0 to 2 do begin + put10shape240(shape3array[18],vaddr2,100+(i*10),0); + put10shape240(shape3array[18],vaddr2,100+(i*10),199); + put10shape240(shape3array[19],vaddr2,0,90+(i*10)); + put10shape240(shape3array[19],vaddr2,239,90+(i*10)); + end; + + if n then begin + horizwalls(0,0,10); + horizwalls(130,0,10); + end + else horizwalls(0,0,23); + if s then begin + horizwalls(0,197,10); + horizwalls(130,197,10); + end + else horizwalls(0,197,23); + + if e then begin + verticalwalls(237,0,8); + verticalwalls(237,110,8); + end + + else for i:=0 to 20 do put10shape240(shape3array[2],vaddr2,237,i*10); + if w then begin + verticalwalls(0,0,8); + verticalwalls(0,110,8); + end + else for i:=0 to 20 do put10shape240(shape3array[2],vaddr2,0,i*10); + +end; + + + +BEGIN + {loadlevel3shapes;} + computer_0hits:=0; + whatdelay:=1; + havegun:=true; + for i:=0 to 3 do keycards[i]:=false; + for i:=0 to 11 do begin + shieldup[i]:=false; + laserup[i]:=false; + computers[i]:=false; + end; + shieldup[0]:=true; + laserup[0]:=true; + computers[0]:=true; + + shipx:=115; + shipy:=180; + odd:=false; + shipxadd:=0; + room:=0; + shipyadd:=0; + + shipframe:=1; + shipspeed:=5; + + ch:=#1; ch2:=#1; + bullet1out:=false; bullet2out:=false; + bullet1x:=0; bullet1y:=0; + bullet2x:=0; bullet2y:=0; + + flip(vaddr2,vaddr); + str(level,tempst); + fillblock(251,52,314,59,0,vaddr); + outtextxy(tempst,307,51,12,0,vaddr,false); + + cls(0,vaddr2); + + pal(250,0,0,63); + pal(251,63,0,0); + + pal(254,shields*4,0,0); + howmuchscroll:=50; + + cls(0,vga); + coolbox(70,85,240,120,true,vga); + outtextxy(' LEVEL THREE:',84,95,4,7,vga,false); + outtextxy(' THE ALIEN SHIP',84,105,4,7,vga,false); + + clearkeyboardbuffer; + pauseawhile(300); + numpassive:=0; + levelover:=false; + +newroom: + numpits:=0; + changeroom:=false; + if room=254 then room:=0; + clearroom; + if shipframe=1 then shipy:=188 + else if shipframe=3 then shipy:=3 + else if shipframe=2 then shipx:=3 + else if shipframe=4 then shipx:=228; + keycard.kcout:=false; + + + if room=0 then begin + whichroomnext[0]:=1; + whichroomnext[1]:=255; + clearroom; + verticalwalls(30,0,16); + verticalwalls(207,0,16); + verticalwalls(57,30,16); + verticalwalls(180,30,16); + with pits[0] do begin + px:=95; + py:=80; + end; + with pits[1] do begin + px:=135; + py:=80; + end; + numpits:=2; { actual} + dopits; + + for i:=0 to 10 do + for j:=0 to 2 do begin + put10shape240(shape3array[4],vaddr2,60+(j*10),80+(i*10)); + put10shape240(shape3array[4],vaddr2,150+(j*10),80+(i*10)); + end; +{walkway} + for i:=0 to 15 do for j:=0 to 1 do + put10shape240(shape3array[1],vaddr2,110+(j*10),40+(i*10)); + + put10shape240(shape3array[6],vaddr2,110,30); + put10shape240(shape3array[6],vaddr2,120,30); + computerx:=110; + computery:=30; + + if shieldup[0] then begin + shieldx:=10; + shieldy:=10; + put10shape240(shape3array[8],vaddr2,10,10); + end; + + if laserup[0] then begin + laserx:=220; + lasery:=10; + put10shape240(shape3array[7],vaddr2,220,10); + end; + + {badguys} + {put10shape240(shape3array[32],vaddr2,40,180); + put10shape240(shape3array[32],vaddr2,190,180);} + + + doroom(true,true,false,false); + + + end; + if room=1 then begin + whichroomnext[0]:=2; + whichroomnext[1]:=0; + doroom(true,true,false,false); + end; + if room=2 then begin + whichroomnext[1]:=1; + whichroomnext[2]:=6; + whichroomnext[3]:=4; + with pits[0] do begin + px:=95; + py:=80; + end; + with pits[1] do begin + px:=135; + py:=80; + end; + numpits:=2; + dopits; + + doroom(false,true,true,true); + end; + if room=3 then begin + whichroomnext[0]:=4; + if not(keycards[3]) then + begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[12],vaddr2,100,100); + end; + doroom(true,false,false,false); + end; + if room=4 then begin + whichroomnext[0]:=7; + whichroomnext[1]:=3; + whichroomnext[2]:=2; + doroom(true,true,true,false); + end; + if room=5 then begin + whichroomnext[0]:=6; + doroom(true,false,false,false); + if not(keycards[2]) then begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[11],vaddr2,100,100); + end; + end; + if room=6 then begin + whichroomnext[0]:=11; + whichroomnext[1]:=5; + whichroomnext[3]:=2; + doroom(true,true,false,true); + end; + if room=7 then begin + whichroomnext[0]:=8; + whichroomnext[1]:=4; + doroom(true,true,false,false); + end; + if room=8 then begin + whichroomnext[1]:=7; + whichroomnext[2]:=9; + if not(keycards[0]) then begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[9],vaddr2,100,100); + end; + doroom(false,true,true,false); + end; + if room=9 then begin + whichroomnext[2]:=10; + whichroomnext[3]:=8; + doroom(false,false,true,true); + end; + if room=10 then begin + whichroomnext[1]:=11; + whichroomnext[3]:=9; + if not(keycards[1]) then begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[10],vaddr2,100,100); + end; + doroom(false,true,false,true); + end; + if room=11 then begin + whichroomnext[0]:=10; + whichroomnext[1]:=6; + doroom(true,true,false,false); + end; + if room=255 then begin + if keycards[0] and keycards[1] and + keycards[2] and keycards[3] then + begin + levelover:=true; + cls(0,vga); + outtextxy('You Have won!',5,5,9,7,vga,false); + outtextxy('But as you can see this level is not done yet.',5,15,9,7,vga,false); + {outtextxy('Anyway');} + readln; + inc(level); + end + else begin + cls(0,vga); + outtextxy('You Cannot Leave Yet',5,5,9,7,vga,true); + repeat until keypressed; tempch:=readkey; + levelover:=false; + shipframe:=1; + room:=254; + end; + end; + if (room=254) and not(levelover) then goto newroom; + + + + + +{**** GAME LOOP ****} +{*******************} + Repeat + ch2:=#1; + ch:=#1; + + flip240(0); + +{***Collision Check***} + if numpits>0 then + for i:=0 to (numpits-1) do with pits[i] do + if collision(shipx,shipy,5,4,px,py,4,4) + then begin + levelover:=true; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,false,true,'tbpit.tb1'); + + + {outtextxy('You Fell In A Pit!',5,5,9,2,vga,false);} + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if keycard.kcout then + if collision(shipx,shipy,5,4,keycard.kcx,keycard.kcy,5,5) + then begin + keycard.kcout:=false; + case room of + 3: keycards[3]:=true; + 5: keycards[2]:=true; + 8: keycards[0]:=true; + 10:keycards[1]:=true; + end; + put10shape240(shape3array[0],vaddr2,keycard.kcx,keycard.kcy); + end; + if shieldup[room] then + if collision(shipx,shipy,5,4,shieldx,shieldy,5,5) + then begin + shieldup[room]:=false; + put10shape240(shape3array[0],vaddr2,shieldx,shieldy); + inc(shields); + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + if laserup[room] then + if collision(shipx,shipy,5,4,laserx,lasery,5,5) + then begin + laserup[room]:=false; + put10shape240(shape3array[0],vaddr2,laserx,lasery); + end; + if computers[room] then + if collision(shipx,shipy,5,4,computerx,computery,10,5) + then begin + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,false,true,'tbconsol.tb1'); + tempkc:=0; + if keycards[0] then begin + inc(tempkc); + putpixel(147,132,0,vga); + end; + if keycards[1] then begin + inc(tempkc); + putpixel(179,132,0,vga); + end; + if keycards[2] then begin + inc(tempkc); + putpixel(179,160,0,vga); + end; + if keycards[3] then begin + inc(tempkc); + putpixel(147,160,0,vga); + end; + + case room of + 0: begin + inc(computer_0hits); + if computer_0hits=1 then begin + + outtextxy('COMPUTER ACTIVATED:',47,30,2,0,vga,true); + outsmalltextxy(' HUMAN YOU HAVE COME TOO SOON. LEVELS 3',47,40,2,0,vga,true); + outsmalltextxy(' AND 4 ARE INCOMPLETE.',47,48,2,0,vga,true); + outsmalltextxy(' ANYWAY I CAN SEE YOU ARE NOT THE',47,58,2,0,vga,true); + outsmalltextxy(' TENTACLEE COMMANDER. YOU ARE IN',47,66,2,0,vga,true); + outsmalltextxy(' GRAVE DANGER. LUCKILY THE MAIN',47,74,2,0,vga,true); + outsmalltextxy(' COMPUTER SYSTEM DOES NOT APPROVE',47,82,2,0,vga,true); + outsmalltextxy(' OF THE TENTACLEE''S POLICIES.',47,90,2,0,vga,true); + outsmalltextxy(' I PERSONALLY CANNOT SHUT OFF THE TRACTOR',47,100,2,0,vga,true); + outsmalltextxy(' BEAM. YOU MUST RETRIEVE FOUR KEYCARDS',47,108,2,0,vga,true); + outsmalltextxy(' SCATTERED AROUND THE FLIGHT DECK.',47,116,2,0,vga,true); + outsmalltextxy(' THE MAP BELOW WILL AID YOU.',47,124,2,0,vga,true); + end; + if computer_0hits=2 then begin + + outtextxy('COMPUTER ACTIVATED:',47,30,2,0,vga,true); + outsmalltextxy(' HUMAN I HAVE ALREADY TOLD YOU MUCH.',47,40,2,0,vga,true); + outsmalltextxy(' COLLECT THE 4 KEYCARDS, MADE OF',47,48,2,0,vga,true); + outsmalltextxy(' RUBY, GOLD, EMERALD, AND ALUMINUM.',47,56,2,0,vga,true); + outsmalltextxy(' WATCH OUT FOR ENEMIES NOT UNDER MY',47,66,2,0,vga,true); + outsmalltextxy(' CONTROL, RADIOACTIVE FLOORS, AND',47,74,2,0,vga,true); + outsmalltextxy(' EXTREMELY DEEP PITS.',47,82,2,0,vga,true); + end; + if computer_0hits>2 then begin + outtextxy('COMPUTER ACTIVATED:',47,30,2,0,vga,true); + outsmalltextxy(' HUMAN, GO AWAY. YOU ANNOY ME.',47,40,2,0,vga,true); + outsmalltextxy(' I HAVE TOLD YOU EVERYTHING.',47,48,2,0,vga,true); + end; + + + + end; + end; + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + shipx:=shipx+(4*framedir[1,shipframe]); + shipy:=shipy+(4*framedir[0,shipframe]); + end; + + +{***DO EXPLOSIONS***} +{ for i:=0 to 30 do + if passive[i].exploding then with passive[i] do begin + inc(explodeprogress); + putshape240(shape2array[35+explodeprogress],vaddr2, + 20,9,x,y+howmuchscroll); + if explodeprogress>4 then begin + dead:=true; + exploding:=false; + putshape240over(14800(*shape2array[34]*),vaddr2, + 20,9,x,y+howmuchscroll); + end; + end; + + } +{***MOVE BULLET***} + if bullet1out then begin + case bullet1dir of + 1:begin dec(bullet1y,5); + collide:=upcollide(bullet1x,bullet1y,5,-5,3,vaddr2); + end; + 2:begin inc(bullet1x,5); + collide:=leftcollide(bullet1x,bullet1y,5,10,3,vaddr2); + end; + 3:begin inc(bullet1y,5); + collide:=upcollide(bullet1x,bullet1y,5,10,3,vaddr2); + end; + 4:begin dec(bullet1x,5); + collide:=leftcollide(bullet1x,bullet1y,5,-5,3,vaddr2); + end; + end; + + if collide<>0 then bullet1out:=false; + if bullet1out then putshape(shape3array[76],vaddr,10,9,bullet1x,bullet1y); + end; + if bullet2out then begin + dec(bullet2y,5); + if bullet2y<5 then bullet2out:=false; + if bullet2out then putshape(shape3array[76],vaddr,10,9,bullet2x,bullet2y); + end; +{***MOVE ENEMIES***} + { for j:=0 to 30 do begin + if passive[j].dead=false then begin + inc(passive[j].y); + if(passive[j].y)>190 then passive[j].dead:=true; + end; + end; + for j:=0 to 30 do begin + if passive[j].lastshot>0 then dec(passive[j].lastshot); + if (passive[j].dead=false) and (passive[j].shooting) + and (passive[j].lastshot=0) and (passive[j].y>0) + then begin + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + passive[j].lastshot:=30; + enemy[tempilg].out:=true; + enemy[tempilg].y:=passive[j].y; + enemy[tempilg].x:=passive[j].x+5; + enemy[tempilg].yspeed:=5; + enemy[tempilg].kind:=25; + if passive[j].kind=11 then enemy[tempilg].kind:=26; + end; + end; + end; + for j:=0 to 5 do begin + if enemy[j].out then begin + putshape(shape2array[enemy[j].kind],vaddr, + 20,9,enemy[j].x,enemy[j].y); + enemy[j].y:=enemy[j].y+enemy[j].yspeed; + if enemy[j].y>189 then enemy[j].out:=false; + end; + end; + } + +{***READ KEYBOARD***} + + if keypressed then BEGIN + ch:=readkey; + if ch=chr(0) then ch2:=readkey; + if ch=#27 then levelover:=true; + clearkeyboardbuffer; + + if ch2='M' then begin + if (shipframe=2) and (shipxadd=0) then shipxadd:=2 + else if (shipframe<>2) then shipframe:=2 + else inc(shipxadd); + end; + if ch2='K' then begin + if (shipframe=4) and (shipxadd=0) then shipxadd:=-2 + else if (shipframe<>4) then shipframe:=4 + else dec(shipxadd); + end; + if ch2='H' then begin + if (shipframe=1) and (shipyadd=0) then shipyadd:=-2 + else if (shipframe<>1) then shipframe:=1 + else dec(shipyadd); + + end; + if ch2='P' then begin + if (shipframe=3) and (shipyadd=0) then shipyadd:=2 + else if (shipframe<>3) then shipframe:=3 + else inc(shipyadd); + + end; + if ch2=';' then help; + if ch='+' then begin + inc(whatdelay); + if whatdelay>25 then whatdelay:=25; + end; + if (ch='P') or (ch='p') then begin + coolbox(65,85,175,110,true,vga); + outtextxy('GAME PAUSED',79,95,4,7,vga,false); + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if ch='-' then begin + dec(whatdelay); + if whatdelay<1 then whatdelay:=1; + end; + {if (ch='S') or (ch='s') then sbeffects:=not(sbeffects);} + + if ch2='<' then savegame; + + end; + if (ch=' ') and havegun then begin + if (bullet1out=false) then begin + {if sbeffects then StartSound(Sound[4], 0, false);} + bullet1out:=true; + bullet1x:=shipx+3; + bullet1y:=shipy+4; + bullet1dir:=shipframe; + putshape(shape3array[76],vaddr,10,9,bullet1x,bullet1y); + end + else + if (bullet2out=false) then begin + {if sbeffects then StartSound(Sound[4], 0, false);} + bullet2out:=true; + bullet2x:=shipx; + bullet2y:=shipy; + bullet2dir:=shipframe; + putshape(shape3array[76],vaddr,10,9,bullet2x,bullet2y); + end; + end; + +{***MOVE SHIP***} + + + ucollide:=upcollide(shipx,shipy,abs(shipyadd),-abs(shipyadd),10,vaddr2); + dcollide:=upcollide(shipx,shipy,abs(shipyadd),8,10,vaddr2); + lcollide:=leftcollide(shipx,shipy,abs(shipxadd),-abs(shipxadd),8,vaddr2); + rcollide:=leftcollide(shipx,shipy,abs(shipxadd),0,8,vaddr2); + if (shipframe=1) and (ucollide<>0) then shipyadd:=0; + if (shipframe=3) and (dcollide<>0) then shipyadd:=0; + if (shipframe=2) and (rcollide<>0) then shipxadd:=0; + if (shipframe=4) and (lcollide<>0) then shipxadd:=0; + shipy:=shipy+shipyadd; + shipyadd:=shipyadd-sgn(shipyadd); + shipx:=shipx+shipxadd; + shipxadd:=shipxadd-sgn(shipxadd); + + case ucollide of + 5: begin + changeroom:=true; + room:=whichroomnext[0]; + end; + end; + case dcollide of + 5: begin + changeroom:=true; + room:=whichroomnext[1]; + end; + end; + case rcollide of + 5: begin + changeroom:=true; + room:=whichroomnext[2]; + end; + end; + case lcollide of + 5: begin + changeroom:=true; + room:=whichroomnext[3]; + end; + end; + if (shipyadd<>0) or (shipxadd<>0) then inc(walking,4) + else walking:=0; + if walking>12 then walking:=0; + + CASE shipframe of + 1 : putshape (shape3array[60+walking],vaddr,10,9,shipx,shipy); + 2 : putshape (shape3array[61+walking],vaddr,10,9,shipx,shipy); + 3 : putshape (shape3array[62+walking],vaddr,10,9,shipx,shipy); + 4 : putshape (shape3array[63+walking],vaddr,10,9,shipx,shipy); + END; + waitretrace; + flip (vaddr,vga); + if odd then begin + pal(250,0,0,63); + pal(251,63,0,0); + odd:=not(odd); + end + else begin + pal(251,0,0,63); + pal(250,63,0,0); + odd:=not(odd); + end; + + + for i:=0 to whatdelay do waitretrace; + + if changeroom then goto newroom; + + until levelover; +END; + + + + + + + +function grinput(xv,yv,howlong,forecol,backcol:integer):string; +var tempst:string; + ch3:char; + label bob; +begin + tempst:=''; + ch3:='Û'; + repeat + repeat until keypressed; + ch3:=readkey; + if (ch3=#8) and (ord(tempst[0])>0) then begin + fillblock(xv,yv,ord(tempst[0])*8+xv,yv+8,backcol,vga); + dec(tempst[0]); + end; + if length(tempst)>=howlong then goto bob; + if ch3>#20 then tempst:=concat(tempst,ch3); + if tempst[0]>#0 then + outtextxy(tempst,xv,yv,forecol,backcol,vga,true); + bob: + until ch3=#13; + grinput:=tempst; +end; + +procedure loadshapes; +var x,y,i,j,shape:byte; +begin + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'ships.tb1'); + for i:=0 to 47 do + for j:=0 to 29 do begin + ShapeTable1^[bigship1off+((j*43)+i)]:=getpixel(i,j,vaddr); + ShapeTable1^[bigship2off+((j*43)+i)]:=getpixel(i,j+32,vaddr); + ShapeTable1^[bigship3off+((j*43)+i)]:=getpixel(i,j+64,vaddr); + end; + + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'tbshapes.tb1'); + for j:=0 to 1 do + for i:=0 to 9 do + for x:=0 to 17 do + for y:=0 to 17 do + ShapeTable1^[shapearray[(((j*10)+1)+i)]+((y*18)+x)] + :=getpixel(1+x+(i*19),1+y+(j*19),vaddr); + cls(0,vaddr); +end; + + + +procedure littleopener; +begin + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'moon2.tb1'); + fade; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,false,true,'moon2.tb1'); + for i:=0 to 15 do + for j:=0 to 18 do begin + ShapeTable1^[6000+((j*16)+i)]:=getpixel(i+9,j+178,vga); + ShapeTable1^[6400+((j*16)+i)]:=getpixel(i+30,j+178,vga); + end; + fillblock(0,178,319,199,0,vga); + unfade; + flip(vga,vaddr); + flip(vaddr,vaddr2); + for i:=100 downto 0 do begin + flip(vaddr2,vaddr); + putshape(6400,vaddr,16,18,i,100); + waitretrace; + if keypressed then if readkey=#27 then exit; + flip(vaddr,vga); + end; + flip(vaddr2,vga); + outtextxy('>KCHK< TOM! WHERE ARE YOU GOING?',5,180,15,0,vga,true); + pauseawhile(500); if keypressed then ch:=readkey; + waitretrace; + fillblock(0,178,319,199,0,vga); + outtextxy('Ooops. ',5,180,24,0,vga,true); + pauseawhile(500); if keypressed then ch:=readkey; + for inte:=0 to 151 do begin + flip(vaddr2,vaddr); + putshape(6000,vaddr,16,18,inte*2,100); + waitretrace; + flip(vaddr,vga); + if keypressed then if readkey=#27 then exit; + end; + flip(vaddr2,vga); + pauseawhile(5); + fade; + cls(0,vga); + unfade; +end; + +procedure littleopener3; +var star_x:array[0..5]of integer; + star_y:array[0..5]of integer; +begin + loadlevel3shapes; + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'tbl2ship.tb1'); + fade; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vaddr,false,true,'tbl3intr.tb1'); + blockmove(0,3,171,117,vaddr,10,10,vga); + putshape (shape3array[60],vga,10,9,113,52); + + + unfade; + outtextxy('Hmmmm... STUPID TRACTOR BEAM.',10,155,10,0,vga,false); + outtextxy('I GUESS I''D BETTER GO SHUT IT OFF.',10,165,10,0,vga,false); + pauseawhile(700); + clearkeyboardbuffer; + + for i:=24 downto 0 do begin + blockmove(0,3,171,117,vaddr,10,10,vga); + putshape (shape3array[60+(4*(i mod 4))],vga,10,9,113,28+i); + + waitretrace; waitretrace; waitretrace; + waitretrace; waitretrace; waitretrace; + end; + putshape (shape3array[60],vga,10,9,113,28); + fillblock(10,155,300,185,0,vga); + outtextxy('I''M LUCKY I WORE MAGNETIC SHOES.',10,155,12,0,vga,false); + outtextxy('Hmmmm. SOMEONE LEFT THE AIR-LOCK',10,165,12,0,vga,false); + outtextxy(' UNLOCKED. STRANGE.',10,175,12,0,vga,false); + pauseawhile(600); + clearkeyboardbuffer; + putpixel(110,20,10,vga); + putpixel(110,22,10,vga); + fillblock(111,14,123,29,0,vga); + fillblock(10,155,300,185,0,vga); + outtextxy('I HOPE THIS ISN''T A TRAP.',10,155,9,0,vga,false); + outtextxy('I WISH I HAD SOME FORM OF ',10,165,9,0,vga,false); + outtextxy(' WEAPON.',10,175,9,0,vga,false); + pauseawhile(600); + clearkeyboardbuffer; + fade; + cls(0,vga); + blockmove(179,41,287,134,vaddr,10,10,vga); + for i:=0 to 5 do begin + star_x[i]:=37+random(70); + star_y[i]:=18+random(56); + putpixel(star_x[i],star_y[i],15,vga); + end; + outtextxy('WOW!! A GLASS-WALLED AIR-LOCK.',10,135,9,0,vga,false); + unfade; + pauseawhile(500); + clearkeyboardbuffer; + fillblock(10,135,300,185,0,vga); + outtextxy('NOW WHERE ARE WE GOING?',5,125,9,0,vga,false); + outtextxy('I GUESS THE PLANET EERM.',5,135,9,0,vga,false); + outtextxy('WHAT AN ODD NAME.',5,145,9,0,vga,false); + outtextxy('AND WHY AM I TALKING TO MYSELF?',5,155,10,0,vga,false); + outtextxy('ANYWAY I JUST WANT TO GO HOME',5,165,9,0,vga,false); + outtextxy(' AND SLEEP.',5,175,9,0,vga,false); + + clearkeyboardbuffer; + j:=0; + while (j<2400) and (not(keypressed)) do begin + inc(j); + for i:=0 to 5 do begin + putpixel(star_x[i],star_y[i],0,vga); + inc(star_x[i]); + if star_x[i]>107 then begin + star_x[i]:=37; + star_y[i]:=18+random(56); + end; + putpixel(star_x[i],star_y[i],15,vga); + end; + waitretrace; waitretrace;waitretrace; + + end; + + if keypressed then ch:=readkey; + + fade; + cls(0,vga); + unfade; +end; + + +procedure playthegame(lev:integer); + +begin + + fade; + cls(0,vga); + unfade; + cls(0,vaddr); + level:=lev; + if level=0 then begin + littleopener; + shields:=10; + score:=0; + inc(level); + end; + beginscore:=score; + beginshields:=shields; + loadshapes; + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'tbsobj.tb1'); + + hiscore:=showhiscore(false,false); + + + if level=1 then begin + setupsidebar; + y:=0; + {levelone}; + end; + if level=3 then begin + setupsidebar; + beginscore:=score; + beginshields:=shields; + littleopener3; + levelthree; + end; + + + clearkeyboardbuffer; + + coolbox(70,85,170,110,true,vga); + outtextxy('GAME OVER',84,94,4,7,vga,false); + for inte:=0 to 100 do waitretrace; + repeat until keypressed; tempch:=readkey; + clearkeyboardbuffer; + + hiscore:=showhiscore(false,false); + if score>lowscore then begin + coolbox(10,75,310,125,true,vga); + outtextxy('NEW HIGH SCORE!',90,80,12,7,vga,false); + outtextxy('ENTER YOUR NAME (10 Chars)',30,90,0,7,vga,false); + hiname:=grinput(110,110,10,11,7); + hiscore:=showhiscore(false,true); + end; + hiscore:=showhiscore(true,false); + fade; + cls(0,vga); +end; + + + +procedure shadowrite(st:string;x5,y5,forecol,backcol:integer); +begin + outtextxy(st,x5+1,y5+1,backcol,0,vga,false); + outtextxy(st,x5,y5,forecol,0,vga,false); +end; + + + +procedure QUIT; +label menu2; +begin + coolbox(90,75,230,125,true,vga); + 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; + gotoxy(1,23); + textcolor(7); + {if sbsound then shutdownsb1;} + shutdown; + halt; + menu2: + barpos:=6; +end; + + + + + +label picloader,menu; + +begin + setuptb1; + ReadConfigFile; + axel_und_carmen:=true; + {as_of_9-22-94} {change_back_10-6-94} {uh_oh 2-21-95} {gone for real long time 10-12-95} + {not carmen anymore, but Gus} + + randomize; + setupvirtual; + fade; + setmcga; + cls(0,vga); + grapherror:=loadpicsuperpacked(0,0,vga,true,false,'tbomb1.tb1'); + score:=500; + shields:=10; + playthegame(3); + unfade; + quit; + +end. \ No newline at end of file diff --git a/level4.tb1 b/level4.tb1 new file mode 100644 index 0000000..a688856 --- /dev/null +++ b/level4.tb1 @@ -0,0 +1,202 @@ +31 31 31 31 31 31 31 31 31 31 31 31 +5 7 5 5 5 5 5 5 5 5 7 5 +5 5 3 5 30 30 30 30 5 3 5 5 +5 5 5 5 4 4 4 4 5 5 5 5 +15 15 15 15 31 31 31 31 15 15 15 15 +17 17 17 17 16 16 16 16 17 17 17 17 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +7 9 9 9 9 9 9 9 9 9 9 7 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +12 9 9 9 12 9 9 12 9 9 9 12 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +2 2 18 19 0 0 0 0 19 18 2 2 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 19 0 0 0 0 +0 0 0 0 18 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 10 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 11 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 13 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 12 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +15 15 15 15 15 15 15 15 15 15 15 15 +0 0 0 0 0 0 0 0 0 0 0 0 +0 4 4 4 4 4 4 4 4 4 4 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 13 0 0 0 0 0 0 13 0 0 +0 0 0 13 0 0 0 0 13 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 0 0 0 14 0 0 14 0 0 0 14 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +11 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 11 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 11 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 11 0 14 14 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +31 31 31 31 31 31 31 31 31 31 31 31 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +10 10 10 10 10 10 10 10 10 10 10 10 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 11 11 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +12 0 0 0 0 0 0 0 0 0 0 12 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 13 0 0 18 18 18 18 0 0 13 14 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +19 19 0 0 0 0 0 0 0 0 19 19 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 13 0 0 0 0 0 0 0 0 13 0 +31 31 31 31 31 31 31 31 31 31 31 31 +5 5 5 5 5 5 5 5 5 5 5 5 +8 7 8 3 8 8 8 8 3 8 7 8 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 +9 13 9 9 9 9 9 9 9 9 13 9 +9 9 13 9 9 9 9 9 9 13 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 14 9 9 9 9 14 9 9 9 +9 9 9 9 14 9 9 14 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +9 9 9 9 9 9 9 9 9 9 9 9 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +15 15 15 15 15 15 15 15 15 15 15 15 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +19 0 0 0 0 0 0 0 0 0 0 19 +0 0 0 19 0 11 11 0 19 0 0 0 +0 12 0 0 0 0 0 0 0 0 12 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 0 0 0 14 0 0 0 14 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 14 0 0 0 14 0 0 0 14 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +13 0 13 0 0 0 0 13 0 13 0 13 +0 0 0 0 13 0 0 13 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +14 0 0 0 14 0 0 14 0 0 0 14 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +17 17 0 0 0 17 17 0 0 0 17 17 +0 0 0 14 0 10 0 0 14 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 14 0 0 0 0 0 0 0 0 14 0 +0 0 0 0 0 0 0 0 13 0 0 0 +0 0 0 0 0 0 0 0 0 0 10 0 +0 0 0 0 0 0 10 0 0 0 0 0 +11 0 0 0 0 0 0 0 0 0 0 11 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +16 13 16 16 16 16 16 16 16 16 13 16 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +15 5 5 5 5 5 5 5 5 5 5 15 +15 10 0 0 0 0 0 0 0 0 10 15 +15 0 10 10 3 3 3 3 10 10 0 15 +15 0 0 0 10 10 10 10 0 0 0 15 +15 0 10 0 10 4 4 10 0 10 0 15 +30 30 30 30 30 30 30 30 30 30 30 30 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/levelone.pas b/levelone.pas new file mode 100644 index 0000000..7109ffe --- /dev/null +++ b/levelone.pas @@ -0,0 +1,396 @@ + +Procedure levelone; +VAR loop1,loop2:integer; + ch,ch2:char; + shieldcol:integer; + saucersout:integer; + bullet1x,bullet1y,bullet2x,bullet2y,i,wave:integer; + bullet1out,bullet2out:boolean; + whichone,temp,temp2,whichwave:integer; + tempst:string; + what:byte; + itemp,jtemp:byte; + + +procedure waveincrease; +begin + inc(wave); + dec(saucersout); + if saucersout<0 then saucersout:=0; + if wave<6 then whichwave:=4; + if (wave>=6) and (wave<=12) then whichwave:=4; {1} + if (wave>12) and (wave<=20) then whichwave:=4; {2} + if (wave>20) and (wave<=30) then whichwave:=4; {3} + if (wave>30) and (wave<=36) then whichwave:=4; {2} + if (wave>36) and (wave<=45) then whichwave:=3; + if (wave>45) and (wave<=50) then whichwave:=1; + if (wave>50) and (wave<=60) then whichwave:=3; + if (wave>60) and (wave<=70) then whichwave:=2; + if (wave>70) and (wave<=75) then whichwave:=1; + if (wave>75) and (wave<=85) then whichwave:=3; + if (wave>85) and (wave<=95) then whichwave:=2; + if (wave>95) and (wave<=100) then whichwave:=1; + if (wave>100) then whichwave:=4; +end; + + + +BEGIN + wave:=0; + whichwave:=0; + pal(254,0,0,0); + shieldcol:=0; + shipx:=36; + shipadd:=0; + shipframe:=1; + shipspeed:=5; + ch:=#1; ch2:=#1; + for i:=0 to 4 do begin + enemy[i].exploding:=false; + enemy[i].out:=false; + end; + + bullet1out:=false; bullet2out:=false; + bullet1x:=0; bullet1y:=0; + bullet2x:=0; bullet2y:=0; + saucersout:=0; + + + flip(vaddr2,vaddr); + str(level,tempst); + fillblock(251,52,314,59,0,vaddr); + outtextxy(tempst,307,51,12,0,vaddr,false); + + cls(0,vaddr2); + for i:=0 to 50 do + putshape240(shapearray[12], + vaddr2,18,17,random(238),random(260)); + for i:=0 to 50 do + putshape240(shapearray[13], + vaddr2,18,17,random(238),random(260)); + {putshape240(shapearray[11], + vaddr2,18,17,10,20);} + + pal(254,shields*4,0,0); + howmuchscroll:=65; + +{**** GAME LOOP ****} +{*******************} + + Repeat + ch2:=#1; + ch:=#1; + dec(howmuchscroll); + if howmuchscroll<1 then begin + flip65(vaddr2,2925,vaddr3,0); + flip65(vaddr2,1950,vaddr2,2925); + flip65(vaddr2,975,vaddr2,1950); + flip65(vaddr2,0,vaddr2,975); + flip65(vaddr3,0,vaddr2,0); + howmuchscroll:=65; + end; + flip240(howmuchscroll); + +{***Collsion Check***} + for i:=0 to 4 do begin + if (enemy[i].out=true) then begin + if (bullet1out) then begin + if collision(bullet1x+3,bullet1y,bullet1x+17,bullet1y+13, + enemy[i].x,enemy[i].y,enemy[i].x+20, + enemy[i].y+20) then begin + {StartSound(Sound[1], 0, false);} + dec(enemy[i].hitsneeded); + if enemy[i].hitsneeded=0 then enemy[i].dead:=true + else enemy[i].dead:=false; + enemy[i].exploding:=true; + enemy[i].explodprogress:=0; + bullet1out:=false; + inc(score,10); + changescore; + end; + end; + if (bullet2out) then begin + if collision(bullet2x+3,bullet2y,bullet2x+17,bullet2y+13, + enemy[i].x,enemy[i].y,enemy[i].x+20, + enemy[i].y+20) then begin + {StartSound(Sound[1], 0, false);} + dec(enemy[i].hitsneeded); + if enemy[i].hitsneeded=0 then enemy[i].dead:=true + else enemy[i].dead:=false; + enemy[i].exploding:=true; + enemy[i].explodprogress:=0; + bullet2out:=false; + inc(score,10); + changescore; + end; + end; + end; + end; + +{***DO EXPLOSIONS***} + for i:=0 to 4 do begin + if enemy[i].exploding=true then begin + inc(enemy[i].explodprogress); + if enemy[i].explodprogress<=5 then + putshape(shapearray[enemy[i].explodprogress+15], + vaddr,18,17,enemy[i].x,enemy[i].y) + else + if enemy[i].dead then begin + enemy[i].out:=false; + enemy[i].exploding:=false; + waveincrease; + end + else enemy[i].exploding:=false; + end; + end; +{***MOVE BULLET***} + if bullet1out then begin + dec(bullet1y,5); + if bullet1y<5 then bullet1out:=false; + if bullet1out then putshape(shape1off,vaddr,18,17,bullet1x,bullet1y); + end; + if bullet2out then begin + dec(bullet2y,5); + if bullet2y<5 then bullet2out:=false; + if bullet2out then putshape(shape1off,vaddr,18,17,bullet2x,bullet2y); + end; +{***MOVE ENEMIES***} + for i:=0 to 4 do begin + if (enemy[i].out=true) and (enemy[i].dead=false) then begin + putshape(shapearray[enemy[i].kind],vaddr,18,17,enemy[i].x,enemy[i].y); + enemy[i].x:=enemy[i].x+enemy[i].xspeed; + {*Check Position*} + if enemy[i].boundarycheck=false then inc(enemy[i].y,enemy[i].yspeed); + + if (enemy[i].x<=enemy[i].minx) or (enemy[i].x>=enemy[i].maxx) then begin + enemy[i].xspeed:=-enemy[i].xspeed; + enemy[i].x:=enemy[i].x+enemy[i].xspeed; + inc(enemy[i].y,enemy[i].yspeed); + end; + {*Too Low*} + if enemy[i].y>179 then begin + enemy[i].out:=false; + + end; + if enemy[i].y>140 then begin + if collision(shipx,165, + shipx+48,194, + enemy[i].x,enemy[i].y, + enemy[i].x+17,enemy[i].y+15) + then begin + enemy[i].exploding:=true; + enemy[i].explodprogress:=0; + dec(shields); + fillblock(250,71,314,79,0,vaddr); + if shields>0 then begin + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + end; + end; + + end; + end; +{***START NEW WAVE***} + {**STANDARD**} + if (saucersout=0) and (whichwave=0) then begin + saucersout:=5; + what:=random(8)+3; + for temp:=0 to 4 do begin + enemy[temp].kind:=what; + enemy[temp].x:=0; + enemy[temp].y:=0; + enemy[temp].xspeed:=5; + enemy[temp].x:=temp*20; + enemy[temp].minx:=(temp*20); + enemy[temp].maxx:=(temp*20)+120; + enemy[temp].boundarycheck:=true; + enemy[temp].yspeed:=10; + enemy[temp].out:=true; + enemy[temp].exploding:=false; + enemy[temp].hitsneeded:=1; + enemy[temp].dead:=false; + end; + end; + {**FALLING STRAIGHT**} + if whichwave=3 then begin + for temp:=0 to 4 do + if enemy[temp].out=false then begin + enemy[temp].kind:=random(8)+3; + enemy[temp].x:=random(200)+1; + enemy[temp].y:=0; + enemy[temp].xspeed:=0; + enemy[temp].minx:=enemy[temp].x; + enemy[temp].maxx:=enemy[temp].x; + enemy[temp].boundarycheck:=true; + enemy[temp].yspeed:=5; + enemy[temp].out:=true; + enemy[temp].exploding:=false; + enemy[temp].hitsneeded:=1; + enemy[temp].dead:=false; + end; + end; + {**FALLING GRADUALLY SIDEWAYS**} + + if whichwave=2 then begin + for temp:=0 to 4 do + if enemy[temp].out=false then begin + enemy[temp].kind:=random(8)+3; + enemy[temp].y:=0; + enemy[temp].xspeed:=5; + enemy[temp].minx:=random(100); + enemy[temp].maxx:=random(100)+120; + enemy[temp].x:=enemy[temp].minx; + enemy[temp].boundarycheck:=false; + enemy[temp].yspeed:=1; + enemy[temp].out:=true; + enemy[temp].exploding:=false; + enemy[temp].hitsneeded:=1; + enemy[temp].dead:=false; + end; + end; + {**ZIG-ZAG**} + if (whichwave=1) and (saucersout=0) then begin + saucersout:=5; + whichone:=random(8)+3; + for temp:=0 to 4 do + if enemy[temp].out=false then begin + enemy[temp].kind:=whichone; + enemy[temp].y:=temp*10; + enemy[temp].xspeed:=5; + enemy[temp].minx:=0; + enemy[temp].maxx:=220; + enemy[temp].x:=temp*20; + enemy[temp].boundarycheck:=false; + enemy[temp].yspeed:=1; + enemy[temp].out:=true; + enemy[temp].exploding:=false; + enemy[temp].hitsneeded:=1; + enemy[temp].dead:=false; + end; + end; + if (whichwave=4) then begin + if saucersout=0 then begin + enemy[0].kind:=15; + enemy[1].kind:=15; + enemy[2].kind:=14; + for temp:=0 to 2 do begin + enemy[temp].x:=temp*20; + enemy[temp].y:=0; + enemy[temp].xspeed:=5; + enemy[temp].minx:=0; + enemy[temp].maxx:=220; + enemy[temp].boundarycheck:=true; + enemy[temp].yspeed:=0; + enemy[temp].out:=true; + enemy[temp].exploding:=false; + enemy[temp].hitsneeded:=3; + enemy[temp].dead:=false; + end; + saucersout:=5; + end; + if enemy[i].kind=15 then + for temp:=3 to 4 do begin + saucersout:=5; + if (enemy[temp].out=false) + and (enemy[temp-3].out=true) then begin + enemy[temp].kind:=random(8)+3; + enemy[temp].x:=enemy[temp-3].x; + enemy[temp].y:=20; + enemy[temp].xspeed:=0; + enemy[temp].minx:=enemy[temp].x; + enemy[temp].maxx:=enemy[temp].x; + enemy[temp].boundarycheck:=false; + enemy[temp].yspeed:=7; + enemy[temp].out:=true; + enemy[temp].exploding:=false; + enemy[temp].hitsneeded:=1; + enemy[temp].dead:=false; + end; + end; + end; +{***READ KEYBOARD***} + + if keypressed then BEGIN + ch:=readkey; + if ch=chr(0) then ch2:=readkey; + if ch2='M' then + if shipadd>=0 then inc(shipadd,3) else shipadd:=0; + if ch2='K' then + if shipadd<=0 then dec(shipadd,3) else shipadd:=0; + if ch2=';' then help; + if ch2='<' then begin + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('SAVE GAME',124,10,4,0,vga,false); + outtextxy('THIS WILL ONLY SAVE HOW YOU WERE',10,20,4,0,vga,false); + outtextxy('AT THE BEGINNING OF THE LEVEL!!!',10,30,4,0,vga,false); + findfirst('SG?.TB1',ANYFILE,filestuff); + ondisk:='ALREADY SAVED GAMES:'; + while doserror=0 do with filestuff do + begin + ondisk:=concat(ondisk,name[3]); + findnext(filestuff); + end; + if ondisk='' then ondisk:=concat(ondisk,'NONE'); + outtextxy(ondisk,10,50,4,0,vga,false); + outtextxy('SAVE WHICH GAME?',10,60,4,0,vga,false); + repeat until keypressed; + tempch:=readkey; + if (tempch>='0') and (tempch<='9') then begin + {$I-} + ondisk:=concat('SG',tempch,'.TB1'); + assign(savegamef,ondisk); + rewrite(savegamef); + {$I+} + If IOResult=0 then begin + writeln(savegamef,beginscore); + writeln(savegamef,level); + writeln(savegamef,beginshields); + close(savegamef); + outtextxy('GAME SAVED',120,150,15,0,vga,false); + end + else outtextxy('ERROR! GAME NOT SAVED!',102,150,15,0,vga,false); + outtextxy('PRESS ANY KEY...',96,180,4,0,vga,false); + repeat; until keypressed; tempch:=readkey; + end; + end; + end; + if (ch=' ') then begin + if (bullet1out=false) then begin + {if sbsound then StartSound(Sound[0], 0, false);} + bullet1out:=true; + bullet1x:=shipx+15; + bullet1y:=165; + putshape(shape1off,vaddr,18,17,bullet1x,bullet1y); + end + else + if (bullet2out=false) then begin + {if sbsound then StartSound(Sound[0], 0, false);} + bullet2out:=true; + bullet2x:=shipx+15; + bullet2y:=165; + putshape(shape1off,vaddr,18,17,bullet2x,bullet2y); + end; + end; + +{***MOVE SHIP***} + shipx:=shipx+shipadd; + if (shipx<1) then shipx:=1; + if (shipx>190) then shipx:=190; + CASE shipframe of + 1 : putshape (bigship1off,vaddr,48,29,shipx,165); + 3 : putshape (bigship3off,vaddr,48,29,shipx,165); + 2,4 : putshape (bigship2off,vaddr,48,29,shipx,165); + END; + inc(shipframe);; + if shipframe=5 then shipframe:=1; + waitretrace; + flip (vaddr,vga); + waitretrace; + until (ch=#27) or (shields<0); +END; diff --git a/moon2.tb1 b/moon2.tb1 new file mode 100644 index 0000000..6005f48 Binary files /dev/null and b/moon2.tb1 differ diff --git a/nvmwgrap.pas b/nvmwgrap.pas new file mode 100644 index 0000000..7ca65d5 --- /dev/null +++ b/nvmwgrap.pas @@ -0,0 +1,1072 @@ +unit NVMWgraph; {the new vmw graph unit} +{$X+} {$G+} +INTERFACE + +CONST VGA = $a000; + +var unfadered:array[0..255] of byte; + unfadeblue:array[0..255] of byte; + unfadegreen:array[0..255] of byte; + fontline:array[0..255] of byte; + charset:array[0..255,0..15] of byte; + charheight:byte; + fontseg,fontoff:word; + +Procedure SetMCGA; +Procedure SetText; { This procedure returns you to text mode. } +Procedure LoadFont(namest:string); +Procedure Cls (Col : Byte; Where:word); +Procedure Putpixel (X,Y : Integer; Col : Byte; where:word); +Procedure Putpixel240 (X,Y : Integer; Col : Byte; where:word); +function getpixel(x,y,where:word):byte; +Procedure Pal(Col,R,G,B : Byte); +Procedure GetPal(Col : Byte; Var R,G,B : Byte); +procedure WaitRetrace; +procedure flip(source,dest:Word); +procedure outtextlineover(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outtextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outtextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +procedure outsmalltextlineover(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outsmalltextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outsmalltextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +function sgn(a:real):integer; +procedure line(a,b,c,d,col:integer;where:word); +procedure horizontalline(FromX1,ToX2,AtY,col:integer;where:word); +procedure verticalline(FromY1,ToY2,AtX,col:integer;where:word); +procedure fade; +procedure unfade; +function SavePicSuperPacked(x1,y1,x2,y2,maxcolors:integer;where:word;filename:string):byte; +function LoadPicSuperPacked(x1,y1:integer;where:word;LoadPal,LoadPic:boolean;FileName:string):byte; +function oldloadpicsuperpacked(x1,y1:integer;where:word;fil:string):byte; +procedure box(x1,y1,x2,y2,col:integer;where:word); +procedure vdelay(howlong:integer); +procedure setupvmwgraph; +procedure setuptb1; + +{Errors for save and load: + 0=No error + 1=File Not Found + 2=Improper file type (No PAINTPROVX.XX header) + 3=Improper version + 4=Too Many Colors + 5=Picture Too Big + } + + +IMPLEMENTATION + +Procedure SetMCGA; { This procedure gets you into 320x200x256 mode. } +BEGIN + asm + mov ax,0013h + int 10h + end; +END; + +Procedure SetText; { This procedure returns you to text mode. } +BEGIN + asm + mov ax,0003h + int 10h + end; +END; + +Procedure LoadFont(namest:string); +var buff:array[0..15] of byte; + f:file; + i,fonty:integer; + +begin + assign(f,namest); + {$I-} + reset(f,16); + {$I+} + if Ioresult<>0 then writeln(#7); + if Ioresult<>0 then exit; + + fonty:=0; + while (not eof(F)) and (fonty<4097) do + begin + blockread(f,buff,1); + for i:=0 to 15 do + charset[fonty div 16,i]:=buff[i]; + inc(fonty,16); + end; + close(f); +end; + +Procedure Cls (Col : Byte; Where:word); + { This clears the screen to the specified color } +BEGIN + asm + push es + mov cx, 32000; + mov es,[where] + xor di,di + mov al,[col] + mov ah,al + rep stosw + pop es + End; +END; + +Procedure Putpixel (X,Y : Integer; Col : Byte; where:word); + { This puts a pixel on the screen by writing directly to memory. } +BEGIN + Asm + push ds + push es + mov ax,[where] + mov es,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} + xor al,al + mov ah, [Col] + mov es:[di],ah + pop es + pop ds + End; +END; + +Procedure Putpixel240 (X,Y : Integer; Col : Byte; where:word); +BEGIN + Asm + push ds + push es + mov ax,[where] + mov es,ax + mov bx,[y] + shl bx,4 + mov dx,bx {; and this again for later} + shl bx, 1 {; bx = dx} + add dx, bx {; dx = dx * 256} + shl bx,1 + add dx,bx + shl bx, 1 + add dx, bx + add dx,[x] {; bx = bx * 64} + {; dx = dx + bx (ie y*320)} + {; get back our x} + {; finalise location} + mov di, dx + {; es:di = where to go} + xor al,al + mov ah, [Col] + mov es:[di],ah + pop es + pop ds + End; +END; + +function getpixel(x,y,where:word):byte; +begin + getpixel:=mem[where:x+(y*320)]; +end; + +Procedure Pal(Col,R,G,B : Byte); + { This sets the Red, Green and Blue values of a certain color } +Begin + asm + mov dx,3c8h + mov al,[col] + out dx,al + inc dx + mov al,[r] + out dx,al + mov al,[g] + out dx,al + mov al,[b] + out dx,al + end; +End; + +procedure WaitRetrace; assembler; + { This waits for a vertical retrace to reduce snow on the screen } +label + l1, l2; +asm + mov dx,3DAh +l1: + in al,dx + and al,08h + jnz l1 +l2: + in al,dx + and al,08h + jz l2 +end; + +Procedure GetPal(Col : Byte; Var R,G,B : Byte); + { This gets the Red, Green and Blue values of a certain color } +Var + rr,gg,bb : Byte; +Begin + asm + mov dx,3c7h + mov al,col + out dx,al + + add dx,2 + + in al,dx + mov [rr],al + in al,dx + mov [gg],al + in al,dx + mov [bb],al + end; + r := rr; + g := gg; + b := bb; +end; + + + + +procedure flip(source,dest:Word); + { This copies the entire screen at "source" to destination } +begin + asm + push ds + mov ax, [Dest] + mov es, ax + mov ax, [Source] + mov ds, ax + xor si, si + xor di, di + mov cx, 32000 + rep movsw + pop ds + end; +end; + +procedure outtextlineover(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[ord(st[(i*2)]),line]; + fontline[((i-1)*2)+1]:=charset[ord(st[(i*2)-1]),line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov dl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] +gus1: + cmp bx,02 + jnge gus4 + mov cx,16 + lodsw + jmp gus5 +gus4: + mov cx,8 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + mov al,dl + jmp gus8 +gus7: + mov al,dh +gus8: + xor ah,ah + stosb + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + + + +procedure outtextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus6,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[ord(st[(i*2)]),line]; + fontline[((i-1)*2)+1]:=charset[ord(st[(i*2)-1]),line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov bl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] + +gus1: + + cmp bx,02 + + jnge gus4 + mov cx,16 + lodsw + jmp gus5 +gus4: + mov cx,8 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + inc di + jmp gus8 +gus7: + mov al,dh + xor ah,ah + stosb +gus8: + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + + +procedure outtextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +label l0105; +var l,len,i,xadd,yadd,lineon:integer; + n,k,o,min,max,qwerty:byte; +begin + for lineon:=0 to (charheight-1) do + if overwrite then + outtextlineover(st,x,y+lineon,col,background,lineon,where) + else + outtextline(st,x,y+lineon,col,background,lineon,where); + +end; + + + +procedure OutSmallTextLineOver(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[(ord(st[(i*2)]))+128,line]; + fontline[((i-1)*2)+1]:=charset[(ord(st[(i*2)-1]))+128,line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov dl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] +gus1: + xor ax,ax + cmp bx,02 + jnge gus4 + mov cx,10 + lodsb + push bx + mov bl,al + xor bh,bh + lodsb + shl ax,5 + add ax,bx + shl ax,3 + pop bx + jmp gus5 +gus4: + mov cx,5 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + mov al,dl + jmp gus8 +gus7: + mov al,dh +gus8: + xor ah,ah + stosb + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + +procedure outsmalltextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus6,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[(ord(st[(i*2)]))+128,line]; + fontline[((i-1)*2)+1]:=charset[(ord(st[(i*2)-1]))+128,line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov bl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] + +gus1: + xor ax,ax + cmp bx,02 + jnge gus4 + mov cx,10 + lodsb + push bx + mov bl,al + xor bh,bh + lodsb + shl ax,5 + add ax,bx + shl ax,3 + pop bx + jmp gus5 +gus4: + mov cx,5 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + inc di + jmp gus8 +gus7: + mov al,dh + xor ah,ah + stosb +gus8: + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + + +procedure outsmalltextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +label l0105; +var l,len,i,xadd,yadd,lineon:integer; + n,k,o,min,max,qwerty:byte; +begin + for lineon:=0 to 4 do + if overwrite then + outsmalltextlineover(st,x,y+lineon,col,background,lineon,where) + else + outsmalltextline(st,x,y+lineon,col,background,lineon,where); + +end; + + + +function sgn(a:real):integer; +begin + if a>0 then sgn:=+1; + if a<0 then sgn:=-1; + if a=0 then sgn:=0; +end; + +procedure line(a,b,c,d,col:integer;where:word); +var u,s,v,d1x,d1y,d2x,d2y,m,n:real; + i:integer; +begin + u:= c - a; + v:= d - b; + d1x:= SGN(u); + d1y:= SGN(v); + d2x:= SGN(u); + d2y:= 0; + m:= ABS(u); + n := ABS(v); + IF NOT (M>N) then + BEGIN + d2x := 0 ; + d2y := SGN(v); + m := ABS(v); + n := ABS(u); + END; + s := INT(m / 2); + FOR i := 0 TO round(m) DO + BEGIN + putpixel(a,b,col,where); + s := s + n; + IF not (s0 then dec(r); + if g>0 then dec(g); + if b>0 then dec(b); + pal(j,r,g,b); + end; + end; +end; + +procedure unfade; +var i,j:integer; + r,g,b:byte; +begin + for i:=0 to 63 do begin + for j:=0 to 255 do begin + getpal(j,r,g,b); + if r0 then savepicsuperpacked:=1; + if Ioresult<>0 then exit; + for i:=0 to 3 do begin + buffer[0]:=ord(header[(i*3)+1]); + buffer[1]:=ord(header[(i*3)+2]); + buffer[2]:=ord(header[(i*3)+3]); + blockwrite(f,buffer,1); + end; + + for i:=0 to (maxcolors-1) do + begin + getpal(i,buffer[0],buffer[1],buffer[2]); + blockwrite(f,buffer,1); + end; + + xsize:=abs(x2-x1); + ysize:=abs(y2-y1); + integer23bytes(xsize,ysize); + integer23bytes(maxcolors,0); + + for y:=y1 to y2 do begin + oldcol:=getpixel(x1,y,where); numacross:=1; + for x:=(x1+1) to x2 do begin + col:=getpixel(x,y,where); + if col=oldcol then inc(numacross) + else begin + integer23bytes(oldcol,numacross); + numacross:=1; + end; + oldcol:=col; + end; + integer23bytes(col,numacross); + end; + close(f); +end; + +function LoadPicSuperPacked(x1,y1:integer;where:word;LoadPal,LoadPic:boolean;FileName:string):byte; + +var buffer:array[0..299] of byte; + result,buffpointer:integer; + f:file; + col,x,y,xsize,ysize,i,oldcol, + maxcolors,tempint1,tempint2,numacross:integer; + header:string; + lastread:boolean; + tempbyte,r,g,b:byte; + +procedure sixbytes2twoint; +var temp1,temp2,temp3:byte; + int1,int2:integer; +begin + temp1:=buffer[buffpointer]; + temp2:=buffer[buffpointer+1]; + temp3:=buffer[buffpointer+2]; + inc(buffpointer,3); + if (buffpointer>=result) then + if (result=300) then begin + blockread(f,buffer,300,result); + buffpointer:=0; + end + else lastread:=true; + asm + mov ah,temp1 + mov al,temp2 + shr ax,4 + mov int1,ax + mov ah,temp2 + mov al,temp3 + shl ah,4 + shr ah,4 + mov int2,ax + end; + tempint1:=int1; + tempint2:=int2; +end; + + + +begin + lastread:=false; + loadpicsuperpacked:=0; + header:=''; + buffpointer:=0; + assign(f,filename); + {$I-} + reset(f,1); + {$I+} + if IOresult<>0 then LoadPicSuperPacked:=1; + if IOresult<>0 then exit; + + blockread(f,buffer,300,result); + + for i:=1 to 9 do header:=concat(header,chr(buffer[i-1])); + + + if header<> 'PAINTPROV' then LoadPicSuperPacked:=2; + if header<> 'PAINTPROV' then exit; + + header:=''; + + header:=concat(header,chr(buffer[9]),chr(buffer[10]),chr(buffer[11])); + + if header<>'5.0' then LoadPicSuperPacked:=3; + if header<>'5.0' then exit; + buffpointer:=12; + + for i:=0 to 255 do begin + r:=buffer[buffpointer]; + g:=buffer[buffpointer+1]; + b:=buffer[buffpointer+2]; + inc(buffpointer,3); + if (buffpointer>=result) then + if (result=300) then begin + blockread(f,buffer,300,result); + buffpointer:=0; + end + else + + lastread:=true; + if loadpal then pal(i,r,g,b); + end; + + + + sixbytes2twoint; + xsize:=tempint1; + ysize:=tempint2; + sixbytes2twoint; + maxcolors:=tempint1; + + {if maxcolors>256 then error=4} + + x:=x1; + y:=y1; +if loadpic=true then begin + while (lastread=false) do begin + sixbytes2twoint; + col:=tempint1; + numacross:=tempint2; + horizontalline(x,x+numacross,y,col,where); + { for i:=x to (x+numacross) do putpixel(i,y,col,where);} + if (x+numacross)>xsize+x1 then begin + inc(y); + x:=x1; + numacross:=0; + end; + x:=x+numacross; + end; +end; +close(f); +end; + +function oldloadpicsuperpacked(x1,y1:integer;where:word;fil:string):byte; + +var buffer:array[0..255] of byte; + f:file; + col,x,y,xsize,ysize,buffpointer,i,oldcol, + tempint1,tempint2,numacross:integer; + header:string; + lastread,done:boolean; + temp7:string; + +procedure readbuffer; +begin + blockread(f,buffer,1); + if buffer[255]=90 then lastread:=true; +end; + +procedure sixbytes2twoint; +var temp1,temp2,temp3:byte; + int1,int2:integer; +begin + if buffpointer>=253 then begin + readbuffer; + buffpointer:=0; + end; + if not done then begin + temp1:=buffer[buffpointer]; + temp2:=buffer[buffpointer+1]; + temp3:=buffer[buffpointer+2]; + if (temp1=255) and (temp2=255) and (temp3=255) then + done:=true; + inc(buffpointer,3); + asm + mov ah,temp1 + mov al,temp2 + shr ax,1 + shr ax,1 + shr ax,1 + shr ax,1 + mov int1,ax + mov ah,temp2 + mov al,temp3 + shl ah,4 + shr ah,4 + mov int2,ax + end; + tempint1:=int1; + tempint2:=int2; +end; +end; +label ender; +begin + done:=false; + header:='PAINTPROV4.00'; + assign(f,fil); + reset(f,256); + readbuffer; + buffpointer:=0; + temp7:=header; + for i:=1 to 13 do temp7[i]:=chr(buffer[i-1]); + if temp7<>header then begin + oldloadpicsuperpacked:=01; + exit; + end; + buffpointer:=13; + sixbytes2twoint; + xsize:=tempint1; + ysize:=tempint2; + sixbytes2twoint; + + x:=x1; + y:=y1; +repeat + sixbytes2twoint; + if done then goto ender; + col:=tempint1; + numacross:=tempint2; + for i:=x to (x+numacross) do putpixel(i,y,col,where); + if (x+numacross)>xsize+x1 then begin + inc(y); + x:=x1; + numacross:=0; + end; + x:=x+numacross; + ender: +until done=true; +close(f); +end; + + + + +procedure box(x1,y1,x2,y2,col:integer;where:word); +begin + line(x1,y1,x1,y2,col,where); + horizontalline(x1,x2,y2,col,where); + line(x2,y2,x2,y1,col,where); + horizontalline(x1,x2,y1,col,where); +end; + +procedure vdelay(howlong:integer); +var i:integer; +begin + for i:=1 to howlong do waitretrace; +end; + +procedure setupvmwgraph; +begin + loadfont('8x8font.tb1'); + charheight:=8; + fontseg:=seg(fontline[0]); + fontoff:=ofs(fontline[0]); +end; + +procedure setuptb1; +begin + loadfont('tbfont.tb1'); + charheight:=8; + fontseg:=seg(fontline[0]); + fontoff:=ofs(fontline[0]); +end; + +begin +end. diff --git a/pal.tb1 b/pal.tb1 new file mode 100644 index 0000000..627a99e --- /dev/null +++ b/pal.tb1 @@ -0,0 +1,768 @@ +0 +0 +0 +0 +0 +42 +0 +42 +0 +0 +42 +42 +42 +0 +0 +42 +0 +42 +42 +21 +0 +42 +42 +42 +21 +21 +21 +21 +21 +63 +21 +63 +21 +21 +63 +63 +63 +21 +21 +63 +21 +63 +63 +63 +21 +63 +63 +63 +59 +59 +59 +55 +55 +55 +52 +52 +52 +48 +48 +48 +45 +45 +45 +42 +42 +42 +38 +38 +38 +35 +35 +35 +31 +31 +31 +28 +28 +28 +25 +25 +25 +21 +21 +21 +18 +18 +18 +14 +14 +14 +11 +11 +11 +8 +8 +8 +63 +0 +0 +59 +0 +0 +56 +0 +0 +53 +0 +0 +50 +0 +0 +47 +0 +0 +44 +0 +0 +41 +0 +0 +38 +0 +0 +34 +0 +0 +31 +0 +0 +28 +0 +0 +25 +0 +0 +22 +0 +0 +19 +0 +0 +16 +0 +0 +63 +54 +54 +63 +46 +46 +63 +39 +39 +63 +31 +31 +63 +23 +23 +63 +16 +16 +63 +8 +8 +63 +0 +0 +63 +42 +23 +63 +38 +16 +63 +34 +8 +63 +30 +0 +57 +27 +0 +51 +24 +0 +45 +21 +0 +39 +19 +0 +63 +63 +54 +63 +63 +46 +63 +63 +39 +63 +63 +31 +63 +62 +23 +63 +61 +16 +63 +61 +8 +63 +61 +0 +57 +54 +0 +51 +49 +0 +45 +43 +0 +39 +39 +0 +33 +33 +0 +28 +27 +0 +22 +21 +0 +16 +16 +0 +52 +63 +23 +49 +63 +16 +45 +63 +8 +40 +63 +0 +36 +57 +0 +32 +51 +0 +29 +45 +0 +24 +39 +0 +54 +63 +54 +47 +63 +46 +39 +63 +39 +32 +63 +31 +24 +63 +23 +16 +63 +16 +8 +63 +8 +0 +63 +0 +0 +63 +0 +0 +59 +0 +0 +56 +0 +0 +53 +0 +1 +50 +0 +1 +47 +0 +1 +44 +0 +1 +41 +0 +1 +38 +0 +1 +34 +0 +1 +31 +0 +1 +28 +0 +1 +25 +0 +1 +22 +0 +1 +19 +0 +1 +16 +0 +54 +63 +63 +46 +63 +63 +39 +63 +63 +31 +63 +62 +23 +63 +63 +16 +63 +63 +8 +63 +63 +0 +63 +63 +0 +57 +57 +0 +51 +51 +0 +45 +45 +0 +39 +39 +0 +33 +33 +0 +28 +28 +0 +22 +22 +0 +16 +16 +23 +47 +63 +16 +44 +63 +8 +42 +63 +0 +39 +63 +0 +35 +57 +0 +31 +51 +0 +27 +45 +0 +23 +39 +54 +54 +63 +46 +47 +63 +39 +39 +63 +31 +32 +63 +23 +24 +63 +16 +16 +63 +8 +9 +63 +0 +1 +63 +0 +0 +63 +0 +0 +59 +0 +0 +56 +0 +0 +53 +0 +0 +50 +0 +0 +47 +0 +0 +44 +0 +0 +41 +0 +0 +38 +0 +0 +34 +0 +0 +31 +0 +0 +28 +0 +0 +25 +0 +0 +22 +0 +0 +19 +0 +0 +16 +60 +54 +63 +57 +46 +63 +54 +39 +63 +52 +31 +63 +50 +23 +63 +47 +16 +63 +45 +8 +63 +42 +0 +63 +38 +0 +57 +32 +0 +51 +29 +0 +45 +24 +0 +39 +20 +0 +33 +17 +0 +28 +13 +0 +22 +10 +0 +16 +63 +54 +63 +63 +46 +63 +63 +39 +63 +63 +31 +63 +63 +23 +63 +63 +16 +63 +63 +8 +63 +63 +0 +63 +56 +0 +57 +50 +0 +51 +45 +0 +45 +39 +0 +39 +33 +0 +33 +27 +0 +28 +22 +0 +22 +16 +0 +16 +63 +58 +55 +63 +56 +52 +63 +54 +49 +63 +53 +47 +63 +51 +44 +63 +49 +41 +63 +47 +39 +63 +46 +36 +63 +44 +32 +63 +41 +28 +63 +39 +24 +60 +37 +23 +58 +35 +22 +55 +34 +21 +52 +32 +20 +50 +31 +19 +47 +30 +18 +45 +28 +17 +42 +26 +16 +40 +25 +15 +39 +24 +14 +36 +23 +13 +34 +22 +12 +32 +20 +11 +29 +19 +10 +27 +18 +9 +23 +16 +8 +21 +15 +7 +18 +14 +6 +16 +12 +6 +14 +11 +5 +10 +8 +3 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +49 +10 +10 +49 +19 +10 +49 +29 +10 +49 +39 +10 +49 +49 +10 +39 +49 +10 +29 +49 +10 +19 +49 +10 +10 +49 +12 +10 +49 +23 +10 +49 +34 +10 +49 +45 +10 +42 +49 +10 +31 +49 +10 +20 +49 +11 +10 +49 +22 +10 +49 +33 +10 +49 +44 +10 +49 +49 +10 +43 +49 +10 +32 +49 +10 +21 +49 +10 +10 +63 +63 +63 diff --git a/register.tb1 b/register.tb1 new file mode 100644 index 0000000..05d2f92 Binary files /dev/null and b/register.tb1 differ diff --git a/sg1.tb1 b/sg1.tb1 new file mode 100644 index 0000000..bb10bcc --- /dev/null +++ b/sg1.tb1 @@ -0,0 +1,4 @@ +200 +1 +5 + diff --git a/sg2.tb1 b/sg2.tb1 new file mode 100644 index 0000000..5389852 --- /dev/null +++ b/sg2.tb1 @@ -0,0 +1,3 @@ +1140 +2 +7 diff --git a/sg3.tb1 b/sg3.tb1 new file mode 100644 index 0000000..4bfc203 --- /dev/null +++ b/sg3.tb1 @@ -0,0 +1,3 @@ +1140 +3 +7 diff --git a/sg4.tb1 b/sg4.tb1 new file mode 100644 index 0000000..f55852c --- /dev/null +++ b/sg4.tb1 @@ -0,0 +1,3 @@ +1140 +4 +7 diff --git a/sg5.tb1 b/sg5.tb1 new file mode 100644 index 0000000..fe3a5a4 --- /dev/null +++ b/sg5.tb1 @@ -0,0 +1,3 @@ +500 +2 +10 diff --git a/sg6.tb1 b/sg6.tb1 new file mode 100644 index 0000000..03a443c --- /dev/null +++ b/sg6.tb1 @@ -0,0 +1,3 @@ +0 +1 +10 diff --git a/sg8.tb1 b/sg8.tb1 new file mode 100644 index 0000000..d7cc228 --- /dev/null +++ b/sg8.tb1 @@ -0,0 +1,3 @@ +200 +1 +5 diff --git a/sg9.tb1 b/sg9.tb1 new file mode 100644 index 0000000..9df35ee --- /dev/null +++ b/sg9.tb1 @@ -0,0 +1,3 @@ +1180 +2 +8 diff --git a/ships.tb1 b/ships.tb1 new file mode 100644 index 0000000..ba8cbf4 Binary files /dev/null and b/ships.tb1 differ diff --git a/ships1.tb1 b/ships1.tb1 new file mode 100644 index 0000000..7395569 Binary files /dev/null and b/ships1.tb1 differ diff --git a/smix.pas b/smix.pas new file mode 100644 index 0000000..3e837e4 --- /dev/null +++ b/smix.pas @@ -0,0 +1,996 @@ +{ SMIX is Copyright 1995 by Ethan Brodsky. All rights reserved. } + +unit SMix; {Version 1.27} + {$X+} {$G+} {$R-} + interface + const + BlockLength = 512; {Size of digitized sound block } + LoadChunkSize = 2048; {Chunk size used for loading sounds from disk} + Voices = 8; {Number of available voices } + SamplingRate = 22025; {Sampling rate for output } + var + test8086:byte; + type + PSound = ^TSound; + TSound = + record + XMSHandle: word; + StartOfs: LongInt; + SoundSize: LongInt; + end; + function InitSB(BaseIO: word; IRQ: byte; DMA, DMA16: byte): boolean; + {Initializes control parameters, resets DSP, and installs int. handler } + { Parameters: (Can be found using GetSettings procedure in Detect) } + { BaseIO: Sound card base IO address } + { IRQ: Sound card IRQ setting } + { DMA: Sound card 8-bit DMA channel } + { DMA16: Sound card 16-bit DMA channel (0 if not supported) } + { Returns: } + { TRUE: Sound card successfully initialized (Maybe) } + { FALSE: Sound card could not be initialized } + procedure ShutdownSB5; + {Removes interrupt handler and resets DSP } + + procedure InitMixing; + {Allocates internal buffers and starts digitized sound output } + procedure ShutdownMixing; + {Deallocates internal buffers and stops digitized sound output } + + function InitXMS: boolean; + {Attempts to intialize extended memory } + { Returns: } + { TRUE: Extended memory successfully initialized } + { FALSE: Extended memory could not be initialized } + function GetFreeXMS: word; + {Returns amount of free XMS memory (In kilobytes) } + + procedure InitSharing; + {Allocates an EMB that all sounds are stored in. This preserves EMB } + {handles, which are a scarce resource. Call this on initialization and} + {all sounds will automatically be stored in one EMB. Call LoadSound as} + {usual to allocate a sound, but FreeSound only deallocates the sound } + {data structure. Call ShutdownSharing before program termination to } + {free allocated extended memory. } + procedure ShutdownSharing; + {Shuts down EMB sharing and frees all allocated extended memory } + + procedure OpenSoundResourceFile(FileName: string); + {Call this to open a resource file for loading sounds. After this has } + {been called, the Key parameter in the LoadSound function is used as a } + {resource key to locate the sound data in this file. } + { Parameters: } + { FileName: File name of resource file } + procedure CloseSoundResourceFile; + {Close sound resource file. If you have called this, the Key parameter} + {will act as a filename instead of a resource key. } + + procedure LoadSound(var Sound: PSound; Key: string); + {Allocates an extended memory block and loads a sound from a file } + { Parameters: } + { Sound: Unallocated pointer to sound data structure } + { Key: If a resource file has been opened then key is a resource } + { identifier. Use the same ID as you used for SNDLIB. } + { If a resource file has not been opened, then key is the } + { filename to load the sound data from. } + procedure FreeSound(var Sound: PSound); + {Deallocates extended memory and destroys sound data structure } + { Parameters: } + { Sound: Unallocated pointer to sound data structure } + + procedure StartSound(Sound: PSound; Index: byte; Loop: boolean); + {Starts playing a sound } + { Parameters: } + { Sound: Pointer to sound data structure } + { Index: A number to keep track of the sound with (Used to stop it)} + { Loop: Indicates whether the sound should be continuously looped } + procedure StopSound(Index: byte); + {Stops playing sound } + { Parameters: } + { Index: Index of sound to stop (All with given index are stopped) } + function SoundPlaying(Index: byte): boolean; + {Checks if a sound is still playing } + { Parameters: } + { Index: Index used when the sound was started } + { Returns: } + { TRUE At least oen sound with the specified index is playing } + { FALSE No sounds with the specified index are playing } + + var + IntCount : LongInt; {Number of sound interrupts that have occured } + DSPVersion : real; {Contains the version of the installed DSP chip } + AutoInit : boolean; {Tells Auto-initialized DMA transfers are in use} + SixteenBit : boolean; {Tells whether 16-bit sound output is occuring } + VoiceCount : byte; {Number of voices currently in use } + + implementation + uses + CRT, + DOS, + XMS; + const + BufferLength = BlockLength * 2; + var + ResetPort : word; + ReadPort : word; + WritePort : word; + PollPort : word; + AckPort : word; + + PICRotatePort : word; + PICMaskPort : word; + + DMAMaskPort : word; + DMAClrPtrPort : word; + DMAModePort : word; + DMABaseAddrPort : word; + DMACountPort : word; + DMAPagePort : word; + + IRQStartMask : byte; + IRQStopMask : byte; + IRQIntVector : byte; + + DMAStartMask : byte; + DMAStopMask : byte; + DMAMode : byte; + DMALength : word; + + OldIntVector : pointer; + OldExitProc : pointer; + + HandlerInstalled : boolean; + + procedure WriteDSP(Value: byte); + begin + repeat until (Port[WritePort] and $80) = 0; + Port[WritePort] := Value; + end; + + function ReadDSP: byte; + begin + repeat until (Port[PollPort] and $80) <> 0; + ReadDSP := Port[ReadPort]; + end; + + function ResetDSP: boolean; + var + i: byte; + begin + Port[ResetPort] := 1; + Delay(1); {One millisecond} + Port[ResetPort] := 0; + i := 100; + while (ReadDSP <> $AA) and (i > 0) do Dec(i); + if i > 0 + then ResetDSP := true + else ResetDSP := false; + end; + + procedure InstallHandler; forward; + procedure UninstallHandler; forward; + + procedure MixExitProc; far; forward; + + function InitSB(BaseIO: word; IRQ: byte; DMA, DMA16: byte): boolean; + begin + {Sound card IO ports} + ResetPort := BaseIO + $6; + ReadPort := BaseIO + $A; + WritePort := BaseIO + $C; + PollPort := BaseIO + $E; + + {Reset DSP, get version, and pick output mode} + if not(ResetDSP) + then + begin + InitSB := false; + Exit; + end; + WriteDSP($E1); {Get DSP version number} + DSPVersion := ReadDSP; DSPVersion := DSPVersion + ReadDSP/100; + AutoInit := DSPVersion > 2.0; + SixteenBit := (DSPVersion > 4.0) and (DMA16 <> $FF) and (DMA16 > 3); + + {Compute interrupt ports and parameters} + if IRQ <= 7 + then + begin + IRQIntVector := $08+IRQ; + PICMaskPort := $21; + end + else + begin + IRQIntVector := $70+IRQ-8; + PICMaskPort := $A1; + end; + IRQStopMask := 1 shl (IRQ mod 8); + IRQStartMask := not(IRQStopMask); + + {Compute DMA ports and parameters} + if SixteenBit + then {Sixteen bit} + begin + DMAMaskPort := $D4; + DMAClrPtrPort := $D8; + DMAModePort := $D6; + DMABaseAddrPort := $C0 + 4*(DMA16-4); + DMACountPort := $C2 + 4*(DMA16-4); + case DMA16 + of + 5: DMAPagePort := $8B; + 6: DMAPagePort := $89; + 7: DMAPagePort := $8A; + end; + DMAStopMask := DMA16-4 + $04; {000001xx} + DMAStartMask := DMA16-4 + $00; {000000xx} + DMAMode := DMA16-4 + $58; {010110xx} + AckPort := BaseIO + $F; + end + else {Eight bit} + begin + DMAMaskPort := $0A; + DMAClrPtrPort := $0C; + DMAModePort := $0B; + DMABaseAddrPort := $00 + 2*DMA; + DMACountPort := $01 + 2*DMA; + case DMA + of + 0: DMAPagePort := $87; + 1: DMAPagePort := $83; + 2: DMAPagePort := $81; + 3: DMAPagePort := $82; + end; + DMAStopMask := DMA + $04; {000001xx} + DMAStartMask := DMA + $00; {000000xx} + if AutoInit + then DMAMode := DMA + $58 {010110xx} + else DMAMode := DMA + $48; {010010xx} + AckPort := BaseIO + $E; + end; + if AutoInit + then DMALength := BufferLength + else DMALength := BlockLength; + InstallHandler; + + OldExitProc := ExitProc; + ExitProc := @MixExitProc; + InitSB := true; + end; + + procedure ShutdownSB5; + begin + if HandlerInstalled + then UninstallHandler; + ResetDSP; + end; + + function InitXMS: boolean; + begin + InitXMS := true; + if not(XMSInstalled) + then InitXMS := false + else XMSInit; + end; + function GetFreeXMS: word; + begin + GetFreeXMS := XMSGetFreeMem; + end; + + {Voice control} + type + PVoice = ^TVoice; + TVoice = + record + Sound: PSound; + Index: byte; + CurPos: LongInt; + Loop: boolean; + end; + var + VoiceInUse: array[0..Voices-1] of boolean; + Voice: array[0..Voices-1] of TVoice; + CurBlock: byte; + {Sound buffer} + var + SoundBlock: array[1..BlockLength+1] of ShortInt; + {The length of XMS copies under HIMEM.SYS must be a mutiple } + {of two. If the sound data ends in mid-block, it may not be } + {possible to round up without corrupting memory. Therefore, } + {the copy buffer has been extended by one byte to eliminate } + {this problem. } + + {Mixing buffers} + type + PMixingBlock = ^TMixingBlock; + TMixingBlock = array[1..BlockLength] of integer; + var + MixingBlock : TMixingBlock; + + {Output buffers} + type {8-bit} + POut8Block = ^TOut8Block; + TOut8Block = array[1..BlockLength] of byte; + POut8Buffer = ^TOut8Buffer; + TOut8Buffer = array[1..2] of TOut8Block; + type {16-bit} + POut16Block = ^TOut16Block; + TOut16Block = array[1..BlockLength] of integer; + POut16Buffer = ^TOut16Buffer; + TOut16Buffer = array[1..2] of TOut16Block; + var + OutMemArea : pointer; + Out8Buffer : POut8Buffer; + Out16Buffer : POut16Buffer; + var + BlockPtr : array[1..2] of pointer; + CurBlockPtr : pointer; + var + {For auto-initialized transfers (Whole buffer)} + BufferAddr : LongInt; + BufferPage : byte; + BufferOfs : word; + {For single-cycle transfers (One block at a time)} + BlockAddr : array[1..2] of LongInt; + BlockPage : array[1..2] of byte; + BlockOfs : array[1..2] of word; + + {Clipping for 8-bit output} + var + Clip8 : array[-128*Voices..128*Voices] of byte; + + function TimeConstant(Rate: word): byte; + begin + TimeConstant := 256 - (1000000 div Rate); + end; + + procedure StartDAC; + begin + Port[DMAMaskPort] := DMAStopMask; + Port[DMAClrPtrPort] := $00; + Port[DMAModePort] := DMAMode; + Port[DMABaseAddrPort] := Lo(BufferOfs); + Port[DMABaseAddrPort] := Hi(BufferOfs); + Port[DMACountPort] := Lo(DMALength-1); + Port[DMACountPort] := Hi(DMALength-1); + Port[DMAPagePort] := BufferPage; + Port[DMAMaskPort] := DMAStartMask; + + if SixteenBit + then {Sixteen bit: SB16 and up (DSP 4.xx)} + begin + WriteDSP($41); {Set digitized sound output sampling rate} + WriteDSP(Hi(SamplingRate)); + WriteDSP(Lo(SamplingRate)); + WriteDSP($B6); {16-bit DMA command: D/A, Auto-Init, FIFO} + WriteDSP($10); {16-bit DMA mode: Signed Mono } + WriteDSP(Lo(BlockLength - 1)); + WriteDSP(Hi(BlockLength - 1)); + end + else {Eight bit} + begin + WriteDSP($D1); {Turn on speaker } + WriteDSP($40); {Set digitized sound time constant } + WriteDSP(TimeConstant(SamplingRate)); + if AutoInit + then {Eight bit auto-initialized: SBPro and up (DSP 2.00+)} + begin + WriteDSP($48); {Set DSP block transfer size } + WriteDSP(Lo(BlockLength - 1)); + WriteDSP(Hi(BlockLength - 1)); + WriteDSP($1C); {8-bit auto-init DMA mono sound output } + end + else {Eight bit single-cycle: Sound Blaster (DSP 1.xx+)} + begin + WriteDSP($14); {8-bit single-cycle DMA sound output } + WriteDSP(Lo(BlockLength - 1)); + WriteDSP(Hi(BlockLength - 1)); + end; + end; + end; + + procedure StopDAC; + begin + if SixteenBit + then {Sixteen bit} + begin + WriteDSP($D5); {Pause 16-bit DMA sound I/O } + end + else {Eight bit} + begin + WriteDSP($D0); {Pause 8-bit DMA mode sound I/O } + WriteDSP($D3); {Turn off speaker } + end; + Port[DMAMaskPort] := DMAStopMask; + end; + + {Setup for storing all sounds in one extended memory block (Saves handles)} + var + SharedEMB : boolean; + SharedHandle : word; + SharedSize : LongInt; + procedure InitSharing; + begin + SharedEMB := true; + SharedSize := 0; + XMSAllocate(SharedHandle, SharedSize); + end; + procedure ShutdownSharing; + begin + if SharedEMB then XMSFree(SharedHandle); + SharedEMB := false; + end; + + {Setup for sound resource files} + var + ResourceFile : boolean; + ResourceFilename : string; + + procedure OpenSoundResourceFile(FileName: string); + begin + ResourceFile := true; + ResourceFilename := FileName; + end; + + procedure CloseSoundResourceFile; + begin + ResourceFile := false; + ResourceFilename := ''; + end; + + type + TKey = array[1..8] of char; + + var + SoundFile : file; + SoundSize : LongInt; + + function MatchingKeys(a, b: TKey): boolean; + var + i: integer; + begin + MatchingKeys := true; + + for i := 1 to 8 do + if a <> b + then + MatchingKeys := false; + end; + + procedure GetSoundFile(Key: string); + type + Resource = + record + Key: TKey; + Start: LongInt; + Size: LongInt; + end; + var + NumSounds: integer; + ResKey: TKey; + ResHeader: Resource; + Index: integer; + i: integer; + Found: boolean; + begin + if ResourceFile + then + begin + for i := 1 to 8 do + if i <= Length(Key) + then ResKey[i] := Key[i] + else ResKey[i] := #0; + + Assign(SoundFile, ResourceFilename); Reset(SoundFile, 1); + BlockRead(SoundFile, NumSounds, SizeOf(NumSounds)); + + Found := false; + Index := 0; + + while not(Found) and (Index < NumSounds) do + begin + Index := Index + 1; + BlockRead(SoundFile, ResHeader, SizeOf(ResHeader)); + + if MatchingKeys(ResHeader.Key, ResKey) + then + Found := true; + end; + + if Found + then + begin + Seek(SoundFile, ResHeader.Start); + SoundSize := ResHeader.Size; + end + else + Halt(255); + end + else + begin + Assign(SoundFile, Key); Reset(SoundFile, 1); + SoundSize := FileSize(SoundFile); + end; + end; + + function Min(a, b: LongInt): LongInt; + begin + if a < b + then Min := a + else Min := b; + end; + + {Loading and freeing sounds} + var + MoveParams: TMoveParams; {The XMS driver doesn't like this on the stack} + procedure LoadSound(var Sound: PSound; Key: string); + var + Size: LongInt; + InBuffer: array[1..LoadChunkSize] of byte; + Remaining: LongInt; + begin + GetSoundFile(Key); + + New(Sound); + Sound^.SoundSize := SoundSize; + + if not(SharedEMB) + then + begin + Sound^.StartOfs := 0; + XMSAllocate(Sound^.XMSHandle, (SoundSize + 1023) div 1024); + end + else + begin + Sound^.StartOfs := SharedSize; + Sound^.XMSHandle := SharedHandle; + SharedSize := SharedSize + SoundSize; + XMSReallocate(SharedHandle, (SharedSize + 1023) div 1024); + end; + MoveParams.SourceHandle := 0; + MoveParams.SourceOffset := LongInt(Addr(InBuffer)); + MoveParams.DestHandle := Sound^.XMSHandle; + MoveParams.DestOffset := Sound^.StartOfs; + + Remaining := Sound^.SoundSize; + + repeat + MoveParams.Length := Min(Remaining, LoadChunkSize); + BlockRead(SoundFile, InBuffer, MoveParams.Length); + MoveParams.Length := ((MoveParams.Length+1) div 2) * 2; + {XMS copy lengths must be a multiple of two} + XMSMove(@MoveParams); + Inc(MoveParams.DestOffset, MoveParams.Length); + Dec(Remaining, MoveParams.Length); + until not(Remaining > 0); + + Close(SoundFile); + end; + + procedure FreeSound(var Sound: PSound); + begin + if not(SharedEMB) then XMSFree(Sound^.XMSHandle); + Dispose(Sound); Sound := nil; + end; + + {Voice maintainance} + procedure DeallocateVoice(VoiceNum: byte); + begin + VoiceInUse[VoiceNum] := false; + with Voice[VoiceNum] do + begin + Sound := nil; + Index := 0; + CurPos := 0; + Loop := false; + end; + end; + + procedure StartSound(Sound: PSound; Index: byte; Loop: boolean); + var + i, Slot: byte; + begin + Slot := $FF; i := 0; + repeat + if not(VoiceInUse[i]) + then Slot := i; + Inc(i); + until ((Slot <> $FF) or (i=Voices)); + if Slot <> $FF + then + begin + Inc(VoiceCount); + Voice[Slot].Sound := Sound; + Voice[Slot].Index := Index; + Voice[Slot].CurPos := 0; + Voice[Slot].Loop := Loop; + + VoiceInUse[Slot] := true; + end; + end; + + procedure StopSound(Index: byte); + var + i: byte; + begin + for i := 0 to Voices-1 do + if Voice[i].Index = Index + then + begin + DeallocateVoice(i); + Dec(VoiceCount); + end; + end; + + function SoundPlaying(Index: byte): boolean; + var + i: byte; + begin + SoundPlaying := False; + + for i := 0 to Voices-1 do + if Voice[i].Index = Index + then SoundPlaying := True; + end; + + procedure UpdateVoices; + var + VoiceNum: byte; + begin + for VoiceNum := 0 to Voices-1 do + begin + if VoiceInUse[VoiceNum] + then + if Voice[VoiceNum].CurPos >= Voice[VoiceNum].Sound^.SoundSize + then + begin + DeallocateVoice(VoiceNum); + Dec(VoiceCount); + end; + end; + end; + + + {Utility functions} + procedure SetCurBlock(BlockNum: byte); + begin + CurBlock := BlockNum; + CurBlockPtr := pointer(BlockPtr[BlockNum]); + end; + + procedure ToggleBlock; + begin + if CurBlock = 1 + then SetCurBlock(2) + else SetCurBlock(1); + end; + + procedure SilenceBlock; + begin + FillChar(MixingBlock, BlockLength*2, 0); {FillChar uses REP STOSW} + end; + + function GetLinearAddr(Ptr: pointer): LongInt; + begin + GetLinearAddr := LongInt(Seg(Ptr^))*16 + LongInt(Ofs(Ptr^)); + end; + + function NormalizePtr(p: pointer): pointer; + var + LinearAddr: LongInt; + begin + LinearAddr := GetLinearAddr(p); + NormalizePtr := Ptr(LinearAddr div 16, LinearAddr mod 16); + end; + + + procedure InitClip8; + var + i, Value: integer; + begin + for i := -128*Voices to 128*Voices do + begin + Value := i; + if (Value < -128) then Value := -128; + if (Value > +127) then Value := +127; + + Clip8[i] := Value + 128; + end; + end; + + procedure InitMixing; + var + i: integer; + begin + for i := 0 to Voices-1 do DeallocateVoice(i); + VoiceCount := 0; + + if SixteenBit + then + begin + {Find a block of memory that does not cross a page boundary} + GetMem(OutMemArea, 4*BufferLength); + if ((GetLinearAddr(OutMemArea) div 2) mod 65536)+BufferLength < 65536 + then Out16Buffer := OutMemArea + else Out16Buffer := NormalizePtr(Ptr(Seg(OutMemArea^), Ofs(OutMemArea^)+2*BufferLength)); + for i := 1 to 2 do + BlockPtr[i] := NormalizePtr(Addr(Out16Buffer^[i])); + {DMA parameters} + BufferAddr := GetLinearAddr(pointer(Out16Buffer)); + BufferPage := BufferAddr div 65536; + BufferOfs := (BufferAddr div 2) mod 65536; + for i := 1 to 2 do + BlockAddr[i] := GetLinearAddr(pointer(BlockPtr[i])); + for i := 1 to 2 do + BlockPage[i] := BlockAddr[i] div 65536; + for i := 1 to 2 do + BlockOfs[i] := (BlockAddr[i] div 2) mod 65536; + FillChar(Out16Buffer^, BufferLength*2, $00); {Signed 16-bit} + end + else + begin + {Find a block of memory that does not cross a page boundary} + GetMem(OutMemArea, 2*BufferLength); + if (GetLinearAddr(OutMemArea) mod 65536)+BufferLength < 65536 + then Out8Buffer := OutMemArea + else Out8Buffer := NormalizePtr(Ptr(Seg(OutMemArea^), Ofs(OutMemArea^)+BufferLength)); + for i := 1 to 2 do + BlockPtr[i] := NormalizePtr(Addr(Out8Buffer^[i])); + {DMA parameters} + BufferAddr := GetLinearAddr(pointer(Out8Buffer)); + BufferPage := BufferAddr div 65536; + BufferOfs := BufferAddr mod 65536; + for i := 1 to 2 do + BlockAddr[i] := GetLinearAddr(pointer(BlockPtr[i])); + for i := 1 to 2 do + BlockPage[i] := BlockAddr[i] div 65536; + for i := 1 to 2 do + BlockOfs[i] := BlockAddr[i] mod 65536; + FillChar(Out8Buffer^, BufferLength, $80); {Unsigned 8-bit} + + InitClip8; + end; + + FillChar(MixingBlock, BlockLength*2, $00); + + SetCurBlock(1); + IntCount := 0; + StartDAC; + end; + + procedure ShutdownMixing; + begin + StopDAC; + + if SixteenBit + then FreeMem(OutMemArea, 4*BufferLength) + else FreeMem(OutMemArea, 2*BufferLength); + end; + + + + var {The XMS driver doesn't like parameter blocks in the stack} + IntMoveParams: TMoveParams; {In case LoadSound is interrupted} + procedure CopySound(Sound: PSound; var CurPos: LongInt; CopyLength: word; Loop: boolean); + var + SoundSize: LongInt; + DestPtr: pointer; + begin + SoundSize := Sound^.SoundSize; + DestPtr := pointer(@SoundBlock); + IntMoveParams.SourceHandle := Sound^.XMSHandle; + IntMoveParams.DestHandle := 0; + while CopyLength > 0 do + begin + {Compute max transfer size} + if CopyLength < SoundSize-CurPos + then IntMoveParams.Length := CopyLength + else IntMoveParams.Length := SoundSize-CurPos; + + {Compute starting dest. offset and update offset for next block} + IntMoveParams.SourceOffset := Sound^.StartOfs + CurPos; + CurPos := CurPos + IntMoveParams.Length; + if Loop then CurPos := CurPos mod SoundSize; + + {Compute starting source offset and update offset for next block} + IntMoveParams.DestOffset := LongInt(DestPtr); + DestPtr := NormalizePtr(Ptr(Seg(DestPtr^), Ofs(DestPtr^)+IntMoveParams.Length)); + + {Update remaining count for next iteration} + CopyLength := CopyLength - IntMoveParams.Length; + + {Move block} + IntMoveParams.Length := ((IntMoveParams.Length+1) div 2) * 2; + {XMS copy lengths must be a multiple of two} + XMSMove(@IntMoveParams); {Luckily, the XMS driver is re-entrant} + end; + end; + + procedure MixVoice(VoiceNum: byte); + var + MixLength: word; + begin + with Voice[VoiceNum] do + if Loop + then + MixLength := BlockLength + else + if BlockLength < Sound^.SoundSize-CurPos + then MixLength := BlockLength + else MixLength := Sound^.SoundSize-CurPos; + CopySound(Voice[VoiceNum].Sound, Voice[VoiceNum].CurPos, MixLength, Voice[VoiceNum].Loop); + asm + lea si, SoundBlock {DS:SI -> Sound data (Source) } + mov ax, ds {ES:DI -> Mixing block (Destination) } + mov es, ax + lea di, MixingBlock + mov cx, MixLength {CX = Number of samples to copy } + + @MixSample: + mov al, [si] {Load a sample from the sound block } + inc si { increment pointer } + cbw {Convert it to a 16-bit signed sample } + add es:[di], ax {Add it into the mixing buffer } + add di, 2 {Next word in mixing buffer } + dec cx {Loop for next sample } + jnz @MixSample + end; + end; + + procedure MixVoices; + var + i: word; + begin + SilenceBlock; + for i := 0 to Voices-1 do + if VoiceInUse[i] + then + MixVoice(i); + end; + + procedure CopyData16; assembler; + asm + lea si, MixingBlock {DS:SI -> 16-bit input block } + les di, [CurBlockPtr] {ES:DI -> 16-bit output block } + mov cx, BlockLength {CX = Number of samples to copy } + + @CopySample: + mov ax, [si] {Load a sample from the mixing block } + add di, 2 {Increment destination pointer } + sal ax, 5 {Shift sample left to fill 16-bit range} + add si, 2 {Increment source pointer } + mov es:[di-2], ax {Store sample in output block } + dec cx {Process the next sample } + jnz @CopySample + end; + + procedure CopyData8; assembler; + asm + push bp + mov dx, ss {Preserve SS in DX } + pushf + cli {Disable interrupts } + mov ax, ds {Using SS for data } + mov ss, ax + + lea si, Clip8 {DS:SI -> 8-bit clipping buffer } + add si, 128*Voices {DS:SI -> Center of clipping buffer } + + lea bp, MixingBlock {SS:BP -> 16-bit input block } + les di, [CurBlockPtr] {ES:DI -> 8-bit output block } + mov cx, BlockLength {CX = Number of samples to copy } + + @CopySample: + mov bx, [bp] {BX = Sample from mixing block } + inc di {Increment destination pointer (DI) } + add bp, 2 {Increment source pointer (BP) } + mov al, [si+bx] {AL = Clipped sample } + mov es:[di-1], al {Store sample in output block } + dec cx {Process the next sample } + jnz @CopySample + + mov ss, dx {Restore SS } + popf {Restore flags } + pop bp + end; + + procedure CopyData; + begin + if SixteenBit + then CopyData16 + else CopyData8; + end; + + procedure StartBlock_SC; {Starts a single-cycle DMA transfer} + begin + Port[DMAMaskPort] := DMAStopMask; + Port[DMAClrPtrPort] := $00; + Port[DMAModePort] := DMAMode; + Port[DMABaseAddrPort] := Lo(BlockOfs[CurBlock]); + Port[DMABaseAddrPort] := Hi(BlockOfs[CurBlock]); + Port[DMACountPort] := Lo(DMALength-1); + Port[DMACountPort] := Hi(DMALength-1); + Port[DMAPagePort] := BlockPage[CurBlock]; + Port[DMAMaskPort] := DMAStartMask; + WriteDSP($14); {8-bit single-cycle DMA sound output } + WriteDSP(Lo(BlockLength - 1)); + WriteDSP(Hi(BlockLength - 1)); + end; + + var Save_Test8086: byte; {CPU type flag} + + procedure IntHandler; interrupt; + var + Temp: byte; + begin + {On a 386 or higher, Turbo Pascal uses 32-bit registers for LongInt } + {math. Unfortunately, it doesn't preserve these registers when } + {generating code to handle interrupts, so they are occasionally } + {corrupted. This can cause a problem with LongInt math in your } + {program or in TSRs. The below code disables 32-bit instructions for } + {the interrupt to prevent 32-bit register corruption. } + Save_Test8086 := Test8086; + Test8086 := 0; + + Inc(IntCount); + + if not(AutoInit) {Start next block first if not using auto-init DMA} + then + begin + StartBlock_SC; + CopyData; + ToggleBlock; + end; + + UpdateVoices; + MixVoices; + + if (AutoInit) + then + begin + CopyData; + ToggleBlock; + end; + + Test8086 := Save_Test8086; + + Temp := Port[AckPort]; + Port[$A0] := $20; + Port[$20] := $20; + end; + + procedure EnableInterrupts; InLine($FB); {STI} + procedure DisableInterrupts; InLine($FA); {CLI} + + procedure InstallHandler; + begin + DisableInterrupts; + Port[PICMaskPort] := Port[PICMaskPort] or IRQStopMask; + GetIntVec(IRQIntVector, OldIntVector); + SetIntVec(IRQIntVector, @IntHandler); + Port[PICMaskPort] := Port[PICMaskPort] and IRQStartMask; + EnableInterrupts; + HandlerInstalled := true; + end; + + procedure UninstallHandler; + begin + DisableInterrupts; + Port[PICMaskPort] := Port[PICMaskPort] or IRQStopMask; + SetIntVec(IRQIntVector, OldIntVector); + EnableInterrupts; + HandlerInstalled := false; + end; + + procedure MixExitProc; {Called automatically on program termination} + begin + ExitProc := OldExitProc; + + StopDAC; + ShutdownSB5; + end; + + begin + HandlerInstalled := false; + SharedEMB := false; + ResourceFile := false; + end. diff --git a/sounds.tb1 b/sounds.tb1 new file mode 100644 index 0000000..6b5172f Binary files /dev/null and b/sounds.tb1 differ diff --git a/story.pas b/story.pas new file mode 100644 index 0000000..139c238 --- /dev/null +++ b/story.pas @@ -0,0 +1,661 @@ +program story_from_tom_bombem; +uses nvmwgraph,crt; + + +{$G+} + +const + {Shape Table Values For Story} + bargeoff = 0; + bigflame1off = 290; + bigflame2off = 780; + sflame2off = 1270; + sflame1off = 1290; + truck1off = 1310; + truck2off = 1370; + explo1off = 1430; + explo2off = 1730; + rent1off = 2030; + {Shape Table Values for Game} + shape1off = 8000; + shape2off = 8400; + shape3off = 8800; + shape4off = 9200; + shape5off = 9600; + shape6off = 10000; + shape7off = 10400; + shape8off = 10800; + shape9off = 11200; + shape10off = 11600; + shape11off = 12000; + shape12off = 12400; + shape13off = 12800; + shape14off = 13200; + shape15off = 13600; + shape16off = 14000; + shape17off = 14400; + shape18off = 14800; + shape19off = 15200; + shape20off = 15600; + bigship1off = 0; + bigship2off = 1600; + bigship3off = 3200; + shapearray : + array [1..20] of word =(8000,8400,8800,9200, + 9600,10000,10400,10800, + 11200,11600,12000,12400, + 12800,13200,13600,14000, + 14400,14800,15200,15600); + + +type ScreenType = array [0..3999] of byte; {For Ansi Loading} + + ShipInfo = Record + x,y:integer; + speed,frame:integer; + active:boolean; + END; + + EnemyInfo = record + x,y,oldx,oldy:integer; + kind:byte; + out,exploding:boolean; + explodprogress:byte; + minx,maxx,xspeed,yspeed:integer; + end; + + Virtual = Array [1..64000] of byte; { The size of our Virtual Screen } + VirtPtr = ^Virtual; { Pointer to the virtual screen } + + ShapeTable = Array [0..16000] of byte; + ShapePtr = ^ShapeTable; + +var ho,mi,se,s100:word; + tempsec:integer; + flames:boolean; + error:byte; + dev,mix,stat,pro,loop : integer; + md : string; + +VAR Virscr : VirtPtr; { Our first Virtual screen } + ShapeTable1:ShapePtr; + num:byte; + VirScr2 : VirtPtr; { Our second Virtual screen } + Vaddr : word; { The segment of our virtual screen} + Vaddr2 : Word; { The segment of our 2nd virt. screen} + ShapeAddr:word; { The segment of the shape table} + ShapeOfs:word; + ourpal : Array [0..255,1..3] of byte; { A virtual pallette } + shipv : Array [1..1] of shipinfo; { The toaster info } + enemy:array[0..5] of enemyinfo; + Soundp : Pointer; + Check : BOOLEAN; + + hiscore,level,lives,energy:integer; + score:longint; + axel_und_carmen:boolean; + tempi,tempj:integer; + scorest:string[8]; + musicon:boolean; + lowscore:integer; + it,hiname:string[10]; + +var grapherror:byte; + temp:array[1..3] of byte; + i,j:byte; + x,y,barpos:integer; + screen:screentype absolute $B800:0000; + ch:char; + + +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^); + GetMem (ShapeTable1,16000); + shapeaddr:= seg (ShapeTable1^); + shapeofs:=ofs (ShapeTable1^); +END; + + + +procedure putshape(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + + end; +end; + +procedure putshapeline(fromwhereo,towhere,xacross,yacross,xx,yy,line:word); +var int,color:integer; +{draws just one line of a shape with same syntax as putshape} +begin + for int:=0 to xacross do begin + {does not work. stack overflow} + (*asm + push ax + push bx + push cx + mov ax,[line] {multiplies y value by 320} + mul [xacross] + add ax,[int] + mov bx,ax + mov ax,[ShapeAddr] {moves segment of array} + mov ds,ax + {mov ax,[ShapeOfs]} {moves offset of array} + mov ax,[fromwhereo] + add ax,bx + mov si,ax + xor ax,ax + lodsb + mov [color],ax + pop cx + pop bx + pop ax + end;*) + color:=ShapeTable1^[fromwhereo+((xacross*line)+int)]; + if color<>0 then putpixel(xx+int,yy+line,color,towhere); + end; +end; + +procedure putshapeover(fromwhereo,towhere,xacross,yacross,xx,yy:word); +label bbob,bbob4,bbob2,bbob3; +begin + asm + {saves registers} + + + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + (*add ax,[shapeofs] *) {moves offsett if array} + mov ax,[fromwhereo] + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bbob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bbob4: + rep movsb {copies, overwriting} + bbob2: {Adds when x-value must be increased} + cmp dx,bx + jz bbob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bbob + bbob3: + pop bx {restore variables} + pop ds + end; +end; + + +Procedure blockmove(x1,y1,x2,y2,p1,x3,y3,p2:word); + { This is a small procedure to copy block x1,y1,x2,y2, + from page 1 to x3,y3 on page 2} +BEGIN + asm + push ds + push es + mov ax,p1 + mov ds,ax + mov ax,p2 + mov es,ax + + mov bx,[X1] + mov dx,[Y1] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; bx = bx * 64} + add dx, bx {; dx = dx + bx (ie y*320)} + pop bx {; get back our x} + add bx, dx {; finalise location} + mov si, bx {; es:di = where to go} + + mov bx,[X3] + mov dx,[Y3] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; 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 ax,[y2] + sub ax,[y1] + + mov dx,[x2] + sub dx,[x1] + mov bx,320 + sub bx,dx + + +@@1 : + mov cx, dx { Width of block to copy divided by 2 } + rep movsb + add di,bx { 320 - 48 = 272 .. or 110 in hex } + add si,bx + dec ax + 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; + + + + + +{************ +************* +************ +************} + + +procedure story; +var error:byte; + xtemp,ytemp:integer; + thrustcol:integer; + thrust:real; + tempch:char; + alienchar:byte; + cycles:byte; + + + + +procedure doflames; +begin + + if flames=true then begin + putshape(bigflame1off,vaddr,27,17,213,100); + putshapeover(sflame2off,vaddr,4,4,105,90); + putshapeover(sflame1off,vaddr,4,4,151,71); + putshapeover(sflame2off,vaddr,4,4,218,72); + end + else + begin + putshape(bigflame2off,vaddr,27,17,213,100); + putshapeover(sflame1off,vaddr,4,4,105,90); + putshapeover(sflame2off,vaddr,4,4,151,71); + putshapeover(sflame1off,vaddr,4,4,218,72); + outtextxy(chr(alienchar),10,10,12,0,vaddr,true); + inc(alienchar); + if alienchar>44 then alienchar:=34; + end; + flip(vaddr,vga); + vdelay(5); + flames:=not(flames); +end; + +procedure puttruck(xp,yp,frame:integer;where:word); +var xtemp,into,ytemp:integer; + col:byte; +begin + for into:=0 to 7 do begin + if(into+yp>=172) then + if frame=0 then putshapeline(truck1off,where,6,8,xp,yp,into) + else putshapeline(truck2off,where,6,8,xp,yp,into); + end; +end; + +procedure pauseawhile(howlong:word); +var i:word; +begin + i:=0; + repeat + waitretrace; + inc(i); + if i>howlong then exit; + until keypressed; +end; + + +begin + fade; + error:=loadpicsuperpacked(0,0,vaddr,false,true,'tbsobj.tb1'); + for ytemp:=0 to 18 do + for xtemp:=0 to 26 do begin + ShapeTable1^[((ytemp*27)+xtemp)+bigflame1off]:=getpixel(xtemp,ytemp+2,vaddr); + ShapeTable1^[((ytemp*27)+xtemp)+bigflame2off]:=getpixel(xtemp,ytemp+21,vaddr); + end; + for ytemp:=0 to 18 do + for xtemp:=0 to 15 do begin + ShapeTable1^[((ytemp*16)+xtemp)+explo1off]:=getpixel(127+xtemp,ytemp+100,vaddr); + ShapeTable1^[((ytemp*16)+xtemp)+explo2off]:=getpixel(148+xtemp,ytemp+100,vaddr); + end; + for ytemp:=0 to 6 do + for xtemp:=0 to 15 do + ShapeTable1^[((ytemp*16)+xtemp)+rent1off]:=getpixel(168+xtemp,ytemp+100,vaddr); + + for ytemp:=0 to 4 do + for xtemp:=0 to 3 do begin + ShapeTable1^[((ytemp*4)+xtemp)+sflame1off]:=getpixel(xtemp,ytemp+43,vaddr); + ShapeTable1^[((ytemp*4)+xtemp)+sflame2off]:=getpixel(xtemp,ytemp+47,vaddr); + end; + + for ytemp:=0 to 18 do + for xtemp:=0 to 15 do + ShapeTable1^[((ytemp*16)+xtemp)+bargeoff]:=getpixel(xtemp+65,ytemp+100,vaddr); + + for ytemp:=0 to 8 do + for xtemp:=0 to 5 do begin + ShapeTable1^[((ytemp*6)+xtemp)+truck1off]:=getpixel(xtemp+85,ytemp+100,vaddr); + ShapeTable1^[((ytemp*6)+xtemp)+truck2off]:=getpixel(xtemp+95,ytemp+100,vaddr); + end; + +{******FIRST MESSAGE*******} + cls(0,vga); + outtextxy('THE STORY SO FAR...',20,20,4,0,vga,false); + unfade; + pauseawhile(300); if keypressed then if readkey=#27 then exit; + fade; + cls(0,vga); + error:=loadpicsuperpacked(0,0,vaddr2,false,true,'tbcobj.tb1'); + blockmove(129,56,178,188,vaddr2,10,10,vga); + outtextxy('YOU ARE TOM BOMBEM, A STRANGE',80,10,1,0,vga,false); + outtextxy(' BUT EFFICIENT MEMBER OF',80,20,1,0,vga,false); + outtextxy(' THE LUNAR SPACE FORCE.',80,30,1,0,vga,false); + outtextxy('YOU NEVER SAY MUCH AND YOU ARE',80,50,4,0,vga,false); + outtextxy(' RARELY SEEN OUTSIDE OF ',80,60,4,0,vga,false); + outtextxy(' YOUR BLUE SPACESUIT.',80,70,4,0,vga,false); + outtextxy('YOU OFTEN GET YOURSELF IN ',80,90,2,0,vga,false); + outtextxy(' TROUBLE BY SCRATCHING',80,100,2,0,vga,false); + outtextxy(' YOUR HEAD AT INAPPROPRIATE',80,110,2,0,vga,false); + outtextxy(' TIMES.',80,120,2,0,vga,false); + outtextxy('PRESS ANY KEY....',96,185,15,0,vga,false); + unfade; + pauseawhile(900); if keypressed then if readkey=#27 then exit; + fade; + cls(0,vga); + blockmove(129,56,178,188,vaddr2,260,10,vga); + blockmove(99,104,128,185,vaddr2,287,13,vga); + outtextxy('IT IS THE YEAR 2028.',10,10,1,0,vga,false); + outtextxy('YOU HAVE BEEN SUMMONED BY',10,30,3,0,vga,false); + outtextxy(' LUNAR DICTATOR-IN-CHIEF',10,40,3,0,vga,false); + outtextxy(' VINCENT WEAVER ABOUT A',10,50,3,0,vga,false); + outtextxy(' TOP SECRET THREAT TO ',10,60,3,0,vga,false); + outtextxy(' INTERPLANETARY SECURITY.',10,70,3,0,vga,false); + outtextxy('YOU ATTEND THE BRIEFING WITH',10,90,5,0,vga,false); + outtextxy(' YOUR USUAL CONFUSED',10,100,5,0,vga,false); + outtextxy(' QUIETNESS. YOU STILL DO',10,110,5,0,vga,false); + outtextxy(' NOT UNDERSTAND YOUR OWN',10,120,5,0,vga,false); + outtextxy(' SUCCESSFULNESS.',10,130,5,0,vga,false); + outtextxy('PRESS ANY KEY....',96,185,15,0,vga,false); + unfade; + pauseawhile(900); if keypressed then if readkey=#27 then exit; + fade; + + error:=loadpicsuperpacked(0,0,vga,false,true,'tbchief.tb1'); + + unfade; + blockmove(115,55,206,114,vga,115,55,vaddr); + blockmove(188,14,279,73,vaddr2,115,55,vga); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + blockmove(115,55,206,114,vaddr,115,55,vga); + outtextxy('Ahhh.... Mr. Bombem.... ',1,1,15,0,vga,true); + pauseawhile(400); if keypressed then if readkey=#27 then exit; + outtextxy('I''ll be brief. ',1,1,15,0,vga,true); + pauseawhile(400); if keypressed then if readkey=#27 then exit; + outtextxy('Do you know how this base was founded?',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('No? Well watch the screen. ',1,1,15,0,vga,true); + pauseawhile(400); if keypressed then if readkey=#27 then exit; + blockmove(210,75,295,134,vaddr2,210,136,vga); + pauseawhile(300); if keypressed then if readkey=#27 then exit; + + pal(250,0,0,0); + fade; + +{******BARGE TAKING OFF**********} + error:=loadpicsuperpacked(0,0,vaddr2,false,true,'tbma1.tb1'); + outsmalltextxy('MY WIFE AND I FOUNDED',212,3,14,0,vaddr2,false); + outsmalltextxy('THIS BASE IN 2008.',212,9,14,0,vaddr2,false); + outsmalltextxy('THE ONLY WAY TO ',212,16,13,0,vaddr2,false); + outsmalltextxy('FINANCE IT WAS TO',212,22,13,0,vaddr2,false); + outsmalltextxy('ENGAGE IN A DUBIOUS',212,28,13,0,vaddr2,false); + outsmalltextxy('BUSINESS.',212,34,13,0,vaddr2,false); + outsmalltextxy('WE LAUNCHED EARTH''S',212,41,12,0,vaddr2,false); + outsmalltextxy('TRASH INTO SPACE',212,47,12,0,vaddr2,false); + outsmalltextxy('FOR A PROFIT.',212,53,12,0,vaddr2,false); + outsmalltextxy('HERE IS FOOTAGE FROM',212,60,11,0,vaddr2,false); + outsmalltextxy('THE FINAL LAUNCH FIVE',212,66,11,0,vaddr2,false); + outsmalltextxy('YEARS AGO.',212,72,11,0,vaddr2,false); + flip(vaddr2,vaddr); + putshape(bargeoff,vaddr,16,18,141,157); + flip(vaddr,vga); + unfade; + + pauseawhile(700); if keypressed then if readkey=#27 then exit; + + for ytemp:=191 downto 164 do begin + if ytemp>=172 then blockmove(145,ytemp,152,ytemp+10,vaddr2,145,ytemp,vaddr) + else blockmove(145,172,152,182,vaddr2,145,172,vaddr); + puttruck(145,ytemp,ytemp mod 2,vaddr); + pauseawhile(7); + if keypressed then if readkey=#27 then exit; + flip(vaddr,vga); + end; + + pauseawhile(20); + flip(vaddr2,vaddr); + putshape(bargeoff,vaddr,16,18,141,157); + thrustcol:=0; + ytemp:=157; + thrust:=0; + while ytemp>-25 do begin + thrust:=thrust+0.05; + if thrustcol<63 then inc(thrustcol); + blockmove(141,ytemp,171,ytemp+30,vaddr2,141,ytemp,vaddr); + for i:=1 to 17 do + if ytemp+i>=0 then + putshapeline(bargeoff,vaddr,16,18,141,ytemp,i); + pauseawhile(5); + if keypressed then if readkey=#27 then exit; + pal(250,thrustcol,0,0); + flip(vaddr,vga); + ytemp:=ytemp-round(thrust); + end; + + pauseawhile(100); + if keypressed then if readkey=#27 then exit; + fade; + +{****SECOND CHIEF*******} + error:=loadpicsuperpacked(0,0,vaddr2,false,true,'tbcobj.tb1'); + error:=loadpicsuperpacked(0,0,vga,false,true,'tbchief.tb1'); + blockmove(7,104,97,125,vaddr2,6,174,vga); + unfade; + outtextxy('You might wonder why this is important.',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('Last week we received a message. ',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('It is of extra-terrestrial origin. ',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('Watch the screen. ',1,1,15,0,vga,true); + blockmove(210,136,295,195,vaddr2,210,136,vga); + pauseawhile(300); if keypressed then if readkey=#27 then exit; + fade; + +{******ALIEN DELEGATION*****} + error:=loadpicsuperpacked(0,0,vaddr2,false,true,'tbcrash.tb1'); + alienchar:=34; + flip(vaddr2,vaddr); + flip(vaddr,vga); + putshape(bargeoff,vaddr,16,18,97,180); + unfade; + xtemp:=97; + ytemp:=181; + flames:=true; + while ytemp>118 do begin + blockmove(xtemp,ytemp,xtemp+20,ytemp+20,vaddr2,xtemp,ytemp,vaddr); + putshape(bargeoff,vaddr,16,18,xtemp,ytemp); + doflames; + dec(ytemp); + inc(xtemp); + pauseawhile(1); + if keypressed then if readkey=#27 then exit; + end; + blockmove(xtemp,ytemp,xtemp+30,ytemp+30,vaddr2,xtemp,ytemp,vaddr); + pal(0,63,63,63); + putshape(explo1off,vga,16,18,160,118); + pauseawhile(5); + if keypressed then if readkey=#27 then exit; + pal(0,0,0,0); + for xtemp:=0 to 10 do begin + putshapeover(explo2off,vaddr,16,18,160,118); + doflames; + putshapeover(explo1off,vaddr,16,18,160,118); + doflames; + end; + blockmove(159,114,189,144,vaddr2,159,114,vaddr); + putshapeover(rent1off,vaddr,16,6,160,115); + flip(vaddr,vga); + cycles:=0; + repeat + doflames; + inc(cycles); + until ((keypressed) or (cycles>60)); + if keypressed then if readkey=#27 then exit; + +{****ALIEN MESSAGE*****} + fade; + error:=loadpicsuperpacked(0,0,vga,false,true,'tbgorg.tb1'); + unfade; + outtextxy('GREETINGS EARTHLINGS.',0,162,12,0,vga,false); + outtextxy('I AM GORGONZOLA THE REPULSIVE.',0,171,12,0,vga,false); + outtextxy('YOU HAVE MADE A BIG MISTAKE.',0,180,12,0,vga,false); + pauseawhile(600); + if keypressed then if readkey=#27 then exit; + outtextxy('YOUR SHIP FULL OF REFUSE HAS',0,162,12,0,vga,true); + outtextxy('DAMAGED OUR OFFICIAL PEACE ',0,171,12,0,vga,true); + outtextxy('ENVOY. IT WAS ON ITS WAY TO ',0,180,12,0,vga,true); + outtextxy('YOUR PLANET. ',0,189,12,0,vga,true); + pauseawhile(600); + if keypressed then if readkey=#27 then exit; + outtextxy('IN AN IRONIC FORM OF RETALLIATION',0,162,12,0,vga,true); + outtextxy('WE HAVE MADE YOUR TRASH EVIL AND',0,171,12,0,vga,true); + outtextxy('TURNED IT AGAINST YOU. ',0,180,12,0,vga,true); + outtextxy(' DIE EARTH SCUM! ',0,189,12,0,vga,true); + pauseawhile(600); + if keypressed then if readkey=#27 then exit; + fade; +{****** THIRD CHIEF *******} + error:=loadpicsuperpacked(0,0,vaddr2,false,true,'tbcobj.tb1'); + error:=loadpicsuperpacked(0,0,vga,false,true,'tbchief.tb1'); + blockmove(7,127,97,148,vaddr2,6,174,vga); + unfade; + outtextxy('Tom, our radar detects approaching ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('objects. They are inside the ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('orbit of Jupiter. ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('You are our only hope! ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('Will you fly our only spaceship ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('and save the human race? ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + blockmove(5,16,44,98,vaddr2,146,59,vga); + pauseawhile(10); + blockmove(46,16,85,98,vaddr2,146,59,vga); + pauseawhile(10); + blockmove(87,16,126,98,vaddr2,146,59,vga); + outtextxy('Scratch. Scratch. ',1,1,9,0,vga,true); + pauseawhile(300); if keypressed then if readkey=#27 then exit; + outtextxy('I knew you''d do it. Good Luck! ',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy(' ',1,1,9,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; +end; + +begin + setmcga; + setuptb1; + setupvirtual; + error:=loadpicsuperpacked(0,0,vga,true,false,'tbma1.tb1'); + story; + unfade; + settext; +end. \ No newline at end of file diff --git a/svmwgrap.pas b/svmwgrap.pas new file mode 100644 index 0000000..d1fc527 --- /dev/null +++ b/svmwgrap.pas @@ -0,0 +1,1366 @@ +unit SVmwGraph; {Super Vmw Graphics Unit} +{$X+}{$G+} +{$L graph32.obj} + +INTERFACE + + +function Mode13SavePicPacked(x1,y1,x2,y2,numcolors:integer;where:word;filename:string):byte; +function Mode13LoadPicPacked(x1,y1:integer;where:word;LoadPal,LoadPic:boolean;FileName:string):byte; +procedure cls32(col:byte;where:word); +procedure flipd320(source,dest:word); +procedure flipd240(hm,va,va2:word); +procedure flipd50(fromwhere,off1,whereto,off2:word); + +{Errors: 0=No Errors + 1=File Not Found + 2=Not a Paintpro File (no PAINTPROVX.XX header) + 3=Improper Version (less then 6) +} +IMPLEMENTATION + +uses nvmwgraph; + + +function Mode13SavePicPacked(x1,y1,x2,y2,numcolors:integer;where:word;filename:string):byte; + +{**** Saves an image, with corners x1,y1 and x2,y2 + and number of colors NUMCOLORS, and at segment + where ($A000 for vga) to the paintpro file + filename ****} + {x2 y2 should be plus one (320,200 not 319,199} + +var buffer:array[0..2] of byte; + header:string[15]; + f:file; + col,x,y,xsize,ysize,i,oldcol,numacross:integer; + byte1,byte2,byte3,temp:byte; + r,g,b:byte; + second1,zz:integer; + +procedure integer23bytes(inter1,inter2:integer); +var temp1,temp2,temp3:integer; + temp:byte; +begin + {asm + mov ax,inter1 + shl ax,1 + shl ax,1 this assembly will accomplish + shl ax,1 what the below will. Basically + shl ax,1 it takes two, 16 bit integers, + mov temp1,ah strips off the top 4 bits of each, + sub ah,ah (makin two, 12 bit integers) and + shr ax,1 joins these into three 8 bit bytes + shr ax,1 + shr ax,1 for this assmebly to work, however + shr ax,1 temp1,temp2, etc must be byte, not + mov temp,al integer + mov ax,inter2 + mov temp3,al + shr ax,1 + shr ax,1 + shr ax,1 + shr ax,1 + mov ah,temp + shl ax,1 + shl ax,1 in the below, shl is shift left + shl ax,1 (in C the equivelant is <<) + shl ax,1 and shr is shift right ( >> ) + mov temp2,ah + end; + + } + temp1:=(inter1 AND $7FFF); + temp1:=temp1 shr 4; + temp3:=(inter2 AND $7FFF); + temp2:= ((inter1 and $000F) shl 4)+ ((inter2 AND $0F00) shr 8); + + buffer[0]:=temp1; + buffer[1]:=temp2; + buffer[2]:=temp3; + blockwrite(f,buffer,1); +end; + + +begin + Mode13SavePicPacked:=0; {*Clear the errors} + assign(f,filename); {*Open the file} + {$I-} + rewrite(f,3); {*Turn off i/o and open file} + {$I+} + if Ioresult<>0 then Mode13SavePicPacked:=1; + if Ioresult<>0 then exit; {*If error, file not found} + header:='PAINTPROV6.0'; + for i:=0 to 3 do begin {*Write header} + buffer[0]:=ord(header[(i*3)+1]); + buffer[1]:=ord(header[(i*3)+2]); + buffer[2]:=ord(header[(i*3)+3]); + blockwrite(f,buffer,1); + end; + + xsize:=abs(x2-x1); {*Write xsize and ysize} + ysize:=abs(y2-y1); + integer23bytes(xsize,ysize); + integer23bytes(numcolors,0); {*Write number of colors and a blank} + + for i:=0 to (numcolors-1) do {*Save the pallete (24 bit, rgb)} + begin + getpal(i,buffer[0],buffer[1],buffer[2]); + buffer[0]:=buffer[0]* 4; {*Multiplied by 4 because} + buffer[1]:=buffer[1] * 4; {mode 13h is only 18 bit} + buffer[2]:=buffer[2] * 4; + blockwrite(f,buffer,1); + end; + zz:=(y2-y1); + y:=y1; + numacross:=0; {this does RLE encoding} + second1:=0; {see doc file} + oldcol:=getpixel(x1,y,where); + while y<=y2 do begin + x:=x1; + while x<=x2 do begin + col:=getpixel(x,y,where); + if (col=oldcol) and (numacross<2046) then inc(numacross) + else begin {*compresses 1 color stretches} + if numacross=1 then begin + if second1=0 then begin + second1:=oldcol+2048; + end + else begin + integer23bytes(second1,oldcol+2048); + second1:=0; + end + + end + else begin + if second1<>0 then + integer23bytes(second1-2048,1); + integer23bytes(oldcol,numacross); + second1:=0; + end; + numacross:=1; + end; + inc(x); + oldcol:=col; + end; + inc(y); + end; + integer23bytes(col,numacross); + + close(f); +end; + + + + + + +function Mode13LoadPicPacked(x1,y1:integer;where:word;LoadPal,LoadPic:boolean;FileName:string):byte; + +{*Loads a paintpro image, filename, at location x1,y1 + to offset where (vga=$A000) and loadspal if LOADPAL=true + Loadsapicture if Loadpic=true and returns error} + +var buffer:array[0..299] of byte; + result,buffpointer:integer; + f:file; + col,x,y,xsize,ysize,i,oldcol, + numcolors,tempint1,tempint2,numacross:integer; + header:string; + lastread:boolean; + tempbyte,r,g,b:byte; + + +procedure sixbytes2twoint; + +var temp1,temp2,temp3:byte; + int1,int2:integer; + +begin + temp1:=buffer[buffpointer]; + temp2:=buffer[buffpointer+1]; + temp3:=buffer[buffpointer+2]; + inc(buffpointer,3); + if (buffpointer>=result) then + if (result=300) then begin + blockread(f,buffer,300,result); + buffpointer:=0; + end + else lastread:=true; + asm + mov ah,temp1 {splits 3 bytes (24 bits)} + mov al,temp2 {into two 12 bit integers} + shr ax,4 {and then pads them into} + mov int1,ax {two 16 bit integers} + mov ah,temp2 + mov al,temp3 + shl ah,4 + shr ah,4 + mov int2,ax + end; + tempint1:=int1; + tempint2:=int2; +end; + + + +begin + lastread:=false; + Mode13LoadPicPacked:=0; {*Clear errors} + header:=''; + buffpointer:=0; + assign(f,filename); + {$I-} + reset(f,1); {*Check that file is there} + {$I+} + if IOresult<>0 then begin {*Error if not} + Mode13LoadPicPacked:=1; + end + else begin + + blockread(f,buffer,300,result); + + for i:=1 to 9 do header:=concat(header,chr(buffer[i-1])); + + + if header<> 'PAINTPROV' then Mode13LoadPicPacked:=2; + if header<> 'PAINTPROV' then exit; {*Error if not Paintpro header} + + header:=''; + + header:=concat(header,chr(buffer[9]),chr(buffer[10]),chr(buffer[11])); + + if header<>'6.0' then Mode13LoadPicPacked:=3; {*Error if wron version} + if header<>'6.0' then exit; + buffpointer:=12; + + sixbytes2twoint; + xsize:=tempint1; + ysize:=tempint2; + sixbytes2twoint; + numcolors:=tempint1; + + + + for i:=0 to (numcolors-1) do begin + r:=(buffer[buffpointer] div 4); + g:=(buffer[buffpointer+1] div 4); + b:=(buffer[buffpointer+2] div 4); + inc(buffpointer,3); + if (buffpointer>=result) then + if (result=300) then begin + blockread(f,buffer,300,result); + buffpointer:=0; + end + else + + lastread:=true; + if loadpal then pal(i,r,g,b); + end; + + + + + + + x:=x1; + y:=y1; +if loadpic=true then begin + while (lastread=false) do begin + sixbytes2twoint; + + if tempint1>2047 then begin + putpixel(x,y,(tempint1-2048),where); + inc(x); + if x>=xsize+x1+1 then begin + x:=x1; inc(y); end; + putpixel(x,y,(tempint2-2048),where); + inc(x); + if x>=xsize+x1+1 then begin + x:=x1; inc(y); end; + end + + else begin + col:=tempint1; + numacross:=tempint2; + while ((x+numacross)>=(xsize+x1+1)) do begin + horizontalline(x,x1+xsize,y,col,where); + numacross:=numacross-((xsize+1)-x); + x:=x1; + inc(y); + end; + if numacross<>0 then horizontalline(x,x+numacross,y,col,where); + x:=x+numacross; + + end; + end; +end; +close(f); +end; +end; + +procedure cls32(col:byte;where:word);EXTERNAL; +procedure flipd320(source,dest:word);EXTERNAL; +procedure flipd240(hm,va,va2:word);EXTERNAL; +procedure flipd50(fromwhere,off1,whereto,off2:word);EXTERNAL; + +begin +end. + + + +unit NVMWgraph; {the new vmw graph unit} +{$X+} {$G+} +INTERFACE + +CONST VGA = $a000; + +var unfadered:array[0..255] of byte; + unfadeblue:array[0..255] of byte; + unfadegreen:array[0..255] of byte; + fontline:array[0..255] of byte; + charset:array[0..255,0..15] of byte; + charheight:byte; + fontseg,fontoff:word; + +Procedure SetMCGA; +Procedure SetText; { This procedure returns you to text mode. } +Procedure LoadFont(namest:string); +Procedure Cls (Col : Byte; Where:word); +Procedure Putpixel (X,Y : Integer; Col : Byte; where:word); +Procedure Putpixel240 (X,Y : Integer; Col : Byte; where:word); +function getpixel(x,y,where:word):byte; +Procedure Pal(Col,R,G,B : Byte); +Procedure GetPal(Col : Byte; Var R,G,B : Byte); +procedure WaitRetrace; +procedure flip(source,dest:Word); +procedure outtextlineover(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outtextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outtextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +procedure outsmalltextlineover(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outsmalltextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +procedure outsmalltextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +function sgn(a:real):integer; +procedure line(a,b,c,d,col:integer;where:word); +procedure horizontalline(FromX1,ToX2,AtY,col:integer;where:word); +procedure verticalline(FromY1,ToY2,AtX,col:integer;where:word); +procedure fade; +procedure unfade; +function SavePicSuperPacked(x1,y1,x2,y2,maxcolors:integer;where:word;filename:string):byte; +function LoadPicSuperPacked(x1,y1:integer;where:word;LoadPal,LoadPic:boolean;FileName:string):byte; +function oldloadpicsuperpacked(x1,y1:integer;where:word;fil:string):byte; +procedure box(x1,y1,x2,y2,col:integer;where:word); +procedure vdelay(howlong:integer); +procedure setupvmwgraph; +procedure setuptb1; + +{Errors for save and load: + 0=No error + 1=File Not Found + 2=Improper file type (No PAINTPROVX.XX header) + 3=Improper version + 4=Too Many Colors + 5=Picture Too Big + } + + +IMPLEMENTATION + +Procedure SetMCGA; { This procedure gets you into 320x200x256 mode. } +BEGIN + asm + mov ax,0013h + int 10h + end; +END; + +Procedure SetText; { This procedure returns you to text mode. } +BEGIN + asm + mov ax,0003h + int 10h + end; +END; + +Procedure LoadFont(namest:string); +var buff:array[0..15] of byte; + f:file; + i,fonty:integer; + +begin + assign(f,namest); + {$I-} + reset(f,16); + {$I+} + if Ioresult<>0 then writeln(#7); + if Ioresult<>0 then exit; + + fonty:=0; + while (not eof(F)) and (fonty<4097) do + begin + blockread(f,buff,1); + for i:=0 to 15 do + charset[fonty div 16,i]:=buff[i]; + inc(fonty,16); + end; + close(f); +end; + +Procedure Cls (Col : Byte; Where:word); + { This clears the screen to the specified color } +BEGIN + asm + push es + mov cx, 32000; + mov es,[where] + xor di,di + mov al,[col] + mov ah,al + rep stosw + pop es + End; +END; + +Procedure Putpixel (X,Y : Integer; Col : Byte; where:word); + { This puts a pixel on the screen by writing directly to memory. } +BEGIN + Asm + push ds + push es + mov ax,[where] + mov es,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} + xor al,al + mov ah, [Col] + mov es:[di],ah + pop es + pop ds + End; +END; + +Procedure Putpixel240 (X,Y : Integer; Col : Byte; where:word); +BEGIN + Asm + push ds + push es + mov ax,[where] + mov es,ax + mov bx,[y] + shl bx,4 + mov dx,bx {; and this again for later} + shl bx, 1 {; bx = dx} + add dx, bx {; dx = dx * 256} + shl bx,1 + add dx,bx + shl bx, 1 + add dx, bx + add dx,[x] {; bx = bx * 64} + {; dx = dx + bx (ie y*320)} + {; get back our x} + {; finalise location} + mov di, dx + {; es:di = where to go} + xor al,al + mov ah, [Col] + mov es:[di],ah + pop es + pop ds + End; +END; + +function getpixel(x,y,where:word):byte; +begin + getpixel:=mem[where:x+(y*320)]; +end; + +Procedure Pal(Col,R,G,B : Byte); + { This sets the Red, Green and Blue values of a certain color } +Begin + asm + mov dx,3c8h + mov al,[col] + out dx,al + inc dx + mov al,[r] + out dx,al + mov al,[g] + out dx,al + mov al,[b] + out dx,al + end; +End; + +procedure WaitRetrace; assembler; + { This waits for a vertical retrace to reduce snow on the screen } +label + l1, l2; +asm + mov dx,3DAh +l1: + in al,dx + and al,08h + jnz l1 +l2: + in al,dx + and al,08h + jz l2 +end; + +Procedure GetPal(Col : Byte; Var R,G,B : Byte); + { This gets the Red, Green and Blue values of a certain color } +Var + rr,gg,bb : Byte; +Begin + asm + mov dx,3c7h + mov al,col + out dx,al + + add dx,2 + + in al,dx + mov [rr],al + in al,dx + mov [gg],al + in al,dx + mov [bb],al + end; + r := rr; + g := gg; + b := bb; +end; + + + + +procedure outtextlineover(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[ord(st[(i*2)]),line]; + fontline[((i-1)*2)+1]:=charset[ord(st[(i*2)-1]),line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov dl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] +gus1: + cmp bx,02 + jnge gus4 + mov cx,16 + lodsw + jmp gus5 +gus4: + mov cx,8 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + mov al,dl + jmp gus8 +gus7: + mov al,dh +gus8: + xor ah,ah + stosb + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + + + +procedure outtextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus6,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[ord(st[(i*2)]),line]; + fontline[((i-1)*2)+1]:=charset[ord(st[(i*2)-1]),line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov bl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] + +gus1: + + cmp bx,02 + + jnge gus4 + mov cx,16 + lodsw + jmp gus5 +gus4: + mov cx,8 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + inc di + jmp gus8 +gus7: + mov al,dh + xor ah,ah + stosb +gus8: + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + + +procedure outtextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +label l0105; +var l,len,i,xadd,yadd,lineon:integer; + n,k,o,min,max,qwerty:byte; +begin + for lineon:=0 to (charheight-1) do + if overwrite then + outtextlineover(st,x,y+lineon,col,background,lineon,where) + else + outtextline(st,x,y+lineon,col,background,lineon,where); + +end; + + + +procedure OutSmallTextLineOver(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[(ord(st[(i*2)]))+128,line]; + fontline[((i-1)*2)+1]:=charset[(ord(st[(i*2)-1]))+128,line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov dl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] +gus1: + xor ax,ax + cmp bx,02 + jnge gus4 + mov cx,10 + lodsb + push bx + mov bl,al + xor bh,bh + lodsb + shl ax,5 + add ax,bx + shl ax,3 + pop bx + jmp gus5 +gus4: + mov cx,5 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + mov al,dl + jmp gus8 +gus7: + mov al,dh +gus8: + xor ah,ah + stosb + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + +procedure outsmalltextline(st:string;x,y:integer;col,background:byte;line:integer;where:word); +label gus1,gus4,gus6,gus5,gus7,gus8,gus3; +var i,len:word; + +begin + len:=length(St); + for i:=1 to (len div 2)+1 do begin + fontline[(i-1)*2]:=charset[(ord(st[(i*2)]))+128,line]; + fontline[((i-1)*2)+1]:=charset[(ord(st[(i*2)-1]))+128,line]; + end; + asm + push ds + push si + push es + push di + mov ax,[fontseg] + mov ds,ax + mov ax,[fontoff] + mov si,ax + mov dh,[col] + mov bl,[background] + mov ax,[y] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov di,ax + mov ax,[where] + mov es,ax + mov bx,[len] + +gus1: + xor ax,ax + cmp bx,02 + jnge gus4 + mov cx,10 + lodsb + push bx + mov bl,al + xor bh,bh + lodsb + shl ax,5 + add ax,bx + shl ax,3 + pop bx + jmp gus5 +gus4: + mov cx,5 + lodsw +gus5: + shl ax,1 + push ax + jc gus7 + inc di + jmp gus8 +gus7: + mov al,dh + xor ah,ah + stosb +gus8: + pop ax + loop gus5 + cmp bx,2 + jng gus3 + dec bx + dec bx + jmp gus1 +gus3: + pop di + pop es + pop si + pop ds +end; +end; + + +procedure outsmalltextxy(st:string;x,y,col,background:integer;where:word;overwrite:boolean); +label l0105; +var l,len,i,xadd,yadd,lineon:integer; + n,k,o,min,max,qwerty:byte; +begin + for lineon:=0 to 4 do + if overwrite then + outsmalltextlineover(st,x,y+lineon,col,background,lineon,where) + else + outsmalltextline(st,x,y+lineon,col,background,lineon,where); + +end; + + + +function sgn(a:real):integer; +begin + if a>0 then sgn:=+1; + if a<0 then sgn:=-1; + if a=0 then sgn:=0; +end; + +procedure line(a,b,c,d,col:integer;where:word); +var u,s,v,d1x,d1y,d2x,d2y,m,n:real; + i:integer; +begin + u:= c - a; + v:= d - b; + d1x:= SGN(u); + d1y:= SGN(v); + d2x:= SGN(u); + d2y:= 0; + m:= ABS(u); + n := ABS(v); + IF NOT (M>N) then + BEGIN + d2x := 0 ; + d2y := SGN(v); + m := ABS(v); + n := ABS(u); + END; + s := INT(m / 2); + FOR i := 0 TO round(m) DO + BEGIN + putpixel(a,b,col,where); + s := s + n; + IF not (s0 then dec(r); + if g>0 then dec(g); + if b>0 then dec(b); + pal(j,r,g,b); + end; + end; +end; + +procedure unfade; +var i,j:integer; + r,g,b:byte; +begin + for i:=0 to 63 do begin + for j:=0 to 255 do begin + getpal(j,r,g,b); + if r0 then savepicsuperpacked:=1; + if Ioresult<>0 then exit; + for i:=0 to 3 do begin + buffer[0]:=ord(header[(i*3)+1]); + buffer[1]:=ord(header[(i*3)+2]); + buffer[2]:=ord(header[(i*3)+3]); + blockwrite(f,buffer,1); + end; + + for i:=0 to (maxcolors-1) do + begin + getpal(i,buffer[0],buffer[1],buffer[2]); + blockwrite(f,buffer,1); + end; + + xsize:=abs(x2-x1); + ysize:=abs(y2-y1); + integer23bytes(xsize,ysize); + integer23bytes(maxcolors,0); + + for y:=y1 to y2 do begin + oldcol:=getpixel(x1,y,where); numacross:=1; + for x:=(x1+1) to x2 do begin + col:=getpixel(x,y,where); + if col=oldcol then inc(numacross) + else begin + integer23bytes(oldcol,numacross); + numacross:=1; + end; + oldcol:=col; + end; + integer23bytes(col,numacross); + end; + close(f); +end; + +function LoadPicSuperPacked(x1,y1:integer;where:word;LoadPal,LoadPic:boolean;FileName:string):byte; + +var buffer:array[0..299] of byte; + result,buffpointer:integer; + f:file; + col,x,y,xsize,ysize,i,oldcol, + maxcolors,tempint1,tempint2,numacross:integer; + header:string; + lastread:boolean; + tempbyte,r,g,b:byte; + +procedure sixbytes2twoint; +var temp1,temp2,temp3:byte; + int1,int2:integer; +begin + temp1:=buffer[buffpointer]; + temp2:=buffer[buffpointer+1]; + temp3:=buffer[buffpointer+2]; + inc(buffpointer,3); + if (buffpointer>=result) then + if (result=300) then begin + blockread(f,buffer,300,result); + buffpointer:=0; + end + else lastread:=true; + asm + mov ah,temp1 + mov al,temp2 + shr ax,4 + mov int1,ax + mov ah,temp2 + mov al,temp3 + shl ah,4 + shr ah,4 + mov int2,ax + end; + tempint1:=int1; + tempint2:=int2; +end; + + + +begin + lastread:=false; + loadpicsuperpacked:=0; + header:=''; + buffpointer:=0; + assign(f,filename); + {$I-} + reset(f,1); + {$I+} + if IOresult<>0 then LoadPicSuperPacked:=1; + if IOresult<>0 then exit; + + blockread(f,buffer,300,result); + + for i:=1 to 9 do header:=concat(header,chr(buffer[i-1])); + + + if header<> 'PAINTPROV' then LoadPicSuperPacked:=2; + if header<> 'PAINTPROV' then exit; + + header:=''; + + header:=concat(header,chr(buffer[9]),chr(buffer[10]),chr(buffer[11])); + + if header<>'5.0' then LoadPicSuperPacked:=3; + if header<>'5.0' then exit; + buffpointer:=12; + + for i:=0 to 255 do begin + r:=buffer[buffpointer]; + g:=buffer[buffpointer+1]; + b:=buffer[buffpointer+2]; + inc(buffpointer,3); + if (buffpointer>=result) then + if (result=300) then begin + blockread(f,buffer,300,result); + buffpointer:=0; + end + else + + lastread:=true; + if loadpal then pal(i,r,g,b); + end; + + + + sixbytes2twoint; + xsize:=tempint1; + ysize:=tempint2; + sixbytes2twoint; + maxcolors:=tempint1; + + {if maxcolors>256 then error=4} + + x:=x1; + y:=y1; +if loadpic=true then begin + while (lastread=false) do begin + sixbytes2twoint; + col:=tempint1; + numacross:=tempint2; + horizontalline(x,x+numacross,y,col,where); + { for i:=x to (x+numacross) do putpixel(i,y,col,where);} + if (x+numacross)>xsize+x1 then begin + inc(y); + x:=x1; + numacross:=0; + end; + x:=x+numacross; + end; +end; +close(f); +end; + +function oldloadpicsuperpacked(x1,y1:integer;where:word;fil:string):byte; + +var buffer:array[0..255] of byte; + f:file; + col,x,y,xsize,ysize,buffpointer,i,oldcol, + tempint1,tempint2,numacross:integer; + header:string; + lastread,done:boolean; + temp7:string; + +procedure readbuffer; +begin + blockread(f,buffer,1); + if buffer[255]=90 then lastread:=true; +end; + +procedure sixbytes2twoint; +var temp1,temp2,temp3:byte; + int1,int2:integer; +begin + if buffpointer>=253 then begin + readbuffer; + buffpointer:=0; + end; + if not done then begin + temp1:=buffer[buffpointer]; + temp2:=buffer[buffpointer+1]; + temp3:=buffer[buffpointer+2]; + if (temp1=255) and (temp2=255) and (temp3=255) then + done:=true; + inc(buffpointer,3); + asm + mov ah,temp1 + mov al,temp2 + shr ax,1 + shr ax,1 + shr ax,1 + shr ax,1 + mov int1,ax + mov ah,temp2 + mov al,temp3 + shl ah,4 + shr ah,4 + mov int2,ax + end; + tempint1:=int1; + tempint2:=int2; +end; +end; +label ender; +begin + done:=false; + header:='PAINTPROV4.00'; + assign(f,fil); + reset(f,256); + readbuffer; + buffpointer:=0; + temp7:=header; + for i:=1 to 13 do temp7[i]:=chr(buffer[i-1]); + if temp7<>header then begin + oldloadpicsuperpacked:=01; + exit; + end; + buffpointer:=13; + sixbytes2twoint; + xsize:=tempint1; + ysize:=tempint2; + sixbytes2twoint; + + x:=x1; + y:=y1; +repeat + sixbytes2twoint; + if done then goto ender; + col:=tempint1; + numacross:=tempint2; + for i:=x to (x+numacross) do putpixel(i,y,col,where); + if (x+numacross)>xsize+x1 then begin + inc(y); + x:=x1; + numacross:=0; + end; + x:=x+numacross; + ender: +until done=true; +close(f); +end; + + + + +procedure box(x1,y1,x2,y2,col:integer;where:word); +begin + line(x1,y1,x1,y2,col,where); + horizontalline(x1,x2,y2,col,where); + line(x2,y2,x2,y1,col,where); + horizontalline(x1,x2,y1,col,where); +end; + +procedure vdelay(howlong:integer); +var i:integer; +begin + for i:=1 to howlong do waitretrace; +end; + +procedure setupvmwgraph; +begin + loadfont('8x8font.tb1'); + charheight:=8; + fontseg:=seg(fontline[0]); + fontoff:=ofs(fontline[0]); +end; + +procedure setuptb1; +begin + loadfont('tbfont.tb1'); + charheight:=8; + fontseg:=seg(fontline[0]); + fontoff:=ofs(fontline[0]); +end; + +begin +end. diff --git a/t2tract.tb1 b/t2tract.tb1 new file mode 100644 index 0000000..ae41140 Binary files /dev/null and b/t2tract.tb1 differ diff --git a/tb1.doc b/tb1.doc new file mode 100644 index 0000000..8e45584 --- /dev/null +++ b/tb1.doc @@ -0,0 +1,316 @@ +°°°°°² °°°°°² °² °² °°°°² °°°°°² °² °² °°°°² °°°°°² °² °² + °² °² °² °°²°°² °² °² °² °² °°²°°² °² °² °² °°²°°² + °² °² °² °²°²°² °°°°² °² °² °²°²°² °°°°² °°°°² °²°²°² + °² °² °² °² °² °² °² °² °² °² °² °² °² °² °² °² + °² °°°°°² °² °² °°°°² °°°°°² °² °² °°°°² °°°°°² °² °² + AND THE INVASION OF THE INANIMATE OBJECTS + + by + + Vince Weaver + +Version 2.4a +--------------------------------------------------------------------- + +Contents +-------- + 1.0 SYSTEM REQUIREMENTS + 2.0 STARTING THE GAME + 3.0 THE STORY + 4.0 GAME PLAY + 5.0 SAVING/LOADING GAMES + 6.0 TROUBLESHOOTING + 7.0 REGISTERING + 8.0 ACKNOWLEDGEMENTS + 9.0 CURRENT BUGS (FEATURES) + 10.0 PRAISE/ACCOMPLISHMENTS + + + 1.0 SYSTEM REQUIREMENTS +--------------------------------------------------------------------- + Bare Minimum: + 286/ 400K RAM/ 500K disk space + To run at a reasonable speed: + 386 33Mhz or better + For Digitized Sound: + XMS RAM, Sound Blaster or Compatible sound card + + (I have been developing this on a 386 33Mhz and it runs + passibly. It runs so much smoother on a 486. I'll try + to optimize the code some more...) + + + 2.0 STARTING THE GAME +--------------------------------------------------------------------- + Make sure all the files are in the same directory (list below) + [if any are missing, you will get a run-time error] + + Run the TBSETUP configuration utility. Pick the appropriate + options. + + Type TB1 to run the game. See "TROUBLESHOOTING" if you encounter + any errors. + + + To run Tom Bombem off of a CD-ROM: + Either type "tb1 -cdrom" to start the program in read-only + mode, or say "y" when prompted if you want read-only mode. + In this mode there are no saved games and the high score + list will not change. + + Files Needed: + TB1.EXE - Main executable + TBSETUP.EXE - Setup Program + CONFIG.TB1 - Config File Created by Setup Program + TBSOUND.EXE - Cool sound tester + MOON2.TB1 ¿ + REGISTER.TB1 ³ + TBGORG.TB1 ³ + TBCRASH.TB1 ³ + TBSOBJ.TB1 ³ + SHIPS.TB1 Ã Graphics files in PAINTPRO 5.0 format + TBOMB1.TB1 ³ + TBMA1.TB1 ³ + VIEWSCR.TB1 ³ + TBSHAPES.TB1 ³ + TBCOBJ.TB1 ³ + TBCHIEF.TB1 ³ + TBASHIP.TB1 ³ + TBL2SHIP.TB1 ³ + TBLEV3.TB1 ³ + TBL3INTR.TB1 ³ + TBEERM.TB1 ³ + TBCONSOL.TB1 ³ + TBPIT.TB1 ³ + TBASH.TB1 ³ + TBCOBJ.TB1 ³ + TBTRACT.TB1 Ù + LEVEL2.TB1 - Level Two Database + LEVEL4.TB1 - Level Four Database + FILE_ID.DIZ - Info file for BBS's + TBFONT.TB1 - Fonts for the game (a standard VGA font) + HISCORE.TB1 - The High Score List + TB1.DOC - The file you're reading + SOUNDS.TB1 - Sound effects + SGx.TB1 - Where x is a number... these are saved games + + + 3.0 THE STORY +--------------------------------------------------------------------- + + To understand the game, pick the "Story" option off of the + main menu. This part of the game took a lot of time in + itself, and is fun to read. + + The "Audio Error!" is not a real error. I just saved myself + the trouble of recording a voice-track for the game. As many + friends have said, "That's cheating!" but anyway unless I had + a lot of time and a CD-ROM, it is not practical. + + Anyway in the story, any key will speed up most scenes, and + escape will quit the whole thing. + + 4.0 GAME PLAY + -------------------------------------------------------------------- + To begin the game, select "NEW GAME" at the main menu. + + A little humorous movie will show; press to skip. + + The game itself is pretty simplistic as of yet. Basically + shoot the things coming at you. The arrow keys manuever... + the manuevering takes a little bit of practice to master. + Space shoots. You can shoot up to two missiles at once. + "S" toggles sound. "P" pauses. If the game play is too fast, + try the "+" and "-" keys to adjust. Sorry, if it runs too + slow at the onset, then your computer is too slow. + + The first level culminates with a "boss" character. Read the + story and see what happens. The dialog will clue you into + what's happening. + + The second level is now totally finished. Be sure to save + your games whenever you start a new level! + + Levels three and four are currently under development. In + level three, use the arrow keys to "walk" around. The space + bar will fire a weapon if you've picked one up. To activate/ + pick up things, walk into them. + + Level four is similar to level two. (Actually they are based + on the same game engine). They will be finished by version 2.5. + + An undocumented featue: when your score reaches a multiple of + 400 your shields are increased by one. + + Basic Summary of Keyboard Commands: + + ARROWS Manuever + SPACE Fires + Exits + P Pauses + S Toggles sound on/off + + Slows down game speed + - Increases game speed + F1 Shows help message + F2 Saves the Game (see "SAVING/LOADING GAMES") + + 5.0 SAVING/ LOADING GAMES +--------------------------------------------------------------------- + You can save games. However the only part that is saved is + how you begin the level. Therefore there is no real purpose + to saving your game until you reach level two. + + This might seem annoying, but at this point it is the only + practical way to implement saved games. + + + 6.0 TROUBLESHOOTING +--------------------------------------------------------------------- + This program usually runs fine on most computers. Occasionally + it will lock up on my brother for some inexplicable reason. + If it locks up frequently, try playing without sound blaster + sounds. + + Possible Problems: + + RUNTIME ERRORS: (Characterized by a "Rumtime Error at 4454:3434" + message.) Either a genuine bug or else one of + the ".TB1" graphics files is missing. + + LOCKING UP : If you have a sound blaster, try configuring + without SOUND, using the "TBSETUP" utility. + + MEMORY ERRORS : If you want soundblaster sound, HIMEM.SYS must + be loaded. Check DOS documentation. + + SOUND ERRORS : If you have a sound blaster and you are not + getting sound, be sure your "SET BLASTER" + command in your autoexec.bat is set properly. + + HARSH GRATING SOUND: This has happened occassionally at a + certain point on level two. I've tried to + fix it. If it's annoying, turn the sound + off. + + MISC ERRORS : Contact me at vmweaver@wam.umd.edu + + + 7.0 REGISTERING +--------------------------------------------------------------------- + My game is freeware. There is no copy protection. Hopefully + if you like it you will let me know, by mail or by e-mail. + A donation is not required, but if you want to you can send + me one. + + I will be attending college soon (Fall of 1996) so my e-mail + address, has changed from what it was earlier to: + vmweaver@wam.umd.edu + + You can get Tom Bombem at its web site, + + http://www.wam.umd.edu/~vmweaver/tb1/ + + Also, a college education is expensive, so any donations would + be a big help. + + Vince Weaver vmweaver@wam.umd.edu + [real home] + 326 Foster Knoll Dr. + Joppa, MD 21085-4706 + + + 8.0 ACKNOWLEDGEMENTS +--------------------------------------------------------------------- + I would like to thank many people who helped on this project. + + Ethan Brodsky for his excelent sound blaster routines. + Get them at http://www.pobox.com/~ebrodsky/smix/smix.html + There would be no sound blaster sound without them. + + The authors of PCGPE. This program started out as a + "flying toaster" demonstration from the Asphixia + VGA tutorials. I gradually replaced most of their code, + but I still use their putpixel, waitretrace, setmcga and + settext routines. + + I would also like to thank all my friends who have supported + me, especially Gus Thompson, because she went to Spain and + gave me time to work on this. Also Marie Prosser for + inspiration, and she also went away for three weeks + allowing me to work on this. Thanks to Nick Attanasio + who actually plays this game a lot, and whose comments + have hastened work on level 3. + + FUTURE ENHANCEMENTS: + I am going to learn how to use Mode X vga programming. + Supposedly this will speed up the code. Unless you + have a 386 like me, you probably won't notice. + + I'm also going to try to get some music in the + background, and of course add more levels. + + Also watch for a SGI gl port and possibly some + sort of Linux port. The only problem is that + they'll have to be in C. ( :-( ) + + +9.0 CURRENT BUGS (FEATURES) +------------------------------------------------------------------- + + Level One: No Known Ones + Level Two: Locks up for no reason near end sometimes? + Level Three: Many. This level still is under development. + Sometimes doors will not activate, sometimes + they send you to the wrong room. + Laser doesn't work, nor do enemies or + radioactive flooring. It is possible to + beat it though. + Level Four:Not done. Right now is level two with different + shape table. + + LOOK FOR NEWER RELEASES TO HAVE FEWER BUGS. + + If you find a unique bug, e-mail me describing it. + + +10.0 PRAISE/ACCOMPLISHMENTS OF TOM BOMBEM +___________________________________________________________________ + + Supposedly it will be on one of Pacific Hi-Tech's + "Gamehead" CD's. We'll see. + + A German book company has offered to put it in a CD included + with a Shareware Games book. + + Now Praise: + + + "I just like it when it says 'Ahhh... Mr. Bombem.'" + ----Greg Grabowski, Bel Air, MD + + "It's simplicity reminded me of the early computer + shooters... Kind of nostalgic... But the nice + side [is] the very clever cinematic text." + ---->> Delance << + + "The game is well designed but does not fit + our current product line." + ----Apogee Software Productions + + +Remember: Watch for the newest version of Tom Bombem... and have fun. + + Vince Weaver 14 July 1996 18:12:59 EDT + + + + + + + + + + + + + diff --git a/tb1.pas b/tb1.pas index e752a5d..a081150 100644 --- a/tb1.pas +++ b/tb1.pas @@ -1,72 +1,312 @@ program TOM_BOMB_EM_AND_INVASION_OF_INANIMATE_OBJECTS; +{version 2.4a} {by Vincent Weaver....21085-4706} -uses vmwgraph,crt; +uses svmwgraph,nvmwgraph,crt,detect,smix,dos; -{$I c:\vmw\pascal\programs\tb1ans.pas} -{$M $4000,0,$20000} {16k stack, no heap - adjust as needed } -{$L MOD-obj.OBJ} { Link in Object file } -{$F+} { force calls to be 'far'} -procedure modvolume(v1,v2,v3,v4:integer); external ; {Can do while playing} -procedure moddevice(var device:integer); external ; -procedure modsetup(var status:integer;device,mixspeed,pro,loop:integer;var str:string); external ; -procedure modstop; external ; -procedure modinit; external; -{$F-} +{$G+} +{$I tb1ans.pas} + + const + XMSRequired = 90; {XMS memory required to load the sounds (KBytes) } + SharedEMB = true; + {TRUE: All sounds will be stored in a shared EMB} + {FALSE: Each sound will be stored in a separate EMB} + NumSounds = 8; + + {Shape Table Values For Story} + bargeoff = 0; + bigflame1off = 290; + bigflame2off = 780; + sflame2off = 1270; + sflame1off = 1290; + truck1off = 1310; + truck2off = 1370; + explo1off = 1430; + explo2off = 1730; + rent1off = 2030; + {Shape Table Values for Game} + shape1off = 8000; + shape2off = 8400; + shape3off = 8800; + shape4off = 9200; + shape5off = 9600; + shape6off = 10000; + shape7off = 10400; + shape8off = 10800; + shape9off = 11200; + shape10off = 11600; + shape11off = 12000; + shape12off = 12400; + shape13off = 12800; + shape14off = 13200; + shape15off = 13600; + shape16off = 14000; + shape17off = 14400; + shape18off = 14800; + shape19off = 15200; + shape20off = 15600; + bigship1off = 0; + bigship2off = 1600; + bigship3off = 3200; + shapearray : + array [1..20] of word =(8000,8400,8800,9200, + 9600,10000,10400,10800, + 11200,11600,12000,12400, + 12800,13200,13600,14000, + 14400,14800,15200,15600); + + + shape2array : + array [0..39] of word =(8000,8200,8400,8600,8800, + 9000,9200,9400,9600,9800, + 10000,10200,10400,10600,10800, + 11000,11200,11400,11600,11800, + 12000,12200,12400,12600,12800, + 13000,13200,13400,13600,13800, + 14000,14200,14400,14600,14800, + 15000,15200,15400,15600,15800); + + shape3array : + array [0..79] of word =(8000,8100,8200,8300,8400, + 8500,8600,8700,8800,8900, + 9000,9100,9200,9300,9400, + 9500,9600,9700,9800,9900, + 10000,10100,10200,10300,10400, + 10500,10600,10700,10800,10900, + 11000,11100,11200,11300,11400, + 11500,11600,11700,11800,11900, + 12000,12100,12200,12300,12400, + 12500,12600,12700,12800,12900, + 13000,13100,13200,13300,13400, + 13500,13600,13700,13800,13900, + 14000,14100,14200,14300,14400, + 14500,14600,14700,14800,14900, + 15000,15100,15200,15300,15400, + 15500,15600,15700,15800,15900); -type screentype = array [0..3999] of byte; -Type Shipinfo = Record { This is format of of each of our } - x,y:integer; { records for the flying toasters } - speed,frame:integer; - active:boolean; - END; + +var {Brodsky's Variables} + BaseIO: word; IRQ, DMA, DMA16: byte; + Sound: array[0..NumSounds-1] of PSound; + OldExitProc: pointer; + Xsoundeffects,Xsbsound:byte; + sbsound,sbeffects:boolean; + XBASEIO,XDMA,XIRQ:word; + +type ScreenType = array [0..3999] of byte; {For Ansi Loading} + + + EnemyInfo = record + x,y:integer; + kind:byte; + out,exploding,boundarycheck,dead:boolean; + explodprogress:byte; + minx,maxx,xspeed,yspeed:integer; + hitsneeded:integer; + end; + Obstruction = record + x,y:integer; + shooting,dead,exploding:boolean; + explodeprogress:byte; + howmanyhits:integer; + kind,lastshot:byte; + end; + + + Virtual = Array [1..64000] of byte; { The size of our Virtual Screen } VirtPtr = ^Virtual; { Pointer to the virtual screen } + ShapeTable = Array [0..16000] of byte; + ShapePtr = ^ShapeTable; -var - dev,mix,stat,pro,loop : integer; - md : string; -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} +var ho,mi,se,s100:word; + background:array[0..200,0..11] of byte; + tempsec:integer; + flames:boolean; + inte:integer; + dev,mix,stat,pro,loop : integer; + testr,string_param,md : string; + howmuchscroll:byte; + filestuff:searchrec; {for load game} + savegamef:text; + ondisk:string; + tempch:char; + CDROMmode:boolean; + +VAR Virscr,VirScr2,VirScr3 : VirtPtr; { Our first Virtual screen } + ShapeTable1:ShapePtr; + num:byte; + Vaddr,Vaddr2,Vaddr3 : Word; { The segment of our 2nd virt. screen} + ShapeAddr:word; { The segment of the shape table} + ShapeOfs:word; + backofs,backseg:word; ourpal : Array [0..255,1..3] of byte; { A virtual pallette } - shipv : Array [1..1] of shipinfo; { The toaster info } - Sound : Pointer; + enemy:array[0..5] of enemyinfo; + passive:array[0..30] of obstruction; + numpassive:integer; + Soundp : Pointer; Check : BOOLEAN; - frame:array[0..2,0..47,0..29] of byte; - bigflame:array[0..1,0..26,0..18] of byte; - smallflame:array[0..1,0..3,0..4] of byte; - barge:array[0..15,0..18] of byte; - truck:array[0..1,0..5,0..8] of byte; - saucer:array[0..20,0..5] of byte; - shot:array[0..20,0..5] of byte; - hiscore,level,lives,energy:integer; + + hiscore,level,shields:integer; + beginscore,beginshields:integer; score:longint; axel_und_carmen:boolean; tempi,tempj:integer; scorest:string[8]; - musicon:boolean; + soundeffects:boolean; lowscore:integer; it,hiname:string[10]; + shipxadd,shipyadd,shipadd,shipx,shipy,shipspeed,shipframe:integer; + 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; + +procedure ClearKeyboardBuffer; +begin + mem[$0040:$001c]:=mem[$0040:$001a]; +end; + + +procedure fillblock(xx1,yy1,xx2,yy2:integer;colo:byte;where:word); +label gus3,gus; +begin + asm + push es {Save Variables} + push ds + mov ax,where {Load where output Goes} + mov es,ax + mov ah,colo {Color To Block} + mov al,colo + mov bx,yy1 + mov dx,bx {Multiply by 320 to find start row} + shl dx,5 + mov cx,dx + shl dx,1 + shl cx,3 + add dx,cx + add dx,xx1 {Add x to get column} + mov di,dx {Load into register} + + mov dx,[xx2] {Calculate width and store in dx} + sub dx,[xx1] + mov bx,320 {Calcualte and store skipover} + sub bx,dx + push bx + mov bx,[yy2] {calculate height and store in bx} + sub bx,[yy1] + +gus3: + mov cx,dx + shr cx,1 {Divide width in half} + jnc gus {If even, jump} + + stosb {then store odd byte} + {Jump Past} +gus: + rep stosw {Its even.. so store words} + + pop cx {restore and add skipover} + add di,cx + push cx + dec bx {decrement y line} + jnz gus3 {if not zero, go back} + pop cx + pop ds {restore registers} + pop es + end; +end; + +procedure ReadConfigFile; +var ff:text; +begin + if not(CDROMmode) then begin + {$I-} + assign(ff,'config.tb1'); + reset(ff); + close(ff); + {$I+} + if IOresult<>0 then begin + textcolor(12); + writeln('Warning: Missing or Invalid "config.tb1" file'); + writeln; + textcolor(3); + writeln('If you are running this off of a CD-ROM drive:'); + textcolor(7); + writeln(' For optimal performance you should copy this game'); + writeln(' to a floppy or hard disk. However you can play in'); + writeln(' read only mode.'); + writeln; + textcolor(3); + writeln('If you are not running this off of a CD-ROM drive:'); + textcolor(7); + write(' Please run the "'); + textcolor(2); + write('tbsetup'); + textcolor(7); + writeln('" utility included to set'); + writeln(' up your computer. Thank You.'); + writeln; + textcolor(3); + writeln('It is possible to play this game in read only mode. There will'); + writeln('be no high scores or saved games, but it is playable.'); + writeln; + textcolor(12); + writeln('Press ''R'' to play in read-only mode.'); + clearkeyboardbuffer; + repeat until keypressed; + ch:=readkey; + textcolor(7); + if upcase(ch)='R' then CDROMmode:=true + else halt(5); + end; + end; + if not(CDROMmode) then begin + assign(ff,'config.tb1'); + reset(ff); + readln(ff,Xsoundeffects); + readln(ff,Xsbsound); + readln(ff,Xbaseio); + readln(ff,Xirq); + readln(ff,Xdma); + close(ff); + end + else begin + writeln; + writeln; + textcolor(2); + writeln('Do you want soundblaster effects? (y/n)'); + writeln; + textcolor(7); + writeln(' (If you encounter problems, be sure the SET BLASTER'); + writeln(' environmental variable is set. See your soundcard''s manual).'); + clearkeyboardbuffer; + repeat until keypressed; + ch:=readkey; if upcase(ch)='Y' then begin + xsbsound:=1; Xsoundeffects:=1; soundeffects:=true; + end + else begin xsbsound:=0; Xsoundeffects:=0; soundeffects:=false; + end; + end; +end; + + + function menuread:char; var chtemp,ch2:char; begin @@ -87,49 +327,26 @@ begin menuread:=chtemp; end; + procedure coolbox(x1,y1,x2,y2:integer;fill:boolean;page:word); begin for i:=0 to 5 do box(x1+i,y1+i,x2-i,y2-i,31-i,page); - if fill then for i:=y1+5 to y2-5 do line(x1+5,i,x2-5,i,7,page); + if fill then for i:=y1+5 to y2-5 do + horizontalline(x1+5,x2-5,i,7,page); end; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} + Procedure ShutDown; { This frees the memory used by the virtual screen } BEGIN FreeMem (VirScr,64000); FreeMem (VirScr2,64000); + FreeMem (VirScr3,16800); + FreeMem (ShapeTable1,16000); END; -procedure QUIT; -label menu2; -begin - coolbox(90,75,230,125,true,vga); - barpos:=0; - outtextxy('QUIT??? ARE YOU',97,82,15,9,7,vga,false); - outtextxy('ABSOLUTELY SURE?',97,90,15,9,7,vga,false); - repeat - if barpos=0 then outtextxy('YES-RIGHT NOW!',97,98,15,150,0,vga,true) - else outtextxy('YES-RIGHT NOW!',97,98,15,150,7,vga,true); - if barpos=1 then outtextxy('NO--NOT YET.',97,106,15,150,0,vga,true) - else outtextxy('NO--NOT YET.',97,106,15,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; - move(imagedata,screen,4000); - gotoxy(1,23); - halt; - menu2: - barpos:=6; -end; - Procedure SetUpVirtual; { This sets up the memory needed for the virtual screen } BEGIN @@ -137,6 +354,13 @@ BEGIN vaddr := seg (virscr^); GetMem (VirScr2,64000); vaddr2 := seg (virscr2^); + GetMem (VirScr3,16800); + vaddr3:=seg(virscr3^); + GetMem (ShapeTable1,16000); + shapeaddr:= seg (ShapeTable1^); + shapeofs:=ofs (ShapeTable1^); + backofs:=ofs(background); + backseg:=seg(background); END; function showhiscore(showchart,savelist:boolean):integer; @@ -145,7 +369,7 @@ var hilist:text; place,tempi:integer; names:array[0..9] of string[10]; scores:array[0..9] of longint; - +label bob; begin assign(hilist,'HISCORE.TB1'); reset(hilist); @@ -155,13 +379,13 @@ begin lowscore:=scores[9]; showhiscore:=scores[0]; if showchart then begin - for i:=40 to 160 do line(45,i,285,i,7,vga); - coolbox(45,40,285,160,false,vga); + fillblock(45,40,285,160,7,vga); + coolbox(45,40,285,160,false,vga); for i:=0 to 9 do - outtextxy(names[i],51,46+(i*10),15,9,7,vga,true); + outtextxy(names[i],51,46+(i*10),9,7,vga,true); for i:=0 to 9 do begin str(scores[i],testr); - outtextxy(testr,181,46+(i*10),15,9,7,vga,true); + outtextxy(testr,181,46+(i*10),9,7,vga,true); end; repeat until keypressed; ch:=readkey; @@ -174,423 +398,3004 @@ begin for tempi:=9 downto place do names[tempi]:=names[tempi-1]; scores[place]:=score; names[place]:=hiname; - assign(hilist,'HISCORE.TB1'); - rewrite(hilist); - for i:=0 to 9 do writeln(hilist,names[i]); - for i:=0 to 9 do writeln(hilist,scores[i]); - close(hilist); + if not(CDROMmode) then begin + assign(hilist,'HISCORE.TB1'); + rewrite(hilist); + for i:=0 to 9 do writeln(hilist,names[i]); + for i:=0 to 9 do writeln(hilist,scores[i]); + close(hilist); + end; + end; +end; + +procedure putshape240over(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor cx,cx + xor dx,dx + mov ax,240 + sub ax,[xacross] {xacross?} + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + rep movsb + cmp dx,bx + jz bob3 + xor cx,cx + add di,ax + inc dx + jmp bob + bob3: + {restore variables} + pop ds + end; +end; + +procedure putshape240(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + mov bx,240 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds end; end; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure drawstars(menu:boolean); - { This procedure sets up the static background to be used in the program } +procedure putshape(shapeoffset,towhere,xacross,yacross,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; -CONST circ : Array [1..5,1..5] of byte = - ((00,00,30,00,00), - (00,00,26,00,00), - (30,26,18,26,30), - (00,00,26,00,00), - (00,00,30,00,00)); +procedure putshapeline(fromwhereo,towhere,xacross,yacross,xx,yy,line:word); +var int,color:integer; +{draws just one line of a shape with same syntax as putshape} +begin + for int:=0 to xacross do begin + {does not work. stack overflow} + (*asm + push ax + push bx + push cx + mov ax,[line] {multiplies y value by 320} + mul [xacross] + add ax,[int] + mov bx,ax + mov ax,[ShapeAddr] {moves segment of array} + mov ds,ax + {mov ax,[ShapeOfs]} {moves offset of array} + mov ax,[fromwhereo] + add ax,bx + mov si,ax + xor ax,ax + lodsb + mov [color],ax + pop cx + pop bx + pop ax + end;*) + color:=ShapeTable1^[fromwhereo+((xacross*line)+int)]; + if color<>0 then putpixel(xx+int,yy+line,color,towhere); + end; +end; +procedure putshapeover(fromwhereo,towhere,xacross,yacross,xx,yy:word); +label bbob,bbob4,bbob2,bbob3; +begin + asm + push ax {saves registers} + push dx + push cx + push bx + push ds + mov ax,[yy] {multiplies y value by 320} + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + mov bx,320 + sub bx,[xacross] {xacross?} + push bx + mov bx,[yacross] + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + (*add ax,[shapeofs] *) {moves offsett if array} + mov ax,[fromwhereo] + mov si,ax + mov ax,[towhere] {loads place to move it} + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bbob: + mov cx,[xacross] {how long to loop across (the x-size of array)} + bbob4: + rep movsb {copies, overwriting} + bbob2: {Adds when x-value must be increased} + cmp dx,bx + jz bbob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bbob + bbob3: + pop bx {restore variables} + pop ds + pop bx + pop cx + pop dx + pop ax + end; +end; + + +procedure help; +begin + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('HELP',144,10,4,0,vga,false); + outtextxy('--------------------------------------',10,20,12,0,vga,false); + outtextxy('IN THE GAME:',10,30,4,0,vga,false); + outtextxy(' ARROWS MANUEVER',10,40,4,0,vga,false); + outtextxy(' SPACE BAR FIRES MISSILES',10,50,4,0,vga,false); + outtextxy(' F2 SAVES GAME',10,60,4,0,vga,false); + outtextxy(' P=PAUSE S=TOGGLE SOUND ESC=QUIT',10,70,4,0,vga,false); + outtextxy('--------------------------------------',10,80,12,0,vga,false); + outtextxy('MISSION: SHOOT THE INANIMATE OBJECTS',10,90,4,0,vga,false); + outtextxy(' WHY? WATCH THE STORY!',10,100,4,0,vga,false); + outtextxy('--------------------------------------',10,110,12,0,vga,false); + outtextxy('THE SPACE BAR SPEEDS UP MOVIE SCENES',10,120,4,0,vga,false); + outtextxy('ESC QUITS THEM',10,130,4,0,vga,false); + outtextxy('--------------------------------------',10,140,12,0,vga,false); + outtextxy(' SEE "TB1.DOC" FOR MORE HELP/INFO',10,150,4,0,vga,false); + outtextxy('--------------------------------------',10,160,12,0,vga,false); + outtextxy('PRESS ANY KEY TO CONTINUE',64,185,4,0,vga,false); + repeat until keypressed; + ch:=readkey; +end; + + + + +Procedure setupsidebar; + VAR i,x,y:integer; loop1,loop2,loop3:integer; tempaddr:word; procedure makehole(y:integer); -var i:integer; begin - for i:=10 to 75 do line(239+i,y,239+i,y+9,0,tempaddr); - line(249,y,314,y,24,tempaddr); - line(249,y+10,313,y+10,18,tempaddr); - line(249,y,249,y+9,24,tempaddr); - line(314,y+1,314,y+10,18,tempaddr); + fillblock(249,y,314,y+9,0,tempaddr); + horizontalline(249,314,y,24,tempaddr); + horizontalline(249,313,y+10,18,tempaddr); + verticalline(y,y+9,249,24,tempaddr); + verticalline(y+1,y+10,314,18,tempaddr); end; + BEGIN - tempaddr:=vaddr; - - - 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],tempaddr); - END; - if menu=false then begin - for i:=240 to 319 do line(i,0,i,199,19,tempaddr); - line(240,0,240,199,18,tempaddr); - line(240,0,319,0,18,tempaddr); - line(319,0,319,199,24,tempaddr); - line(241,199,319,199,24,tempaddr); - outtextxy('SCORE',241,1,15,127,0,tempaddr,false); - outtextxy('SCORE',242,2,15,143,0,tempaddr,false); + tempaddr:=vaddr; + fillblock(240,0,320,199,19,tempaddr); + verticalline(0,199,240,18,tempaddr); + horizontalline(240,319,0,18,tempaddr); + verticalline(0,199,399,24,tempaddr); + horizontalline(241,319,199,24,tempaddr); + outtextxy('SCORE',241,1,127,0,tempaddr,false); + outtextxy('SCORE',242,2,143,0,tempaddr,false); makehole(10); - outtextxy(' 0',250,12,15,12,0,tempaddr,false); - outtextxy('HI-SCORE',241,21,15,127,0,tempaddr,false); - outtextxy('HI-SCORE',242,22,15,143,0,tempaddr,false); + str(score,it); + outtextxy(it,250+(8*(8-length(it))),11,12,0,tempaddr,true); + + outtextxy('HI-SCORE',241,21,127,0,tempaddr,false); + outtextxy('HI-SCORE',242,22,143,0,tempaddr,false); str(hiscore,it); - outtextxy(it,250,32,15,12,0,tempaddr,false); makehole(30); - outtextxy(' 0',250,32,15,12,0,tempaddr,false); - outtextxy('LEVEL',241,41,15,127,0,tempaddr,false); - outtextxy('LEVEL',242,42,15,143,0,tempaddr,false); + outtextxy(it,250+(8*(8-length(it))),31,12,0,tempaddr,true); + + outtextxy('LEVEL',241,41,127,0,tempaddr,false); + outtextxy('LEVEL',242,42,143,0,tempaddr,false); makehole(50); - outtextxy('12345675',251,52,15,12,0,tempaddr,false); - outtextxy('SHIELDS',241,61,15,127,0,tempaddr,false); - outtextxy('SHIELDS',242,62,15,143,0,tempaddr,false); + outtextxy('SHIELDS',241,61,127,0,tempaddr,false); + outtextxy('SHIELDS',242,62,143,0,tempaddr,false); makehole(70); - for i:=0 to 63 do line(250+i,71,250+i,79,((i div 4)+32),tempaddr); + for i:=0 to ((4*shields)-1) do + verticalline(71,78,250+i,(47-(i div 4)),tempaddr); - outtextxy('WEAPONS',241,81,15,127,0,tempaddr,false); - outtextxy('WEAPONS',242,82,15,143,0,tempaddr,false); + outtextxy('WEAPONS',241,81,127,0,tempaddr,false); + outtextxy('WEAPONS',242,82,143,0,tempaddr,false); makehole(90); - for i:=0 to 65 do line(249+i,111,249+i,189,0,tempaddr); - line(249,111,249,189,24,tempaddr); - line(315,111,315,189,18,tempaddr); - line(249,111,315,111,24,tempaddr); - line(249,189,315,189,18,tempaddr); - outtextxy(' VMW ',251,114,15,15,0,tempaddr,false); - outtextxy('F1-HELP ',251,124,15,15,0,tempaddr,false); - outtextxy('ESC-QUIT',251,135,15,15,0,tempaddr,false); - outtextxy('F2-SAVE ',251,145,15,15,0,tempaddr,false); - end; - if not(menu) then begin - 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; + fillblock(249,111,314,189,0,tempaddr); + + verticalline(111,189,249,24,tempaddr); + verticalline(111,189,315,18,tempaddr); + horizontalline(249,315,111,24,tempaddr); + horizontalline(249,315,189,18,tempaddr); + + outtextxy(' TB1 ',250,114,2,0,tempaddr,false); + outtextxy(' TB1 ',251,115,10,0,tempaddr,false); + outtextxy('F1-HELP ',250,124,2,0,tempaddr,false); + outtextxy('F1-HELP ',251,125,10,0,tempaddr,false); + outtextxy('F2-SAVES',250,134,2,0,tempaddr,false); + outtextxy('F2-SAVES',251,135,10,0,tempaddr,false); + outtextxy('ESC-QUIT',250,144,2,0,tempaddr,false); + outtextxy('ESC-QUIT',251,145,10,0,tempaddr,false); + outtextxy('P-PAUSES',250,154,2,0,tempaddr,false); + outtextxy('P-PAUSES',251,155,10,0,tempaddr,false); + outtextxy('S-SOUND ',250,164,2,0,tempaddr,false); + outtextxy('S-SOUND ',251,165,10,0,tempaddr,false); + + + flipd320(vaddr,vaddr2); END; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure ScreenTrans (x,y,p1,p2: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 } + + + +Procedure blockmove(x1,y1,x2,y2,p1,x3,y3,p2:word); + { This is a small procedure to copy block x1,y1,x2,y2, + from page 1 to x3,y3 on page 2} BEGIN asm push ds push es mov ax,p1 - mov es,ax - mov ax,p2 mov ds,ax - mov bx,[X] - mov dx,[Y] + mov ax,p2 + mov es,ax + + mov bx,[X1] + mov dx,[Y1] 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} + shl bx, 6 {; bx = bx * 64} + add dx, bx {; dx = dx + bx (ie y*320)} + pop bx {; get back our x} + add bx, dx {; finalise location} + mov si, bx {; es:di = where to go} + + mov bx,[X3] + mov dx,[Y3] + push bx {; and this again for later} + mov bx, dx {; bx = dx} + mov dh, dl {; dx = dx * 256} + xor dl, dl + shl bx, 6 {; 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 } + + mov ax,[y2] + sub ax,[y1] + + mov dx,[x2] + sub dx,[x1] + mov bx,320 + sub bx,dx + + @@1 : - mov cx, 24 { Width of block to copy divided by 2 } + mov cx, dx { Width of block to copy divided by 2 } + shr cx,1 + jnc @@2 rep movsw - add di,110h { 320 - 48 = 272 .. or 110 in hex } - add si,110h - dec bx + movsb + jmp @@3 +@@2: + rep movsw +@@3: + add di,bx + add si,bx + dec ax 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; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure newship; - { This adds a new toaster to the screen } -VAR loop1:integer; -BEGIN - loop1:=1; - - - if not (shipv[1].active) then BEGIN - shipv[1].x:=36; - shipv[1].y:=165; - shipv[1].active:=true; - shipv[1].frame:=1; - shipv[1].speed:=5; - loop1:=10; - END; - -END; - - - -procedure putico(x,y,fra:byte;where:word); -var i,j,col:integer; +procedure pauseawhile(howlong:word); +var i:word; begin - for i:=0 to 47 do - for j:=0 to 29 do begin - col:=frame[fra,i,j]; - if col<>0 then putpixel(i+x,y+j,col,where); - end; - + i:=0; + repeat + waitretrace; + inc(i); + if i>howlong then exit; + until keypressed; end; -procedure putwave(x,y,fra:byte;where:word); {fra 0=saucer, 1=shot} -var i,j,col:integer; -begin - if fra=0 then for i:=0 to 20 do - for j:=0 to 5 do begin - col:=saucer[i,j]; - if col<>0 then putpixel((i+x),y+j,col,where); - end; - if fra=1 then for i:=0 to 20 do - for j:=0 to 5 do begin - col:=shot[i,j]; - if col<>0 then putpixel((i+x),y+j,col,where); - end; -end; + procedure changescore; +var itemp,jtemp:integer; begin str(score:8,scorest); - outtextxy(scorest,250,12,15,12,0,vaddr,true); + outtextxy(scorest,250,11,12,0,vaddr,true); + if (score mod 400 =0) and (shields<16) then begin + if sbeffects then startsound(sound[2],0,false); + inc(shields); + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + + end; end; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure shiproutine; + +function collision(x1,y1,xsize1,ysize1,x2,y2,xsize2,ysize2:integer):boolean; +var bob:byte; + hit:boolean; +label aat1,aat2,aat3,aat4; +begin + bob:=0; + asm + mov ax,[x1] + mov bx,[x2] + mov cx,[xsize1] + mov dx,[xsize2] + cmp bx,ax + jnge aat1 + xchg ax,bx + xchg cx,dx + aat1: + add ax,cx + add bx,dx + + sub ax,bx + add cx,dx + cmp cx,ax + jnge aat3 + inc [bob] + + mov ax,[y1] + mov bx,[y2] + mov cx,[ysize1] + mov dx,[ysize2] + cmp bx,ax + jnge aat2 + xchg ax,bx + xchg cx,dx + aat2: + add ax,cx + add bx,dx + + sub ax,bx + add cx,dx + cmp cx,ax + jnge aat3 + inc [bob] + aat3: + mov [hit],0 + cmp [bob],2 + jnz aat4 + mov [hit],1 + aat4: + end; + if hit then collision:=true + else collision:=false; +end; + + + +{%%} +procedure clearshape; +begin + asm + push es + mov cx,8000 + mov es,[shapeaddr] + xor di,di + mov al,5 + mov ah,al + rep stosw + pop es + end; +end; + + +{000+} + +procedure outbackline(line,row:word); +label bob,bob2,bob3; +var off2,off:word; +begin + off2:=vaddr3; {not sure why necessary, but keep} + off:=backseg; {losing the values of the original} + asm + {saves registers} + push ds + push es + xor ax,ax {old xx variable (times to repeat)=0} + push ax + + {mov cx,[(4-row)*10)] } {multiplies y value by 2400} + + {calculates initial offset for y value} + + mov ax,4 + sub ax,row + shl ax,5 + mov bx,ax + shl ax,1 + add bx,ax + shl ax,2 + add bx,ax + shl ax,3 + add bx,ax {original row offset is in bx} + + +bob2: {get background array} + mov ax,[off] + mov ds,ax + mov dx,[line] + shl dx, 2 + mov ax,dx + shl dx,1 + add ax,dx + pop cx + add ax,cx + push cx + add ax,[backofs] + mov si,ax + lodsb + xor ah,ah + mov cx,ax + + + shl cx,3 {from background number, get actual offset} + mov ax,cx + shl cx,3 + add ax,cx + shl cx,1 + add ax,cx + add ax,8000 + mov si,ax + + mov ax,[shapeaddr] + mov ds,ax + + + + + mov ax,[off2] {loads place to move it} + mov es,ax + mov di,bx + mov ax,220 {what to add to increase one y} + xor dx,dx + bob: + mov cx,20 {how long to loop across (the x-size of array)} + rep movsb {move, overwriting} + cmp dx,9 {see if longer than y size} + jz bob3 {if so, end} + add di,ax {if not, increase y by one} + inc dx + jmp bob + bob3: + add bx,20 {Increase starting offset value} + + pop cx {jump if not drawn 12 across} + inc cx + cmp cx,12 + push cx + jnz bob2 + {restore variables} + pop cx + pop es + pop ds + end; +end; + + +procedure savegame; +begin + if CDROMmode then exit; + cls(0,vga); + coolbox(0,0,319,199,false,vga); + outtextxy('SAVE GAME',124,10,4,0,vga,false); + outtextxy('THIS WILL ONLY SAVE HOW YOU WERE',10,20,4,0,vga,false); + outtextxy('AT THE BEGINNING OF THE LEVEL!!!',10,30,4,0,vga,false); + findfirst('SG?.TB1',ANYFILE,filestuff); + ondisk:='ALREADY SAVED GAMES:'; + while doserror=0 do with filestuff do + begin + ondisk:=concat(ondisk,name[3]); + findnext(filestuff); + end; + if ondisk='' then ondisk:=concat(ondisk,'NONE'); + outtextxy(ondisk,10,50,4,0,vga,false); + outtextxy('SAVE WHICH GAME?',10,60,4,0,vga,false); + repeat until keypressed; + tempch:=readkey; + if (tempch>='0') and (tempch<='9') then begin + {$I-} + ondisk:=concat('SG',tempch,'.TB1'); + assign(savegamef,ondisk); + rewrite(savegamef); + {$I+} + If IOResult=0 then begin + writeln(savegamef,beginscore); + writeln(savegamef,level); + writeln(savegamef,beginshields); + close(savegamef); + outtextxy('GAME SAVED',120,150,15,0,vga,false); + end + else outtextxy('ERROR! GAME NOT SAVED!',102,150,15,0,vga,false); + outtextxy('PRESS ANY KEY...',96,180,4,0,vga,false); + repeat; until keypressed; tempch:=readkey; + end; +end; + + +procedure put10shape240(shapeoffset,towhere,xx,yy:word); +label bob,bob4,bob2,bob3; +begin + asm + {saves registers} + push ds + mov cx,[yy] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[xx] {adds the x-value to get offset} + mov di,ax + + mov bx,240 + sub bx,10 {xacross?} + push bx + mov bx,9 + xor dx,dx + mov ax,[shapeaddr] {moves segment of array} + mov ds,ax + mov ax,[shapeoffset] {moves offsett if array} + {add ax,[shapeofs]} + mov si,ax + mov ax,towhere {loads place to move it} + + mov es,ax + xor ax,ax + xor cx,cx + xor dx,dx + bob: + mov cx,10 {how long to loop across (the x-size of array)} + bob4: + xor ah,ah + lodsb + cmp ax,0 {If zero skip, if not, store value} + jz bob2 + stosb + dec di + bob2: {Adds when x-value must be increased} + inc di + loop bob4 + cmp dx,bx + jz bob3 + xor cx,cx + pop ax + add di,ax + push ax + inc dx + jmp bob + bob3: + pop bx {restore variables} + pop ds + end; +end; + + +function upcollide(x,y,speed:word;add:integer;howfar,where:word):word; +var add2,color:word; +label mree1,mree2,mree3,mree4,mree5,mree6; +begin + add2:=y+add; + asm + {saves registers} + push ds + mov cx,[add2] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[x] {adds the x-value to get offset} + mov si,ax + mov ax,[where] + mov ds,ax + xor ah,ah + + mov [color],0 + mov dx,[speed] + inc dx + mree2: + dec dx + + mov cx,[howfar] + mree3: + lodsb + cmp ax,3 + je mree1 + cmp ax,5 + je mree4 + jne mree6 + mree4: + cmp bx,3 + je mree6 + mree1: + mov [color],ax + mov bx,ax + mree6: + loop mree3 + add si,240 + sub si,[howfar] + cmp dx,0 + jne mree2 + pop ds + end; + upcollide:=color; +end; + +function leftcollide(x,y,speed:word;add:integer;howfar,where:word):word; +var add2,color:word; +label mree1,mree2,mree3,mree4,mree5,mree6; +begin + add2:=x+add; + asm + {saves registers} + push ds + mov cx,[y] {multiplies y value by 320} + shl cx,4 + mov ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + shl cx,1 + add ax,cx + add ax,[add2] {adds the x-value to get offset} + mov si,ax + mov ax,[where] + mov ds,ax + xor ah,ah + + mov [color],0 + mov dx,[howfar] + inc dx + + mree2: + dec dx + + mov cx,[speed] + inc cx + mree3: + lodsb + cmp ax,3 + je mree1 + cmp ax,5 + jne mree6 + cmp bx,3 + je mree6 + mree1: + mov [color],ax + mov bx,ax + mree6: + loop mree3 + add si,240 + sub si,[speed] + cmp dx,0 + jne mree2 + pop ds + end; + leftcollide:=color; +end; + + + + +procedure loadlevel3shapes; +var x,y,i,j,shape:byte; +begin + clearshape; + grapherror:=mode13loadpicpacked(0,0,vaddr,false,true,'tblev3.tb1'); + + for j:=0 to 3 do + for i:=0 to 19 do + for x:=0 to 9 do + for y:=0 to 9 do + ShapeTable1^[shape3array[(j*20)+i]+((y*10)+x)] + :=getpixel(1+x+(i*11),1+y+(j*11),vaddr); + cls(0,vaddr); +end; + + +procedure littleopener3; +var star_x:array[0..5]of integer; + star_y:array[0..5]of integer; +begin + loadlevel3shapes; + grapherror:=mode13loadpicpacked(0,0,vga,true,false,'tbl2ship.tb1'); + fade; + cls(0,vga); + grapherror:=mode13loadpicpacked(0,0,vaddr,false,true,'tbl3intr.tb1'); + blockmove(0,3,171,117,vaddr,10,10,vga); + putshape (shape3array[60],vga,10,9,113,52); + + + unfade; + outtextxy('Hmmmm... STUPID TRACTOR BEAM.',10,155,10,0,vga,false); + outtextxy('I GUESS I''D BETTER GO SHUT IT OFF.',10,165,10,0,vga,false); + pauseawhile(700); + clearkeyboardbuffer; + + for i:=24 downto 0 do begin + blockmove(0,3,171,117,vaddr,10,10,vga); + putshape (shape3array[60+(4*(i mod 4))],vga,10,9,113,28+i); + + waitretrace; waitretrace; waitretrace; + waitretrace; waitretrace; waitretrace; + end; + putshape (shape3array[60],vga,10,9,113,28); + fillblock(10,155,300,185,0,vga); + outtextxy('I''M LUCKY I WORE MAGNETIC SHOES.',10,155,12,0,vga,false); + outtextxy('Hmmmm. SOMEONE LEFT THE AIR-LOCK',10,165,12,0,vga,false); + outtextxy(' UNLOCKED. STRANGE.',10,175,12,0,vga,false); + pauseawhile(600); + clearkeyboardbuffer; + putpixel(110,20,10,vga); + putpixel(110,22,10,vga); + fillblock(111,14,123,29,0,vga); + fillblock(10,155,300,185,0,vga); + outtextxy('I HOPE THIS ISN''T A TRAP.',10,155,9,0,vga,false); + outtextxy('I WISH I HAD SOME FORM OF ',10,165,9,0,vga,false); + outtextxy(' WEAPON.',10,175,9,0,vga,false); + pauseawhile(600); + clearkeyboardbuffer; + fade; + cls(0,vga); + blockmove(179,41,287,134,vaddr,10,10,vga); + for i:=0 to 5 do begin + star_x[i]:=37+random(70); + star_y[i]:=18+random(56); + putpixel(star_x[i],star_y[i],15,vga); + end; + outtextxy('WOW!! A GLASS-WALLED AIR-LOCK.',10,135,9,0,vga,false); + unfade; + pauseawhile(500); + clearkeyboardbuffer; + fillblock(10,135,300,185,0,vga); + outtextxy('NOW WHERE ARE WE GOING?',5,125,9,0,vga,false); + outtextxy('I GUESS THE PLANET EERM.',5,135,9,0,vga,false); + outtextxy('WHAT AN ODD NAME.',5,145,9,0,vga,false); + outtextxy('AND WHY AM I TALKING TO MYSELF?',5,155,10,0,vga,false); + outtextxy('ANYWAY I JUST WANT TO GO HOME',5,165,9,0,vga,false); + outtextxy(' AND SLEEP.',5,175,9,0,vga,false); + + clearkeyboardbuffer; + j:=0; + while (j<2400) and (not(keypressed)) do begin + inc(j); + for i:=0 to 5 do begin + putpixel(star_x[i],star_y[i],0,vga); + inc(star_x[i]); + if star_x[i]>107 then begin + star_x[i]:=37; + star_y[i]:=18+random(56); + end; + putpixel(star_x[i],star_y[i],15,vga); + end; + waitretrace; waitretrace;waitretrace; + + end; + + if keypressed then ch:=readkey; + + fade; + cls(0,vga); + unfade; +end; + + +Procedure levelthree; +label newroom; +type{ +EnemyInfo = record + x,y:integer; + kind:byte; + out,exploding,boundarycheck,dead:boolean; + explodprogress:byte; + minx,maxx,xspeed,yspeed:integer; + hitsneeded:integer; + end;} +pittype = record + px,py:integer; + end; +kctype = record + kcx,kcy:integer; + kcout:boolean; + end; + +const framedir:array[0..1,0..3] of integer =((0,1,0,-1),(1,0,-1,0)); VAR loop1,loop2:integer; ch,ch2:char; - shieldcol:integer; - shields:integer; - saucersout:integer; - wave1:array[0..5] of boolean; - bulletx,bullety,oldwavex,oldwavey,wavex,wavey,i,waveadd:integer; - bulletout:boolean; - whichone:integer; + pits:array[0..4] of pittype; + numpits:byte; + + bullet1x,bullet1y,bullet2x,bullet2y,i:integer; + bullet1dir,bullet2dir,collide:byte; + bullet1out,bullet2out:boolean; + whichone,temp,temp2:integer; + tempst:string; + what:byte; + k:integer; + itemp,jtemp:byte; + whatdelay:byte; + tempilg:byte; + xx:integer; + ucollide,dcollide,lcollide,rcollide:word; + walking,feet:byte; + room:byte; + backrow,topblocky:integer; + levelover,odd,changeroom,havegun:boolean; + whichroomnext:array[0..3] of byte; {n,s,e,w} + keycards:array[0..3] of boolean; + keycard:kctype; + shieldup:array[0..11] of boolean; + shieldx,shieldy,laserx,lasery:integer; + laserup:array[0..11] of boolean; + computers:array[0..11] of boolean; + computerx,computery:integer; + computer_0hits:integer; + tempkc:byte; + +procedure horizwalls(x,y,howfar:word); +var i:word; +begin + for i:=0 to howfar do + put10shape240(shape3array[3],vaddr2,x+(i*10),y); +end; + +procedure verticalwalls(x,y,howfar:word); +var i:word; +begin + for i:=0 to howfar do + put10shape240(shape3array[2],vaddr2,x,y+(i*10)); +end; + +procedure dopits; +var i:word; +begin + for i:=0 to (numpits-1) do + with pits[i] do + put10shape240(shape3array[5],vaddr2,px,py); +end; + +procedure clearroom; +var i,j:byte; +begin + for i:=0 to 23 do + for j:=0 to 19 do + put10shape240(shape3array[0], + vaddr2,i*10,j*10); +end; + + +procedure doroom(n,s,e,w:boolean); +var i:byte; +begin + for i:=0 to 2 do begin + put10shape240(shape3array[18],vaddr2,100+(i*10),0); + put10shape240(shape3array[18],vaddr2,100+(i*10),199); + put10shape240(shape3array[19],vaddr2,0,90+(i*10)); + put10shape240(shape3array[19],vaddr2,239,90+(i*10)); + end; + + if n then begin + horizwalls(0,0,10); + horizwalls(130,0,10); + end + else horizwalls(0,0,23); + if s then begin + horizwalls(0,197,10); + horizwalls(130,197,10); + end + else horizwalls(0,197,23); + + if e then begin + verticalwalls(237,0,8); + verticalwalls(237,110,8); + end + + else for i:=0 to 20 do put10shape240(shape3array[2],vaddr2,237,i*10); + if w then begin + verticalwalls(0,0,8); + verticalwalls(0,110,8); + end + else for i:=0 to 20 do put10shape240(shape3array[2],vaddr2,0,i*10); + +end; + + + BEGIN - score:=0; - pal(254,0,0,0); - shieldcol:=0; - shipv[1].active:=false; - newship; + {loadlevel3shapes;} + computer_0hits:=0; + whatdelay:=1; + havegun:=true; + for i:=0 to 3 do keycards[i]:=false; + for i:=0 to 11 do begin + shieldup[i]:=false; + laserup[i]:=false; + computers[i]:=false; + end; + shieldup[0]:=true; + laserup[0]:=true; + computers[0]:=true; + + shipx:=115; + shipy:=180; + odd:=false; + shipxadd:=0; + room:=0; + shipyadd:=0; + + shipframe:=1; + shipspeed:=5; + ch:=#1; ch2:=#1; - wavex:=0; wavey:=0; waveadd:=5; - oldwavex:=0; oldwavey:=0; - bulletout:=false; bulletx:=0; bullety:=0; - for i:=0 to 4 do wave1[i]:=true; - saucersout:=5; - shields:=10; - pal(254,shields*6,0,0); + bullet1out:=false; bullet2out:=false; + bullet1x:=0; bullet1y:=0; + bullet2x:=0; bullet2y:=0; + + flipd320(vaddr2,vaddr); + str(level,tempst); + fillblock(251,52,314,59,0,vaddr); + outtextxy(tempst,307,51,12,0,vaddr,false); + + cls(0,vaddr2); + + pal(250,0,0,63); + pal(251,63,0,0); + + pal(254,shields*4,0,0); + howmuchscroll:=50; + + cls(0,vga); + coolbox(70,85,240,120,true,vga); + outtextxy(' LEVEL THREE:',84,95,4,7,vga,false); + outtextxy(' THE ALIEN SHIP',84,105,4,7,vga,false); + + clearkeyboardbuffer; + pauseawhile(300); + numpassive:=0; + levelover:=false; + +newroom: + numpits:=0; + changeroom:=false; + if room=254 then room:=0; + clearroom; + if shipframe=1 then shipy:=188 + else if shipframe=3 then shipy:=3 + else if shipframe=2 then shipx:=3 + else if shipframe=4 then shipx:=228; + keycard.kcout:=false; + + + if room=0 then begin + whichroomnext[0]:=1; + whichroomnext[1]:=255; + clearroom; + verticalwalls(30,0,16); + verticalwalls(207,0,16); + verticalwalls(57,30,16); + verticalwalls(180,30,16); + with pits[0] do begin + px:=95; + py:=80; + end; + with pits[1] do begin + px:=135; + py:=80; + end; + numpits:=2; { actual} + dopits; + + for i:=0 to 10 do + for j:=0 to 2 do begin + put10shape240(shape3array[4],vaddr2,60+(j*10),80+(i*10)); + put10shape240(shape3array[4],vaddr2,150+(j*10),80+(i*10)); + end; +{walkway} + for i:=0 to 15 do for j:=0 to 1 do + put10shape240(shape3array[1],vaddr2,110+(j*10),40+(i*10)); + + put10shape240(shape3array[6],vaddr2,110,30); + put10shape240(shape3array[6],vaddr2,120,30); + computerx:=110; + computery:=30; + + if shieldup[0] then begin + shieldx:=10; + shieldy:=10; + put10shape240(shape3array[8],vaddr2,10,10); + end; + + if laserup[0] then begin + laserx:=220; + lasery:=10; + put10shape240(shape3array[7],vaddr2,220,10); + end; + + {badguys} + {put10shape240(shape3array[32],vaddr2,40,180); + put10shape240(shape3array[32],vaddr2,190,180);} + + + doroom(true,true,false,false); + + + end; + if room=1 then begin + whichroomnext[0]:=2; + whichroomnext[1]:=0; + doroom(true,true,false,false); + end; + if room=2 then begin + whichroomnext[1]:=1; + whichroomnext[2]:=6; + whichroomnext[3]:=4; + with pits[0] do begin + px:=95; + py:=80; + end; + with pits[1] do begin + px:=135; + py:=80; + end; + numpits:=2; + dopits; + + doroom(false,true,true,true); + end; + if room=3 then begin + whichroomnext[0]:=4; + if not(keycards[3]) then + begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[12],vaddr2,100,100); + end; + doroom(true,false,false,false); + end; + if room=4 then begin + whichroomnext[0]:=7; + whichroomnext[1]:=3; + whichroomnext[2]:=2; + doroom(true,true,true,false); + end; + if room=5 then begin + whichroomnext[0]:=6; + doroom(true,false,false,false); + if not(keycards[2]) then begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[11],vaddr2,100,100); + end; + end; + if room=6 then begin + whichroomnext[0]:=11; + whichroomnext[1]:=5; + whichroomnext[3]:=2; + doroom(true,true,false,true); + end; + if room=7 then begin + whichroomnext[0]:=8; + whichroomnext[1]:=4; + doroom(true,true,false,false); + end; + if room=8 then begin + whichroomnext[1]:=7; + whichroomnext[2]:=9; + if not(keycards[0]) then begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[9],vaddr2,100,100); + end; + doroom(false,true,true,false); + end; + if room=9 then begin + whichroomnext[2]:=10; + whichroomnext[3]:=8; + doroom(false,false,true,true); + end; + if room=10 then begin + whichroomnext[1]:=11; + whichroomnext[3]:=9; + if not(keycards[1]) then begin + keycard.kcout:=true; + keycard.kcx:=100; + keycard.kcy:=100; + put10shape240(shape3array[10],vaddr2,100,100); + end; + doroom(false,true,false,true); + end; + if room=11 then begin + whichroomnext[0]:=10; + whichroomnext[1]:=6; + doroom(true,true,false,false); + end; + if room=255 then begin + if keycards[0] and keycards[1] and + keycards[2] and keycards[3] then + begin + levelover:=true; + cls(0,vga); + outtextxy('You Have won!',5,5,9,7,vga,false); + outtextxy('But as you can see this level is not done yet.',5,15,9,7,vga,false); + {outtextxy('Anyway');} + readln; + inc(level); + end + else begin + cls(0,vga); + outtextxy('You Cannot Leave Yet',5,5,9,7,vga,true); + repeat until keypressed; tempch:=readkey; + levelover:=false; + shipframe:=1; + room:=254; + end; + end; + if (room=254) and not(levelover) then goto newroom; + + + + + +{**** GAME LOOP ****} +{*******************} Repeat ch2:=#1; - if (bulletout) and (bulletx>wavex) and (bulletxwavey) and (bullety0 then + for i:=0 to (numpits-1) do with pits[i] do + if collision(shipx,shipy,5,4,px,py,4,4) + then begin + levelover:=true; + cls(0,vga); + grapherror:=mode13loadpicpacked(0,0,vga,false,true,'tbpit.tb1'); + if sbeffects then StartSound(Sound[7], 0, false); + + {outtextxy('You Fell In A Pit!',5,5,9,2,vga,false);} + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if keycard.kcout then + if collision(shipx,shipy,5,4,keycard.kcx,keycard.kcy,5,5) + then begin + keycard.kcout:=false; + case room of + 3: keycards[3]:=true; + 5: keycards[2]:=true; + 8: keycards[0]:=true; + 10:keycards[1]:=true; + end; + put10shape240(shape3array[0],vaddr2,keycard.kcx,keycard.kcy); + end; + if shieldup[room] then + if collision(shipx,shipy,5,4,shieldx,shieldy,5,5) + then begin + shieldup[room]:=false; + put10shape240(shape3array[0],vaddr2,shieldx,shieldy); + inc(shields); + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + if laserup[room] then + if collision(shipx,shipy,5,4,laserx,lasery,5,5) + then begin + laserup[room]:=false; + put10shape240(shape3array[0],vaddr2,laserx,lasery); + end; + if computers[room] then + if collision(shipx,shipy,5,4,computerx,computery,10,5) + then begin + cls(0,vga); + grapherror:=mode13loadpicpacked(0,0,vga,false,true,'tbconsol.tb1'); + tempkc:=0; + if keycards[0] then begin + inc(tempkc); + putpixel(147,132,0,vga); + end; + if keycards[1] then begin + inc(tempkc); + putpixel(179,132,0,vga); + end; + if keycards[2] then begin + inc(tempkc); + putpixel(179,160,0,vga); + end; + if keycards[3] then begin + inc(tempkc); + putpixel(147,160,0,vga); + end; + + case room of + 0: begin + inc(computer_0hits); + if computer_0hits=1 then begin + + outtextxy('COMPUTER ACTIVATED:',47,30,2,0,vga,true); + outsmalltextxy(' HUMAN YOU HAVE COME TOO SOON. LEVELS 3',47,40,2,0,vga,true); + outsmalltextxy(' AND 4 ARE INCOMPLETE.',47,48,2,0,vga,true); + outsmalltextxy(' ANYWAY I CAN SEE YOU ARE NOT THE',47,58,2,0,vga,true); + outsmalltextxy(' TENTACLEE COMMANDER. YOU ARE IN',47,66,2,0,vga,true); + outsmalltextxy(' GRAVE DANGER. LUCKILY THE MAIN',47,74,2,0,vga,true); + outsmalltextxy(' COMPUTER SYSTEM DOES NOT APPROVE',47,82,2,0,vga,true); + outsmalltextxy(' OF THE TENTACLEE''S POLICIES.',47,90,2,0,vga,true); + outsmalltextxy(' I PERSONALLY CANNOT SHUT OFF THE TRACTOR',47,100,2,0,vga,true); + outsmalltextxy(' BEAM. YOU MUST RETRIEVE FOUR KEYCARDS',47,108,2,0,vga,true); + outsmalltextxy(' SCATTERED AROUND THE FLIGHT DECK.',47,116,2,0,vga,true); + outsmalltextxy(' THE MAP BELOW WILL AID YOU.',47,124,2,0,vga,true); + end; + if computer_0hits=2 then begin + outtextxy('COMPUTER ACTIVATED:',47,30,2,0,vga,true); + outsmalltextxy(' HUMAN I HAVE ALREADY TOLD YOU MUCH.',47,40,2,0,vga,true); + outsmalltextxy(' COLLECT THE 4 KEYCARDS, MADE OF',47,48,2,0,vga,true); + outsmalltextxy(' RUBY, GOLD, EMERALD, AND ALUMINUM.',47,56,2,0,vga,true); + outsmalltextxy(' WATCH OUT FOR ENEMIES NOT UNDER MY',47,66,2,0,vga,true); + outsmalltextxy(' CONTROL, RADIOACTIVE FLOORS, AND',47,74,2,0,vga,true); + outsmalltextxy(' EXTREMELY DEEP PITS.',47,82,2,0,vga,true); + end; + if computer_0hits>2 then begin + outtextxy('COMPUTER ACTIVATED:',47,30,2,0,vga,true); + outsmalltextxy(' HUMAN, GO AWAY. YOU ANNOY ME.',47,40,2,0,vga,true); + outsmalltextxy(' I HAVE TOLD YOU EVERYTHING.',47,48,2,0,vga,true); + end; + + + + end; + end; + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + shipx:=shipx+(4*framedir[1,shipframe]); + shipy:=shipy+(4*framedir[0,shipframe]); + end; + + +{***DO EXPLOSIONS***} +{ for i:=0 to 30 do + if passive[i].exploding then with passive[i] do begin + inc(explodeprogress); + putshape240(shape2array[35+explodeprogress],vaddr2, + 20,9,x,y+howmuchscroll); + if explodeprogress>4 then begin + dead:=true; + exploding:=false; + putshape240over(14800(*shape2array[34]*),vaddr2, + 20,9,x,y+howmuchscroll); end; + end; + + } +{***MOVE BULLET***} + if bullet1out then begin + case bullet1dir of + 1:begin dec(bullet1y,5); + collide:=upcollide(bullet1x,bullet1y,5,-5,3,vaddr2); + end; + 2:begin inc(bullet1x,5); + collide:=leftcollide(bullet1x,bullet1y,5,10,3,vaddr2); + end; + 3:begin inc(bullet1y,5); + collide:=upcollide(bullet1x,bullet1y,5,10,3,vaddr2); + end; + 4:begin dec(bullet1x,5); + collide:=leftcollide(bullet1x,bullet1y,5,-5,3,vaddr2); + end; + end; + + if collide<>0 then bullet1out:=false; + if bullet1out then putshape(shape3array[76],vaddr,10,9,bullet1x,bullet1y); end; - if bulletout then begin - screentrans(bulletx,bullety,vaddr,vaddr2); - dec(bullety,5); - if bullety<5 then bulletout:=false; - if bulletout then putwave(bulletx,bullety,1,vaddr); + if bullet2out then begin + dec(bullet2y,5); + if bullet2y<5 then bullet2out:=false; + if bullet2out then putshape(shape3array[76],vaddr,10,9,bullet2x,bullet2y); end; - for i:=0 to 4 do - screentrans((oldwavex+20*i),oldwavey,vaddr,vaddr2); - for i:=0 to 4 do - if wave1[i] then putwave(wavex+20*i,wavey,0,vaddr); - oldwavex:=wavex; oldwavey:=wavey; - wavex:=wavex+waveadd; - if (wavex>100) or (wavex<5) then begin - inc(wavey,5); - waveadd:=-waveadd; +{***MOVE ENEMIES***} + { for j:=0 to 30 do begin + if passive[j].dead=false then begin + inc(passive[j].y); + if(passive[j].y)>190 then passive[j].dead:=true; + end; end; - if saucersout=0 then begin - wavey:=0; - for i:=0 to 5 do if wave1[i]=false then wave1[i]:=true; - saucersout:=5; + for j:=0 to 30 do begin + if passive[j].lastshot>0 then dec(passive[j].lastshot); + if (passive[j].dead=false) and (passive[j].shooting) + and (passive[j].lastshot=0) and (passive[j].y>0) + then begin + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + passive[j].lastshot:=30; + enemy[tempilg].out:=true; + enemy[tempilg].y:=passive[j].y; + enemy[tempilg].x:=passive[j].x+5; + enemy[tempilg].yspeed:=5; + enemy[tempilg].kind:=25; + if passive[j].kind=11 then enemy[tempilg].kind:=26; + end; + end; end; - if wavey>150 then begin - wavey:=0; - for i:=0 to 5 do if wave1[i]=false then wave1[i]:=true; - saucersout:=5; - for i:=0 to saucersout do dec(shields); - if shields>0 then pal(254,shields*6,0,0); + for j:=0 to 5 do begin + if enemy[j].out then begin + putshape(shape2array[enemy[j].kind],vaddr, + 20,9,enemy[j].x,enemy[j].y); + enemy[j].y:=enemy[j].y+enemy[j].yspeed; + if enemy[j].y>189 then enemy[j].out:=false; + end; end; + } + +{***READ KEYBOARD***} + if keypressed then BEGIN ch:=readkey; if ch=chr(0) then ch2:=readkey; - if ch2='M' then inc(shipv[1].x,5); - if ch2='K' then dec(shipv[1].x,5); - if ch=' ' then begin - bulletout:=true; - bulletx:=shipv[1].x+10; - bullety:=shipv[1].y; - putwave(bulletx,bullety,1,vaddr); + if ch=#27 then levelover:=true; + clearkeyboardbuffer; + + if ch2='M' then begin + if (shipframe=2) and (shipxadd=0) then shipxadd:=2 + else if (shipframe<>2) then shipframe:=2 + else inc(shipxadd); end; - - end; - if shipv[1].active then BEGIN - screentrans (shipv[1].x,shipv[1].y,vaddr,vaddr2); - { Restore the backgrond the toaster was over } - - { Move the toaster } - if (shipv[1].x<1) then shipv[1].x:=1; - if (shipv[1].x>255) then shipv[1].x:=255; - { When toaster reaches the edge of the screen, render it inactive - and bring a new one into existance. } - END; - if shipv[1].active then BEGIN - CASE shipv [1].frame of - 1 : putico (shipv[1].x,shipv[1].y,0,vaddr); - 3 : putico (shipv[1].x,shipv[1].y,1,vaddr); - 2,4 : putico (shipv[1].x,shipv[1].y,2,vaddr); - END; - shipv[1].frame:=shipv[1].frame+1; - if shipv[1].frame=5 then shipv[1].frame:=1; - { Draw all the toasters on the VGA screen } + if ch2='K' then begin + if (shipframe=4) and (shipxadd=0) then shipxadd:=-2 + else if (shipframe<>4) then shipframe:=4 + else dec(shipxadd); + end; + if ch2='H' then begin + if (shipframe=1) and (shipyadd=0) then shipyadd:=-2 + else if (shipframe<>1) then shipframe:=1 + else dec(shipyadd); + + end; + if ch2='P' then begin + if (shipframe=3) and (shipyadd=0) then shipyadd:=2 + else if (shipframe<>3) then shipframe:=3 + else inc(shipyadd); + + end; + if ch2=';' then help; + if ch='+' then begin + inc(whatdelay); + if whatdelay>25 then whatdelay:=25; + end; + if (ch='P') or (ch='p') then begin + coolbox(65,85,175,110,true,vga); + outtextxy('GAME PAUSED',79,95,4,7,vga,false); + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if ch='-' then begin + dec(whatdelay); + if whatdelay<1 then whatdelay:=1; + end; + if (ch='S') or (ch='s') then sbeffects:=not(sbeffects); + + if ch2='<' then savegame; + + end; + if (ch=' ') and havegun then begin + if (bullet1out=false) then begin + if sbeffects then StartSound(Sound[4], 0, false); + bullet1out:=true; + bullet1x:=shipx+3; + bullet1y:=shipy+4; + bullet1dir:=shipframe; + putshape(shape3array[76],vaddr,10,9,bullet1x,bullet1y); + end + else + if (bullet2out=false) then begin + if sbeffects then StartSound(Sound[4], 0, false); + bullet2out:=true; + bullet2x:=shipx; + bullet2y:=shipy; + bullet2dir:=shipframe; + putshape(shape3array[76],vaddr,10,9,bullet2x,bullet2y); + end; end; + +{***MOVE SHIP***} + + + ucollide:=upcollide(shipx,shipy,abs(shipyadd),-abs(shipyadd),10,vaddr2); + dcollide:=upcollide(shipx,shipy,abs(shipyadd),8,10,vaddr2); + lcollide:=leftcollide(shipx,shipy,abs(shipxadd),-abs(shipxadd),8,vaddr2); + rcollide:=leftcollide(shipx,shipy,abs(shipxadd),0,8,vaddr2); + if (shipframe=1) and (ucollide<>0) then shipyadd:=0; + if (shipframe=3) and (dcollide<>0) then shipyadd:=0; + if (shipframe=2) and (rcollide<>0) then shipxadd:=0; + if (shipframe=4) and (lcollide<>0) then shipxadd:=0; + shipy:=shipy+shipyadd; + shipyadd:=shipyadd-sgn(shipyadd); + shipx:=shipx+shipxadd; + shipxadd:=shipxadd-sgn(shipxadd); + + case ucollide of + 5: begin + changeroom:=true; + room:=whichroomnext[0]; + end; + end; + case dcollide of + 5: begin + changeroom:=true; + room:=whichroomnext[1]; + end; + end; + case rcollide of + 5: begin + changeroom:=true; + room:=whichroomnext[2]; + end; + end; + case lcollide of + 5: begin + changeroom:=true; + room:=whichroomnext[3]; + end; + end; + if (shipyadd<>0) or (shipxadd<>0) then inc(walking,4) + else walking:=0; + if walking>12 then walking:=0; + + CASE shipframe of + 1 : putshape (shape3array[60+walking],vaddr,10,9,shipx,shipy); + 2 : putshape (shape3array[61+walking],vaddr,10,9,shipx,shipy); + 3 : putshape (shape3array[62+walking],vaddr,10,9,shipx,shipy); + 4 : putshape (shape3array[63+walking],vaddr,10,9,shipx,shipy); + END; waitretrace; - flip (vaddr,vga); - until (ch=#27) or (shields<0); + flipd320 (vaddr,vga); + if odd then begin + pal(250,0,0,63); + pal(251,63,0,0); + odd:=not(odd); + end + else begin + pal(251,0,0,63); + pal(250,63,0,0); + odd:=not(odd); + end; + + + for i:=0 to whatdelay do waitretrace; + + if changeroom then goto newroom; + + until levelover; +END; + + + + + +Procedure leveltwoengine(l_level:byte); +VAR loop1,loop2:integer; + ch,ch2:char; + saucersout:integer; + bullet1x,bullet1y,bullet2x,bullet2y,i:integer; + bullet1out,bullet2out:boolean; + whichone,temp,temp2:integer; + tempst:string; + what:byte; + k:integer; + itemp,jtemp:byte; + whatdelay:byte; + tempilg:byte; + xx:integer; + + backrow,topblocky:integer; + f:text; + levelover:boolean; + +procedure loadlevel2shapes; +var x,y,i,j,shape:byte; +begin + clearshape; + grapherror:=mode13loadpicpacked(0,0,vaddr,false,true,'ships.tb1'); + + for i:=0 to 42 do + for j:=0 to 30 do begin + ShapeTable1^[bigship1off+((j*43)+i)]:=getpixel(i,j,vaddr); + ShapeTable1^[bigship2off+((j*43)+i)]:=getpixel(i,j+32,vaddr); + ShapeTable1^[bigship3off+((j*43)+i)]:=getpixel(i,j+64,vaddr); + end; + + + if l_level=2 then + grapherror:=mode13loadpicpacked(0,0,vaddr,false,true,'tbaship.tb1'); + if l_level=4 then + grapherror:=mode13loadpicpacked(0,0,vaddr,false,true,'tbeerm.tb1'); + for j:=0 to 3 do + for i:=0 to 9 do + for x:=0 to 19 do + for y:=0 to 9 do + ShapeTable1^[shape2array[(j*10)+i]+((y*20)+x)] + :=getpixel(1+x+(i*21),1+y+(j*11),vaddr); + cls(0,vaddr); +end; + + + +BEGIN + level:=l_level; + loadlevel2shapes; + if l_level=2 then assign(f,'level2.tb1'); + if l_level=4 then assign(f,'level4.tb1'); + reset(f); + for j:=0 to 200 do + for i:=0 to 11 do read(f,background[j,i]); + close(f); + + for i:=0 to 30 do begin + passive[i].dead:=true; + passive[i].exploding:=false; + end; + for i:=0 to 5 do begin + enemy[i].out:=false; + end; + + + backrow:=0; + whatdelay:=1; + shipx:=36; + shipadd:=0; + shipframe:=1; + shipspeed:=5; + ch:=#1; ch2:=#1; + bullet1out:=false; bullet2out:=false; + bullet1x:=0; bullet1y:=0; + bullet2x:=0; bullet2y:=0; + + flipd320(vaddr2,vaddr); + str(level,tempst); + fillblock(251,52,314,59,0,vaddr); + outtextxy(tempst,307,51,12,0,vaddr,false); + + cls(0,vaddr2); + + for i:=0 to 100 do + begin + putshape240(14400{32}, + vaddr2,20,9,random(237),random(227)); + putshape240(14400{shape2array[32]}, + vaddr2,20,9,random(237),random(227)); + end; + + pal(254,shields*4,0,0); + howmuchscroll:=50; + + cls(0,vga); + coolbox(70,85,240,120,true,vga); + if l_level=2 then begin + outtextxy(' LEVEL TWO:',84,95,4,7,vga,false); + outtextxy('THE "PEACE ENVOY"',84,105,4,7,vga,false); + end; + if l_level=4 then begin + outtextxy(' LEVEL FOUR:',84,95,4,7,vga,false); + outtextxy(' THE PLANET EERM',84,105,4,7,vga,false); + end; + + clearkeyboardbuffer; + pauseawhile(300); + numpassive:=0; + levelover:=false; +{**** GAME LOOP ****} +{*******************} + Repeat + ch2:=#1; + ch:=#1; + dec(howmuchscroll); + if howmuchscroll<1 then begin + flipd50(vaddr2,2250,vaddr2,3000); + flipd50(vaddr2,1500,vaddr2,2250); + flipd50(vaddr2,750,vaddr2,1500); + flipd50(vaddr2,0,vaddr2,750); + for i:=0 to 4 do begin + outbackline(backrow,i); + for xx:=0 to 11 do begin + if (background[backrow,xx]>9) and + (background[backrow,xx]<20) then begin + k:=-1; + for j:=0 to numpassive do + if passive[j].dead=true then k:=j; + if k=-1 then begin + inc(numpassive); k:=numpassive; end; + with passive[k] do begin + dead:=false; + kind:=background[backrow,xx]; + if (kind>10) and + (kind<15) then + shooting:=true + else shooting:=false; + exploding:=false; + x:=xx*20; + y:=-(((i+1)*10)); + howmanyhits:=1; + lastshot:=0; + end; + end; + end; + inc(backrow); + end; + flipd50(vaddr3,0,vaddr2,0); + howmuchscroll:=50; + end; + + flipd240(howmuchscroll,vaddr,vaddr2); + + topblocky:=backrow-(howmuchscroll div 10)-1; + +{ str(passive[1].y,it); + outtextxy(it,10,10,12,0,vaddr,true); + + str(passive[1].x,it); + outtextxy(it,10,20,12,0,vaddr,true); } + + + + +{***Collision Check***} + + for i:=0 to 30 do if (passive[i].dead=false) and (passive[i].exploding=false) then with passive[i] do begin + if (bullet1out) and collision(bullet1x,bullet1y,3,4,x,y,10,5) + then begin + if kind<>10 then begin + if sbeffects then StartSound(Sound[3], 0, false); + exploding:=true; + explodeprogress:=0; + bullet1out:=false; + inc(score,10); + changescore; + end + else begin + bullet1out:=false; + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + enemy[tempilg].out:=true; + enemy[tempilg].y:=bullet1y; + enemy[tempilg].x:=bullet1x; + enemy[tempilg].yspeed:=7; + enemy[tempilg].kind:=21; + end; + end; + end; + if (bullet2out) and collision(bullet2x,bullet2y,3,4,x,y,10,5) + then begin + if kind<>10 then begin + if sbeffects then StartSound(Sound[3], 0, false); + exploding:=true; + explodeprogress:=0; + bullet2out:=false; + inc(score,10); + changescore; + end + else begin + bullet2out:=false; + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + enemy[tempilg].out:=true; + enemy[tempilg].y:=bullet2y; + enemy[tempilg].x:=bullet2x; + enemy[tempilg].yspeed:=7; + enemy[tempilg].kind:=21; + end; + end; + end; + + if (y>155) and (kind<>10) then begin + if collision(x,y,10,5,shipx+16,165,5,5) + or collision(x,y,10,5,shipx+6,175,18,8) + then begin + if sbeffects then startsound(Sound[5],0,false); + {exploding:=true; + explodeprogress:=2;} + dead:=true; + dec(shields); + if shields<0 then levelover:=true; + putshape240over(14800{shape2array[34]},vaddr2, + 20,9,x,y+howmuchscroll); + fillblock(250,71,314,79,0,vaddr); + if shields>0 then begin + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + end; + end; + end; + + for i:=0 to 5 do if (enemy[i].out) then + if collision(enemy[i].x,enemy[i].y,2,5,shipx+16,165,5,5) + or collision(enemy[i].x,enemy[i].y,2,5,shipx+6,175,18,8) + then begin + if sbeffects then startsound(Sound[5],0,false); + enemy[i].out:=false; + dec(shields); + if shields<0 then levelover:=true; + {putshape240over(shape2array[34],vaddr2, + 20,9,passive[i].x,passive[i].y+howmuchscroll);} + fillblock(250,71,314,79,0,vaddr); + if shields>0 then begin + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + + end; +{ for i:=0 to 30 do if (passive[i].dead=false) and (passive[i].y>-1) then + putshape(shape2array[16], + vaddr,20,9,passive[i].x,passive[i].y);} + + +{***DO EXPLOSIONS***} + for i:=0 to 30 do + if passive[i].exploding then with passive[i] do begin + inc(explodeprogress); + putshape240(shape2array[35+explodeprogress],vaddr2, + 20,9,x,y+howmuchscroll); + if explodeprogress>4 then begin + dead:=true; + exploding:=false; + putshape240over(14800{shape2array[34]},vaddr2, + 20,9,x,y+howmuchscroll); + end; + end; + + +{***MOVE BULLET***} + if bullet1out then begin + dec(bullet1y,5); + if bullet1y<5 then bullet1out:=false; + if bullet1out then putshape(12000,vaddr,20,9,bullet1x,bullet1y); + end; + if bullet2out then begin + dec(bullet2y,5); + if bullet2y<5 then bullet2out:=false; + if bullet2out then putshape(12000,vaddr,20,9,bullet2x,bullet2y); + end; +{***MOVE ENEMIES***} + for j:=0 to 30 do begin + if passive[j].dead=false then begin + inc(passive[j].y); + if(passive[j].y)>190 then passive[j].dead:=true; + end; + end; + for j:=0 to 30 do begin + if passive[j].lastshot>0 then dec(passive[j].lastshot); + if (passive[j].dead=false) and (passive[j].shooting) + and (passive[j].lastshot=0) and (passive[j].y>0) + then begin + tempilg:=7; + for i:=0 to 5 do if enemy[i].out=false then tempilg:=i; + if tempilg<>7 then begin + passive[j].lastshot:=30; + enemy[tempilg].out:=true; + enemy[tempilg].y:=passive[j].y; + enemy[tempilg].x:=passive[j].x+5; + enemy[tempilg].yspeed:=5; + enemy[tempilg].kind:=25; + if passive[j].kind=11 then enemy[tempilg].kind:=26; + end; + end; + end; + for j:=0 to 5 do begin + if enemy[j].out then begin + putshape(shape2array[enemy[j].kind],vaddr, + 20,9,enemy[j].x,enemy[j].y); + enemy[j].y:=enemy[j].y+enemy[j].yspeed; + if enemy[j].y>189 then enemy[j].out:=false; + end; + end; + + +{***READ KEYBOARD***} + + if keypressed then BEGIN + ch:=readkey; + if ch=chr(0) then ch2:=readkey; + if ch=#27 then levelover:=true; + if ch2='M' then + if shipadd>=0 then inc(shipadd,3) else shipadd:=0; + if ch2='K' then + if shipadd<=0 then dec(shipadd,3) else shipadd:=0; + if ch2=';' then help; + if ch='+' then begin + inc(whatdelay); + if whatdelay>25 then whatdelay:=25; + end; + if (ch='P') or (ch='p') then begin + coolbox(65,85,175,110,true,vga); + outtextxy('GAME PAUSED',79,95,4,7,vga,false); + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if ch='-' then begin + dec(whatdelay); + if whatdelay<1 then whatdelay:=1; + end; + if (ch='S') or (ch='s') then sbeffects:=not(sbeffects); + + if ch2='<' then savegame; + + end; + if (ch=' ') then begin + if (bullet1out=false) then begin + if sbeffects then StartSound(Sound[4], 0, false); + bullet1out:=true; + bullet1x:=shipx+21; + bullet1y:=165; + putshape(12000,vaddr,20,9,bullet1x,bullet1y); + end + else + if (bullet2out=false) then begin + if sbeffects then StartSound(Sound[4], 0, false); + bullet2out:=true; + bullet2x:=shipx+21; + bullet2y:=165; + putshape(12000,vaddr,20,9,bullet2x,bullet2y); + end; + end; + +{***MOVE SHIP***} + shipx:=shipx+shipadd; + if (shipx<1) then shipx:=1; + if (shipx>190) then shipx:=190; + CASE shipframe of + 1 : putshape (bigship1off,vaddr,43,30,shipx,165); + 3 : putshape (bigship3off,vaddr,43,30,shipx,165); + 2,4 : putshape (bigship2off,vaddr,43,30,shipx,165); + END; + inc(shipframe); + if shipframe=5 then shipframe:=1; + waitretrace; + flipd320 (vaddr,vga); + for i:=0 to whatdelay do waitretrace; + + {str(backrow,testr); + outtextxy(testr,20,20,9,7,vga,true);} + + if backrow>=200 then begin + clearkeyboardbuffer; + pauseawhile(200); + fade; + grapherror:=Mode13LoadPicPacked(0,0,vaddr,false,true,'viewscr.tb1'); + cls(0,vga); + blockmove(0,79,58,116,vaddr,10,10,vga); + clearkeyboardbuffer; + outsmalltextxy('UNIDENTIFIED SPACECRAFT!',70,10,2,0,vga,true); + outsmalltextxy('DO YOU WISH TO DEACTIVATE ',70,20,2,0,vga,true); + outsmalltextxy('THIS SHIP''S SECURITY SYSTEMS? (Y/N)',70,30,2,0,vga,true); + unfade; + clearkeyboardbuffer; + ch:='!'; + repeat + if keypressed then ch:=readkey; + until (upcase(ch)='Y') or (upcase(ch)='N'); + + if upcase(ch)='N' then begin + blockmove(0,79,58,116,vaddr,10,50,vga); + outsmalltextxy('NO? AFFIRMATIVE. ',70,50,9,0,vga,true); + outsmalltextxy('ARMING REMOTE DESTRUCTION RAY.',70,60,9,0,vga,true); + outsmalltextxy('GOOD-BYE.',70,70,9,0,vga,true); + pauseawhile(400); + fade; + end; + + if upcase(ch)='Y' then begin + blockmove(0,79,58,116,vaddr,10,50,vga); + outsmalltextxy('"Y"=CORRECT PASSWORD. ',70,50,2,0,vga,true); + outsmalltextxy('WELCOME SUPREME TENTACLEE COMMANDER.',70,60,2,0,vga,true); + outsmalltextxy('INITIATING TRACTOR BEAM AND AUTOMATIC',70,70,2,0,vga,true); + outsmalltextxy('LANDING PROCEDURE.',70,80,2,0,vga,true); + outsmalltextxy('WE WILL BE DEPARTING FOR THE PLANET',70,90,2,0,vga,true); + outsmalltextxy('EERM IN THREE MICROCYCLE UNITS.',70,100,2,0,vga,true); + pauseawhile(550); + level:=3; + clearkeyboardbuffer; + blockmove(0,42,58,79,vaddr,10,110,vga); + outsmalltextxy('Wha? Wait!',70,110,9,0,vga,true); + outsmalltextxy('What''s happening?',70,120,9,0,vga,true); + pauseawhile(550); + fade; + end; + + grapherror:=Mode13LoadPicPacked(0,0,vaddr,false,true,'tbtract.tb1'); + for i:=0 to 239 do + for j:=0 to 49 do + putpixel240(i,j,getpixel(i,j,vaddr),vaddr2); + cls(0,vga); + unfade; + for howmuchscroll:=50 downto 1 do begin + flipd240(howmuchscroll,vaddr,vaddr2); + putshape (bigship3off,vaddr,43,30,shipx,165); + waitretrace; + flipd320(vaddr,vga); + end; + + if upcase(ch)='N' then begin + clearkeyboardbuffer; + line(7,6,shipx+10,180,4,vga); + line(shipx+37,180,231,6,4,vga); + pauseawhile(50); + clearkeyboardbuffer; + for i:=shipx to shipx+48 do + verticalline(165,195,i,4,vga); + pauseawhile(200); + flipd240(howmuchscroll,vaddr,vaddr2); + flipd320(vaddr,vga); + pauseawhile(150); + end; + + + if upcase(ch)='Y' then begin; + shipadd:=sgn(shipx-95); + shipy:=165; + repeat + if shipx<>95 then shipx:=shipx-shipadd; + if shipy>9 then dec(shipy); + flipd240(howmuchscroll,vaddr,vaddr2); + line(7,6,shipx+10,shipy+15,2,vaddr); + line(shipx+37,shipy+15,231,6,2,vaddr); + putshape (bigship3off,vaddr,43,30,shipx,shipy); + waitretrace; + flipd320(vaddr,vga); + until (shipx=95) and (shipy=9); + clearkeyboardbuffer; + pauseawhile(850); + fade; + cls(0,vga); + + + while keypressed do ch:=readkey; + if level=4 then begin + outsmalltextxy('THE PLANET EERM?',20,20,10,0,vga,true); + outsmalltextxy('XENOCIDE FLEET?',20,30,10,0,vga,true); + outsmalltextxy('WHAT''S GOING ON?',20,40,10,0,vga,true); + outsmalltextxy('A MAJOR GOVERNMENT CONSPIRACY? MASS HALUCINATIONS?',20,50,10,0,vga,true); + + outsmalltextxy('WATCH FOR TOM BOMBEM LEVEL 3 (CURRENTLY IN THE DESIGN PHASE).',10,70,12,0,vga,true); + outsmalltextxy('ALL THESE QUESTIONS WILL BE ANSWERED!',10,80,12,0,vga,true); + outsmalltextxy('ALSO MORE FEATURES WILL BE ADDED:',10,90,12,0,vga,true); + outsmalltextxy(' BETTER GRAPHICS, SOUND AND SPEED.',10,100,12,0,vga,true); + + outsmalltextxy('TO HASTEN COMPLETION, SEND QUESTIONS/COMMENTS/DONATIONS TO ',9,120,9,0,vga,true); + outsmalltextxy('THE AUTHOR (SEE THE REGISTER MESSAGE FOR RELEVANT ADDRESSES).',9,130,9,0,vga,true); + + outsmalltextxy('THANK YOU FOR PLAYING TOM BOMBEM',80,150,14,0,vga,true); + unfade; + pauseawhile(1800); + end; + levelover:=true; + unfade; + end; + end; +until levelover; +END; + + +Procedure levelone; +VAR loop1,loop2:integer; + ch,ch2:char; + saucersout:integer; + bullet1x,bullet1y,bullet2x,bullet2y,i,wave:integer; + bullet1out,bullet2out:boolean; + whichone,temp,temp2,whichwave:integer; + tempst:string; + what:byte; + itemp,jtemp:byte; + whatdelay:byte; + levelover:boolean; + + +procedure waveincrease; +begin + inc(wave); + dec(saucersout); + if saucersout<0 then saucersout:=0; + if saucersout>5 then saucersout:=5; + if wave<6 then whichwave:=0; + if (wave>=6) and (wave<=12) then whichwave:=1; {1} + if (wave>12) and (wave<=20) then whichwave:=2; {2} + if (wave>20) and (wave<=30) then whichwave:=3; {3} + if (wave>30) and (wave<=36) then whichwave:=2; {2} + if (wave>36) and (wave<=46) then whichwave:=3; + if (wave>46) and (wave<=50) then whichwave:=1; + if (wave>50) and (wave<=60) then whichwave:=3; + if (wave>60) and (wave<=76) then whichwave:=2; + if (wave>76) and (wave<=82) then whichwave:=1; + if (wave>82) and (wave<=85) then whichwave:=3; + if (wave>85) and (wave<=96) then whichwave:=2; + if (wave>96) and (wave<=100) then whichwave:=1; + if (wave>100) then whichwave:=4; +end; + +procedure BeforeBoss; +begin + fade; + grapherror:=Mode13LoadPicPacked(0,0,vaddr,false,true,'viewscr.tb1'); + cls(0,vga); + blockmove(0,5,58,42,vaddr,10,10,vga); + clearkeyboardbuffer; + outsmalltextxy('HUMAN!',70,10,2,0,vga,true); + outsmalltextxy('WHAT ARE YOU DOING?!',70,20,2,0,vga,true); + outsmalltextxy('YOUR SPECIES MUST BE TERMINATED!',70,30,2,0,vga,true); + unfade; + pauseawhile(350); + clearkeyboardbuffer; + blockmove(0,42,58,79,vaddr,10,50,vga); + outsmalltextxy('I''M SORRY.',70,50,9,0,vga,true); + outsmalltextxy('WE DIDN''T MEAN TO DESTROY YOUR ENVOY.',70,60,9,0,vga,true); + outsmalltextxy('WILL YOU FORGIVE US AND TRY PEACE?',70,70,9,0,vga,true); + pauseawhile(400); + clearkeyboardbuffer; + blockmove(0,5,58,42,vaddr,10,90,vga); + outsmalltextxy('NO! YOU MUST BE DESTROYED!',70,90,2,0,vga,true); + outsmalltextxy('OUR FUNDING ... OUR ENVOY WAS DAMAGED BY',70,100,2,0,vga,true); + outsmalltextxy('YOU! VENGEANCE WILL BE OURS! YOUR PUNY',70,110,2,0,vga,true); + outsmalltextxy('PRIMITIVE SPACECRAFT WITH ITS INFERIOR',70,120,2,0,vga,true); + outsmalltextxy('WEAPONS WOULD HAVE TO SCORE 9 DIRECT HITS',70,130,2,0,vga,true); + outsmalltextxy('TO DESTROY MY SHIP! DIE EARTH SCUM!!!!',70,140,2,0,vga,true); + pauseawhile(800); + flipd240(howmuchscroll,vaddr,vaddr2); +end; + + +procedure AfterBoss; +begin + level:=2; + fade; + clearkeyboardbuffer; + grapherror:=Mode13LoadPicPacked(0,0,vaddr,false,true,'viewscr.tb1'); + cls(0,vga); + blockmove(0,42,58,79,vaddr,10,10,vga); + outsmalltextxy('HMM.. THEY DON''T BUILD SUPERIOR',70,10,9,0,vga,true); + outsmalltextxy('TECHNOLOGY LIKE THEY USED TO.',70,20,9,0,vga,true); + outsmalltextxy('I GUESS I CAN GO HOME NOW.',70,30,9,0,vga,true); + unfade; + pauseawhile(400); + clearkeyboardbuffer; + blockmove(0,5,58,42,vaddr,10,50,vga); + outsmalltextxy('NOT SO FAST! YOU JUST DESTROYED AN ANTIQUATED',70,50,2,0,vga,true); + outsmalltextxy('DEFENSE SYSTEM THAT WAS PROGRAMMED BY A 16',70,60,2,0,vga,true); + outsmalltextxy('YEAR OLD! OUR MAIN DEFENSE PROGRAMMER HAS ',70,70,2,0,vga,true); + outsmalltextxy('MUCH MORE SKILL NOW! UNLESS YOU DESTROY OUR',70,80,2,0,vga,true); + outsmalltextxy('ENTIRE XENOCIDE... I MEAN PEACE... ENVOY',70,90,2,0,vga,true); + outsmalltextxy('WE WILL STILL DESTROY YOUR HOME PLANET.',70,100,2,0,vga,true); + outsmalltextxy('NICE TRY PUNY EARTHLING!',70,110,2,0,vga,true); + pauseawhile(1200); + clearkeyboardbuffer; + blockmove(0,42,58,79,vaddr,10,130,vga); + outsmalltextxy('HMM.. I GUESS I BETTER SAVE THE EARTH.',70,130,9,0,vga,true); + outsmalltextxy('I''D BETTER SAVE MY GAME TOO.',70,140,9,0,vga,true); + outsmalltextxy('D''OH! I''M OUT OF BIG MISSILES! ',70,150,9,0,vga,true); + outsmalltextxy('WELL AT LEAST I HAVE SOME SMALLER SPARES.',70,160,9,0,vga,true); + pauseawhile(500); + clearkeyboardbuffer; + fade; + cls(0,vga); + flipd240(howmuchscroll,vaddr,vaddr2); + unfade; + + + {outsmalltextxy('YOU''VE BEATEN LEVEL ONE!!!',70,60,12,0,vga,true); + outsmalltextxy('NO, THIS IS NOT ONE OF THOSE ANNOYING',70,70,12,0,vga,true); + outsmalltextxy('"REGISTER NOW!" MESSAGES. ACTUALLY ',70,80,12,0,vga,true); + outsmalltextxy('THIS IS AS FAR AS THE GAME IS WRITTEN.',70,90,12,0,vga,true); + outsmalltextxy('OF COURSE, TO HASTEN ITS COMPLETION YOU',70,110,11,0,vga,true); + outsmalltextxy('COULD SEND A CONTRIBUTION TO THE AUTHOR.',70,120,11,0,vga,true); + outsmalltextxy(' ',70,130,11,0,vga,true); + outsmalltextxy('IN ANY CASE WATCH SOON FOR THE FURTHER ',70,150,14,0,vga,true); + outsmalltextxy('ADVENTURES OF TOM BOMBEM!!!',70,160,14,0,vga,true); + pauseawhile(1800); + flipd240(howmuchscroll,vaddr,vaddr2);} +end; + + +BEGIN + wave:=0; + whichwave:=0; + whatdelay:=1; + shipx:=36; + shipadd:=0; + shipframe:=1; + shipspeed:=5; + levelover:=false; + ch:=#1; ch2:=#1; + for i:=0 to 4 do begin + enemy[i].exploding:=false; + enemy[i].out:=false; + enemy[i].dead:=false; + end; + + bullet1out:=false; bullet2out:=false; + bullet1x:=0; bullet1y:=0; + bullet2x:=0; bullet2y:=0; + saucersout:=0; + + + flipd320(vaddr2,vaddr); + str(level,tempst); + fillblock(251,52,314,59,0,vaddr); + outtextxy(tempst,307,51,12,0,vaddr,false); + + cls(0,vaddr2); + for i:=0 to 50 do + putshape240(shapearray[12], + vaddr2,18,17,random(238),random(260)); + for i:=0 to 50 do + putshape240(shapearray[13], + vaddr2,18,17,random(238),random(260)); + {for i:=0 to 10 do putshape240(shapearray[11], + vaddr2,18,17,i*20,i*20);} + + pal(254,shields*4,0,0); + howmuchscroll:=50; + + cls(0,vga); + coolbox(70,85,240,120,true,vga); + outtextxy(' LEVEL ONE:',84,95,4,7,vga,false); + outtextxy('INANIMATE OBJECTS',84,105,4,7,vga,false); + + clearkeyboardbuffer; + pauseawhile(300); +{**** GAME LOOP ****} +{*******************} + + Repeat + ch2:=#1; + ch:=#1; + dec(howmuchscroll); + if howmuchscroll<1 then begin + flipd50(vaddr2,3000,vaddr3,0); + flipd50(vaddr2,2250,vaddr2,3000); + flipd50(vaddr2,1500,vaddr2,2250); + flipd50(vaddr2,750,vaddr2,1500); + flipd50(vaddr2,0,vaddr2,750); + flipd50(vaddr3,0,vaddr2,0); + howmuchscroll:=50; + end; + flipd240(howmuchscroll,vaddr,vaddr2); + +{***Collsion Check***} + for i:=0 to 4 do begin + if (enemy[i].dead=false) then begin + if (bullet1out) then begin + if collision(bullet1x,bullet1y,10,10, + enemy[i].x,enemy[i].y,9,9) then begin + if sbeffects then StartSound(Sound[3], 0, false); + dec(enemy[i].hitsneeded); + if enemy[i].hitsneeded<1 then enemy[i].dead:=true + else enemy[i].dead:=false; + enemy[i].exploding:=true; + enemy[i].explodprogress:=0; + bullet1out:=false; + inc(score,10); + changescore; + end; + end; + if (bullet2out) then begin + if collision(bullet2x,bullet2y,10,10, + enemy[i].x,enemy[i].y,9,9) then begin + if sbeffects then StartSound(Sound[3], 0, false); + dec(enemy[i].hitsneeded); + if enemy[i].hitsneeded<1 then enemy[i].dead:=true + else enemy[i].dead:=false; + enemy[i].exploding:=true; + enemy[i].explodprogress:=0; + bullet2out:=false; + inc(score,10); + changescore; + end; + end; + end; + end; + +{***DO EXPLOSIONS***} + for i:=0 to 4 do begin + if enemy[i].exploding=true then begin + inc(enemy[i].explodprogress); + if enemy[i].explodprogress<=5 then + putshape(shapearray[enemy[i].explodprogress+15], + vaddr,18,17,enemy[i].x,enemy[i].y) + else + if enemy[i].dead then begin + enemy[i].out:=false; + enemy[i].exploding:=false; + waveincrease; + end + else enemy[i].exploding:=false; + end; + end; +{***MOVE BULLET***} + if bullet1out then begin + dec(bullet1y,5); + if bullet1y<5 then bullet1out:=false; + if bullet1out then putshape(shape1off,vaddr,18,17,bullet1x,bullet1y); + end; + if bullet2out then begin + dec(bullet2y,5); + if bullet2y<5 then bullet2out:=false; + if bullet2out then putshape(shape1off,vaddr,18,17,bullet2x,bullet2y); + end; +{***MOVE ENEMIES***} + for i:=0 to 4 do begin + if (enemy[i].out=true) and (enemy[i].dead=false) then begin + putshape(shapearray[enemy[i].kind],vaddr,18,17,enemy[i].x,enemy[i].y); + enemy[i].x:=enemy[i].x+enemy[i].xspeed; + {*Check Position*} + if enemy[i].boundarycheck=false then inc(enemy[i].y,enemy[i].yspeed); + + if (enemy[i].x<=enemy[i].minx) or (enemy[i].x>=enemy[i].maxx) then begin + enemy[i].xspeed:=-enemy[i].xspeed; + enemy[i].x:=enemy[i].x+enemy[i].xspeed; + inc(enemy[i].y,enemy[i].yspeed); + end; + {*Too Low*} + if enemy[i].y>179 then begin + enemy[i].out:=false; + dec(saucersout); + end; + if enemy[i].y>140 then begin + if collision(shipx,165, + 24,15, + enemy[i].x,enemy[i].y, + 9,9) + then begin + if sbeffects then startsound(Sound[5],0,false); + dec(enemy[i].hitsneeded); + if enemy[i].hitsneeded=0 then enemy[i].dead:=true + else enemy[i].dead:=false; + enemy[i].exploding:=true; + enemy[i].explodprogress:=0; + dec(shields); + if shields<0 then levelover:=true; + fillblock(250,71,314,79,0,vaddr); + if shields>0 then begin + pal(254,shields*4,0,0); + for itemp:=0 to shields do + for jtemp:=71 to 78 do + horizontalline(250+(itemp*4), + 254+(itemp*4),jtemp, + 47-itemp,vaddr); + end; + end; + end; + + end; + end; +{***START NEW WAVE***} + {**STANDARD**} + if (saucersout=0) and (whichwave=0) then begin + saucersout:=5; + what:=random(8)+3; + for temp:=0 to 4 do begin + with enemy[temp] do begin + kind:=what; + x:=0; + y:=0; + xspeed:=5; + x:=temp*20; + minx:=(temp*20); + maxx:=(temp*20)+120; + boundarycheck:=true; + yspeed:=10; + out:=true; + exploding:=false; + hitsneeded:=1; + dead:=false; + end; + end; + end; + {**FALLING STRAIGHT**} + if whichwave=3 then begin + for temp:=0 to 4 do + if enemy[temp].out=false then begin + with enemy[temp] do begin + kind:=random(8)+3; + x:=random(200)+1; + y:=0; + xspeed:=0; + minx:=enemy[temp].x; + maxx:=enemy[temp].x; + boundarycheck:=true; + yspeed:=5+(wave div 40); + out:=true; + exploding:=false; + hitsneeded:=1; + dead:=false; + inc(saucersout); + end; + end; + end; + {**FALLING GRADUALLY SIDEWAYS**} + + if whichwave=2 then begin + for temp:=0 to 4 do + if enemy[temp].out=false then begin + with enemy[temp] do begin + kind:=random(8)+3; + y:=0; + xspeed:=5; + minx:=random(100); + maxx:=random(100)+120; + x:=enemy[temp].minx; + boundarycheck:=false; + yspeed:=1; + out:=true; + exploding:=false; + hitsneeded:=1; + dead:=false; + inc(saucersout); + end; + end; + end; + {**ZIG-ZAG**} + if (whichwave=1) and (saucersout=0) then begin + saucersout:=5; + whichone:=random(8)+3; + for temp:=0 to 4 do + if enemy[temp].out=false then begin + with enemy[temp] do begin + kind:=whichone; + y:=temp*10; + xspeed:=5; + minx:=0; + maxx:=220; + x:=temp*20; + boundarycheck:=false; + yspeed:=1; + out:=true; + exploding:=false; + hitsneeded:=1; + dead:=false; + end; + end; + end; + + if (whichwave=4) then begin + if saucersout=0 then begin + beforeboss; + enemy[0].kind:=15; + enemy[1].kind:=15; + enemy[2].kind:=14; + for temp:=0 to 2 do begin + with enemy[temp] do begin + x:=temp*20; + y:=0; + xspeed:=5; + minx:=0; + maxx:=220; + boundarycheck:=true; + yspeed:=0; + out:=true; + exploding:=false; + hitsneeded:=3; + dead:=false; + inc(Saucersout); + end; + end; + end; + + if enemy[1].kind=15 then + for temp:=3 to 4 do begin + inc(saucersout); + if (enemy[temp].out=false) + and (enemy[temp-3].out=true) then begin + with enemy[temp] do begin + kind:=random(8)+3; + x:=enemy[temp-3].x; + y:=20; + xspeed:=0; + minx:=x; + maxx:=x; + boundarycheck:=false; + yspeed:=5; + out:=true; + exploding:=false; + hitsneeded:=1; + dead:=false; + end; + end; + end; + end; + + if (whichwave=4) and (enemy[0].dead=true) and + (enemy[1].dead=true) and (enemy[2].dead=true) + and (wave>109) + then begin + AfterBoss; + levelover:=true; + end; +{***READ KEYBOARD***} + + if keypressed then BEGIN + ch:=readkey; + if ch=chr(0) then ch2:=readkey; + if ch=#27 then levelover:=true; + if ch2='M' then + if shipadd>=0 then inc(shipadd,3) else shipadd:=0; + if ch2='K' then + if shipadd<=0 then dec(shipadd,3) else shipadd:=0; + if ch2=';' then help; + if ch='+' then begin + inc(whatdelay); + if whatdelay>25 then whatdelay:=25; + end; + if (ch='P') or (ch='p') then begin + coolbox(65,85,175,110,true,vga); + outtextxy('GAME PAUSED',79,95,4,7,vga,false); + clearkeyboardbuffer; + repeat until keypressed; tempch:=readkey; + end; + if ch='-' then begin + dec(whatdelay); + if whatdelay<1 then whatdelay:=1; + end; + if (ch='S') or (ch='s') then sbeffects:=not(sbeffects); + + if ch2='<' then savegame; + + end; + if (ch=' ') then begin + if (bullet1out=false) then begin + if sbeffects then StartSound(Sound[4], 0, false); + bullet1out:=true; + bullet1x:=shipx+15; + bullet1y:=165; + putshape(shape1off,vaddr,18,17,bullet1x,bullet1y); + end + else + if (bullet2out=false) then begin + if sbeffects then StartSound(Sound[4], 0, false); + bullet2out:=true; + bullet2x:=shipx+15; + bullet2y:=165; + putshape(shape1off,vaddr,18,17,bullet2x,bullet2y); + end; + end; + +{***MOVE SHIP***} + shipx:=shipx+shipadd; + if (shipx<1) then shipx:=1; + if (shipx>190) then shipx:=190; + CASE shipframe of + 1 : putshape (bigship1off,vaddr,48,29,shipx,165); + 3 : putshape (bigship3off,vaddr,48,29,shipx,165); + 2,4 : putshape (bigship2off,vaddr,48,29,shipx,165); + END; + inc(shipframe);; + if shipframe=5 then shipframe:=1; + waitretrace; + flipd320 (vaddr,vga); + for i:=0 to whatdelay do waitretrace; + until levelover; END; function grinput(xv,yv,howlong,forecol,backcol:integer):string; -var tempx,tempy:integer; - tempst:string; +var tempst:string; ch3:char; label bob; begin tempst:=''; ch3:='Û'; - tempx:=xv; tempy:=yv; repeat - bob: repeat until keypressed; ch3:=readkey; - if (ch3=#8) and (length(tempst)>0) then begin - dec(tempx,10); - outtextxy(ch3,tempx,tempy,15,backcol,backcol,vga,true); - tempst:=tempst[length(tempst)-1]; + if (ch3=#8) and (ord(tempst[0])>0) then begin + fillblock(xv,yv,ord(tempst[0])*8+xv,yv+8,backcol,vga); + dec(tempst[0]); end; - if ch3=#8 then goto bob; - if length(tempst)>howlong then goto bob; - outtextxy(ch3,tempx,tempy,15,forecol,backcol,vga,false); - inc(tempx,10); - if ch3<>#13 then tempst:=concat(tempst,ch3); + if length(tempst)>=howlong then goto bob; + if ch3>#20 then tempst:=concat(tempst,ch3); + if tempst[0]>#0 then + outtextxy(tempst,xv,yv,forecol,backcol,vga,true); + bob: until ch3=#13; grinput:=tempst; end; +procedure loadshapes; +var x,y,i,j,shape:byte; +begin + grapherror:=Mode13LoadPicpacked(0,0,vaddr,false,true,'ships.tb1'); + for i:=0 to 47 do + for j:=0 to 29 do begin + ShapeTable1^[bigship1off+((j*48)+i)]:=getpixel(i,j,vaddr); + ShapeTable1^[bigship2off+((j*48)+i)]:=getpixel(i,j+32,vaddr); + ShapeTable1^[bigship3off+((j*48)+i)]:=getpixel(i,j+64,vaddr); + end; + + grapherror:=Mode13LoadPicpacked(0,0,vaddr,false,true,'tbshapes.tb1'); + for j:=0 to 1 do + for i:=0 to 9 do + for x:=0 to 17 do + for y:=0 to 17 do + ShapeTable1^[shapearray[(((j*10)+1)+i)]+((y*18)+x)] + :=getpixel(1+x+(i*19),1+y+(j*19),vaddr); + cls(0,vaddr); +end; + + + +procedure littleopener; +begin + grapherror:=Mode13LoadPicpacked(0,0,vga,true,false,'moon2.tb1'); + fade; + cls(0,vga); + grapherror:=Mode13LoadPicpacked(0,0,vga,false,true,'moon2.tb1'); + for i:=0 to 15 do + for j:=0 to 18 do begin + ShapeTable1^[6000+((j*16)+i)]:=getpixel(i+9,j+178,vga); + ShapeTable1^[6400+((j*16)+i)]:=getpixel(i+30,j+178,vga); + end; + fillblock(0,178,319,199,0,vga); + unfade; + flipd320(vga,vaddr); + flipd320(vaddr,vaddr2); + for i:=100 downto 0 do begin + flipd320(vaddr2,vaddr); + putshape(6400,vaddr,16,18,i,100); + waitretrace; + if keypressed then if readkey=#27 then exit; + flipd320(vaddr,vga); + end; + flipd320(vaddr2,vga); + outtextxy('>KCHK< TOM! WHERE ARE YOU GOING?',5,180,15,0,vga,true); + pauseawhile(500); if keypressed then ch:=readkey; + waitretrace; + fillblock(0,178,319,199,0,vga); + outtextxy('Ooops. ',5,180,24,0,vga,true); + pauseawhile(500); if keypressed then ch:=readkey; + for inte:=0 to 151 do begin + flipd320(vaddr2,vaddr); + putshape(6000,vaddr,16,18,inte*2,100); + waitretrace; + flipd320(vaddr,vga); + if keypressed then if readkey=#27 then exit; + end; + flipd320(vaddr2,vga); + pauseawhile(5); + fade; + cls(0,vga); + unfade; +end; + +procedure littleopener2; +begin + cls(0,vga); + grapherror:=Mode13LoadPicpacked(0,0,vga,true,false,'tbl2ship.tb1'); + fade; + grapherror:=Mode13LoadPicpacked(0,0,vga,false,true,'tbl2ship.tb1'); + unfade; + outtextxy('Hmmmm... ',10,10,4,0,vga,false); + outtextxy('This Might Be Harder Than I Thought.',10,20,4,0,vga,false); + pauseawhile(500); if keypressed then ch:=readkey; + fade; + cls(0,vga); + unfade; +end; + + procedure playthegame(lev:integer); -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -var palloop,paldir:integer; + begin + + fade; + cls(0,vga); + unfade; cls(0,vaddr); - grapherror:=loadpicsuperpacked(0,0,vga,'tbma1.tb1'); - outtextxy('MOONBASE ALPHA: EARTH''S LAST CHANCE!',5,5,15,1,0,vga,false); - pal(255,0,0,0); - palloop:=0; - paldir:=1; + level:=lev; + if level=0 then begin + littleopener; + shields:=10; + score:=0; + inc(level); + end; + beginscore:=score; + beginshields:=shields; + loadshapes; + grapherror:=Mode13LoadPicpacked(0,0,vga,true,false,'tbsobj.tb1'); + hiscore:=showhiscore(false,false); - repeat - pal(255,palloop,0,0); - if paldir=1 then inc(palloop) - else dec(palloop); - if palloop>62 then paldir:=-1; - if palloop<1 then paldir:=1; - delay(50); - until keypressed; - ch:=readkey; - drawstars(false); - shiproutine; + if level=1 then begin + setupsidebar; + y:=0; + levelone; + if level=2 then littleopener2; + end; + if level=2 then begin + setupsidebar; + beginscore:=score; + beginshields:=shields; + leveltwoengine(2); + end; + if level=3 then begin + setupsidebar; + beginscore:=score; + beginshields:=shields; + littleopener3; + levelthree; + end; + if level=4 then begin + setupsidebar; + beginscore:=score; + beginshields:=shields; + leveltwoengine(4); + end; + + + + + clearkeyboardbuffer; + + coolbox(70,85,170,110,true,vga); + outtextxy('GAME OVER',84,95,4,7,vga,false); + for inte:=0 to 100 do waitretrace; + repeat until keypressed; tempch:=readkey; + clearkeyboardbuffer; + hiscore:=showhiscore(false,false); if score>lowscore then begin coolbox(10,75,310,125,true,vga); - outtextxy('NEW HIGH SCORE!',90,80,15,12,7,vga,false); - outtextxy('ENTER YOUR NAME (10 Chars)',30,90,15,0,7,vga,false); + outtextxy('NEW HIGH SCORE!',90,80,12,7,vga,false); + outtextxy('ENTER YOUR NAME (10 Chars)',30,90,0,7,vga,false); hiname:=grinput(110,110,10,11,7); hiscore:=showhiscore(false,true); end; hiscore:=showhiscore(true,false); fade; + cls(0,vga); end; -procedure dographics; -var i,j:integer; + +procedure shadowrite(st:string;x5,y5,forecol,backcol:integer); begin - grapherror:=loadpicsuperpacked(0,0,vaddr,'ships.tb1'); - for i:=0 to 47 do - for j:=0 to 29 do - frame[0,i,j]:=getpixel(i,j,vaddr); - for i:=0 to 47 do - for j:=0 to 29 do - frame[1,i,j]:=getpixel(i,j+32,vaddr); - for i:=0 to 47 do - for j:=0 to 29 do - frame[2,i,j]:=getpixel(i,j+64,vaddr); - grapherror:=loadpicsuperpacked(0,0,vaddr,'tbsauc.tb1'); - for i:=0 to 20 do - for j:=0 to 5 do - saucer[i,j]:=getpixel(i,j,vaddr); - for i:=0 to 20 do - for j:=12 to 17 do - shot[i,(j-12)]:=getpixel(i,j,vaddr); - + outtextxy(st,x5+1,y5+1,backcol,0,vga,false); + outtextxy(st,x5,y5,forecol,0,vga,false); end; -procedure background; + + function HexW(W: word): string; {Word} + const + HexChars: array [0..$F] of Char = '0123456789ABCDEF'; + begin + HexW := + HexChars[(W and $F000) shr 12] + + HexChars[(W and $0F00) shr 8] + + HexChars[(W and $00F0) shr 4] + + HexChars[(W and $000F)]; + end; + + procedure OurExitProc; far; + {If the program terminates with a runtime error before the extended memory} + {is deallocated, then the memory will still be allocated, and will be lost} + {until the next reboot. This exit procedure is ALWAYS called upon program} + {termination and will deallocate extended memory if necessary. } + var + i: byte; + begin + for i := 0 to NumSounds-1 do + if Sound[i] <> nil then FreeSound(Sound[i]); + if SharedEMB then ShutdownSharing; + ExitProc := OldExitProc; {Chain to next exit procedure} + end; + +procedure Init; + + begin + if not(GetSettings(BaseIO, IRQ, DMA, DMA16)) then + begin + baseio:=xbaseio; irq:=xirq; dma:=xdma; dma16:=0; + end; + if not(InitSB(BaseIO, IRQ, DMA, DMA16)) then + begin + settext; + writeln('Error initializing sound card'); + writeln('Incorrect base IO address, sound card not installed, or broken'); + writeln('Check your BLASTER= environmental value or re-run TBSETUP.'); + Halt(2); {Sound card could not be initialized} + end; + if not(InitXMS) then + begin + writeln('Error initializing extended memory'); + writeln('HIMEM.SYS must be installed'); + writeln('You might be better off by choosing no sound effects'); + writeln('In the TBSETUP program'); + Halt(3); {XMS driver not installed} + end + else + begin + if GetFreeXMS < XMSRequired + then + begin + writeln('Insufficient free XMS'); + writeln('You might be better off by choosing no sound effects'); + writeln('In the TBSETUP program.'); + Halt(4); {Insufficient XMS memory} + end + else + begin + if SharedEMB then InitSharing; + OpenSoundResourceFile('SOUNDS.TB1'); + LoadSound(Sound[0], 'CLICK'); + LoadSound(Sound[1], 'AHH'); + LoadSound(Sound[2], 'ZOOP'); + LoadSound(Sound[3], 'KAPOW'); + LoadSound(Sound[4], 'CC'); + LoadSound(Sound[5],'BONK'); + LoadSound(Sound[6],'OW'); + LoadSound(Sound[7],'SCREAM'); + CloseSoundResourceFile; + OldExitProc := ExitProc; + ExitProc := @OurExitProc; + end + end; + InitMixing; + end; + + procedure Shutdownsb1; + begin + ShutdownMixing; + ShutdownSB5; + + for i := 0 to NumSounds-1 do + FreeSound(Sound[i]); + if SharedEMB then ShutdownSharing; + writeln; + end; + + + + + +procedure QUIT; +label menu2; begin - cls(0,vaddr); - drawstars(true); - coolbox(0,0,319,199,false,vaddr); + coolbox(90,75,230,125,true,vga); + 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; + gotoxy(1,23); + move(imagedata,screen,4000); + textcolor(7); + if sbsound then shutdownsb1; + shutdown; + halt; + menu2: + barpos:=6; end; + + + + + + + + + procedure options; var opbarpos,argh:integer; begin - background; - flip(vaddr,vga); - outtextxy('ESC QUITS',120,175,15,32,0,vga,true); + cls(0,vaddr); + coolbox(0,0,319,199,false,vaddr); + flipd320(vaddr,vga); + outtextxy('ESC QUITS',120,175,32,0,vga,true); opbarpos:=0; repeat - if musicon then begin - if opbarpos=0 then outtextxy('MUSIC ON ',30,30,15,32,7,vga,true) - else outtextxy('MUSIC ON ',30,30,15,32,0,vga,true); + if sbeffects then begin + if opbarpos=0 then outtextxy('SOUND ON ',30,30,32,7,vga,true) + else outtextxy('SOUND ON ',30,30,32,0,vga,true); end; - if not(musicon) then begin - if opbarpos=0 then outtextxy('NO MUSIC',30,30,15,32,7,vga,true) - else outtextxy('NO MUSIC',30,30,15,32,0,vga,true); + if not(sbeffects) then begin + if opbarpos=0 then outtextxy('NO SOUND ',30,30,32,7,vga,true) + else outtextxy('NO SOUND ',30,30,32,0,vga,true); end; - if opbarpos=1 then outtextxy('VIEW HIGH SCORES',30,40,15,32,7,vga,true) - else outtextxy('VIEW HIGH SCORES',30,40,15,32,0,vga,true); + if opbarpos=1 then outtextxy('VIEW HIGH SCORES',30,40,32,7,vga,true) + else outtextxy('VIEW HIGH SCORES',30,40,32,0,vga,true); ch:=menuread; if (ord(ch)=222) or (ord(ch)=220) then inc(opbarpos); if (ord(ch)=223) or (ord(ch)=221) then dec(opbarpos); if ch='M' then opbarpos:=0; if ch='V' then opbarpos:=1; - if (ch=#13) and (opbarpos=0) then musicon:=not(musicon); + if (ch=#13) and (opbarpos=0) then sbeffects:=not(sbeffects); if (ch=#13) and (opbarpos=1) then begin ch:=#27; argh:=4; @@ -603,201 +3408,405 @@ end; procedure loadgame; begin + ondisk:=''; coolbox(90,75,230,125,true,vga); - outtextxy('LOAD WHICH GAME',97,82,15,9,7,vga,false); - outtextxy(' (0-9) ',97,90,15,9,7,vga,false); - repeat until keypressed; - level:=0; -end; + outtextxy('LOAD WHICH GAME',97,82,9,7,vga,false); -procedure help; -begin - background; - flip(vaddr,vga); - outtextxy('HELP',10,10,15,9,0,vga,false); - outtextxy('Press ESC to exit most stuff.',10,20,15,9,0,vga,false); - outtextxy('Use the arrows to manuever.',10,30,15,9,0,vga,false); + findfirst('SG?.TB1',ANYFILE,filestuff); + while doserror=0 do with filestuff do + begin + ondisk:=concat(ondisk,name[3]); + findnext(filestuff); + end; + if ondisk='' then ondisk:='NO GAMES SAVED'; + outtextxy(ondisk,97,92,4,7,vga,false); repeat until keypressed; ch:=readkey; + if (ch>='0') and (ch<='9') then begin + {$I-} + ondisk:=concat('SG',ch,'.TB1'); + assign(savegamef,ondisk); + reset(savegamef); + {$I+} + If IOResult=0 then begin + readln(savegamef,score); + readln(savegamef,level); + readln(savegamef,shields); + close(savegamef); + playthegame(level); + end; + end; + end; + + +{************ +************* +************ +************} + + procedure story; var error:byte; xtemp,ytemp:integer; thrustcol:integer; thrust:real; tempch:char; -procedure putbigflame(xp,yp,frame:integer); -var xtemp,ytemp:integer; + alienchar:byte; + cycles:byte; + + + + +procedure doflames; begin - for xtemp:=0 to 26 do - for ytemp:=0 to 18 do - putpixel(xtemp+xp,ytemp+yp,bigflame[frame,xtemp,ytemp],vaddr); -end; -procedure putsmallflame(xp,yp,frame:integer); -var xtemp,ytemp:integer; -begin - for xtemp:=0 to 3 do - for ytemp:=0 to 4 do - putpixel(xtemp+xp,ytemp+yp,smallflame[frame,xtemp,ytemp],vaddr); + + if flames=true then begin + putshape(bigflame1off,vaddr,27,17,213,100); + putshapeover(sflame2off,vaddr,4,4,105,90); + putshapeover(sflame1off,vaddr,4,4,151,71); + putshapeover(sflame2off,vaddr,4,4,218,72); + end + else + begin + putshape(bigflame2off,vaddr,27,17,213,100); + putshapeover(sflame1off,vaddr,4,4,105,90); + putshapeover(sflame2off,vaddr,4,4,151,71); + putshapeover(sflame1off,vaddr,4,4,218,72); + outtextxy(chr(alienchar),10,10,12,0,vaddr,true); + inc(alienchar); + if alienchar>44 then alienchar:=34; + end; + flipd320(vaddr,vga); + vdelay(5); + flames:=not(flames); end; -procedure putbarge(xp,yp:integer;where:word); -var xtemp,ytemp:integer; - col:byte; -begin - for xtemp:=0 to 15 do - for ytemp:=0 to 18 do begin - if (ytemp+yp>=0) then begin - col:=barge[xtemp,ytemp]; - if col<>0 then putpixel(xtemp+xp,ytemp+yp,col,where); - end; - end; -end; procedure puttruck(xp,yp,frame:integer;where:word); -var xtemp,ytemp:integer; +var xtemp,into,ytemp:integer; col:byte; begin - for xtemp:=0 to 5 do - for ytemp:=0 to 8 do begin - col:=truck[frame,xtemp,ytemp]; - if (ytemp+yp>=173) then begin - if col<>0 then putpixel(xtemp+xp,ytemp+yp,col,where); - end; + for into:=0 to 7 do begin + if(into+yp>=172) then + if frame=0 then putshapeline(truck1off,where,6,8,xp,yp,into) + else putshapeline(truck2off,where,6,8,xp,yp,into); end; end; +procedure pauseawhile(howlong:word); +var i:word; +begin + i:=0; + repeat + waitretrace; + inc(i); + if i>howlong then exit; + until keypressed; +end; + + begin fade; - error:=loadpicsuperpacked(0,0,vaddr,'tbsobj.tb1'); - for xtemp:=0 to 26 do - for ytemp:=0 to 18 do begin - bigflame[0,xtemp,ytemp]:=getpixel(xtemp,ytemp+2,vaddr); - bigflame[1,xtemp,ytemp]:=getpixel(xtemp,ytemp+21,vaddr); + error:=Mode13LoadPicpacked(0,0,vaddr,false,true,'tbsobj.tb1'); + for ytemp:=0 to 18 do + for xtemp:=0 to 26 do begin + ShapeTable1^[((ytemp*27)+xtemp)+bigflame1off]:=getpixel(xtemp,ytemp+2,vaddr); + ShapeTable1^[((ytemp*27)+xtemp)+bigflame2off]:=getpixel(xtemp,ytemp+21,vaddr); end; - for xtemp:=0 to 3 do - for ytemp:=0 to 4 do begin - smallflame[0,xtemp,ytemp]:=getpixel(xtemp,ytemp+43,vaddr); - smallflame[1,xtemp,ytemp]:=getpixel(xtemp,ytemp+47,vaddr); + for ytemp:=0 to 18 do + for xtemp:=0 to 15 do begin + ShapeTable1^[((ytemp*16)+xtemp)+explo1off]:=getpixel(127+xtemp,ytemp+100,vaddr); + ShapeTable1^[((ytemp*16)+xtemp)+explo2off]:=getpixel(148+xtemp,ytemp+100,vaddr); + end; + for ytemp:=0 to 6 do + for xtemp:=0 to 15 do + ShapeTable1^[((ytemp*16)+xtemp)+rent1off]:=getpixel(168+xtemp,ytemp+100,vaddr); + + for ytemp:=0 to 4 do + for xtemp:=0 to 3 do begin + ShapeTable1^[((ytemp*4)+xtemp)+sflame1off]:=getpixel(xtemp,ytemp+43,vaddr); + ShapeTable1^[((ytemp*4)+xtemp)+sflame2off]:=getpixel(xtemp,ytemp+47,vaddr); end; - for xtemp:=0 to 15 do - for ytemp:=0 to 18 do - barge[xtemp,ytemp]:=getpixel(xtemp+65,ytemp+100,vaddr); - for xtemp:=0 to 5 do - for ytemp:=0 to 8 do begin - truck[0,xtemp,ytemp]:=getpixel(xtemp+85,ytemp+100,vaddr); - truck[1,xtemp,ytemp]:=getpixel(xtemp+95,ytemp+100,vaddr); + + for ytemp:=0 to 18 do + for xtemp:=0 to 15 do + ShapeTable1^[((ytemp*16)+xtemp)+bargeoff]:=getpixel(xtemp+65,ytemp+100,vaddr); + + for ytemp:=0 to 8 do + for xtemp:=0 to 5 do begin + ShapeTable1^[((ytemp*6)+xtemp)+truck1off]:=getpixel(xtemp+85,ytemp+100,vaddr); + ShapeTable1^[((ytemp*6)+xtemp)+truck2off]:=getpixel(xtemp+95,ytemp+100,vaddr); end; + {******FIRST MESSAGE*******} cls(0,vga); - outtextxy('MOON BASE ALPHA:',5,5,15,9,0,vga,false); - outtextxy(' THE FIRST PRIVATELY FINANCED SPACE ',5,15,15,9,0,vga,false); - outtextxy(' VENTURE. FOUNDED IN 2004 BY PIONEER',5,25,15,9,0,vga,false); - outtextxy(' VINCE WEAVER. IN ORDER TO SUPPORT',5,35,15,9,0,vga,false); - outtextxy(' ITSELF, IT DISPOSED OF GARBAGE AND',5,45,15,9,0,vga,false); - outtextxy(' NUCLEAR WASTE FROM EARTH BY LAUNCHING',5,55,15,9,0,vga,false); - outtextxy(' IT INTO DEEP SPACE WITH BARGES. ',5,65,15,9,0,vga,false); - outtextxy('NOW IT IS 2018, AND THE LAST BARGE IS',5,75,15,9,0,vga,false); - outtextxy(' TO BE LAUNCHED. NOW ALL WORK THERE',5,85,15,9,0,vga,false); - outtextxy(' WILL BE CONCENTRATED ON BUILDING A',5,95,15,9,0,vga,false); - outtextxy(' TERRAN SPACE FLEET.',5,105,15,9,0,vga,false); + outtextxy('THE STORY SO FAR...',20,20,4,0,vga,false); unfade; - repeat until keypressed; tempch:=readkey; + pauseawhile(300); if keypressed then if readkey=#27 then exit; + fade; + cls(0,vga); + error:=Mode13LoadPicpacked(0,0,vaddr2,false,true,'tbcobj.tb1'); + blockmove(129,56,178,188,vaddr2,10,10,vga); + outtextxy('YOU ARE TOM BOMBEM, A STRANGE',80,10,1,0,vga,false); + outtextxy(' BUT EFFICIENT MEMBER OF',80,20,1,0,vga,false); + outtextxy(' THE LUNAR SPACE FORCE.',80,30,1,0,vga,false); + outtextxy('YOU NEVER SAY MUCH AND YOU ARE',80,50,4,0,vga,false); + outtextxy(' RARELY SEEN OUTSIDE OF ',80,60,4,0,vga,false); + outtextxy(' YOUR BLUE SPACESUIT.',80,70,4,0,vga,false); + outtextxy('YOU OFTEN GET YOURSELF IN ',80,90,2,0,vga,false); + outtextxy(' TROUBLE BY SCRATCHING',80,100,2,0,vga,false); + outtextxy(' YOUR HEAD AT INAPPROPRIATE',80,110,2,0,vga,false); + outtextxy(' TIMES.',80,120,2,0,vga,false); + outtextxy('PRESS ANY KEY....',96,185,15,0,vga,false); + unfade; + pauseawhile(900); if keypressed then if readkey=#27 then exit; + fade; + cls(0,vga); + blockmove(129,56,178,188,vaddr2,260,10,vga); + blockmove(99,104,128,185,vaddr2,287,13,vga); + outtextxy('IT IS THE YEAR 2028.',10,10,1,0,vga,false); + outtextxy('YOU HAVE BEEN SUMMONED BY',10,30,3,0,vga,false); + outtextxy(' LUNAR DICTATOR-IN-CHIEF',10,40,3,0,vga,false); + outtextxy(' VINCENT WEAVER ABOUT A',10,50,3,0,vga,false); + outtextxy(' TOP SECRET THREAT TO ',10,60,3,0,vga,false); + outtextxy(' INTERPLANETARY SECURITY.',10,70,3,0,vga,false); + outtextxy('YOU ATTEND THE BRIEFING WITH',10,90,5,0,vga,false); + outtextxy(' YOUR USUAL CONFUSED',10,100,5,0,vga,false); + outtextxy(' QUIETNESS. YOU STILL DO',10,110,5,0,vga,false); + outtextxy(' NOT UNDERSTAND YOUR OWN',10,120,5,0,vga,false); + outtextxy(' SUCCESSFULNESS.',10,130,5,0,vga,false); + outtextxy('PRESS ANY KEY....',96,185,15,0,vga,false); + unfade; + pauseawhile(900); if keypressed then if readkey=#27 then exit; + fade; + + error:=Mode13LoadPicpacked(0,0,vga,false,true,'tbchief.tb1'); + + unfade; + blockmove(115,55,206,114,vga,115,55,vaddr); + + {pauseawhile(600); if keypressed then if readkey=#27 then exit;} + + outtextxy('Ahhh.... Mr. Bombem.... ',1,1,15,0,vga,true); + if sbeffects then startsound(sound[1],0,false); + pauseawhile(200); if keypressed then if readkey=#27 then exit; + if sbeffects then startsound(sound[3],0,false); + blockmove(188,14,279,73,vaddr2,115,55,vga); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + blockmove(115,55,206,114,vaddr,115,55,vga); + outtextxy('I''ll be brief. ',1,1,15,0,vga,true); + pauseawhile(400); if keypressed then if readkey=#27 then exit; + outtextxy('Do you know how this base was founded?',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('No? Well watch the screen. ',1,1,15,0,vga,true); + pauseawhile(400); if keypressed then if readkey=#27 then exit; + blockmove(210,75,295,134,vaddr2,210,136,vga); + pauseawhile(300); if keypressed then if readkey=#27 then exit; + pal(250,0,0,0); fade; + {******BARGE TAKING OFF**********} - error:=loadpicsuperpacked(0,0,vaddr2,'tbma1.tb1'); - putbarge(141,157,vaddr2); - flip(vaddr2,vaddr); - flip(vaddr,vga); + error:=Mode13LoadPIcpacked(0,0,vaddr2,false,true,'tbma1.tb1'); +{ outsmalltextxy('MY WIFE AND I FOUNDED',212,3,14,0,vaddr2,false); + outsmalltextxy('THIS BASE IN 2008.',212,9,14,0,vaddr2,false); + outsmalltextxy('THE ONLY WAY TO ',212,16,13,0,vaddr2,false); + outsmalltextxy('FINANCE IT WAS TO',212,22,13,0,vaddr2,false); + outsmalltextxy('ENGAGE IN A DUBIOUS',212,28,13,0,vaddr2,false); + outsmalltextxy('BUSINESS.',212,34,13,0,vaddr2,false); + outsmalltextxy('WE LAUNCHED EARTH''S',212,41,12,0,vaddr2,false); + outsmalltextxy('TRASH INTO SPACE',212,47,12,0,vaddr2,false); + outsmalltextxy('FOR A PROFIT.',212,53,12,0,vaddr2,false); + outsmalltextxy('HERE IS FOOTAGE FROM',212,60,11,0,vaddr2,false); + outsmalltextxy('THE LAST LAUNCH EIGHT',212,66,11,0,vaddr2,false); + outsmalltextxy('YEARS AGO.',212,72,11,0,vaddr2,false);} + flipd320(vaddr2,vaddr); + putshape(bargeoff,vaddr,16,18,141,157); + flipd320(vaddr,vga); unfade; - for ytemp:=191 downto 165 do begin - screentrans(145,ytemp,vaddr,vaddr2); + + pauseawhile(700); if keypressed then if readkey=#27 then exit; + + for ytemp:=191 downto 164 do begin + if ytemp>=172 then blockmove(145,ytemp,152,ytemp+10,vaddr2,145,ytemp,vaddr) + else blockmove(145,172,152,182,vaddr2,145,172,vaddr); puttruck(145,ytemp,ytemp mod 2,vaddr); - vdelay(7); - flip(vaddr,vga); + pauseawhile(7); + if keypressed then if readkey=#27 then exit; + flipd320(vaddr,vga); end; - error:=loadpicsuperpacked(0,0,vaddr2,'tbma1.tb1'); - vdelay(20); - flip(vaddr2,vaddr); - putbarge(141,157,vaddr); + + pauseawhile(20); + flipd320(vaddr2,vaddr); + putshape(bargeoff,vaddr,16,18,141,157); thrustcol:=0; ytemp:=157; thrust:=0; while ytemp>-25 do begin thrust:=thrust+0.05; if thrustcol<63 then inc(thrustcol); - screentrans(141,ytemp,vaddr,vaddr2); - putbarge(141,ytemp,vaddr); - vdelay(7); + blockmove(141,ytemp,171,ytemp+30,vaddr2,141,ytemp,vaddr); + for i:=1 to 17 do + if ytemp+i>=0 then + putshapeline(bargeoff,vaddr,16,18,141,ytemp,i); + pauseawhile(5); + if keypressed then if readkey=#27 then exit; pal(250,thrustcol,0,0); - flip(vaddr,vga); + flipd320(vaddr,vga); ytemp:=ytemp-round(thrust); end; - vdelay(100); + + pauseawhile(100); + if keypressed then if readkey=#27 then exit; fade; -{******SECOND MESSAGE*******} - cls(0,vga); - outtextxy('5 YEARS LATER, 1 LIGHT YEAR DISTANT',5,5,15,9,0,vga,false); - outtextxy(' CATASTROPHE STRIKES!! ',5,15,15,9,0,vga,false); + +{****SECOND CHIEF*******} + error:=Mode13LoadPicpacked(0,0,vaddr2,false,true,'tbcobj.tb1'); + error:=Mode13LoadPicpacked(0,0,vga,false,true,'tbchief.tb1'); + blockmove(7,104,97,125,vaddr2,6,174,vga); unfade; - vdelay(100); - repeat until keypressed; tempch:=readkey; - fade; + outtextxy('You might wonder why this is important.',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('Last week we received a message. ',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('It is of extra-terrestrial origin. ',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy('Watch the screen. ',1,1,15,0,vga,true); + blockmove(210,136,295,195,vaddr2,210,136,vga); + pauseawhile(300); if keypressed then if readkey=#27 then exit; + fade; + {******ALIEN DELEGATION*****} - error:=loadpicsuperpacked(0,0,vaddr2,'tbcrash.tb1'); - flip(vaddr2,vaddr); + error:=Mode13LoadPicpacked(0,0,vaddr2,false,true,'tbcrash.tb1'); + alienchar:=34; + flipd320(vaddr2,vaddr); + flipd320(vaddr,vga); + putshape(bargeoff,vaddr,16,18,97,180); unfade; + xtemp:=97; + ytemp:=181; + flames:=true; + while ytemp>118 do begin + blockmove(xtemp,ytemp,xtemp+20,ytemp+20,vaddr2,xtemp,ytemp,vaddr); + putshape(bargeoff,vaddr,16,18,xtemp,ytemp); + doflames; + dec(ytemp); + inc(xtemp); + pauseawhile(1); + if keypressed then if readkey=#27 then exit; + end; + blockmove(xtemp,ytemp,xtemp+30,ytemp+30,vaddr2,xtemp,ytemp,vaddr); + pal(0,63,63,63); + putshape(explo1off,vga,16,18,160,118); + pauseawhile(5); + if keypressed then if readkey=#27 then exit; + pal(0,0,0,0); + if sbeffects then startsound(sound[3],0,false); + for xtemp:=0 to 10 do begin + putshapeover(explo2off,vaddr,16,18,160,118); + doflames; + putshapeover(explo1off,vaddr,16,18,160,118); + doflames; + end; + blockmove(159,114,189,144,vaddr2,159,114,vaddr); + putshapeover(rent1off,vaddr,16,6,160,115); + flipd320(vaddr,vga); + cycles:=0; repeat - putbigflame(213,100,0); - putsmallflame(105,90,1); - putsmallflame(151,71,0); - putsmallflame(218,72,1); - putbarge(160,180,vaddr); - flip(vaddr,vga); - vdelay(5); - putbigflame(213,100,1); - putsmallflame(105,90,0); - putsmallflame(151,71,1); - putsmallflame(218,72,0); - flip(vaddr,vga); - vdelay(5); - until keypressed; - ch:=readkey; + doflames; + inc(cycles); + until ((keypressed) or (cycles>60)); + if keypressed then if readkey=#27 then exit; + {****ALIEN MESSAGE*****} fade; - error:=loadpicsuperpacked(0,0,vga,'tbgorg.tb1'); + error:=Mode13LoadPicpacked(0,0,vga,false,true,'tbgorg.tb1'); unfade; - outtextxy('GREETINGS EARTHLINGS.',0,162,15,12,0,vga,false); - outtextxy('I AM GORGONZOLA THE REPULSIVE.',0,171,15,12,0,vga,false); - outtextxy('YOU HAVE MADE A BIG MISTAKE.',0,180,15,12,0,vga,false); - readln; + outtextxy('GREETINGS EARTHLINGS.',0,162,12,0,vga,false); + outtextxy('I AM GORGONZOLA THE REPULSIVE.',0,171,12,0,vga,false); + outtextxy('YOU HAVE MADE A BIG MISTAKE.',0,180,12,0,vga,false); + pauseawhile(600); + if keypressed then if readkey=#27 then exit; + outtextxy('YOUR SHIP FULL OF REFUSE HAS',0,162,12,0,vga,true); + outtextxy('DAMAGED OUR OFFICIAL PEACE ',0,171,12,0,vga,true); + outtextxy('ENVOY. IT WAS ON ITS WAY TO ',0,180,12,0,vga,true); + outtextxy('YOUR PLANET. ',0,189,12,0,vga,true); + pauseawhile(600); + if keypressed then if readkey=#27 then exit; + outtextxy('IN AN IRONIC FORM OF RETALLIATION',0,162,12,0,vga,true); + outtextxy('WE HAVE MADE YOUR TRASH EVIL AND',0,171,12,0,vga,true); + outtextxy('TURNED IT AGAINST YOU. ',0,180,12,0,vga,true); + outtextxy(' DIE EARTH SCUM! ',0,189,12,0,vga,true); + pauseawhile(600); + if keypressed then if readkey=#27 then exit; + fade; +{****** THIRD CHIEF *******} + error:=Mode13LoadPicpacked(0,0,vaddr2,false,true,'tbcobj.tb1'); + error:=Mode13LoadPicpacked(0,0,vga,false,true,'tbchief.tb1'); + blockmove(7,127,97,148,vaddr2,6,174,vga); + unfade; + outtextxy('Tom, our radar detects approaching ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('objects. They are inside the ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('orbit of Jupiter. ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('You are our only hope! ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('Will you fly our only spaceship ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + outtextxy('and save the human race? ',1,1,15,0,vga,true); + pauseawhile(500); if keypressed then if readkey=#27 then exit; + blockmove(5,16,44,98,vaddr2,146,59,vga); + pauseawhile(10); + blockmove(46,16,85,98,vaddr2,146,59,vga); + pauseawhile(10); + blockmove(87,16,126,98,vaddr2,146,59,vga); + outtextxy('Scratch. Scratch. ',1,1,9,0,vga,true); + pauseawhile(300); if keypressed then if readkey=#27 then exit; + outtextxy('I knew you''d do it. Good Luck! ',1,1,15,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; + outtextxy(' ',1,1,9,0,vga,true); + pauseawhile(600); if keypressed then if readkey=#27 then exit; end; procedure credits; var j:integer; - sp:integer; + sp:boolean; + ky:word; procedure rotate(stri:string;col:integer); - var j1:integer; - begin - if sp=1 then begin - for j1:=0 to 7 do begin - outtextxy(stri,0,198,j1,col,0,vga,false); - Move (mem[vga:320],mem[vga:0],63680); - if keypressed then begin inc(sp); cls(0,vga); end; - end; - end; - if sp<>1 then begin - outtextxy(stri,0,180,15,col,0,vga,true); - Move (mem[vga:3200],mem[vga:0],60800); - end; + var j1,k1:integer; + begin + if not(sp) then begin + for j1:=0 to 7 do begin + + outtextline(stri,0,198,col,0,j1,vga); + {move(mem vga:320 vga:0 63680} + asm + push ds; + push es; + mov ax,vga + mov ds,ax + mov es,ax + mov cx,31840 + mov si,320 + mov di,0 + rep movsw + pop es; + pop ds; + end; + if keypressed then begin sp:=true; ch:=readkey; end; + end; + end; end; procedure skip; begin rotate(' ',0); end; + label ender; begin - sp:=1; + sp:=false; cls(0,vaddr); - flip(vaddr,vga); + flipd320(vaddr,vga); j:=0; if keypressed then ch:=readkey; rotate(' TOM BOMBEM',4); @@ -805,42 +3814,88 @@ begin skip; rotate(' PROGRAMMING',9); skip; rotate(' VINCENT M WEAVER',9); skip; skip; rotate(' GRAPHICS',10); + if sp then goto ender; skip; rotate(' VINCENT M WEAVER',10); - skip; skip; rotate(' SOUND',11); + skip; skip; rotate(' SOUND EFFECTS',11); + if sp then goto ender; skip; rotate(' VINCENT M WEAVER',11); skip; skip; rotate(' GRAPHICS INSPIRATION',12); + if sp then goto ender; skip; rotate(' JEFF WARWICK',12); - skip; skip; rotate(' UTOPIA BBS 410-557-0868',13); + skip; skip; rotate(' GENERAL HELP',13); + if sp then goto ender; skip; rotate(' JOHN CLEMENS',13); skip; rotate(' JASON GRIMM',13); skip; skip; rotate(' PCGPE AUTHORS, esp',14); + if sp then goto ender; skip; rotate(' GRANT SMITH',14); - skip; skip; rotate(' SOUND BLASTER INFO',15); - skip; rotate(' AXEL STOLZ',15); + skip; skip; rotate(' SOUND BLASTER CODE',15); + if sp then goto ender; + skip; rotate(' ETHAN BRODSKY',15); skip; skip; rotate(' INSPIRATION',9); + if sp then goto ender; skip; rotate(' DOUGLAS ADAMS',9); - skip; rotate(' GENE RODENBERRY',9); skip; rotate(' CLIFF STOLL',9); skip; rotate(' ARTHUR C CLARKE',9); skip; rotate(' ISAAC ASIMOV',9); skip; rotate(' GORDON KORMAN',9); skip; skip; rotate(' THANKS TO ALL THE AGENTS',10); - skip; rotate(' B,D,JL,L,N,P,S,W,PM,E',10); - skip; rotate(' AND ESPECIALLY AGENT G',10); - i:=0; + if sp then goto ender; + skip; rotate(' B,D,JL,L,N,P,S,W,PM,E,G,TK',10); + skip; rotate(' AND ESPECIALLY MP',10); + + ender: + ky:=0; repeat - move(mem[vaddr2:(i*320)],mem[vga:63680],320); - Move (mem[vga:320],mem[vga:0],63680); - inc(i); - until (keypressed) or (i=299); + asm + push ds; + push es; + mov ax,vaddr2 + mov ds,ax + mov ax,vga + mov es,ax + mov ax,ky + shl ax,5 + mov cx,ax + shl ax,1 + shl cx,3 + add ax,cx + mov si,ax + mov di,63680 + mov cx,160 + rep movsw + pop es; + pop ds; + end; + + {move(mem[vaddr2:(ky*320)],mem[vga:(32000)],320);} + asm + push ax; + push ds; + push es; + push cx; + push si; + push di; + mov ax,vga + mov ds,ax + mov es,ax + mov cx,31840 + mov si,320 + mov di,0 + rep movsw + pop di; + pop si; + pop cx; + pop es; + pop ds; + pop ax; + end;{ + Move (mem[vga:320],mem[vga:0],63680); } + inc(ky); + until (keypressed) or (ky=199); if keypressed then ch:=readkey; end; -procedure shadowrite(st:string;x5,y5,forecol,backcol:integer); -begin - outtextxy(st,x5+1,y5+1,15,backcol,0,vga,false); - outtextxy(st,x5,y5,15,forecol,0,vga,false); -end; procedure register; @@ -850,74 +3905,81 @@ var pagenum,oldpagenum,numpages:integer; procedure page1; begin - flip(vaddr,vga); + flipd320(vaddr,vga); shadowrite(' TO REGISTER',10,10,9,1); - shadowrite('THIS GAME WAS WRITTEN BY A 16 YEAR OLD',10,30,9,1); - shadowrite(' ENTIRELY IN HIS FREE TIME.',10,40,9,1); - shadowrite('HOPEFULLY YOU FEEL HIS FREE TIME IS',10,50,9,1); - shadowrite(' WORTH SOMETHING.',10,60,9,1); - shadowrite('WARNING:',10,80,12,4); - shadowrite(' VMW SOFTWARE IS NOT AN INCORPORATED',10,90,12,4); - shadowrite(' COMPANY, NOR DOES IT HAVE ANY INCOME',10,100,12,4); - shadowrite(' EXCEPT DONATIONS. NONE OF ITS',10,110,12,4); - shadowrite(' SYMBOLS ARE TRADEMARKED EITHER. (BUT',10,120,12,4); - shadowrite(' I DOUBT YOU''LL NAME A COMPANY AFTER',10,130,12,4); - shadowrite(' MY ININTIALS)',10,140,12,4); + shadowrite('I STARTED THIS GAME IN LATE',70,30,9,1); + shadowrite(' 1994, WHEN I WAS 16.',70,40,9,1); + shadowrite('I WROTE THIS GAME ENTIRELY IN',75,50,9,1); + shadowrite(' MY FREE TIME.',74,60,9,1); + shadowrite(' ^(AUTHOR AT AGE 17)',10,70,10,2); + shadowrite('HOPEFULLY YOU FEEL MY FREE TIME IS',10,90,12,4); + shadowrite(' WORTH SOMETHING. YOU DO NOT NEED',10,100,12,4); + shadowrite(' TO SEND MONEY, BUT ANY GIFT WOULD',10,110,12,4); + shadowrite(' BE APPRECIATED. ALSO I WOULD BE',10,120,12,4); + shadowrite(' GLAD TO HEAR ANY COMMENTS AND ',10,130,12,4); + shadowrite(' ANSWER ANY QUESTIONS.',10,140,12,4); end; procedure page2; begin - flip(vaddr,vga); - shadowrite('PLEASE SEND ANY DONATIONS TO:',10,10,10,2); + flipd320(vaddr2,vga); + shadowrite('I CAN BE REACHED AS:',10,10,10,2); shadowrite(' VINCENT WEAVER',10,20,10,2); shadowrite(' 326 FOSTER KNOLL DR.',10,30,10,2); shadowrite(' JOPPA, MD 21085-4706, USA, ETC.',10,40,10,2); - shadowrite('ANY DONATION OF $5 OR MORE GETS THE',10,60,13,5); - shadowrite(' NEWEST VERSION OF THE GAME, PLUS',10,70,13,5); - shadowrite(' ANY OTHER COOL PROGRAMS I HAVE AT',10,80,13,5); - shadowrite(' THE TIME.',10,90,13,5); - shadowrite('ALSO IF YOU SEND ME A SELF ADDRESSED',10,110,11,3); - shadowrite(' STAMPED ENVELOPE WITH SUFFICIENT',10,120,11,3); - shadowrite(' POSTAGE AND A 3 1/2 INCH DISK IN',10,130,11,3); - shadowrite(' IT, I WILL COPY THE NEWEST VERSION',10,140,11,3); - shadowrite(' OF THE GAME ONTO IT.',10,150,11,3); + shadowrite('AFTER THE SUMMER OF 1996 I WILL BE',10,60,13,5); + shadowrite(' AWAY AT COLLEGE, AT THE UNIVERSITY',10,70,13,5); + shadowrite(' OF MARYLAND, COLLEGE PARK.',10,80,13,5); + shadowrite('GET THE NEWEST VERSION OF TB1 AT',10,100,11,3); + shadowrite(' THE OFFICIAL TB1 WEB SITE:',10,110,11,3); + shadowrite(' http://www.wam.umd.edu/~vmweaver/tb1/',10,120,11,3); + shadowrite('I CAN BE CONTACTED VIA E-MAIL AT:',10,140,12,4); + shadowrite(' VMWEAVER@WAM.UMD.EDU',10,150,9,1); + shadowrite('FEEL FREE TO SEND COMMENTS/MONEY.',10,160,12,4); end; procedure page3; begin - flip(vaddr,vga); + flipd320(vaddr2,vga); shadowrite('OTHER VMW SOFTWARE PRODUCTIONS:',10,10,15,7); - shadowrite(' PAINTPRO:',10,30,13,5); - shadowrite(' LOAD AND SAVE GRAPHICS PICTURES',10,40,13,5); - shadowrite(' INTO C, PASCAL, BASIC, ETC.',10,50,13,5); - shadowrite(' WITH SCREEN CAPTURE UTILITY.',10,60,13,5); - shadowrite(' SPACEWAR III:',10,70,11,3); - shadowrite(' ALMOST COMPLETE GAME WITH WORKING',10,80,11,3); - shadowrite(' SPACESHIPS. SORT OF COOL.',10,90,11,3); - shadowrite(' AITAS: (ADVENTURES IN TIME AND SPACE)',10,100,12,4); - shadowrite(' THIS GAME WILL BE FINISHED SOMEDAY.',10,110,12,4); - shadowrite(' IT HAS BEEN UNDER WAY FOR 3 YEARS.',10,120,12,4); - shadowrite(' MISC PASCAL/BASIC PROGRAMS:',10,130,9,1); - shadowrite(' OVER 500 PROGRAMS WRITTEN OR TYPED',10,140,9,1); - shadowrite(' IN BY ME....FUN TO LOOK AT.',10,150,9,1); + shadowrite(' PAINTPRO:',10,30,13,5); + shadowrite(' LOAD AND SAVE GRAPHICS PICTURES',10,40,13,5); + shadowrite(' INTO C, PASCAL, BASIC, ETC.',10,50,13,5); + shadowrite(' WITH SCREEN CAPTURE UTILITY.',10,60,13,5); + shadowrite(' SPACEWAR III:',10,70,11,3); + shadowrite(' NEVER COMPLETED GAME WITH WORKING',10,80,11,3); + shadowrite(' SPACESHIPS. SORT OF COOL.',10,90,11,3); + shadowrite(' AITAS: (ADVENTURES IN TIME AND SPACE)',10,100,12,4); + shadowrite(' THIS GAME WILL BE FINISHED SOMEDAY.',10,110,12,4); + shadowrite(' IT HAS BEEN UNDER WAY FOR 5 YEARS.',10,120,12,4); +{ shadowrite(' MISC PASCAL/BASIC PROGRAMS:',10,130,9,1); + shadowrite(' OVER 500 PROGRAMS WRITTEN OR TYPED',10,140,9,1); + shadowrite(' IN BY ME....FUN TO LOOK AT.',10,150,9,1);} end; procedure page4; begin - flip(vaddr,vga); + flipd320(vaddr2,vga); shadowrite('DISCLAIMERS:',10,10,12,14); - shadowrite('** THE ABOVE PROGRAMS HAVE NEVER DONE**',5,30,12,4); - shadowrite('** ANYTHING BAD TO MY COMPUTER THAT **',5,40,12,4); - shadowrite('** CTRL-ALT-DEL WOULDN''T FIX. I AM **',5,50,12,4); - shadowrite('** NOT RESPONSIBLE FOR HARD DISK **',5,60,12,4); - shadowrite('** DISSAPPEARANCES, MISSING MODEMS **',5,70,12,4); - shadowrite('** MOUSE BREAKDOWNS, MELTING MONITORS**',5,80,12,4); - SHADOWRITE('** OR ANYTHING ELSE. **',5,90,12,4); - shadowrite('%% ALL VMW SOFTWARE PRODUCTIONS ARE %%',5,110,11,3); - shadowrite('%% CERTIFIED VIRUS FREE!!!!!!!!!!!! %%',5,120,11,3); + shadowrite('* THE ABOVE PROGRAMS HAVE NEVER DONE *',8,30,12,4); + shadowrite('* ANYTHING BAD TO MY COMPUTER THAT *',8,40,12,4); + shadowrite('* CTRL-ALT-DEL WOULDN''T FIX. I AM *',8,50,12,4); + shadowrite('* NOT RESPONSIBLE FOR HARD DISK *',8,60,12,4); + shadowrite('* DISSAPPEARANCES, MISSING MODEMS *',8,70,12,4); + shadowrite('* MOUSE BREAKDOWNS, MELTING MONITORS *',8,80,12,4); + SHADOWRITE('* OR ANYTHING ELSE. *',8,90,12,4); + shadowrite('% ALL VMW SOFTWARE PRODUCTIONS ARE %',8,110,11,3); + shadowrite('% RELEASED VIRUS FREE !!!!!!!!!!!! %',8,120,11,3); end; begin - background; + fade; + cls(0,vga); + unfade; + cls(0,vaddr); + grapherror:=Mode13LoadPIcpacked(0,0,vaddr,true,true,'register.tb1'); + coolbox(0,0,319,199,false,vaddr); + cls(0,vaddr2); + coolbox(0,0,319,199,false,vaddr2); pagenum:=1; oldpagenum:=1; numpages:=4; @@ -943,120 +4005,136 @@ begin oldpagenum:=pagenum; end; until ch=#27; + fade; + cls(0,vga); + unfade; + grapherror:=Mode13LoadPIcpacked(0,0,vaddr2,true,true,'tbomb1.tb1'); + fade; end; label picloader,menu; begin - axel_und_carmen:=true; {as_of_9-22-94} {change_back_10-6-94} - musicon:=true; + CDROMmode:=false; + for i:=1 to paramcount do begin + string_param:=paramstr(i); + for j:=1 to length(string_param) do + string_param[j]:=upcase(string_param[j]); + if pos('CDROM',string_param)<>0 then CDROMmode:=true; + if (pos('HELP',string_param)<>0) + or (pos('H',string_param)<>0) then begin + writeln('Tom Bombem'); + writeln; + writeln('Command line: tb1 [-CDROM] [-HELP]'); + writeln; + writeln('-CDROM starts game in read-only mode'); + writeln('-HELP gives this message'); + writeln; + halt(7); + end; + end; + + setuptb1; + ReadConfigFile; + axel_und_carmen:=true; + {as_of_9-22-94} {change_back_10-6-94} {uh_oh 2-21-95} {gone for real long time 10-12-95} + {11-95 not carmen anymore, but Gus} + {3-26-96 oh well... gave up on Gus finally} + {5-11-96 Now Marie... what fun life is} + if xsoundeffects=1 then soundeffects:=true + else soundeffects:=false; + if xsbsound=0 then sbsound:=false + else sbsound:=true; + if (sbsound) and (soundeffects) then sbeffects:=true; + if sbsound then init; randomize; setupvirtual; fade; setmcga; - dographics; - energy:=15; - lives:=2; - score:=0; - level:=0; 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; - modinit; - dev:=7; - md:='vmwfan.tb1'; - mix := 10000; {use 10000 normally } - pro := 0; {Leave at 0} - loop :=0; {4 means mod will play forever} - modvolume (255,255,255,255); { Full volume } - modsetup ( stat, dev, mix, pro, loop, md ); - case stat of - 1: writeln('Not a mod'); - 2: writeln('Already playing'); - 4: writeln('Out of memory'); - end; + 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); + verticalline(45,45+(2*x),x+40,100+x,vga); + verticalline(45,45+(2*x),x+120,141+x,vga); + verticalline(45,45+(2*x),x+200,141+x,vga); + verticalline(125-(2*x),125,x+80,182+x,vga); + verticalline(125-(2*x),125,x+160,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); + verticalline(45,125-(2*x),x+80,140-x,vga); + verticalline(45,125-(2*x),x+160,181-x,vga); + verticalline(45,125-(2*x),x+240,181-x,vga); + verticalline(125,45+(2*x),x+120,222-x,vga); + verticalline(125,45+(2*x),x+200,222-x,vga); end; unfade; + {if sbeffects then startsound(sound[0],0,false);} - outtextxy('A VMW SOFTWARE PRODUCTION',60,140,15,15,15,VGA,false); + outtextxy('A VMW SOFTWARE PRODUCTION',60,140,15,15,VGA,false); y:=0; hiscore:=0; - repeat until keypressed; - ch:=readkey; - modstop; + pauseawhile(400); + 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); + grapherror:=Mode13LoadPicpacked(0,0,vga,true,false,'tbomb1.tb1'); fade; + grapherror:=Mode13LoadPicpacked(0,0,vga,false,true,'tbomb1.tb1'); + unfade; PICLOADER: - grapherror:=loadpicsuperpacked(0,0,vaddr2,'tbomb1.tb1'); + grapherror:=Mode13LoadPicpacked(0,0,vaddr2,true,true,'tbomb1.tb1'); if not(axel_und_carmen) then begin for tempi:=193 to 199 do for tempj:=290 to 319 do putpixel(tempj,tempi,0,vaddr2); end; MENU: - if musicon then begin - modinit; - dev:=7; - md:='weave1.tb1'; - mix := 10000; {use 10000 normally } - pro := 0; {Leave at 0} - loop :=0; {4 means mod will play forever} - modvolume (255,255,255,255); { Full volume } - modsetup ( stat, dev, mix, pro, loop, md ); - case stat of - 1: writeln('Not a mod'); - 2: writeln('Already playing'); - 4: writeln('Out of memory'); - end; - end; - flip(vaddr2,vga); + + + flipd320(vaddr2,vga); unfade; - repeat until keypressed; + gettime(ho,mi,se,s100); + tempsec:=se-30; + if tempsec<0 then tempsec:=tempsec+60; + repeat + gettime(ho,mi,se,s100); + if se=tempsec then begin + + credits; + flipd320(vaddr2,vga); + gettime(ho,mi,se,s100); + tempsec:=se-30; + if tempsec<0 then tempsec:=tempsec+60; + + end; + until keypressed; ch:=readkey; + clearkeyboardbuffer; barpos:=0; - outtextxy('F1 HELP',0,190,15,9,7,vga,false); + outtextxy('F1 HELP',0,190,9,7,vga,false); coolbox(117,61,199,140,true,vga); repeat - if barpos=0 then outtextxy('NEW GAME',123,67,15,32,0,vga,true) - else outtextxy('NEW GAME',123,67,15,32,7,vga,true); - if barpos=1 then outtextxy('OPTIONS',123,77,15,32,0,vga,true) - else outtextxy('OPTIONS',123,77,15,32,7,vga,true); - if barpos=2 then outtextxy('REGISTER',123,87,15,32,0,vga,true) - else outtextxy('REGISTER',123,87,15,32,7,vga,true); - if barpos=3 then outtextxy('LOAD GAME',123,97,15,32,0,vga,true) - else outtextxy('LOAD GAME',123,97,15,32,7,vga,true); - if barpos=4 then outtextxy('STORY',123,107,15,32,0,vga,true) - else outtextxy('STORY',123,107,15,32,7,vga,true); - if barpos=5 then outtextxy('CREDITS',123,117,15,32,0,vga,true) - else outtextxy('CREDITS',123,117,15,32,7,vga,true); - if barpos=6 then outtextxy('QUIT',123,127,15,32,0,vga,true) - else outtextxy('QUIT',123,127,15,32,7,vga,true); + 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); @@ -1077,17 +4155,22 @@ MENU: if barpos=7 then barpos:=0; if barpos=-1 then barpos:=6; until ch=#13; - modstop; + if barpos=6 then quit; if barpos=1 then options; if barpos=2 then register; if barpos=3 then loadgame; - if barpos=4 then story; + if barpos=4 then + begin + story; + fade; + cls(0,vga); + end; if barpos=5 then credits; if barpos=10 then help; if barpos=0 then playthegame(0); if barpos=0 then goto picloader; if barpos=4 then goto picloader; + if barpos=3 then goto picloader; goto menu; - end. \ No newline at end of file diff --git a/tb12.pas b/tb12.pas deleted file mode 100644 index 3317cab..0000000 --- a/tb12.pas +++ /dev/null @@ -1,614 +0,0 @@ -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:='ß'; - if ch2='M' then chtemp:='Þ'; - if ch2='P' then chtemp:='Ü'; - if ch2='K' then chtemp:='Ý'; - 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; - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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; - - - - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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; - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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; - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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; - - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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; - - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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. \ No newline at end of file diff --git a/tb1abs.pas b/tb1abs.pas new file mode 100644 index 0000000..f40f7bd --- /dev/null +++ b/tb1abs.pas @@ -0,0 +1,292 @@ +{ TheDraw Pascal Screen Image. Date: 07/14/96 } +const + IMAGEDATA_WIDTH=80; + IMAGEDATA_DEPTH=25; + IMAGEDATA_LENGTH=4000; + IMAGEDATA : array [1..4000] of Char = ( + '°', #4, '°', #4, '°', #4, '°', #4, '°', #4, ' ', #4, '°', #4, + '°', #4, '°', #4, '°', #4, '°', #4, ' ', #4, '°', #4, ' ', #4, + ' ', #4, ' ', #4, '°', #4, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '°', #4, '°', #4, '°', #4, '°', #4, ' ', #4, + ' ', #4, '°', #4, '°', #4, '°', #4, '°', #4, '°', #4, ' ', #4, + '°', #4, ' ', #4, ' ', #4, ' ', #4, '°', #4, ' ', #4, '°', #4, + '°', #4, '°', #4, '°', #4, ' ', #4, ' ', #4, '°', #4, '°', #4, + '°', #4, '°', #4, '°', #4, ' ', #4, '°', #4, ' ', #4, ' ', #4, + ' ', #4, '°', #4, ' ', #4, ' ', #4, ' ', #4, '°', #2, 'V', #4, + 'e', #4, 'r', #4, 's', #4, 'i', #4, 'o', #4, 'n', #4, ' ', #4, + '2', #4, '.', #4, '4', #4, 'a', #4, '!', #4, '!', #4, '°', #2, + '°', #2, '°', #2, '°', #2, ' ', #2, '±', #4, '±', #4, '±', #4, + '±', #4, '±', #4, '°', #4, '±', #4, '±', #4, '±', #4, '±', #4, + '±', #4, '°', #4, '±', #4, ' ', #4, '°', #4, '°', #4, '±', #4, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #4, '±', #4, + '±', #4, '±', #4, '±', #4, ' ', #4, '°', #4, '±', #4, '±', #4, + '±', #4, '±', #4, '±', #4, '°', #4, '±', #4, ' ', #4, '°', #4, + '°', #4, '±', #4, '°', #4, '±', #4, '±', #4, '±', #4, '±', #4, + ' ', #4, '°', #4, '±', #4, '±', #4, '±', #4, '±', #4, '±', #4, + '°', #4, '±', #4, ' ', #4, '°', #4, '°', #4, '±', #4, ' ', #4, + ' ', #4, '°', #2, '0', #4, '7', #4, '/', #4, '1', #4, '4', #4, + '/', #4, '9', #4, '6', #4, '°', #2, '°', #2, '°', #2, '°', #2, + '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, + ' ', #2, '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, '±', #4, + '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, '±', #4, '²', #12, + ' ', #12, '±', #4, '±', #4, '²', #12, ' ', #12, ' ', #12, ' ', #12, + ' ', #12, '°', #4, '±', #4, '²', #12, '²', #12, '²', #12, '²', #12, + '°', #4, '±', #4, '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, + '±', #4, '²', #12, ' ', #12, '±', #4, '±', #4, '²', #12, '±', #4, + '²', #12, '²', #12, '²', #12, '²', #12, '°', #4, '±', #4, '²', #12, + '²', #12, '²', #12, '²', #12, '²', #12, '±', #4, '²', #12, ' ', #12, + '±', #4, '±', #4, '²', #12, ' ', #12, '°', #2, '°', #2, '°', #2, + '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, + '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, + '°', #2, '°', #2, ' ', #2, ' ', #2, '°', #4, '±', #4, '²', #12, + ' ', #12, '°', #4, '±', #4, '²', #12, ' ', #12, '°', #4, '±', #4, + '²', #12, '±', #4, '²', #12, '²', #12, '°', #4, '²', #12, '²', #12, + ' ', #12, ' ', #12, ' ', #12, ' ', #12, '°', #4, '±', #4, '²', #12, + '±', #4, '±', #4, ' ', #4, '²', #12, '±', #4, '²', #12, ' ', #12, + '°', #4, '±', #4, '²', #12, '±', #4, '²', #12, '²', #12, '°', #4, + '²', #12, '²', #12, '±', #4, '²', #12, '±', #4, '±', #4, ' ', #4, + '²', #12, '±', #4, '²', #12, '±', #4, '±', #4, '±', #4, '°', #4, + '±', #4, '²', #12, '²', #12, '°', #4, '²', #12, '²', #12, ' ', #12, + '°', #2, 'D', #79, 'O', #79, 'W', #79, 'N', #79, 'L', #79, 'O', #79, + 'A', #79, 'D', #79, ' ', #79, 'N', #79, 'O', #79, 'W', #79, '!', #79, + '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, ' ', #2, + '°', #4, '±', #4, '²', #12, ' ', #12, '°', #4, '±', #4, '²', #12, + '°', #4, '°', #4, '±', #4, '²', #12, '±', #4, '²', #12, ' ', #12, + '²', #12, '±', #4, '²', #12, ' ', #12, ' ', #12, ' ', #12, ' ', #12, + '°', #4, '±', #4, '²', #12, '²', #12, '²', #12, '²', #12, '°', #4, + '±', #4, '²', #12, '°', #4, '°', #4, '±', #4, '²', #12, '±', #4, + '²', #12, ' ', #12, '²', #12, '±', #4, '²', #12, '±', #4, '²', #12, + '²', #12, '²', #12, '²', #12, '°', #4, '±', #4, '²', #12, '²', #12, + '²', #12, '²', #12, '²', #12, '±', #4, '²', #12, ' ', #12, '²', #12, + '±', #4, '²', #12, ' ', #12, '°', #2, '°', #2, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, '°', #2, '°', #2, + '°', #2, ' ', #2, ' ', #2, ' ', #2, '±', #4, '²', #12, ' ', #12, + ' ', #12, '±', #4, '²', #12, '±', #4, '±', #4, '±', #4, '²', #12, + '±', #4, '²', #12, ' ', #12, ' ', #12, '±', #4, '²', #12, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '±', #4, '²', #12, '±', #4, + '±', #4, '±', #4, '²', #12, '±', #4, '²', #12, '±', #4, '±', #4, + '±', #4, '²', #12, '±', #4, '²', #12, ' ', #12, ' ', #12, '±', #4, + '²', #12, '±', #4, '²', #12, '±', #4, '±', #4, '±', #4, '²', #12, + '±', #4, '²', #12, '±', #4, '±', #4, '±', #4, ' ', #4, '±', #4, + '²', #12, ' ', #12, ' ', #12, '±', #4, '²', #12, ' ', #12, '°', #2, + 'N', #47, 'E', #47, 'W', #47, 'E', #47, 'S', #47, 'T', #47, ' ', #47, + 'G', #47, 'A', #47, 'M', #47, 'E', #47, ' ', #47, ' ', #47, ' ', #47, + ' ', #47, ' ', #47, ' ', #47, '°', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, '²', #12, ' ', #12, ' ', #12, ' ', #12, '²', #12, '²', #12, + '²', #12, '²', #12, '²', #12, ' ', #12, '²', #12, ' ', #12, ' ', #12, + ' ', #12, '²', #12, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, ' ', #12, + '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, ' ', #12, '²', #12, + ' ', #12, ' ', #12, ' ', #12, '²', #12, ' ', #12, '²', #12, '²', #12, + '²', #12, '²', #12, '²', #12, ' ', #12, '²', #12, '²', #12, '²', #12, + '²', #12, '²', #12, ' ', #12, '²', #12, ' ', #12, ' ', #12, ' ', #12, + '²', #12, ' ', #12, '°', #2, 'F', #47, 'R', #47, 'O', #47, 'M', #47, + ' ', #47, 'V', #47, 'M', #47, 'W', #47, ' ', #47, 'S', #47, 'O', #47, + 'F', #47, 'T', #47, 'W', #47, 'A', #47, 'R', #47, 'E', #47, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, '°', #2, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #8, ' ', #8, + ' ', #8, ' ', #8, '.', #7, ' ', #7, ' ', #7, 'I', #1, ' ', #1, + 'N', #1, ' ', #1, 'V', #1, ' ', #1, 'A', #1, ' ', #1, 'S', #1, + ' ', #1, 'I', #1, ' ', #1, 'O', #1, ' ', #1, 'N', #1, ' ', #1, + ' ', #1, ' ', #1, '.', #7, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '°', #2, 'W', #31, 'R', #31, 'I', #31, 'T', #31, 'T', #31, + 'E', #31, 'N', #31, ' ', #31, 'B', #31, 'Y', #31, ' ', #31, 'M', #31, + 'E', #31, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, '.', #7, ' ', #7, '.', #8, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, 'O', #9, ' ', #9, 'F', #9, ' ', #9, + ' ', #9, ' ', #9, 'T', #9, ' ', #9, 'H', #9, ' ', #9, 'E', #9, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, '<', #31, '<', #31, + '<', #31, 'D', #31, 'E', #31, 'A', #31, 'T', #31, 'E', #31, 'R', #31, + '>', #31, '>', #31, '>', #31, ' ', #31, ' ', #15, '°', #2, '°', #2, + '°', #2, '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, 'I', #12, ' ', #12, 'N', #12, ' ', #12, 'A', #12, + ' ', #12, 'N', #12, ' ', #12, 'I', #12, ' ', #12, 'M', #12, ' ', #12, + 'A', #12, ' ', #12, 'T', #12, ' ', #12, 'E', #12, ' ', #12, ' ', #12, + ' ', #12, 'O', #12, ' ', #12, 'B', #12, ' ', #12, 'J', #12, ' ', #12, + 'E', #12, ' ', #12, 'C', #12, ' ', #12, 'T', #12, ' ', #12, 'S', #12, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + '°', #2, '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, '°', #2, 'O', #95, 'b', #95, 't', #95, + 'a', #95, 'i', #95, 'n', #95, ' ', #95, 'a', #95, 't', #95, ':', #95, + ' ', #95, ' ', #95, ' ', #95, '°', #2, '°', #2, '°', #2, '°', #2, + '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #8, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, '.', #7, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, 'Ú', #6, + 'Ä', #6, '¿', #6, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, + 'h', #94, 't', #94, 't', #94, 'p', #94, ':', #94, '/', #94, '/', #94, + 'w', #94, 'w', #94, 'w', #94, '.', #94, ' ', #95, ' ', #95, ' ', #15, + '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, ' ', #2, ' ', #2, + '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '.', #7, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + 'Ü', #12, 'Û', #12, 'Û', #12, 'Û', #12, 'Û', #12, 'Û', #12, 'Û', #12, + 'Û', #12, 'Û', #12, 'Û', #12, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + '±', #1, '±', #2, '°', #1, ' ', #1, 'À', #6, '¿', #6, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '°', #2, 'w', #94, 'a', #94, 'm', #94, '.', #94, + 'u', #94, 'm', #94, 'd', #94, '.', #94, 'e', #94, 'd', #94, 'u', #94, + '/', #94, ' ', #82, ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, '.', #7, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, 'Ü', #4, 'ß', #76, 'ß', #76, 'ß', #76, 'ß', #76, 'ß', #76, + 'ß', #76, 'ß', #76, 'Û', #76, 'Û', #12, 'Û', #12, 'ß', #12, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '²', #1, '²', #1, '±', #2, '±', #2, '°', #1, + ' ', #1, '³', #6, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, '~', #94, + 'v', #94, 'm', #94, 'w', #94, 'e', #94, 'a', #94, 'v', #94, 'e', #94, + 'r', #94, '/', #94, 't', #94, 'b', #94, '1', #94, ' ', #15, '°', #2, + '°', #2, '°', #2, '°', #2, '°', #15, '°', #15, '°', #15, '°', #15, + '°', #15, '°', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #7, '°', #7, + '°', #7, '°', #7, '°', #7, '°', #7, '°', #7, 'Û', #4, 'ß', #12, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '±', #1, + '±', #1, '°', #2, ' ', #2, 'Ú', #6, 'Ù', #6, ' ', #6, ' ', #6, + ' ', #6, '.', #8, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '°', #2, '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, '²', #1, + '²', #1, '±', #1, '±', #1, '±', #1, '±', #1, '°', #1, '°', #1, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + 'Û', #14, 'ß', #4, 'ß', #4, 'ß', #4, 'ß', #4, 'ß', #4, 'ß', #4, + 'ß', #4, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, 'À', #6, 'Â', #6, 'Ä', #6, 'Ù', #6, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, 'V', #79, 'i', #79, + 'n', #79, 'c', #79, 'e', #79, ' ', #79, 'W', #79, 'e', #79, 'a', #79, + 'v', #79, 'e', #79, 'r', #79, ' ', #79, ' ', #79, ' ', #79, ' ', #79, + '°', #2, '°', #2, '±', #2, '±', #2, 'Û', #1, '²', #1, '²', #1, + '±', #2, '±', #2, '±', #1, '°', #1, '°', #1, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '±', #14, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #6, '±', #6, + '²', #6, 'Û', #6, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + '°', #2, '3', #79, '2', #79, '6', #79, ' ', #79, 'F', #79, 'o', #79, + 's', #79, 't', #79, 'e', #79, 'r', #79, ' ', #79, 'K', #79, 'n', #79, + 'o', #79, 'l', #79, 'l', #79, ' ', #15, '°', #2, 'Û', #1, 'Û', #1, + 'Û', #1, '²', #2, '²', #2, '²', #1, '²', #1, '±', #2, '±', #1, + '±', #1, '°', #1, ' ', #1, ' ', #1, ' ', #1, ' ', #1, 'Û', #14, + ' ', #14, ' ', #14, ' ', #14, ' ', #14, '±', #14, ' ', #14, '.', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, '-', #8, '°', #13, '²', #14, + '²', #14, '²', #14, '²', #14, '²', #14, '²', #14, '²', #14, 'Ý', #59, + 'Ý', #59, 'Û', #13, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, '°', #2, 'J', #79, 'o', #79, 'p', #79, + 'p', #79, 'a', #79, ',', #79, ' ', #79, 'M', #79, 'D', #79, ' ', #79, + '2', #79, '1', #79, '0', #79, '8', #79, '5', #79, ' ', #79, ' ', #15, + '°', #2, '²', #2, '²', #2, '²', #2, '²', #2, '²', #2, '²', #2, + 'Û', #1, '²', #1, '²', #1, '±', #1, '±', #1, '°', #1, ' ', #1, + ' ', #1, '²', #14, ' ', #14, ' ', #14, ' ', #14, ' ', #14, '±', #14, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #7, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, + '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, '°', #2, '²', #2, '²', #2, '²', #2, + '²', #2, '²', #2, 'Û', #1, 'Û', #1, 'Û', #1, '²', #1, '²', #1, + '±', #1, '±', #1, '°', #1, ' ', #1, '±', #14, ' ', #14, ' ', #14, + ' ', #14, '°', #14, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + '.', #8, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, '°', #2, 'C', #47, 'U', #47, 'R', #47, 'R', #47, + 'E', #47, 'N', #47, 'T', #47, 'L', #47, 'Y', #47, ' ', #47, '3', #47, + '0', #47, '0', #47, '+', #47, 'K', #47, ' ', #47, '°', #2, '°', #2, + '²', #2, '²', #2, '²', #2, 'Û', #1, '²', #2, 'Û', #1, 'Û', #1, + 'Û', #1, 'Û', #1, '²', #1, '²', #1, '±', #1, '±', #1, '°', #14, + '°', #14, '°', #14, '°', #14, '°', #14, ' ', #14, ' ', #14, ' ', #14, + ' ', #14, '.', #8, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '.', #7, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, 'O', #47, + 'F', #47, ' ', #47, '.', #47, 'P', #47, 'P', #47, 'P', #47, ' ', #47, + 'G', #47, 'R', #47, 'A', #47, 'P', #47, 'H', #47, 'I', #47, 'C', #47, + 'S', #47, ' ', #15, '°', #2, 'Û', #1, '²', #2, '²', #2, 'Û', #1, + 'Û', #1, 'Û', #1, 'Û', #1, 'Û', #1, 'Û', #1, '²', #1, '²', #1, + '±', #1, '±', #1, '°', #1, ' ', #1, ' ', #1, '±', #14, ' ', #14, + '±', #14, '±', #14, '±', #14, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, '°', #2, '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15); diff --git a/tb1ans.pas b/tb1ans.pas index f3432ef..ea19fdc 100644 --- a/tb1ans.pas +++ b/tb1ans.pas @@ -1,4 +1,4 @@ -{ TheDraw Pascal Screen Image. Date: 03/23/95 } +{ TheDraw Pascal Screen Image. Date: 07/14/96 } const IMAGEDATA_WIDTH=80; IMAGEDATA_DEPTH=25; @@ -14,7 +14,7 @@ const '°', #4, '°', #4, '°', #4, ' ', #4, '°', #4, ' ', #4, ' ', #4, ' ', #4, '°', #4, ' ', #4, ' ', #4, ' ', #4, '°', #2, 'V', #4, 'e', #4, 'r', #4, 's', #4, 'i', #4, 'o', #4, 'n', #4, ' ', #4, - '1', #4, '.', #4, '0', #4, '1', #4, '!', #4, '!', #4, '°', #2, + '2', #4, '.', #4, '4', #4, 'a', #4, '!', #4, '!', #4, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, '±', #4, '±', #4, '±', #4, '±', #4, '±', #4, '°', #4, '±', #4, '±', #4, '±', #4, '±', #4, '±', #4, '°', #4, '±', #4, ' ', #4, '°', #4, '°', #4, '±', #4, @@ -24,8 +24,8 @@ const '°', #4, '±', #4, '°', #4, '±', #4, '±', #4, '±', #4, '±', #4, ' ', #4, '°', #4, '±', #4, '±', #4, '±', #4, '±', #4, '±', #4, '°', #4, '±', #4, ' ', #4, '°', #4, '°', #4, '±', #4, ' ', #4, - ' ', #4, '°', #2, '0', #4, '3', #4, '/', #4, '2', #4, '5', #4, - '/', #4, '9', #4, '5', #4, '°', #2, '°', #2, '°', #2, '°', #2, + ' ', #4, '°', #2, '0', #4, '7', #4, '/', #4, '1', #4, '4', #4, + '/', #4, '9', #4, '6', #4, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, ' ', #2, '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, '±', #4, '²', #12, '²', #12, '²', #12, '²', #12, '²', #12, '±', #4, '²', #12, @@ -138,9 +138,9 @@ const ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, - ' ', #15, ' ', #15, ' ', #15, '°', #2, 'D', #95, 'O', #95, 'W', #95, - 'N', #95, 'L', #95, 'O', #95, 'A', #95, 'D', #95, ' ', #95, 'A', #95, - 'T', #95, ':', #95, ' ', #95, '°', #2, '°', #2, '°', #2, '°', #2, + ' ', #15, ' ', #15, ' ', #15, '°', #2, 'O', #95, 'b', #95, 't', #95, + 'a', #95, 'i', #95, 'n', #95, ' ', #95, 'a', #95, 't', #95, ':', #95, + ' ', #95, ' ', #95, ' ', #95, '°', #2, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, @@ -150,8 +150,8 @@ const ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, 'Ú', #6, 'Ä', #6, '¿', #6, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, - 'U', #95, 'T', #95, 'O', #95, 'P', #95, 'I', #95, 'A', #95, ' ', #95, - 'B', #95, 'B', #95, 'S', #95, ' ', #95, ' ', #95, ' ', #95, ' ', #15, + 'h', #95, 't', #95, 't', #95, 'p', #95, ':', #95, '/', #95, '/', #95, + 'w', #95, 'w', #95, 'w', #95, '.', #95, ' ', #94, ' ', #94, ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, ' ', #2, ' ', #2, '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #7, ' ', #15, ' ', #15, ' ', #15, ' ', #15, @@ -161,9 +161,9 @@ const ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '±', #1, '±', #2, '°', #1, ' ', #1, 'À', #6, '¿', #6, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, - ' ', #15, ' ', #15, '°', #2, '4', #95, '1', #95, '0', #95, '-', #95, - '5', #95, '5', #95, '7', #95, '-', #95, '0', #95, '8', #95, '6', #95, - '8', #95, ' ', #95, ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, + ' ', #15, ' ', #15, '°', #2, 'w', #95, 'a', #95, 'm', #95, '.', #95, + 'u', #95, 'm', #95, 'd', #95, '.', #95, 'e', #95, 'd', #95, 'u', #95, + '/', #95, ' ', #94, ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, '.', #7, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, @@ -172,9 +172,9 @@ const ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '²', #1, '²', #1, '±', #2, '±', #2, '°', #1, ' ', #1, '³', #6, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, - ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, 'I', #95, - ' ', #95, 'A', #95, 'M', #95, ' ', #95, '#', #95, '2', #95, '3', #95, - ' ', #95, ' ', #95, ' ', #95, ' ', #95, ' ', #95, ' ', #15, '°', #2, + ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, '~', #95, + 'v', #95, 'm', #95, 'w', #95, 'e', #95, 'a', #95, 'v', #95, 'e', #95, + 'r', #95, '/', #95, 't', #95, 'b', #95, '1', #95, ' ', #15, '°', #2, '°', #2, '°', #2, '°', #2, '°', #15, '°', #15, '°', #15, '°', #15, '°', #15, '°', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #8, ' ', #15, ' ', #15, ' ', #15, @@ -242,8 +242,8 @@ const '.', #8, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '.', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, '°', #2, 'C', #47, 'U', #47, 'R', #47, 'R', #47, - 'E', #47, 'N', #47, 'T', #47, 'L', #47, 'Y', #47, ' ', #47, '1', #47, - '0', #47, '5', #47, 'K', #47, ' ', #47, ' ', #47, '°', #2, '°', #2, + 'E', #47, 'N', #47, 'T', #47, 'L', #47, 'Y', #47, ' ', #47, '3', #47, + '0', #47, '0', #47, '+', #47, 'K', #47, ' ', #47, '°', #2, '°', #2, '²', #2, '²', #2, '²', #2, 'Û', #1, '²', #2, 'Û', #1, 'Û', #1, 'Û', #1, 'Û', #1, '²', #1, '²', #1, '±', #1, '±', #1, '°', #14, '°', #14, '°', #14, '°', #14, '°', #14, ' ', #14, ' ', #14, ' ', #14, diff --git a/tb1objs.tb1 b/tb1objs.tb1 new file mode 100644 index 0000000..b9aa096 Binary files /dev/null and b/tb1objs.tb1 differ diff --git a/tb1sb.pas b/tb1sb.pas deleted file mode 100644 index e7ff1f5..0000000 --- a/tb1sb.pas +++ /dev/null @@ -1,949 +0,0 @@ -program TOM_BOMB_EM_AND_INVASION_OF_INANIMATE_OBJECTS; - {by Vincent Weaver....21085-4706} - -uses vmwgraph,crt; - -{$I c:\vmw\pascal\programs\tb1ans.pas} -{$M $4000,0,$20000} {16k stack, no heap - adjust as needed } -{$L MOD-obj.OBJ} { Link in Object file } -{$F+} { force calls to be 'far'} -procedure modvolume(v1,v2,v3,v4:integer); external ; {Can do while playing} -procedure moddevice(var device:integer); external ; -procedure modsetup(var status:integer;device,mixspeed,pro,loop:integer;var str:string); external ; -procedure modstop; external ; -procedure modinit; external; -{$F-} - - - - - -type screentype = array [0..3999] of byte; -Type Shipinfo = Record { This is format of of each of our } - x,y:integer; { records for the flying toasters } - speed,frame:integer; - active:boolean; - END; - - - - Virtual = Array [1..64000] of byte; { The size of our Virtual Screen } - VirtPtr = ^Virtual; { Pointer to the virtual screen } - - - -var - dev,mix,stat,pro,loop : integer; - md : string; -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 } - shipv : Array [1..1] of shipinfo; { The toaster info } - Sound : Pointer; - Check : BOOLEAN; - frame:array[0..2,0..47,0..29] of byte; - bigflame:array[0..1,0..26,0..18] of byte; - smallflame:array[0..1,0..3,0..4] of byte; - barge:array[0..15,0..18] of byte; - truck:array[0..1,0..5,0..8] of byte; - score,level,lives,energy:integer; - axel_und_carmen:boolean; - tempi,tempj:integer; - scorest:string[8]; - -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:='ß'; {up} - if ch2='M' then chtemp:='Þ'; {right} - if ch2='P' then chtemp:='Ü'; {down} - if ch2='K' then chtemp:='Ý'; {left} - if ch2=';' then chtemp:='¨'; {f1} - if ch2='I' then chtemp:='ô'; {pgup} - if ch2='Q' then chtemp:='õ'; {pgdown} - end; - menuread:=chtemp; -end; - -procedure coolbox(x1,y1,x2,y2:integer;fill:boolean;page:word); -begin - for i:=0 to 5 do box(x1+i,y1+i,x2-i,y2-i,31-i,page); - if fill then for i:=y1+5 to y2-5 do line(x1+5,i,x2-5,i,7,page); -end; - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -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,true,vga); - barpos:=0; - outtextxy('QUIT??? ARE YOU',97,82,15,9,7,vga,false); - outtextxy('ABSOLUTELY SURE?',97,90,15,9,7,vga,false); - repeat - if barpos=0 then outtextxy('YES-RIGHT NOW!',97,98,15,150,0,vga,true) - else outtextxy('YES-RIGHT NOW!',97,98,15,150,7,vga,true); - if barpos=1 then outtextxy('NO--NOT YET.',97,106,15,150,0,vga,true) - else outtextxy('NO--NOT YET.',97,106,15,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; - move(imagedata,screen,4000); - gotoxy(1,23); - halt; - menu2: - barpos:=6; -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; - - - - - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure drawstars(menu:boolean); - { This procedure sets up the static background to be used in the program } - -CONST circ : Array [1..5,1..5] of byte = - ((00,00,30,00,00), - (00,00,26,00,00), - (30,26,18,26,30), - (00,00,26,00,00), - (00,00,30,00,00)); - -VAR i,x,y:integer; - loop1,loop2,loop3:integer; - tempaddr:word; - -procedure makehole(y:integer); -var i:integer; -begin - for i:=10 to 75 do line(239+i,y,239+i,y+9,0,tempaddr); - line(249,y,314,y,24,tempaddr); - line(249,y+10,313,y+10,18,tempaddr); - line(249,y,249,y+9,24,tempaddr); - line(314,y+1,314,y+10,18,tempaddr); -end; -BEGIN - tempaddr:=vaddr; - - - 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],tempaddr); - END; - if menu=false then begin - for i:=240 to 319 do line(i,0,i,199,19,tempaddr); - line(240,0,240,199,18,tempaddr); - line(240,0,319,0,18,tempaddr); - line(319,0,319,199,24,tempaddr); - line(241,199,319,199,24,tempaddr); - outtextxy('SCORE',241,1,15,127,0,tempaddr,false); - outtextxy('SCORE',242,2,15,143,0,tempaddr,false); - makehole(10); - outtextxy(' 0',250,12,15,12,0,tempaddr,false); - outtextxy('HI-SCORE',241,21,15,127,0,tempaddr,false); - outtextxy('HI-SCORE',242,22,15,143,0,tempaddr,false); - makehole(30); - outtextxy(' 0',250,32,15,12,0,tempaddr,false); - outtextxy('LEVEL',241,41,15,127,0,tempaddr,false); - outtextxy('LEVEL',242,42,15,143,0,tempaddr,false); - makehole(50); - outtextxy('12345675',251,52,15,12,0,tempaddr,false); - outtextxy('SHIELDS',241,61,15,127,0,tempaddr,false); - outtextxy('SHIELDS',242,62,15,143,0,tempaddr,false); - makehole(70); - for i:=0 to 63 do line(250+i,71,250+i,79,((i div 4)+32),tempaddr); - - outtextxy('WEAPONS',241,81,15,127,0,tempaddr,false); - outtextxy('WEAPONS',242,82,15,143,0,tempaddr,false); - makehole(90); - for i:=0 to 65 do line(249+i,111,249+i,189,0,tempaddr); - line(249,111,249,189,24,tempaddr); - line(315,111,315,189,18,tempaddr); - line(249,111,315,111,24,tempaddr); - line(249,189,315,189,18,tempaddr); - - outtextxy(' VMW ',251,114,15,15,0,tempaddr,false); - outtextxy('F1-HELP ',251,124,15,15,0,tempaddr,false); - outtextxy('ESC-QUIT',251,135,15,15,0,tempaddr,false); - outtextxy('F2-SAVE ',251,145,15,15,0,tempaddr,false); - end; - if not(menu) then begin - 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; -END; - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure ScreenTrans (x,y,p1,p2: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,p1 - mov es,ax - mov ax,p2 - 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; - - -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure newship; - { This adds a new toaster to the screen } -VAR loop1:integer; -BEGIN - loop1:=1; - - - if not (shipv[1].active) then BEGIN - shipv[1].x:=36; - shipv[1].y:=165; - shipv[1].active:=true; - shipv[1].frame:=1; - shipv[1].speed:=5; - loop1:=10; - END; - -END; - -procedure putico(x,y,fra:byte;where:word); -var i,j,col:integer; -begin - for i:=0 to 47 do - for j:=0 to 29 do begin - col:=frame[fra,i,j]; - if col<>0 then putpixel(i+x,y+j,col,where); - end; - -end; -procedure putwave(x,y,fra:byte;where:word); -var i,j,col:integer; -begin - for i:=10 to 30 do - for j:=0 to 5 do begin - col:=frame[fra,i,j]; - if col<>0 then putpixel((i+x)-10,y+j,col,where); - end; - -end; - -procedure changescore; -begin - str(score:8,scorest); - outtextxy(scorest,250,12,15,12,0,vaddr,true); -end; -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -Procedure shiproutine; -VAR loop1,loop2:integer; - ch,ch2:char; - shieldcol:integer; - wave1:array[0..5] of boolean; - bulletx,bullety,oldwavex,oldwavey,wavex,wavey,i,waveadd:integer; - bulletout:boolean; -BEGIN - pal(254,0,0,0); - shieldcol:=0; - shipv[1].active:=false; - newship; - ch:=#1; ch2:=#1; - wavex:=0; wavey:=0; waveadd:=5; - oldwavex:=0; oldwavey:=0; - bulletout:=false; bulletx:=0; bullety:=0; - for i:=0 to 4 do wave1[i]:=true; - Repeat - ch2:=#1; - if (bulletout) and (bulletx>wavex) and (bulletxwavey) and (bullety100) or (wavex<5) then begin - inc(wavey,5); - waveadd:=-waveadd; - end; - if wavey>150 then begin - wavey:=0; - for i:=0 to 5 do if wave1[i]=false then wave1[i]:=true; - end; - if keypressed then BEGIN - ch:=readkey; - if ch=chr(0) then ch2:=readkey; - if ch2='M' then inc(shipv[1].x,5); - if ch2='K' then dec(shipv[1].x,5); - if ch=' ' then begin - bulletout:=true; - bulletx:=shipv[1].x+10; - bullety:=shipv[1].y; - putwave(bulletx,bullety,1,vaddr); - end; - if ch='+' then begin inc(shieldcol,3); pal(254,shieldcol,0,0); - if shieldcol>58 then shieldcol:=59; - end; - if ch='-' then begin dec(shieldcol,3); pal(254,shieldcol,0,0); - if shieldcol<5 then shieldcol:=3; - end; - - end; - if shipv[1].active then BEGIN - screentrans (shipv[1].x,shipv[1].y,vaddr,vaddr2); - { Restore the backgrond the toaster was over } - - { Move the toaster } - if (shipv[1].x<1) then shipv[1].x:=1; - if (shipv[1].x>255) then shipv[1].x:=255; - { When toaster reaches the edge of the screen, render it inactive - and bring a new one into existance. } - END; - if shipv[1].active then BEGIN - CASE shipv [1].frame of - 1 : putico (shipv[1].x,shipv[1].y,0,vaddr); - 3 : putico (shipv[1].x,shipv[1].y,1,vaddr); - 2,4 : putico (shipv[1].x,shipv[1].y,2,vaddr); - END; - shipv[1].frame:=shipv[1].frame+1; - if shipv[1].frame=5 then shipv[1].frame:=1; - { Draw all the toasters on the VGA screen } - end; - waitretrace; - flip (vaddr,vga); - until ch=#27; - fade -END; - - -procedure playthegame(lev:integer); -{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} -var palloop,paldir:integer; -begin - cls(0,vaddr); - grapherror:=loadpicsuperpacked(0,0,vga,'tbma1.tb1'); - outtextxy('MOONBASE ALPHA: EARTH''S LAST CHANCE!',5,5,15,1,0,vga,false); - pal(255,0,0,0); - palloop:=0; - paldir:=1; - repeat - pal(255,palloop,0,0); - if paldir=1 then inc(palloop) - else dec(palloop); - if palloop>62 then paldir:=-1; - if palloop<1 then paldir:=1; - delay(50); - - until keypressed; - ch:=readkey; - - drawstars(false); - shiproutine; -end; - -procedure dographics; - -var i,j:integer; -begin - grapherror:=loadpicsuperpacked(0,0,vaddr,'ships.tb1'); - for i:=0 to 47 do - for j:=0 to 29 do - frame[0,i,j]:=getpixel(i,j,vaddr); - for i:=0 to 47 do - for j:=0 to 29 do - frame[1,i,j]:=getpixel(i,j+32,vaddr); - for i:=0 to 47 do - for j:=0 to 29 do - frame[2,i,j]:=getpixel(i,j+64,vaddr); - -end; - -procedure background; -begin - cls(0,vaddr); - drawstars(true); - coolbox(0,0,319,199,false,vaddr); -end; - -procedure options; -begin - background; - flip(vaddr,vga); - outtextxy('AS OF YET THERE ARE NO OPTIONS!',10,10,15,9,0,vga,false); - repeat until keypressed; - ch:=readkey; -end; - -procedure loadgame; -begin - coolbox(90,75,230,125,true,vga); - outtextxy('LOAD WHICH GAME',97,82,15,9,7,vga,false); - outtextxy(' (0-9) ',97,90,15,9,7,vga,false); - repeat until keypressed; - level:=0; -end; - -procedure help; -begin - background; - flip(vaddr,vga); - outtextxy('HELP',10,10,15,9,0,vga,false); - outtextxy('Press ESC to exit most stuff.',10,20,15,9,0,vga,false); - outtextxy('Use the arrows to manuever.',10,30,15,9,0,vga,false); - repeat until keypressed; - ch:=readkey; -end; - -procedure story; -var error:byte; - xtemp,ytemp:integer; - thrustcol:integer; - thrust:real; - tempch:char; -procedure putbigflame(xp,yp,frame:integer); -var xtemp,ytemp:integer; -begin - for xtemp:=0 to 26 do - for ytemp:=0 to 18 do - putpixel(xtemp+xp,ytemp+yp,bigflame[frame,xtemp,ytemp],vaddr); -end; -procedure putsmallflame(xp,yp,frame:integer); -var xtemp,ytemp:integer; -begin - for xtemp:=0 to 3 do - for ytemp:=0 to 4 do - putpixel(xtemp+xp,ytemp+yp,smallflame[frame,xtemp,ytemp],vaddr); -end; - -procedure putbarge(xp,yp:integer;where:word); -var xtemp,ytemp:integer; - col:byte; -begin - for xtemp:=0 to 15 do - for ytemp:=0 to 18 do begin - if (ytemp+yp>=0) then begin - col:=barge[xtemp,ytemp]; - if col<>0 then putpixel(xtemp+xp,ytemp+yp,col,where); - end; - end; -end; -procedure puttruck(xp,yp,frame:integer;where:word); -var xtemp,ytemp:integer; - col:byte; -begin - for xtemp:=0 to 5 do - for ytemp:=0 to 8 do begin - col:=truck[frame,xtemp,ytemp]; - if (ytemp+yp>=173) then begin - if col<>0 then putpixel(xtemp+xp,ytemp+yp,col,where); - end; - end; -end; - -begin - fade; - error:=loadpicsuperpacked(0,0,vaddr,'tbsobj.tb1'); - for xtemp:=0 to 26 do - for ytemp:=0 to 18 do begin - bigflame[0,xtemp,ytemp]:=getpixel(xtemp,ytemp+2,vaddr); - bigflame[1,xtemp,ytemp]:=getpixel(xtemp,ytemp+21,vaddr); - end; - for xtemp:=0 to 3 do - for ytemp:=0 to 4 do begin - smallflame[0,xtemp,ytemp]:=getpixel(xtemp,ytemp+43,vaddr); - smallflame[1,xtemp,ytemp]:=getpixel(xtemp,ytemp+47,vaddr); - end; - for xtemp:=0 to 15 do - for ytemp:=0 to 18 do - barge[xtemp,ytemp]:=getpixel(xtemp+65,ytemp+100,vaddr); - for xtemp:=0 to 5 do - for ytemp:=0 to 8 do begin - truck[0,xtemp,ytemp]:=getpixel(xtemp+85,ytemp+100,vaddr); - truck[1,xtemp,ytemp]:=getpixel(xtemp+95,ytemp+100,vaddr); - end; -{******FIRST MESSAGE*******} - cls(0,vga); - outtextxy('MOON BASE ALPHA:',5,5,15,9,0,vga,false); - outtextxy(' THE FIRST PRIVATELY FINANCED SPACE ',5,15,15,9,0,vga,false); - outtextxy(' VENTURE. FOUNDED IN 2004 BY PIONEER',5,25,15,9,0,vga,false); - outtextxy(' VINCE WEAVER. IN ORDER TO SUPPORT',5,35,15,9,0,vga,false); - outtextxy(' ITSELF, IT DISPOSED OF GARBAGE AND',5,45,15,9,0,vga,false); - outtextxy(' NUCLEAR WASTE FROM EARTH BY LAUNCHING',5,55,15,9,0,vga,false); - outtextxy(' IT INTO DEEP SPACE WITH BARGES. ',5,65,15,9,0,vga,false); - outtextxy('NOW IT IS 2018, AND THE LAST BARGE IS',5,75,15,9,0,vga,false); - outtextxy(' TO BE LAUNCHED. NOW ALL WORK THERE',5,85,15,9,0,vga,false); - outtextxy(' WILL BE CONCENTRATED ON BUILDING A',5,95,15,9,0,vga,false); - outtextxy(' TERRAN SPACE FLEET.',5,105,15,9,0,vga,false); - unfade; - repeat until keypressed; tempch:=readkey; - pal(250,0,0,0); - fade; -{******BARGE TAKING OFF**********} - error:=loadpicsuperpacked(0,0,vaddr2,'tbma1.tb1'); - putbarge(141,157,vaddr2); - flip(vaddr2,vaddr); - flip(vaddr,vga); - unfade; - for ytemp:=191 downto 165 do begin - screentrans(145,ytemp,vaddr,vaddr2); - puttruck(145,ytemp,ytemp mod 2,vaddr); - vdelay(7); - flip(vaddr,vga); - end; - error:=loadpicsuperpacked(0,0,vaddr2,'tbma1.tb1'); - vdelay(20); - flip(vaddr2,vaddr); - putbarge(141,157,vaddr); - thrustcol:=0; - ytemp:=157; - thrust:=0; - while ytemp>-25 do begin - thrust:=thrust+0.05; - if thrustcol<63 then inc(thrustcol); - screentrans(141,ytemp,vaddr,vaddr2); - putbarge(141,ytemp,vaddr); - vdelay(7); - pal(250,thrustcol,0,0); - flip(vaddr,vga); - ytemp:=ytemp-round(thrust); - end; - vdelay(100); - fade; -{******SECOND MESSAGE*******} - cls(0,vga); - outtextxy('5 YEARS LATER, 1 LIGHT YEAR DISTANT',5,5,15,9,0,vga,false); - outtextxy(' CATASTROPHE STRIKES!! ',5,15,15,9,0,vga,false); - unfade; - vdelay(100); - repeat until keypressed; tempch:=readkey; - fade; -{******ALIEN DELEGATION*****} - error:=loadpicsuperpacked(0,0,vaddr2,'tbcrash.tb1'); - flip(vaddr2,vaddr); - unfade; - repeat - putbigflame(213,100,0); - putsmallflame(105,90,1); - putsmallflame(151,71,0); - putsmallflame(218,72,1); - putbarge(160,180,vaddr); - flip(vaddr,vga); - vdelay(5); - putbigflame(213,100,1); - putsmallflame(105,90,0); - putsmallflame(151,71,1); - putsmallflame(218,72,0); - flip(vaddr,vga); - vdelay(5); - until keypressed; - ch:=readkey; -{****ALIEN MESSAGE*****} - fade; - error:=loadpicsuperpacked(0,0,vga,'tbgorg.tb1'); - unfade; - outtextxy('GREETINGS EARTHLINGS.',0,162,15,12,0,vga,false); - outtextxy('I AM GORGONZOLA THE REPULSIVE.',0,171,15,12,0,vga,false); - outtextxy('YOU HAVE MADE A BIG MISTAKE.',0,180,15,12,0,vga,false); - readln; -end; - -procedure credits; -var j:integer; - sp:integer; - procedure rotate(stri:string;col:integer); - var j1:integer; - begin - if sp=1 then begin - for j1:=0 to 7 do begin - outtextxy(stri,0,198,j1,col,0,vga,false); - Move (mem[vga:320],mem[vga:0],63680); - if keypressed then begin inc(sp); cls(0,vga); end; - end; - end; - if sp<>1 then begin - outtextxy(stri,0,180,15,col,0,vga,true); - Move (mem[vga:3200],mem[vga:0],60800); - end; - - end; - procedure skip; begin rotate(' ',0); end; -begin - sp:=1; - cls(0,vaddr); - flip(vaddr,vga); - j:=0; - if keypressed then ch:=readkey; - rotate(' TOM BOMBEM',4); - rotate(' INVASION OF THE INANIMATE OBJECTS',4); - skip; rotate(' PROGRAMMING',9); - skip; rotate(' VINCENT M WEAVER',9); - skip; skip; rotate(' GRAPHICS',10); - skip; rotate(' VINCENT M WEAVER',10); - skip; skip; rotate(' SOUND',11); - skip; rotate(' VINCENT M WEAVER',11); - skip; skip; rotate(' GRAPHICS INSPIRATION',12); - skip; rotate(' JEFF WARWICK',12); - skip; skip; rotate(' UTOPIA BBS 410-557-0868',13); - skip; rotate(' JOHN CLEMENS',13); - skip; rotate(' JASON GRIMM',13); - skip; skip; rotate(' PCGPE AUTHORS, esp',14); - skip; rotate(' GRANT SMITH',14); - skip; skip; rotate(' SOUND BLASTER INFO',15); - skip; rotate(' AXEL STOLZ',15); - skip; skip; rotate(' INSPIRATION',9); - skip; rotate(' DOUGLAS ADAMS',9); - skip; rotate(' GENE RODENBERRY',9); - skip; rotate(' CLIFF STOLL',9); - skip; rotate(' ARTHUR C CLARKE',9); - skip; rotate(' ISAAC ASIMOV',9); - skip; rotate(' GORDON KORMAN',9); - skip; skip; rotate(' THANKS TO ALL THE AGENTS',10); - skip; rotate(' B,D,JL,L,N,P,S,W,PM,E',10); - skip; rotate(' AND ESPECIALLY AGENT G',10); - i:=0; - repeat - move(mem[vaddr2:(i*320)],mem[vga:63680],320); - Move (mem[vga:320],mem[vga:0],63680); - inc(i); - until (keypressed) or (i=299); - if keypressed then ch:=readkey; - end; - -procedure shadowrite(st:string;x5,y5,forecol,backcol:integer); -begin - outtextxy(st,x5+1,y5+1,15,backcol,0,vga,false); - outtextxy(st,x5,y5,15,forecol,0,vga,false); -end; - -procedure register; - -var pagenum,oldpagenum,numpages:integer; - pagest:string; - numst:string[2]; - -procedure page1; -begin - flip(vaddr,vga); - shadowrite(' TO REGISTER',10,10,9,1); - shadowrite('THIS GAME WAS WRITTEN BY A 16 YEAR OLD',10,30,9,1); - shadowrite(' ENTIRELY IN HIS FREE TIME.',10,40,9,1); - shadowrite('HOPEFULLY YOU FEEL HIS FREE TIME IS',10,50,9,1); - shadowrite(' WORTH SOMETHING.',10,60,9,1); - shadowrite('WARNING:',10,80,12,4); - shadowrite(' VMW SOFTWARE IS NOT AN INCORPORATED',10,90,12,4); - shadowrite(' COMPANY, NOR DOES IT HAVE ANY INCOME',10,100,12,4); - shadowrite(' EXCEPT DONATIONS. NONE OF ITS',10,110,12,4); - shadowrite(' SYMBOLS ARE TRADEMARKED EITHER. (BUT',10,120,12,4); - shadowrite(' I DOUBT YOU''LL NAME A COMPANY AFTER',10,130,12,4); - shadowrite(' MY ININTIALS)',10,140,12,4); -end; -procedure page2; -begin - flip(vaddr,vga); - shadowrite('PLEASE SEND ANY DONATIONS TO:',10,10,10,2); - shadowrite(' VINCENT WEAVER',10,20,10,2); - shadowrite(' 326 FOSTER KNOLL DR.',10,30,10,2); - shadowrite(' JOPPA, MD 21085-4706, USA, ETC.',10,40,10,2); - shadowrite('ANY DONATION OF $5 OR MORE GETS THE',10,60,13,5); - shadowrite(' NEWEST VERSION OF THE GAME, PLUS',10,70,13,5); - shadowrite(' ANY OTHER COOL PROGRAMS I HAVE AT',10,80,13,5); - shadowrite(' THE TIME.',10,90,13,5); - shadowrite('ALSO IF YOU SEND ME A SELF ADDRESSED',10,110,11,3); - shadowrite(' STAMPED ENVELOPE WITH SUFFICIENT',10,120,11,3); - shadowrite(' POSTAGE AND A 3 1/2 INCH DISK IN',10,130,11,3); - shadowrite(' IT, I WILL COPY THE NEWEST VERSION',10,140,11,3); - shadowrite(' OF THE GAME ONTO IT.',10,150,11,3); -end; - -procedure page3; -begin - flip(vaddr,vga); - shadowrite('OTHER VMW SOFTWARE PRODUCTIONS:',10,10,15,7); - shadowrite(' PAINTPRO:',10,30,13,5); - shadowrite(' LOAD AND SAVE GRAPHICS PICTURES',10,40,13,5); - shadowrite(' INTO C, PASCAL, BASIC, ETC.',10,50,13,5); - shadowrite(' WITH SCREEN CAPTURE UTILITY.',10,60,13,5); - shadowrite(' SPACEWAR III:',10,70,11,3); - shadowrite(' ALMOST COMPLETE GAME WITH WORKING',10,80,11,3); - shadowrite(' SPACESHIPS. SORT OF COOL.',10,90,11,3); - shadowrite(' AITAS: (ADVENTURES IN TIME AND SPACE)',10,100,12,4); - shadowrite(' THIS GAME WILL BE FINISHED SOMEDAY.',10,110,12,4); - shadowrite(' IT HAS BEEN UNDER WAY FOR 3 YEARS.',10,120,12,4); - shadowrite(' MISC PASCAL/BASIC PROGRAMS:',10,130,9,1); - shadowrite(' OVER 500 PROGRAMS WRITTEN OR TYPED',10,140,9,1); - shadowrite(' IN BY ME....FUN TO LOOK AT.',10,150,9,1); -end; - -procedure page4; -begin - flip(vaddr,vga); - shadowrite('DISCLAIMERS:',10,10,12,14); - shadowrite('** THE ABOVE PROGRAMS HAVE NEVER DONE**',5,30,12,4); - shadowrite('** ANYTHING BAD TO MY COMPUTER THAT **',5,40,12,4); - shadowrite('** CTRL-ALT-DEL WOULDN''T FIX. I AM **',5,50,12,4); - shadowrite('** NOT RESPONSIBLE FOR HARD DISK **',5,60,12,4); - shadowrite('** DISSAPPEARANCES, MISSING MODEMS **',5,70,12,4); - shadowrite('** MOUSE BREAKDOWNS, MELTING MONITORS**',5,80,12,4); - SHADOWRITE('** OR ANYTHING ELSE. **',5,90,12,4); - shadowrite('%% ALL VMW SOFTWARE PRODUCTIONS ARE %%',5,110,11,3); - shadowrite('%% CERTIFIED VIRUS FREE!!!!!!!!!!!! %%',5,120,11,3); -end; - -begin - background; - pagenum:=1; - oldpagenum:=1; - numpages:=4; - page1; - shadowrite('PAGE 1 of 4: ESC QUITS',50,180,15,7); - repeat - ch:=menuread; - if (ch=' ') or (ch=#13) then inc(pagenum); - if (ch='õ') or (ch='Þ') or (ch='Ü') then inc(pagenum); - if (ch='ô') or (ch='Ý') or (ch='ß') then dec(pagenum); - if pagenum>4 then pagenum:=1; - if pagenum<1 then pagenum:=4; - if oldpagenum<>pagenum then begin - if pagenum=1 then page1; - if pagenum=2 then page2; - if pagenum=3 then page3; - if pagenum=4 then page4; - str(pagenum:2,numst); - pagest:=concat('PAGE ',numst); - str(numpages:2,numst); - pagest:=concat(pagest,' of ',numst,': ESC QUITS'); - shadowrite(pagest,50,180,15,7); - oldpagenum:=pagenum; - end; - until ch=#27; -end; - - -label picloader,menu; - -begin - axel_und_carmen:=true; {as_of_9-22-94} {change_back_10-6-94} - randomize; - setupvirtual; - fade; - setmcga; - dographics; - energy:=15; - lives:=2; - score:=0; - level:=0; - 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; - modinit; - dev:=7; - md:='vmwfan.tb1'; - mix := 10000; {use 10000 normally } - pro := 0; {Leave at 0} - loop :=0; {4 means mod will play forever} - modvolume (255,255,255,255); { Full volume } - modsetup ( stat, dev, mix, pro, loop, md ); - case stat of - 1: writeln('Not a mod'); - 2: writeln('Already playing'); - 4: writeln('Out of memory'); - end; - 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,15,VGA,false); - y:=0; - repeat until keypressed; - ch:=readkey; - modstop; - 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,vaddr2,'tbomb1.tb1'); - if not(axel_und_carmen) then begin - for tempi:=193 to 199 do - for tempj:=290 to 319 do - putpixel(tempj,tempi,0,vaddr2); - end; -MENU: - modinit; - dev:=7; - md:='weave1.tb1'; - mix := 10000; {use 10000 normally } - pro := 0; {Leave at 0} - loop :=0; {4 means mod will play forever} - modvolume (255,255,255,255); { Full volume } - modsetup ( stat, dev, mix, pro, loop, md ); - case stat of - 1: writeln('Not a mod'); - 2: writeln('Already playing'); - 4: writeln('Out of memory'); - end; - flip(vaddr2,vga); - unfade; - repeat until keypressed; - ch:=readkey; - barpos:=0; - outtextxy('F1 HELP',0,190,15,9,7,vga,false); - coolbox(117,61,199,140,true,vga); - repeat - if barpos=0 then outtextxy('NEW GAME',123,67,15,32,0,vga,true) - else outtextxy('NEW GAME',123,67,15,32,7,vga,true); - if barpos=1 then outtextxy('OPTIONS',123,77,15,32,0,vga,true) - else outtextxy('OPTIONS',123,77,15,32,7,vga,true); - if barpos=2 then outtextxy('REGISTER',123,87,15,32,0,vga,true) - else outtextxy('REGISTER',123,87,15,32,7,vga,true); - if barpos=3 then outtextxy('LOAD GAME',123,97,15,32,0,vga,true) - else outtextxy('LOAD GAME',123,97,15,32,7,vga,true); - if barpos=4 then outtextxy('STORY',123,107,15,32,0,vga,true) - else outtextxy('STORY',123,107,15,32,7,vga,true); - if barpos=5 then outtextxy('CREDITS',123,117,15,32,0,vga,true) - else outtextxy('CREDITS',123,117,15,32,7,vga,true); - if barpos=6 then outtextxy('QUIT',123,127,15,32,0,vga,true) - else outtextxy('QUIT',123,127,15,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 (ord(ch)=168) then begin barpos:=10; ch:=#13; end; - 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='A' then axel_und_carmen:=not(axel_und_carmen); - 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; - modstop; - if barpos=6 then quit; - if barpos=1 then options; - if barpos=2 then register; - if barpos=3 then loadgame; - if barpos=4 then story; - if barpos=5 then credits; - if barpos=10 then help; - if barpos=0 then playthegame(0); - if barpos=0 then goto picloader; - if barpos=4 then goto picloader; - goto menu; - -end. \ No newline at end of file diff --git a/tbash.tb1 b/tbash.tb1 new file mode 100644 index 0000000..6dc2071 Binary files /dev/null and b/tbash.tb1 differ diff --git a/tbaship.tb1 b/tbaship.tb1 new file mode 100644 index 0000000..339a6a8 Binary files /dev/null and b/tbaship.tb1 differ diff --git a/tbchief.tb1 b/tbchief.tb1 new file mode 100644 index 0000000..754f83e Binary files /dev/null and b/tbchief.tb1 differ diff --git a/tbcobj.tb1 b/tbcobj.tb1 new file mode 100644 index 0000000..42f34de Binary files /dev/null and b/tbcobj.tb1 differ diff --git a/tbconsol.tb1 b/tbconsol.tb1 new file mode 100644 index 0000000..7777b4d Binary files /dev/null and b/tbconsol.tb1 differ diff --git a/tbcrash.tb1 b/tbcrash.tb1 new file mode 100644 index 0000000..f930f1b Binary files /dev/null and b/tbcrash.tb1 differ diff --git a/tbeerm.tb1 b/tbeerm.tb1 new file mode 100644 index 0000000..8a7cbcb Binary files /dev/null and b/tbeerm.tb1 differ diff --git a/tbetter.pas b/tbetter.pas deleted file mode 100644 index 37b2935..0000000 --- a/tbetter.pas +++ /dev/null @@ -1,22 +0,0 @@ -program maketb1better; -uses vmwgraph; -var palf:text; - x,y,i,j:integer; - temp:array[1..3] of byte; - grapherror:byte; - -begin - setmcga; - 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); - grapherror:=loadpicsuperpacked(0,0,vga,'tbomb1.tb1'); - - readln; - settext; -end. \ No newline at end of file diff --git a/tbfont.tb1 b/tbfont.tb1 new file mode 100644 index 0000000..1362597 Binary files /dev/null and b/tbfont.tb1 differ diff --git a/tbgorg.pcx b/tbgorg.pcx new file mode 100644 index 0000000..e734cf3 Binary files /dev/null and b/tbgorg.pcx differ diff --git a/tbgorg.tb1 b/tbgorg.tb1 new file mode 100644 index 0000000..8d5d6f0 Binary files /dev/null and b/tbgorg.tb1 differ diff --git a/tbl2ship.tb1 b/tbl2ship.tb1 new file mode 100644 index 0000000..8372cfd Binary files /dev/null and b/tbl2ship.tb1 differ diff --git a/tbl3intr.tb1 b/tbl3intr.tb1 new file mode 100644 index 0000000..5731ce3 Binary files /dev/null and b/tbl3intr.tb1 differ diff --git a/tblev3.tb1 b/tblev3.tb1 new file mode 100644 index 0000000..1d0812c Binary files /dev/null and b/tblev3.tb1 differ diff --git a/tbma1.tb1 b/tbma1.tb1 new file mode 100644 index 0000000..9d9e058 Binary files /dev/null and b/tbma1.tb1 differ diff --git a/tbomb1.tb1 b/tbomb1.tb1 new file mode 100644 index 0000000..7c38439 Binary files /dev/null and b/tbomb1.tb1 differ diff --git a/tbpit.tb1 b/tbpit.tb1 new file mode 100644 index 0000000..9110103 Binary files /dev/null and b/tbpit.tb1 differ diff --git a/tbs1.pas b/tbs1.pas new file mode 100644 index 0000000..50e694d --- /dev/null +++ b/tbs1.pas @@ -0,0 +1,1752 @@ +{ TheDraw Pascal Screen Image. Date: 09/14/95 } +const + IMAGEDATA1_WIDTH=80; + IMAGEDATA1_DEPTH=25; + IMAGEDATA1_LENGTH=4000; + IMAGEDATA1 : array [1..4000] of Char = ( + 'Ú', #3, 'Â', #11, 'Â', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Â', #11, 'Â', #15, '¿', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + 'ß', #12, 'ß', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + ' ', #12, 'Ü', #12, 'Û', #12, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, 'ß', #12, + 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, + 'Û', #12, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, + 'Å', #11, '´', #3, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Û', #12, ' ', #12, + ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Û', #12, 'ß', #12, + 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, + 'Û', #12, ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, + 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + ' ', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, 'Ü', #12, + 'Ü', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, + '´', #15, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, 'Å', #15, + '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'A', #8, ' ', #8, ' ', #8, 'ß', #4, 'Û', #4, 'ß', #20, + ' ', #20, 'ß', #18, 'Û', #18, 'ß', #18, ' ', #18, 'ß', #18, 'Û', #18, + 'ß', #2, ' ', #2, ' ', #2, 'S', #8, ' ', #8, 'O', #8, ' ', #8, + 'F', #8, ' ', #8, 'T', #8, ' ', #8, 'W', #8, ' ', #8, 'A', #8, + ' ', #8, 'R', #8, ' ', #8, 'E', #8, ' ', #8, ' ', #8, ' ', #8, + 'P', #8, ' ', #8, 'R', #8, ' ', #8, 'O', #8, ' ', #8, 'D', #8, + ' ', #8, 'U', #8, ' ', #8, 'C', #8, ' ', #8, 'T', #8, ' ', #8, + 'I', #8, ' ', #8, 'O', #8, ' ', #8, 'N', #8, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, 'Å', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Å', #11, 'Å', #3, '´', #11, + 'Ã', #11, 'Å', #3, 'Å', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Å', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'S', #13, ' ', #13, 'E', #13, ' ', #13, 'T', #13, ' ', #13, + 'U', #13, ' ', #13, 'P', #13, ' ', #13, ' ', #13, ' ', #13, 'P', #13, + ' ', #13, 'R', #13, ' ', #13, 'O', #13, ' ', #13, 'G', #13, ' ', #13, + 'R', #13, ' ', #13, 'A', #13, ' ', #13, 'M', #13, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, + 'Å', #15, 'Å', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Å', #15, + 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, '´', #3, ' ', #3, ' ', #3, + ' ', #3, 'W', #13, 'e', #13, 'l', #13, 'c', #13, 'o', #13, 'm', #13, + 'e', #13, '.', #13, ' ', #13, ' ', #13, 'T', #13, 'h', #13, 'a', #13, + 'n', #13, 'k', #13, ' ', #13, 'y', #13, 'o', #13, 'u', #13, ' ', #13, + 'f', #13, 'o', #13, 'r', #13, ' ', #13, 'u', #13, 's', #13, 'i', #13, + 'n', #13, 'g', #13, ' ', #13, 'T', #13, 'o', #13, 'm', #13, ' ', #13, + 'B', #13, 'o', #13, 'm', #13, 'b', #13, 'e', #13, 'm', #13, ',', #13, + ' ', #13, 't', #13, 'h', #13, 'e', #13, ' ', #13, 'f', #13, 'i', #13, + 'r', #13, 's', #13, 't', #13, ' ', #13, 'i', #13, 'n', #13, ' ', #13, + 'h', #13, 'o', #13, 'p', #13, 'e', #13, 'f', #13, 'u', #13, 'l', #13, + 'l', #13, 'y', #13, ' ', #13, 'a', #13, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, + '´', #11, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + 'l', #13, 'o', #13, 'n', #13, 'g', #13, ' ', #13, 'l', #13, 'i', #13, + 'n', #13, 'e', #13, ' ', #13, 'o', #13, 'f', #13, ' ', #13, 'V', #4, + 'M', #1, 'W', #2, ' ', #2, 'S', #13, 'o', #13, 'f', #13, 't', #13, + 'w', #13, 'a', #13, 'r', #13, 'e', #13, ' ', #13, 'g', #13, 'a', #13, + 'm', #13, 'e', #13, 's', #13, '.', #13, ' ', #13, ' ', #13, 'I', #13, + 't', #13, ' ', #13, 'd', #13, 'o', #13, 'e', #13, 's', #13, ' ', #13, + 'n', #13, 'o', #13, 't', #13, ' ', #13, 'm', #13, 'a', #13, 't', #13, + 't', #13, 'e', #13, 'r', #13, ' ', #13, 'w', #13, 'h', #13, 'e', #13, + 't', #13, 'h', #13, 'e', #13, 'r', #13, ' ', #13, 'Ã', #3, 'Å', #11, + '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'y', #13, 'o', #13, 'u', #13, ' ', #13, + 'b', #13, 'o', #13, 'u', #13, 'g', #13, 'h', #13, 't', #13, ' ', #13, + 't', #13, 'h', #13, 'e', #13, ' ', #13, 'g', #13, 'a', #13, 'm', #13, + 'e', #13, ',', #13, ' ', #13, 'd', #13, 'o', #13, 'w', #13, 'n', #13, + 'l', #13, 'o', #13, 'a', #13, 'd', #13, 'e', #13, 'd', #13, ' ', #13, + 'i', #13, 't', #13, ' ', #13, 'f', #13, 'r', #13, 'o', #13, 'm', #13, + ' ', #13, 't', #13, 'h', #13, 'e', #13, ' ', #13, 'i', #13, 'n', #13, + 't', #13, 'e', #13, 'r', #13, 'n', #13, 'e', #13, 't', #13, ' ', #13, + 'o', #13, 'r', #13, ' ', #13, 'a', #13, ' ', #13, ' ', #13, ' ', #13, + ' ', #13, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'b', #13, + 'u', #13, 'l', #13, 'l', #13, 'e', #13, 't', #13, 'i', #13, 'n', #13, + ' ', #13, 'b', #13, 'o', #13, 'a', #13, 'r', #13, 'd', #13, ',', #13, + ' ', #13, 'o', #13, 'r', #13, ' ', #13, 'i', #13, 'f', #13, ' ', #13, + 'y', #13, 'o', #13, 'u', #13, ' ', #13, 's', #13, 'i', #13, 'm', #13, + 'p', #13, 'l', #13, 'y', #13, ' ', #13, 'b', #13, 'o', #13, 'r', #13, + 'r', #13, 'o', #13, 'w', #13, 'e', #13, 'd', #13, ' ', #13, '(', #13, + 'p', #13, 'i', #13, 'r', #13, 'a', #13, 't', #13, 'e', #13, 'd', #13, + ')', #13, ' ', #13, 'i', #13, 't', #13, ' ', #13, 'f', #13, 'r', #13, + 'o', #13, 'm', #13, ' ', #13, ' ', #13, 'Ã', #15, 'Å', #11, '´', #3, + 'Ã', #15, 'Å', #11, '´', #3, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'a', #13, ' ', #13, 'f', #13, 'r', #13, 'i', #13, + 'e', #13, 'n', #13, 'd', #13, '.', #13, ' ', #13, ' ', #13, 'H', #13, + 'o', #13, 'p', #13, 'e', #13, 'f', #13, 'u', #13, 'l', #13, 'l', #13, + 'y', #13, ' ', #13, 'i', #13, 't', #13, ' ', #13, 'w', #13, 'o', #13, + 'r', #13, 'k', #13, 's', #13, ' ', #13, 'a', #13, 'n', #13, 'd', #13, + ' ', #13, 'y', #13, 'o', #13, 'u', #13, #39, #13, 'l', #13, 'l', #13, + ' ', #13, 'e', #13, 'n', #13, 'j', #13, 'o', #13, 'y', #13, ' ', #13, + 'i', #13, 't', #13, '.', #13, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, 'Å', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Å', #3, 'Å', #11, '´', #15, '³', #3, + 'Å', #11, '´', #15, ' ', #15, ' ', #15, ' ', #15, '*', #15, '*', #15, + '*', #15, '*', #15, '*', #15, '*', #15, '*', #15, '*', #15, ' ', #15, + ' ', #15, 'T', #15, 'h', #15, 'i', #15, 's', #15, ' ', #15, 's', #15, + 'e', #15, 't', #15, 'u', #15, 'p', #15, ' ', #15, 'p', #15, 'r', #15, + 'o', #15, 'g', #15, 'r', #15, 'a', #15, 'm', #15, ' ', #15, 'w', #15, + 'i', #15, 'l', #15, 'l', #15, ' ', #15, 'a', #15, 's', #15, 'k', #15, + ' ', #15, 'y', #15, 'o', #15, 'u', #15, ' ', #15, 's', #15, 'o', #15, + 'm', #15, 'e', #15, ' ', #15, 'q', #15, 'u', #15, 'e', #15, 's', #15, + 't', #15, 'i', #15, 'o', #15, 'n', #15, 's', #15, ' ', #15, 'a', #15, + 'b', #15, 'o', #15, 'u', #15, 't', #15, ' ', #15, 'y', #15, 'o', #15, + 'u', #15, 'r', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, 'Ã', #11, + 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'c', #15, 'o', #15, 'm', #15, + 'p', #15, 'u', #15, 't', #15, 'e', #15, 'r', #15, ' ', #15, 't', #15, + 'o', #15, ' ', #15, 'e', #15, 'n', #15, 's', #15, 'u', #15, 'r', #15, + 'e', #15, ' ', #15, 't', #15, 'h', #15, 'i', #15, 's', #15, ' ', #15, + 'g', #15, 'a', #15, 'm', #15, 'e', #15, ' ', #15, 'w', #15, 'i', #15, + 'l', #15, 'l', #15, ' ', #15, 'r', #15, 'u', #15, 'n', #15, ' ', #15, + 'p', #15, 'r', #15, 'o', #15, 'p', #15, 'e', #15, 'r', #15, 'l', #15, + 'y', #15, '.', #15, ' ', #15, ' ', #15, 'I', #15, 'f', #15, ' ', #15, + 'y', #15, 'o', #15, 'u', #15, ' ', #15, 'a', #15, 'r', #15, 'e', #15, + ' ', #15, ' ', #15, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, + '´', #3, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + 'n', #15, 'o', #15, 't', #15, ' ', #15, 's', #15, 'u', #15, 'r', #15, + 'e', #15, ',', #15, ' ', #15, 'a', #15, 's', #15, 'k', #15, ' ', #15, + 'a', #15, ' ', #15, 'f', #15, 'r', #15, 'e', #15, 'i', #15, 'n', #15, + 'd', #15, ' ', #15, 'o', #15, 'r', #15, ' ', #15, 'e', #15, 'l', #15, + 's', #15, 'e', #15, ' ', #15, 'c', #15, 'h', #15, 'e', #15, 'c', #15, + 'k', #15, ' ', #15, 'h', #15, 'o', #15, 'w', #15, ' ', #15, 'a', #15, + 'n', #15, 'o', #15, 't', #15, 'h', #15, 'e', #15, 'r', #15, ' ', #15, + 'g', #15, 'a', #15, 'm', #15, 'e', #15, ' ', #15, 'y', #15, 'o', #15, + 'u', #15, ' ', #15, ' ', #15, ' ', #15, ' ', #15, 'Ã', #11, 'Å', #3, + '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'a', #15, 'l', #15, 'r', #15, 'e', #15, + 'a', #15, 'd', #15, 'y', #15, ' ', #15, 'h', #15, 'a', #15, 'v', #15, + 'e', #15, ' ', #15, '(', #15, 't', #15, 'h', #15, 'a', #15, 't', #15, + ' ', #15, 'w', #15, 'o', #15, 'r', #15, 'k', #15, 's', #15, ')', #15, + ' ', #15, 'i', #15, 's', #15, ' ', #15, 's', #15, 'e', #15, 't', #15, + ' ', #15, 'u', #15, 'p', #15, '.', #15, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, 'Å', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Å', #11, 'Å', #15, '´', #11, + 'Ã', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'P', #95, 'R', #95, + 'E', #95, 'S', #95, 'S', #95, ' ', #95, '<', #95, 'E', #95, 'N', #95, + 'T', #95, 'E', #95, 'R', #95, '>', #95, ' ', #95, 'T', #95, 'O', #95, + ' ', #95, 'C', #95, 'O', #95, 'N', #95, 'T', #95, 'I', #95, 'N', #95, + 'U', #95, 'E', #95, ',', #95, ' ', #95, '"', #95, 'Q', #95, '"', #95, + ' ', #95, 't', #95, 'o', #95, ' ', #95, 'q', #95, 'u', #95, 'i', #95, + 't', #95, 't', #95, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, + 'Å', #15, 'Å', #11, '´', #3, 'À', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Ù', #11, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2); +{ TheDraw Pascal Screen Image. Date: 09/14/95 } +const + IMAGEDATA2_WIDTH=80; + IMAGEDATA2_DEPTH=25; + IMAGEDATA2_LENGTH=4000; + IMAGEDATA2 : array [1..4000] of Char = ( + 'Ú', #3, 'Â', #11, 'Â', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Â', #11, 'Â', #15, '¿', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'ß', #12, 'ß', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + ' ', #12, 'Ü', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, 'ß', #12, + 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, + 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, + 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, ' ', #12, + ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, + 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, + 'Û', #12, ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + ' ', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, 'Ü', #12, + 'Ü', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, + '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, + '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'A', #8, ' ', #8, ' ', #8, 'ß', #4, 'Û', #4, 'ß', #20, + ' ', #20, 'ß', #18, 'Û', #18, 'ß', #18, ' ', #18, 'ß', #18, 'Û', #18, + 'ß', #2, ' ', #2, ' ', #2, 'S', #8, ' ', #8, 'O', #8, ' ', #8, + 'F', #8, ' ', #8, 'T', #8, ' ', #8, 'W', #8, ' ', #8, 'A', #8, + ' ', #8, 'R', #8, ' ', #8, 'E', #8, ' ', #8, ' ', #8, ' ', #8, + 'P', #8, ' ', #8, 'R', #8, ' ', #8, 'O', #8, ' ', #8, 'D', #8, + ' ', #8, 'U', #8, ' ', #8, 'C', #8, ' ', #8, 'T', #8, ' ', #8, + 'I', #8, ' ', #8, 'O', #8, ' ', #8, 'N', #8, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, 'Å', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Å', #11, 'Å', #3, '´', #11, + 'Ã', #11, 'Å', #3, 'Å', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Å', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'R', #13, ' ', #13, 'E', #13, ' ', #13, 'Q', #13, ' ', #13, + 'U', #13, ' ', #13, 'I', #13, ' ', #13, 'R', #13, ' ', #13, 'E', #13, + ' ', #13, 'M', #13, ' ', #13, 'E', #13, ' ', #13, 'N', #13, ' ', #13, + 'T', #13, ' ', #13, 'S', #13, ' ', #13, '!', #13, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, + 'Å', #15, 'Å', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Å', #15, + 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, '´', #3, ' ', #3, ' ', #3, + ' ', #3, 'T', #10, 'o', #10, ' ', #10, 'R', #10, 'u', #10, 'n', #10, + ' ', #10, 'T', #10, 'h', #10, 'i', #10, 's', #10, ' ', #10, 'G', #10, + 'a', #10, 'm', #10, 'e', #10, ' ', #10, 'Y', #10, 'o', #10, 'u', #10, + ' ', #10, 'N', #10, 'e', #10, 'e', #10, 'd', #10, ' ', #10, 'T', #10, + 'h', #10, 'e', #10, ' ', #10, 'F', #10, 'o', #10, 'l', #10, 'l', #10, + 'o', #10, 'w', #10, 'i', #10, 'n', #10, 'g', #10, ':', #10, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, + '´', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'A', #10, ' ', #10, 'V', #10, + 'G', #10, 'A', #10, ' ', #10, 'd', #10, 'i', #10, 's', #10, 'p', #10, + 'l', #10, 'a', #10, 'y', #10, ' ', #10, '(', #10, 'o', #10, 'r', #10, + ' ', #10, 'b', #10, 'e', #10, 't', #10, 't', #10, 'e', #10, 'r', #10, + '.', #10, '.', #10, ' ', #10, 'S', #10, 'V', #10, 'G', #10, 'A', #10, + ' ', #10, 'a', #10, 'n', #10, 'd', #10, ' ', #10, 'X', #10, 'G', #10, + 'A', #10, ' ', #10, 'w', #10, 'i', #10, 'l', #10, 'l', #10, ' ', #10, + 'w', #10, 'o', #10, 'r', #10, 'k', #10, ')', #10, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, + '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'A', #10, ' ', #10, '2', #10, '8', #10, '6', #10, ' ', #10, 'o', #10, + 'r', #10, ' ', #10, 'l', #10, 'a', #10, 't', #10, 'e', #10, 'r', #10, + ' ', #10, 'c', #10, 'h', #10, 'i', #10, 'p', #10, ' ', #10, '(', #10, + '3', #10, '8', #10, '6', #10, ',', #10, ' ', #10, '4', #10, '8', #10, + '6', #10, ',', #10, ' ', #10, 'P', #10, 'e', #10, 'n', #10, 't', #10, + 'i', #10, 'u', #10, 'm', #10, ' ', #10, 'a', #10, 'n', #10, 'd', #10, + ' ', #10, 'B', #10, 'e', #10, 't', #10, 't', #10, 'e', #10, 'r', #10, + ')', #10, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, + 'Ã', #15, 'Å', #11, '´', #3, ' ', #3, ' ', #3, ' ', #3, 'T', #10, + 'o', #10, ' ', #10, 'R', #10, 'u', #10, 'n', #10, ' ', #10, 'T', #10, + 'h', #10, 'i', #10, 's', #10, ' ', #10, 'G', #10, 'a', #10, 'm', #10, + 'e', #10, ' ', #10, 'W', #10, 'i', #10, 't', #10, 'h', #10, ' ', #10, + 'S', #10, 'o', #10, 'u', #10, 'n', #10, 'd', #10, ' ', #10, 'Y', #10, + 'o', #10, 'u', #10, ' ', #10, 'N', #10, 'e', #10, 'e', #10, 'd', #10, + ' ', #10, 'T', #10, 'h', #10, 'e', #10, ' ', #10, 'F', #10, 'o', #10, + 'l', #10, 'l', #10, 'o', #10, 'w', #10, 'i', #10, 'n', #10, 'g', #10, + ':', #10, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, + ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #10, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, + 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'S', #10, 'o', #10, + 'u', #10, 'n', #10, 'd', #10, ' ', #10, 'E', #10, 'f', #10, 'f', #10, + 'e', #10, 'c', #10, 't', #10, 's', #10, ' ', #10, 'R', #10, 'e', #10, + 'q', #10, 'u', #10, 'i', #10, 'r', #10, 'e', #10, ' ', #10, 'a', #10, + ' ', #10, 'S', #10, 'o', #10, 'u', #10, 'n', #10, 'd', #10, ' ', #10, + 'B', #10, 'l', #10, 'a', #10, 's', #10, 't', #10, 'e', #10, 'r', #10, + ' ', #10, 'C', #10, 'o', #10, 'm', #10, 'p', #10, 'a', #10, 't', #10, + 'i', #10, 'b', #10, 'l', #10, 'e', #10, ' ', #10, 'a', #10, 'n', #10, + 'd', #10, ' ', #10, 's', #10, 'o', #10, 'm', #10, 'e', #10, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'X', #10, 'M', #10, 'S', #10, ' ', #10, 'm', #10, 'e', #10, 'm', #10, + 'o', #10, 'r', #10, 'y', #10, '.', #10, ' ', #10, ' ', #10, '(', #10, + 'I', #10, 'f', #10, ' ', #10, 't', #10, 'h', #10, 'e', #10, ' ', #10, + 'g', #10, 'a', #10, 'm', #10, 'e', #10, ' ', #10, 'l', #10, 'o', #10, + 'c', #10, 'k', #10, 's', #10, ' ', #10, 'u', #10, 'p', #10, ',', #10, + ' ', #10, 't', #10, 'r', #10, 'y', #10, ' ', #10, 't', #10, 'u', #10, + 'r', #10, 'n', #10, 'i', #10, 'n', #10, 'g', #10, ' ', #10, 't', #10, + 'h', #10, 'e', #10, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, + '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 's', #10, 'o', #10, 'u', #10, 'n', #10, + 'd', #10, ' ', #10, 'e', #10, 'f', #10, 'f', #10, 'e', #10, 'c', #10, + 't', #10, 's', #10, ' ', #10, 'o', #10, 'f', #10, 'f', #10, '.', #10, + ')', #10, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #3, + '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'T', #79, 'h', #79, 'i', #79, + 's', #79, ' ', #79, 'G', #79, 'a', #79, 'm', #79, 'e', #79, ' ', #79, + 'S', #79, 'h', #79, 'o', #79, 'u', #79, 'l', #79, 'd', #79, ' ', #79, + 'R', #79, 'u', #79, 'n', #79, ' ', #79, 'O', #79, 'n', #79, ' ', #79, + 'M', #79, 'o', #79, 's', #79, 't', #79, ' ', #79, 'N', #79, 'e', #79, + 'w', #79, 'e', #79, 'r', #79, ' ', #79, 'M', #79, 'a', #79, 'c', #79, + 'h', #79, 'i', #79, 'n', #79, 'e', #79, 's', #79, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, 'Å', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Å', #11, 'Å', #15, '´', #11, + 'Ã', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'P', #95, 'R', #95, + 'E', #95, 'S', #95, 'S', #95, ' ', #95, '<', #95, 'E', #95, 'N', #95, + 'T', #95, 'E', #95, 'R', #95, '>', #95, ' ', #95, 'T', #95, 'O', #95, + ' ', #95, 'C', #95, 'O', #95, 'N', #95, 'T', #95, 'I', #95, 'N', #95, + 'U', #95, 'E', #95, ',', #95, ' ', #95, '"', #95, 'Q', #95, '"', #95, + ' ', #95, 't', #95, 'o', #95, ' ', #95, 'q', #95, 'u', #95, 'i', #95, + 't', #95, 'Å', #3, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, + 'Å', #15, 'Å', #11, '´', #3, 'À', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Ù', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11); +{ TheDraw Pascal Screen Image. Date: 09/14/95 } +const + IMAGEDATA3_WIDTH=80; + IMAGEDATA3_DEPTH=25; + IMAGEDATA3_LENGTH=4000; + IMAGEDATA3 : array [1..4000] of Char = ( + 'Ú', #3, 'Â', #11, 'Â', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Â', #11, 'Â', #15, '¿', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + 'ß', #12, 'ß', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + ' ', #12, 'Ü', #12, 'Û', #12, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, 'ß', #12, + 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, + 'Û', #12, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, + 'Å', #11, '´', #3, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Û', #12, ' ', #12, + ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Û', #12, 'ß', #12, + 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, + 'Û', #12, ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, + 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + ' ', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, 'Ü', #12, + 'Ü', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, + '´', #15, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, 'Å', #15, + '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'A', #8, ' ', #8, ' ', #8, 'ß', #4, 'Û', #4, 'ß', #20, + ' ', #20, 'ß', #18, 'Û', #18, 'ß', #18, ' ', #18, 'ß', #18, 'Û', #18, + 'ß', #2, ' ', #2, ' ', #2, 'S', #8, ' ', #8, 'O', #8, ' ', #8, + 'F', #8, ' ', #8, 'T', #8, ' ', #8, 'W', #8, ' ', #8, 'A', #8, + ' ', #8, 'R', #8, ' ', #8, 'E', #8, ' ', #8, ' ', #8, ' ', #8, + 'P', #8, ' ', #8, 'R', #8, ' ', #8, 'O', #8, ' ', #8, 'D', #8, + ' ', #8, 'U', #8, ' ', #8, 'C', #8, ' ', #8, 'T', #8, ' ', #8, + 'I', #8, ' ', #8, 'O', #8, ' ', #8, 'N', #8, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, 'Å', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Å', #11, 'Å', #3, '´', #11, + 'Ã', #11, 'Å', #3, 'Å', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Å', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'M', #11, ' ', #11, 'U', #11, ' ', #11, + 'S', #11, ' ', #11, 'I', #11, ' ', #11, 'C', #11, ' ', #11, ' ', #11, + ' ', #11, 'S', #11, ' ', #11, 'E', #11, ' ', #11, 'T', #11, ' ', #11, + 'U', #11, ' ', #11, 'P', #11, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, + 'Å', #15, 'Å', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Å', #15, + 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, '´', #3, ' ', #3, ' ', #3, + ' ', #3, 'T', #10, 'o', #10, 'm', #10, ' ', #10, 'B', #10, 'o', #10, + 'm', #10, 'b', #10, 'e', #10, 'm', #10, ' ', #10, 'P', #10, 'l', #10, + 'a', #10, 'y', #10, 's', #10, ' ', #10, 'M', #10, 'u', #10, 's', #10, + 'i', #10, 'c', #10, '.', #10, ' ', #10, ' ', #10, 'W', #10, 'h', #10, + 'i', #10, 'c', #10, 'h', #10, ' ', #10, 'D', #10, 'o', #10, ' ', #10, + 'Y', #10, 'o', #10, 'u', #10, ' ', #10, 'W', #10, 'a', #10, 'n', #10, + 't', #10, ' ', #10, '-', #10, '>', #10, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #3, + '´', #11, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + '1', #10, '.', #10, ' ', #10, ' ', #10, 'P', #10, 'C', #10, ' ', #10, + 'S', #10, 'p', #10, 'e', #10, 'a', #10, 'k', #10, 'e', #10, 'r', #10, + ' ', #10, '(', #10, 'l', #10, 'o', #10, 'u', #10, 's', #10, 'y', #10, + ' ', #10, 'q', #10, 'u', #10, 'a', #10, 'l', #10, 'i', #10, 't', #10, + 'y', #10, ')', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #3, 'Å', #11, + '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, '2', #10, '.', #10, ' ', #10, ' ', #10, + 'S', #10, 'o', #10, 'u', #10, 'n', #10, 'd', #10, 'b', #10, 'l', #10, + 'a', #10, 's', #10, 't', #10, 'e', #10, 'r', #10, ' ', #10, 'C', #10, + 'o', #10, 'm', #10, 'p', #10, 'a', #10, 't', #10, 'i', #10, 'b', #10, + 'l', #10, 'e', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, '3', #10, + '.', #10, ' ', #10, ' ', #10, 'D', #10, 'i', #10, 's', #10, 'n', #10, + 'e', #10, 'y', #10, ' ', #10, 'S', #10, 'o', #10, 'u', #10, 'n', #10, + 'd', #10, ' ', #10, 'S', #10, 'o', #10, 'u', #10, 'r', #10, 'c', #10, + 'e', #10, ' ', #10, '(', #10, 'L', #10, 'P', #10, 'T', #10, '1', #10, + ')', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #15, 'Å', #11, '´', #3, + 'Ã', #15, 'Å', #11, '´', #3, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, '4', #10, '.', #10, ' ', #10, ' ', #10, 'D', #10, + 'i', #10, 's', #10, 'n', #10, 'e', #10, 'y', #10, ' ', #10, 'S', #10, + 'o', #10, 'u', #10, 'n', #10, 'd', #10, ' ', #10, 'S', #10, 'o', #10, + 'u', #10, 'r', #10, 'c', #10, 'e', #10, ' ', #10, '(', #10, 'L', #10, + 'P', #10, 'T', #10, '2', #10, ')', #10, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, 'Å', #11, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, '5', #10, '.', #10, + ' ', #10, ' ', #10, 'D', #10, '/', #10, 'A', #10, ' ', #10, 'C', #10, + 'o', #10, 'n', #10, 'v', #10, 'e', #10, 'r', #10, 't', #10, 'e', #10, + 'r', #10, ' ', #10, 'o', #10, 'n', #10, ' ', #10, 'L', #10, 'P', #10, + 'T', #10, '1', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, 'Å', #11, '´', #15, '³', #3, + 'Å', #11, '´', #15, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, '6', #10, '.', #10, ' ', #10, ' ', #10, 'D', #10, '/', #10, + 'A', #10, ' ', #10, 'C', #10, 'o', #10, 'n', #10, 'v', #10, 'e', #10, + 'r', #10, 't', #10, 'e', #10, 'r', #10, ' ', #10, 'o', #10, 'n', #10, + ' ', #10, 'L', #10, 'P', #10, 'T', #10, '2', #10, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, + 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, '7', #10, '.', #10, ' ', #10, + ' ', #10, 'D', #10, '/', #10, 'A', #10, ' ', #10, 'C', #10, 'o', #10, + 'n', #10, 'v', #10, 'e', #10, 'r', #10, 't', #10, 'e', #10, 'r', #10, + ' ', #10, 'o', #10, 'n', #10, ' ', #10, 'L', #10, 'P', #10, 'T', #10, + '1', #10, ' ', #10, 'a', #10, 'n', #10, 'd', #10, ' ', #10, 'L', #10, + 'P', #10, 'T', #10, '2', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, + '´', #3, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + '8', #10, '.', #10, ' ', #10, ' ', #10, 'I', #10, ' ', #10, 'D', #10, + 'O', #10, 'N', #10, #39, #10, 'T', #10, ' ', #10, 'W', #10, 'A', #10, + 'N', #10, 'T', #10, ' ', #10, 'A', #10, 'N', #10, 'Y', #10, ' ', #10, + 'S', #10, 'O', #10, 'U', #10, 'N', #10, 'D', #10, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, 'Ã', #11, 'Å', #3, + '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, '-', #10, '-', #10, '-', #10, '-', #10, + '>', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, '(', #10, 'D', #10, 'e', #10, 'f', #10, 'a', #10, 'u', #10, + 'l', #10, 't', #10, ' ', #10, 'i', #10, 's', #10, ' ', #10, '1', #10, + ')', #10, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, 'Å', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Å', #11, 'Å', #15, '´', #11, + 'Ã', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'P', #95, 'R', #95, + 'E', #95, 'S', #95, 'S', #95, ' ', #95, '<', #95, 'E', #95, 'N', #95, + 'T', #95, 'E', #95, 'R', #95, '>', #95, ' ', #95, 'T', #95, 'O', #95, + ' ', #95, 'C', #95, 'O', #95, 'N', #95, 'T', #95, 'I', #95, 'N', #95, + 'U', #95, 'E', #95, ',', #95, ' ', #95, '"', #95, 'Q', #95, '"', #95, + ' ', #95, 't', #95, 'o', #95, ' ', #95, 'q', #95, 'u', #95, 'i', #95, + 't', #95, 'Å', #3, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, + 'Å', #15, 'Å', #11, '´', #3, 'À', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Ù', #11, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2, + ' ', #2, ' ', #2, ' ', #2, ' ', #2, ' ', #2); +{ TheDraw Pascal Screen Image. Date: 09/14/95 } +const + IMAGEDATA4_WIDTH=80; + IMAGEDATA4_DEPTH=25; + IMAGEDATA4_LENGTH=4000; + IMAGEDATA4 : array [1..4000] of Char = ( + 'Ú', #3, 'Â', #11, 'Â', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Â', #11, 'Â', #15, '¿', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'ß', #12, 'ß', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + ' ', #12, 'Ü', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, 'ß', #12, + 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, + 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, + 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, ' ', #12, + ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, + 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, + 'Û', #12, ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + ' ', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, 'Ü', #12, + 'Ü', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, + '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, + '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'A', #8, ' ', #8, ' ', #8, 'ß', #4, 'Û', #4, 'ß', #20, + ' ', #20, 'ß', #18, 'Û', #18, 'ß', #18, ' ', #18, 'ß', #18, 'Û', #18, + 'ß', #2, ' ', #2, ' ', #2, 'S', #8, ' ', #8, 'O', #8, ' ', #8, + 'F', #8, ' ', #8, 'T', #8, ' ', #8, 'W', #8, ' ', #8, 'A', #8, + ' ', #8, 'R', #8, ' ', #8, 'E', #8, ' ', #8, ' ', #8, ' ', #8, + 'P', #8, ' ', #8, 'R', #8, ' ', #8, 'O', #8, ' ', #8, 'D', #8, + ' ', #8, 'U', #8, ' ', #8, 'C', #8, ' ', #8, 'T', #8, ' ', #8, + 'I', #8, ' ', #8, 'O', #8, ' ', #8, 'N', #8, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, 'Å', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Å', #11, 'Å', #3, '´', #11, + 'Ã', #11, 'Å', #3, 'Å', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Å', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'S', #14, ' ', #14, 'O', #14, ' ', #14, + 'U', #14, ' ', #14, 'N', #14, ' ', #14, 'D', #14, ' ', #14, ' ', #14, + ' ', #14, 'S', #14, ' ', #14, 'E', #14, ' ', #14, 'T', #14, ' ', #14, + 'U', #14, ' ', #14, 'P', #14, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, + 'Å', #15, 'Å', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Å', #15, + 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, '´', #3, ' ', #3, ' ', #3, + ' ', #3, 'T', #13, 'o', #13, 'm', #13, ' ', #13, 'B', #13, 'o', #13, + 'm', #13, 'b', #13, 'e', #13, 'm', #13, ' ', #13, 'H', #13, 'a', #13, + 's', #13, ' ', #13, 'D', #13, 'i', #13, 'g', #13, 'i', #13, 't', #13, + 'a', #13, 'l', #13, ' ', #13, 'S', #13, 'o', #13, 'u', #13, 'n', #13, + 'd', #13, ' ', #13, 'E', #13, 'f', #13, 'f', #13, 'e', #13, 'c', #13, + 't', #13, 's', #13, '-', #13, '-', #13, '-', #13, '-', #13, '-', #13, + '-', #13, '-', #13, '-', #13, '>', #13, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #3, + '´', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, + '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #15, ' ', #15, ' ', #15, + 'A', #13, 'u', #13, 't', #13, 'o', #13, 'd', #13, 'e', #13, 't', #13, + 'e', #13, 'c', #13, 't', #13, 'e', #13, 'd', #13, ' ', #13, 'V', #13, + 'a', #13, 'l', #13, 'u', #13, 'e', #13, 's', #13, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'S', #13, 'e', #13, + 'l', #13, 'e', #13, 'c', #13, 't', #13, 'e', #13, 'd', #13, ' ', #13, + 'V', #13, 'a', #13, 'l', #13, 'u', #13, 'e', #13, 's', #13, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, '1', #13, + '.', #13, ' ', #13, 'B', #13, 'a', #13, 's', #13, 'e', #13, 'I', #13, + 'O', #13, ':', #13, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, + 'Ã', #15, 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, '2', #13, '.', #13, ' ', #13, 'I', #13, 'R', #13, + 'Q', #13, ':', #13, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, '3', #13, '.', #13, + ' ', #13, 'D', #13, 'M', #13, 'A', #13, ':', #13, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #11, '´', #15, '³', #3, + 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, '4', #13, '.', #13, ' ', #13, 'D', #13, 'M', #13, 'A', #13, + '1', #13, '6', #13, ':', #13, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, + '´', #3, ' ', #3, ' ', #3, ' ', #3, '(', #13, 'T', #13, 'y', #13, + 'p', #13, 'e', #13, ' ', #13, 'N', #13, 'u', #13, 'm', #13, 'b', #13, + 'e', #13, 'r', #13, ' ', #13, 'o', #13, 'f', #13, ' ', #13, 'V', #13, + 'a', #13, 'l', #13, 'u', #13, 'e', #13, ' ', #13, 'T', #13, 'o', #13, + ' ', #13, 'C', #13, 'h', #13, 'a', #13, 'n', #13, 'g', #13, 'e', #13, + ',', #13, ' ', #13, 'E', #13, 'n', #13, 't', #13, 'e', #13, 'r', #13, + ' ', #13, 'T', #13, 'o', #13, ' ', #13, 'C', #13, 'o', #13, 'n', #13, + 't', #13, 'i', #13, 'n', #13, 'u', #13, 'e', #13, ')', #13, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #3, + '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, '-', #13, '-', #13, '>', #13, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, 'Å', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Å', #11, 'Å', #15, '´', #11, + 'Ã', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'P', #95, 'R', #95, + 'E', #95, 'S', #95, 'S', #95, ' ', #95, '<', #95, 'E', #95, 'N', #95, + 'T', #95, 'E', #95, 'R', #95, '>', #95, ' ', #95, 'T', #95, 'O', #95, + ' ', #95, 'C', #95, 'O', #95, 'N', #95, 'T', #95, 'I', #95, 'N', #95, + 'U', #95, 'E', #95, ',', #95, ' ', #95, '"', #95, 'Q', #95, '"', #95, + ' ', #95, 't', #95, 'o', #95, ' ', #95, 'q', #95, 'u', #95, 'i', #95, + 't', #95, 'Å', #3, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, + 'Å', #15, 'Å', #11, '´', #3, 'À', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Ù', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11); +{ TheDraw Pascal Screen Image. Date: 09/14/95 } +const + IMAGEDATA5_WIDTH=80; + IMAGEDATA5_DEPTH=25; + IMAGEDATA5_LENGTH=4000; + IMAGEDATA5 : array [1..4000] of Char = ( + 'Ú', #3, 'Â', #11, 'Â', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Â', #11, 'Â', #15, '¿', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'ß', #12, 'ß', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + ' ', #12, 'Ü', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, 'ß', #12, + 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, + 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, + 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, ' ', #12, + ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, + 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, + 'Û', #12, ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + ' ', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, 'Ü', #12, + 'Ü', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, + '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, + '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'A', #8, ' ', #8, ' ', #8, 'ß', #4, 'Û', #4, 'ß', #20, + ' ', #20, 'ß', #18, 'Û', #18, 'ß', #18, ' ', #18, 'ß', #18, 'Û', #18, + 'ß', #2, ' ', #2, ' ', #2, 'S', #8, ' ', #8, 'O', #8, ' ', #8, + 'F', #8, ' ', #8, 'T', #8, ' ', #8, 'W', #8, ' ', #8, 'A', #8, + ' ', #8, 'R', #8, ' ', #8, 'E', #8, ' ', #8, ' ', #8, ' ', #8, + 'P', #8, ' ', #8, 'R', #8, ' ', #8, 'O', #8, ' ', #8, 'D', #8, + ' ', #8, 'U', #8, ' ', #8, 'C', #8, ' ', #8, 'T', #8, ' ', #8, + 'I', #8, ' ', #8, 'O', #8, ' ', #8, 'N', #8, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, 'Å', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Å', #11, 'Å', #3, '´', #11, + 'Ã', #11, 'Å', #3, 'Å', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Å', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'F', #12, ' ', #12, 'I', #12, ' ', #12, + 'N', #12, ' ', #12, 'A', #12, ' ', #12, 'L', #12, ' ', #12, ' ', #12, + ' ', #12, 'C', #12, ' ', #12, 'H', #12, ' ', #12, 'E', #12, ' ', #12, + 'C', #12, ' ', #12, 'K', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, + 'Å', #15, 'Å', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Å', #15, + 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, '´', #3, 'T', #12, 'h', #12, + 'i', #12, 's', #12, ' ', #12, 'i', #12, 's', #12, ' ', #12, 'w', #12, + 'h', #12, 'a', #12, 't', #12, ' ', #12, 'y', #12, 'o', #12, 'u', #12, + ' ', #12, 'h', #12, 'a', #12, 'v', #12, 'e', #12, ' ', #12, 's', #12, + 'e', #12, 'l', #12, 'e', #12, 'c', #12, 't', #12, 'e', #12, 'd', #12, + '.', #12, ' ', #12, ' ', #12, 'T', #12, 'o', #12, ' ', #12, 'f', #12, + 'i', #12, 'x', #12, ' ', #12, 'm', #12, 'i', #12, 's', #12, 't', #12, + 'a', #12, 'k', #12, 'e', #12, 's', #12, ' ', #12, 'b', #12, 'y', #12, + ' ', #12, 'r', #12, 'e', #12, '-', #12, 'e', #12, 'n', #12, 't', #12, + 'e', #12, 'r', #12, 'i', #12, 'n', #12, 'g', #12, ' ', #12, 'p', #12, + 'r', #12, 'e', #12, 's', #12, 's', #12, ' ', #12, '"', #12, 'R', #12, + '"', #12, ' ', #12, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #3, + '´', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, + '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, + 'Ã', #15, 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #11, '´', #15, '³', #3, + 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, + '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #3, + '´', #11, 'Ã', #11, 'Å', #3, '´', #11, 'T', #12, 'h', #12, 'e', #12, + ' ', #12, 's', #12, 'e', #12, 't', #12, 'u', #12, 'p', #12, ' ', #12, + 'w', #12, 'i', #12, 'l', #12, 'l', #12, ' ', #12, 'n', #12, 'o', #12, + 'w', #12, ' ', #12, 'b', #12, 'e', #12, ' ', #12, 's', #12, 'a', #12, + 'v', #12, 'e', #12, 'd', #12, ' ', #12, 'a', #12, 's', #12, ' ', #12, + 't', #12, 'h', #12, 'e', #12, ' ', #12, 'f', #12, 'i', #12, 'l', #12, + 'e', #12, ' ', #12, '"', #12, 'c', #12, 'o', #12, 'n', #12, 'f', #12, + 'i', #12, 'g', #12, '.', #12, 't', #12, 'b', #12, '1', #12, '"', #12, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, 'Å', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Å', #11, 'Å', #15, '´', #11, + 'Ã', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'P', #95, 'R', #95, + 'E', #95, 'S', #95, 'S', #95, ' ', #95, '<', #95, 'E', #95, 'N', #95, + 'T', #95, 'E', #95, 'R', #95, '>', #95, ' ', #95, 'T', #95, 'O', #95, + ' ', #95, 'C', #95, 'O', #95, 'N', #95, 'T', #95, 'I', #95, 'N', #95, + 'U', #95, 'E', #95, ',', #95, ' ', #95, '"', #95, 'Q', #95, '"', #95, + ' ', #95, 't', #95, 'o', #95, ' ', #95, 'q', #95, 'u', #95, 'i', #95, + 't', #95, 'Å', #3, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, + 'Å', #15, 'Å', #11, '´', #3, 'À', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Ù', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11); +{ TheDraw Pascal Screen Image. Date: 09/14/95 } +const + IMAGEDATA6_WIDTH=80; + IMAGEDATA6_DEPTH=25; + IMAGEDATA6_LENGTH=4000; + IMAGEDATA6 : array [1..4000] of Char = ( + 'Ú', #3, 'Â', #11, 'Â', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Â', #11, 'Â', #15, '¿', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'ß', #12, 'ß', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + ' ', #12, 'Ü', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'ß', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, 'ß', #12, + 'ß', #12, 'ß', #12, ' ', #12, 'Û', #12, 'Ü', #12, ' ', #12, 'Ü', #12, + 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, + 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, ' ', #12, + ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Û', #12, 'ß', #12, + 'ß', #12, 'Ü', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, 'ß', #12, ' ', #12, + 'Û', #12, ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, 'Ü', #12, ' ', #12, + ' ', #12, 'Û', #12, 'ß', #12, 'ß', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #12, 'ß', #12, ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, + ' ', #12, 'Û', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, + 'Û', #12, 'Ü', #12, 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, + ' ', #12, ' ', #12, ' ', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, + 'Ü', #12, 'Ü', #12, 'Û', #12, ' ', #12, 'Û', #12, 'Ü', #12, 'Ü', #12, + 'Ü', #12, ' ', #12, 'Û', #12, ' ', #12, ' ', #12, ' ', #12, 'Û', #12, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, + '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, + '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'A', #8, ' ', #8, ' ', #8, 'ß', #4, 'Û', #4, 'ß', #20, + ' ', #20, 'ß', #18, 'Û', #18, 'ß', #18, ' ', #18, 'ß', #18, 'Û', #18, + 'ß', #2, ' ', #2, ' ', #2, 'S', #8, ' ', #8, 'O', #8, ' ', #8, + 'F', #8, ' ', #8, 'T', #8, ' ', #8, 'W', #8, ' ', #8, 'A', #8, + ' ', #8, 'R', #8, ' ', #8, 'E', #8, ' ', #8, ' ', #8, ' ', #8, + 'P', #8, ' ', #8, 'R', #8, ' ', #8, 'O', #8, ' ', #8, 'D', #8, + ' ', #8, 'U', #8, ' ', #8, 'C', #8, ' ', #8, 'T', #8, ' ', #8, + 'I', #8, ' ', #8, 'O', #8, ' ', #8, 'N', #8, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, 'Å', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Å', #11, 'Å', #3, '´', #11, + 'Ã', #11, 'Å', #3, 'Å', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Å', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'F', #9, ' ', #9, 'I', #9, ' ', #9, + 'N', #9, ' ', #9, 'A', #9, ' ', #9, 'L', #9, ' ', #9, ' ', #9, + ' ', #9, 'W', #9, ' ', #9, 'O', #9, ' ', #9, 'R', #9, ' ', #9, + 'D', #9, ' ', #9, 'S', #9, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, + 'Å', #15, 'Å', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, + 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, + 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, + 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, + 'Ä', #3, 'Ä', #11, 'Ä', #15, 'Ä', #11, 'Ä', #3, 'Ä', #11, 'Å', #15, + 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, '´', #3, ' ', #3, ' ', #3, + 'T', #9, 'o', #9, 'm', #9, ' ', #9, 'B', #9, 'o', #9, 'm', #9, + 'b', #9, 'e', #9, 'm', #9, ' ', #9, 'i', #9, 's', #9, ' ', #9, + 'n', #9, 'o', #9, 'w', #9, ' ', #9, 'C', #9, 'o', #9, 'n', #9, + 'f', #9, 'i', #9, 'g', #9, 'u', #9, 'r', #9, 'e', #9, 'd', #9, + '.', #9, ' ', #9, ' ', #9, 'I', #9, 'f', #9, ' ', #9, 'Y', #9, + 'o', #9, 'u', #9, ' ', #9, 'E', #9, 'v', #9, 'e', #9, 'r', #9, + ' ', #9, 'C', #9, 'h', #9, 'a', #9, 'n', #9, 'g', #9, 'e', #9, + ' ', #9, 'C', #9, 'o', #9, 'n', #9, 'f', #9, 'i', #9, 'g', #9, + 'u', #9, 'r', #9, 'a', #9, 't', #9, 'i', #9, 'o', #9, 'n', #9, + 's', #9, ' ', #9, 'F', #9, 'e', #9, 'e', #9, 'l', #9, ' ', #9, + ' ', #9, ' ', #9, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #3, + '´', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'F', #9, 'r', #9, 'e', #9, 'e', #9, ' ', #9, 't', #9, 'o', #9, + ' ', #9, 'R', #9, 'u', #9, 'n', #9, ' ', #9, 'T', #9, 'h', #9, + 'i', #9, 's', #9, ' ', #9, 'P', #9, 'r', #9, 'o', #9, 'g', #9, + 'r', #9, 'a', #9, 'm', #9, ' ', #9, 'A', #9, 'g', #9, 'a', #9, + 'i', #9, 'n', #9, '.', #9, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #3, 'Å', #11, + '´', #15, '³', #3, 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #11, 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, + ' ', #11, ' ', #11, 'D', #12, 'e', #12, 'p', #12, 'e', #12, 'n', #12, + 'd', #12, 'i', #12, 'n', #12, 'g', #12, ' ', #12, 'o', #12, 'n', #12, + ' ', #12, 'W', #12, 'h', #12, 'e', #12, 'n', #12, ' ', #12, 'Y', #12, + 'o', #12, 'u', #12, ' ', #12, 'G', #12, 'e', #12, 't', #12, ' ', #12, + 'T', #12, 'h', #12, 'i', #12, 's', #12, ' ', #12, 'G', #12, 'a', #12, + 'm', #12, 'e', #12, ',', #12, ' ', #12, 'T', #12, 'h', #12, 'e', #12, + ' ', #12, 'A', #12, 'u', #12, 't', #12, 'h', #12, 'o', #12, 'r', #12, + ' ', #12, 'i', #12, 's', #12, ' ', #12, 'e', #12, 'i', #12, 't', #12, + 'h', #12, 'e', #12, 'r', #12, ' ', #12, 'i', #12, 'n', #12, ',', #12, + ' ', #12, 'a', #12, 'b', #12, 'o', #12, 'u', #12, 't', #12, ' ', #12, + 't', #12, 'o', #12, ' ', #12, ' ', #12, 'Ã', #15, 'Å', #11, '´', #3, + 'Ã', #15, 'Å', #11, '´', #3, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 's', #12, 't', #12, 'a', #12, 'r', #12, 't', #12, + ',', #12, ' ', #12, 'o', #12, 'r', #12, ' ', #12, 'f', #12, 'i', #12, + 'n', #12, 'i', #12, 's', #12, 'h', #12, 'e', #12, 'd', #12, ' ', #12, + 'c', #12, 'o', #12, 'l', #12, 'l', #12, 'e', #12, 'g', #12, 'e', #12, + '.', #12, ' ', #12, ' ', #12, 'T', #12, 'h', #12, 'i', #12, 's', #12, + ' ', #12, 'm', #12, 'e', #12, 'a', #12, 'n', #12, 's', #12, ' ', #12, + 'h', #12, 'e', #12, ' ', #12, 'w', #12, 'i', #12, 'l', #12, 'l', #12, + ' ', #12, 'b', #12, 'e', #12, ',', #12, ' ', #12, 'i', #12, 's', #12, + ',', #12, ' ', #12, 'o', #12, 'r', #12, ' ', #12, 'h', #12, 'a', #12, + 's', #12, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + 'Ã', #11, 'Å', #3, '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'b', #12, 'e', #12, + 'e', #12, 'n', #12, ' ', #12, 'i', #12, 'n', #12, ' ', #12, 'd', #12, + 'e', #12, 'b', #12, 't', #12, '.', #12, ' ', #12, ' ', #12, 'P', #12, + 'l', #12, 'e', #12, 'a', #12, 's', #12, 'e', #12, ' ', #12, 'r', #12, + 'e', #12, 'm', #12, 'e', #12, 'm', #12, 'b', #12, 'e', #12, 'r', #12, + ' ', #12, 'h', #12, 'i', #12, 'm', #12, ' ', #12, 'a', #12, 'n', #12, + 'd', #12, ' ', #12, 'r', #12, 'e', #12, 'a', #12, 'd', #12, ' ', #12, + 't', #12, 'h', #12, 'e', #12, ' ', #12, '"', #12, 'R', #12, 'e', #12, + 'g', #12, 'i', #12, 's', #12, 't', #12, 'r', #12, 'a', #12, 't', #12, + 'i', #12, 'o', #12, 'n', #12, ' ', #12, 'I', #12, 'n', #12, 'f', #12, + 'o', #12, '"', #12, ' ', #12, 'Ã', #11, 'Å', #11, '´', #15, '³', #3, + 'Å', #11, '´', #15, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'i', #12, 'n', #12, ' ', #12, 't', #12, 'h', #12, 'e', #12, + ' ', #12, 'g', #12, 'a', #12, 'm', #12, 'e', #12, ' ', #12, 't', #12, + 'o', #12, ' ', #12, 's', #12, 'e', #12, 'e', #12, ' ', #12, 'h', #12, + 'o', #12, 'w', #12, ' ', #12, 't', #12, 'o', #12, ' ', #12, 's', #12, + 'u', #12, 'p', #12, 'p', #12, 'o', #12, 'r', #12, 't', #12, ' ', #12, + 'h', #12, 'i', #12, 'm', #12, '.', #12, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, 'Ã', #11, + 'Å', #15, '´', #11, 'Ã', #11, 'Å', #15, '´', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, 'Ã', #15, 'Å', #11, '´', #3, 'Ã', #15, 'Å', #11, + '´', #3, ' ', #3, ' ', #3, 'A', #10, 'n', #10, 'y', #10, ' ', #10, + 'f', #10, 'u', #10, 'r', #10, 't', #10, 'h', #10, 'e', #10, 'r', #10, + ' ', #10, 'q', #10, 'u', #10, 'e', #10, 's', #10, 't', #10, 'i', #10, + 'o', #10, 'n', #10, 's', #10, ' ', #10, 'c', #10, 'a', #10, 'n', #10, + ' ', #10, 'b', #10, 'e', #10, ' ', #10, 'a', #10, 'n', #10, 's', #10, + 'w', #10, 'e', #10, 'r', #10, 'e', #10, 'd', #10, ' ', #10, 'i', #10, + 'n', #10, ' ', #10, 't', #10, 'h', #10, 'e', #10, ' ', #10, 'd', #10, + 'o', #10, 'c', #10, ' ', #10, 'f', #10, 'i', #10, 'l', #10, 'e', #10, + ' ', #10, 'o', #10, 'r', #10, ' ', #10, 'i', #10, 'n', #10, ' ', #10, + 't', #10, 'h', #10, 'e', #10, ' ', #10, 'g', #10, 'a', #10, 'm', #10, + 'e', #10, '.', #10, ' ', #10, ' ', #10, ' ', #10, 'Ã', #11, 'Å', #3, + '´', #11, 'Ã', #11, 'Å', #3, '´', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, '-', #2, '-', #2, '-', #2, '-', #2, 'T', #2, + 'h', #2, 'a', #2, 'n', #2, 'k', #2, 's', #2, '.', #2, '.', #2, + '.', #2, ' ', #2, 'V', #2, 'i', #2, 'n', #2, 'c', #2, 'e', #2, + ' ', #2, 'W', #2, 'e', #2, 'a', #2, 'v', #2, 'e', #2, 'r', #2, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, 'Ã', #3, 'Å', #11, '´', #15, '³', #3, 'Å', #11, 'Å', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, + 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, + 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, + 'Â', #15, 'Â', #11, 'Â', #3, 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, + 'Â', #11, 'Â', #15, 'Â', #11, 'Â', #3, 'Å', #11, 'Å', #15, '´', #11, + 'Ã', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'P', #95, 'R', #95, + 'E', #95, 'S', #95, 'S', #95, ' ', #95, '<', #95, 'E', #95, 'N', #95, + 'T', #95, 'E', #95, 'R', #95, '>', #95, ' ', #95, 'T', #95, 'O', #95, + ' ', #95, 'C', #95, 'O', #95, 'N', #95, 'T', #95, 'I', #95, 'N', #95, + 'U', #95, 'E', #95, ',', #95, ' ', #95, '"', #95, 'Q', #95, '"', #95, + ' ', #95, 't', #95, 'o', #95, ' ', #95, 'q', #95, 'u', #95, 'i', #95, + 't', #95, 'Å', #3, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, + 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, + 'Å', #11, 'Å', #3, 'Å', #11, 'Å', #15, 'Å', #11, 'Å', #3, 'Å', #11, + 'Å', #15, 'Å', #11, '´', #3, 'À', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, + 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, + 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, + 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, + 'Á', #3, 'Á', #11, 'Á', #15, 'Á', #11, 'Á', #3, 'Ù', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11, + ' ', #11, ' ', #11, ' ', #11, ' ', #11, ' ', #11); diff --git a/tbsauc.tb1 b/tbsauc.tb1 new file mode 100644 index 0000000..e733798 Binary files /dev/null and b/tbsauc.tb1 differ diff --git a/tbsetup.pas b/tbsetup.pas new file mode 100644 index 0000000..9f1a58d --- /dev/null +++ b/tbsetup.pas @@ -0,0 +1,226 @@ +program TOM_BOMBEM_SETUP; + +uses dos,crt,detect; + +{$I tbs1.pas} + +type screentype = array[0..3999] of byte; + +var screen: screentype absolute $B800:0000; + ch:char; + i:byte; + getsettings,redo:boolean; + BLASTER: string; + BASEIO,DMA,IRQ,DMA16:word; + sbsound,soundeffects:byte; + ii:integer; + ff:text; + bobb:word; + +label bob,skipper; + +function gets(x,y,z,a:integer;hex:boolean):word; +var tempst:string; + tempw:word; + codei:integer; +begin + codei:=0; + gotoxy(x,y); + readln(tempst); + if hex then begin val(tempst,bobb,codei); insert('$',tempst,1); end; + val(tempst,tempw,codei); + if (tempw>=a) or (tempw<=z) then tempw:=255; + if codei<>0 then tempw:=255; + gets:=tempw; +end; + +function UpcaseStr(Str: string): string; + var i: byte; + Temp: string; + + begin + Temp[0] := Str[0]; + for i := 1 to Length(Str) do Temp[i] := Upcase(Str[i]); + UpcaseStr := Temp; + end; + +function getsetting(str:string;id:char;hex:boolean):word; + var Temp : string; + Num : word; + Code : integer; + begin + Temp := Str; + if Pos(ID, Temp) <> 0 then begin + Delete(Temp, 1, Pos(ID, Temp)); + Delete(Temp, Pos(' ', Temp), 255); + if Hex then begin val(temp, bobb, code); Insert('$', Temp, 1); end; + Val(Temp, Num, Code); + if Code = 0 then GetSetting := Num + else GetSetting := $FF; + end + else GetSetting := $FF; +end; + +procedure quit; +begin + halt(0); +end; + +begin +{OPENING} + clrscr; + move(imagedata1,screen,4000); +bob: + redo:=false; +{REQUIREMENTS} + clrscr; + move(imagedata2,screen,4000); + repeat + repeat until keypressed; + ch:=readkey; + if upcase(ch)='Q' then quit; + until ch=#13; +{Ask About SoundBlaster Sound} + clrscr; + sbsound:=0; + move(imagedata4,screen,4000); + for i:=11 to 20 do begin + gotoxy(4,i); + writeln(' '); + end; + textcolor(13); + gotoxy(4,12); write('Do You Want To Have Sound Effects?'); + gotoxy(6,13); write('(y/n)---->'); + gotoxy(17,13); + textcolor(3); + repeat + repeat until keypressed; + ch:=readkey; + if (upcase(ch)='Y') or (upcase(ch)='N') then begin + if upcase(ch)='Y' then soundeffects:=1; + if upcase(ch)='N' then soundeffects:=0; + write(ch); + gotoxy(17,13); + end; + if upcase(ch)='Q' then quit; + until ch=#13; + if soundeffects=0 then goto skipper; +{check if want soundbalster} + textcolor(13); + gotoxy(4,16); write('Do You Have A Soundblaster Card?'); + gotoxy(6,17); write('(y/n)---->'); + gotoxy(17,17); + textcolor(3); + repeat + repeat until keypressed; + ch:=readkey; + if (upcase(ch)='Y') or (upcase(ch)='N') then begin + if upcase(ch)='Y' then sbsound:=1; + if upcase(ch)='N' then sbsound:=0; + write(ch); + gotoxy(17,17); + end; + if upcase(ch)='Q' then quit; + until ch=#13; + +{If Soundblaster, then configure it} + if (sbsound=1) then begin + clrscr; + move(imagedata4,screen,4000); + BLASTER := UpcaseStr(GetEnv('BLASTER')); + BaseIO := GetSetting(BLASTER, 'A', true); {Hex} + IRQ := GetSetting(BLASTER, 'I', false); {Decimal} + DMA := GetSetting(BLASTER, 'D', false); {Decimal} + DMA16 := GetSetting(BLASTER, 'H', false); {Decimal} + + + ii:=-1; + repeat + ii:=ii+22; + textcolor(3); + gotoxy(ii,14); write(bobb); + gotoxy(ii,15); write(irq); + gotoxy(ii,16); write(dma); + gotoxy(ii,17); write(dma16); + + if BaseIO = $FF then begin gotoxy(ii,14); write('---'); end; + if IRQ = $FF then begin gotoxy(ii,15); write('---'); end; + if DMA = $FF then begin gotoxy(ii,16); write('---'); end; + if DMA16 = $FF then begin gotoxy(ii,17); write('---'); end; + until ii>=43; + + gotoxy(14,20); + repeat + gotoxy(14,20); + repeat until keypressed; + ch:=readkey; + + if (ch>'0') and (ch<'5') then begin + case ch of + '1':begin gotoxy(43,14); writeln(' '); + baseio:=gets(43,14,100,400,true); + gotoxy(43,14); writeln(' '); + gotoxy(43,14); write(bobb); + end; + '2':begin gotoxy(43,15); writeln(' '); + irq:=gets(43,15,2,12,false); + gotoxy(43,15); writeln(' '); + gotoxy(43,15); write(irq); + end; + '3':begin gotoxy(43,16); writeln(' '); + dma:=gets(43,16,0,100,false); + gotoxy(43,16); writeln(' '); + gotoxy(43,16); write(dma); + end; + '4':begin gotoxy(43,17); writeln(' '); + dma16:=gets(43,17,0,100,false); + gotoxy(43,17); writeln(' '); + gotoxy(43,17); write(dma16); + end; + end; + end; + if upcase(ch)='Q' then quit; + until ch=#13; + end; +{Check for mistakes} + +skipper: + clrscr; + move(imagedata5,screen,4000); + gotoxy(16,12); + textcolor(3); + + if soundeffects=1 then begin + write('Sound Effects : '); + if sbsound=1 then writeln('Sound Blaster') + else writeln('No Soundblaster'); + end + else writeln('No Sound Effects'); + + if (sbsound=1) then begin + gotoxy(16,14); + writeln('BaseIo:',bobb); + gotoxy(16,15); + writeln('IRQ: ',irq); + gotoxy(16,16); + writeln('DMA: ',dma); + end; + repeat + repeat until keypressed; + ch:=readkey; + if upcase(ch)='R' then begin redo:=true; ch:=#13; end; + if upcase(ch)='Q' then quit; + until ch=#13; + if redo then goto bob; + assign(ff,'config.tb1'); + rewrite(ff); + writeln(ff,soundeffects); + writeln(ff,sbsound); + writeln(ff,baseio); + writeln(ff,irq); + writeln(ff,dma); + close(ff); + clrscr; + move(imagedata6,screen,4000); + gotoxy(1,24); +end. \ No newline at end of file diff --git a/tbshapes.tb1 b/tbshapes.tb1 new file mode 100644 index 0000000..4575304 Binary files /dev/null and b/tbshapes.tb1 differ diff --git a/tbside.pas b/tbside.pas deleted file mode 100644 index 956e41b..0000000 --- a/tbside.pas +++ /dev/null @@ -1,61 +0,0 @@ -uses crt,vmwgraph; -var i,j:integer; - palf:text; - temp:array[0..3] of byte; -procedure makehole(y:integer); -begin - for i:=10 to 75 do line(239+i,y,239+i,y+9,0,vga); - line(249,y,314,y,24,vga); - line(249,y+10,313,y+10,18,vga); - line(249,y,249,y+9,24,vga); - line(314,y+1,314,y+10,18,vga); -end; -begin - setmcga; - 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); - for i:=240 to 319 do line(i,0,i,199,19,vga); - line(240,0,240,199,18,vga); - line(240,0,319,0,18,vga); - line(319,0,319,199,24,vga); - line(241,199,319,199,24,vga); - outtextxy('SCORE',241,1,127,0,vga,false); - outtextxy('SCORE',242,2,143,0,vga,false); - makehole(10); - outtextxy('00001233',251,12,12,0,vga,false); - outtextxy('HI-SCORE',241,21,127,0,vga,false); - outtextxy('HI-SCORE',242,22,143,0,vga,false); - makehole(30); - outtextxy('12345672',251,32,12,0,vga,false); - outtextxy('LEVEL',241,41,127,0,vga,false); - outtextxy('LEVEL',242,42,143,0,vga,false); - makehole(50); - outtextxy('12345675',251,52,12,0,vga,false); - outtextxy('SHIELDS',241,61,127,0,vga,false); - outtextxy('SHIELDS',242,62,143,0,vga,false); - makehole(70); - for i:=0 to 63 do line(250+i,71,250+i,79,((i div 4)+32),vga); - - outtextxy('WEAPONS',241,81,127,0,vga,false); - outtextxy('WEAPONS',242,82,143,0,vga,false); - makehole(90); - for i:=0 to 65 do line(249+i,111,249+i,189,0,vga); - line(249,111,249,189,24,vga); - line(315,111,315,189,18,vga); - line(249,111,315,111,24,vga); - line(249,189,315,189,18,vga); - - outtextxy(' VMW ',251,114,15,0,vga,false); - outtextxy('F1-HELP ',251,124,15,0,vga,false); - outtextxy('ESC-QUIT',251,135,15,0,vga,false); - outtextxy('F2-SAVE ',251,145,15,0,vga,false); - - readln; - - settext; -end. \ No newline at end of file diff --git a/tbsobj.tb1 b/tbsobj.tb1 new file mode 100644 index 0000000..ba911af Binary files /dev/null and b/tbsobj.tb1 differ diff --git a/tbsound.pas b/tbsound.pas new file mode 100644 index 0000000..b56d1e5 --- /dev/null +++ b/tbsound.pas @@ -0,0 +1,204 @@ +{ SMIX is Copyright 1995 by Ethan Brodsky. All rights reserved. } +program MixTest; + uses + CRT, + Detect, + SMix; + const + XMSRequired = 190; {XMS memory required to load the sounds (KBytes) } + SharedEMB = true; + {TRUE: All sounds will be stored in a shared EMB} + {FALSE: Each sound will be stored in a separate EMB} + NumSounds = 8; + var + BaseIO: word; IRQ, DMA, DMA16: byte; + Sound: array[0..NumSounds-1] of PSound; + i: byte; + Counter: LongInt; + InKey: char; + Stop: boolean; + Num: byte; + Temp: integer; + OldExitProc: pointer; + + function HexW(W: word): string; {Word} + const + HexChars: array [0..$F] of Char = '0123456789ABCDEF'; + begin + HexW := + HexChars[(W and $F000) shr 12] + + HexChars[(W and $0F00) shr 8] + + HexChars[(W and $00F0) shr 4] + + HexChars[(W and $000F)]; + end; + + procedure OurExitProc; far; + {If the program terminates with a runtime error before the extended memory} + {is deallocated, then the memory will still be allocated, and will be lost} + {until the next reboot. This exit procedure is ALWAYS called upon program} + {termination and will deallocate extended memory if necessary. } + var + i: byte; + begin + for i := 0 to NumSounds-1 do + if Sound[i] <> nil then FreeSound(Sound[i]); + if SharedEMB then ShutdownSharing; + ExitProc := OldExitProc; {Chain to next exit procedure} + end; + + procedure Init; + begin + Randomize; + writeln; + writeln('-------------------------------------------'); + writeln('Sound Mixing Library v1.27 by Ethan Brodsky'); + if not(GetSettings(BaseIO, IRQ, DMA, DMA16)) + then + begin + writeln('Error initializing: Invalid or non-existant BLASTER environment variable'); + Halt(1); {BLASTER environment variable invalid or non-existant} + end + else + begin + if not(InitSB(BaseIO, IRQ, DMA, DMA16)) + then + begin + writeln('Error initializing sound card'); + writeln('Incorrect base IO address, sound card not installed, or broken'); + Halt(2); {Sound card could not be initialized} + end; + if SixteenBit + then writeln('BaseIO=', HexW(BaseIO), 'h IRQ', IRQ, ' DMA8=', DMA, ' DMA16=', DMA16) + else writeln('BaseIO=', HexW(BaseIO), 'h IRQ', IRQ, ' DMA8=', DMA); + end; + write('DSP version ', DSPVersion:0:2, ': '); + if SixteenBit + then write('16-bit, ') + else write('8-bit, '); + if AutoInit + then writeln('Auto-initialized') + else writeln('Single-cycle'); + if not(InitXMS) + then + begin + writeln('Error initializing extended memory'); + writeln('HIMEM.SYS must be installed'); + Halt(3); {XMS driver not installed} + end + else + begin + writeln('Extended memory succesfully initialized'); + write('Free XMS memory: ', GetFreeXMS, 'k '); + if GetFreeXMS < XMSRequired + then + begin + writeln('Insufficient free XMS'); + writeln('You are probably running MIXTEST from the protected mode IDE'); + writeln('Run it from the command line or read the documentation'); + Halt(4); {Insufficient XMS memory} + end + else + begin + writeln('Loading sounds'); + if SharedEMB then InitSharing; + + OpenSoundResourceFile('sounds.tb1'); + LoadSound(Sound[0], 'CLICK'); + LoadSound(Sound[1], 'AHH'); + LoadSound(Sound[2], 'ZOOP'); + LoadSound(Sound[3], 'KAPOW'); + LoadSound(Sound[4], 'CC'); + LoadSound(Sound[5], 'BONK'); + LoadSound(sound[6], 'OW'); + LoadSound(sound[7], 'SCREAM'); + CloseSoundResourceFile; + + {OpenSoundResourceFile('MIXTEST.SND'); + LoadSound(Sound[0], 'JET'); + LoadSound(Sound[1], 'GUN'); + LoadSound(Sound[2], 'CRASH'); + LoadSound(Sound[3], 'CANNON'); + LoadSound(Sound[4], 'LASER'); + LoadSound(Sound[5], 'GLASS'); + LoadSOund(Sound + CloseSoundResourceFile;} + + OldExitProc := ExitProc; + ExitProc := @OurExitProc; + end + end; + InitMixing; + writeln; + end; + + procedure Shutdown; + begin + ShutdownMixing; + ShutdownSB5; + + for i := 0 to NumSounds-1 do + FreeSound(Sound[i]); + if SharedEMB then ShutdownSharing; + writeln; + end; + + begin + Init; + + + + writeln('Press:'); + writeln(' 0) Click'); + writeln(' 1) Ahh... Mr. Bombem'); + writeln(' 2) Zhhip'); + writeln(' 3) Explosion'); + writeln(' 4) Cachoo'); + writeln(' 5) Bonk'); + writeln(' 6) Ow'); + writeln(' 7) ARRRGH!!!'); + writeln(' Q) Quit'); + + Stop := false; + Counter := 0; + + repeat + {Display counters} + Inc(Counter); + write(Counter:8, IntCount:8, VoiceCount:4); + GotoXY(1, WhereY); + + + {Maybe start a random sound} + {if Random(64000) = 0 + then + begin + Num := Random(NumSounds-1)+1; + StartSound(Sound[Num], Num, false); + end;} + + {Start a sound if a key is pressed} + if KeyPressed + then + begin + InKey := ReadKey; + case InKey + of + '0'..'9': + begin + Val(InKey, Num, Temp); + if Num < NumSounds + then + StartSound(Sound[Num], Num, false); + end; + else + Stop := true; + end; + end; + until Stop; + + writeln; + + + + Shutdown; + end. diff --git a/tbtract.tb1 b/tbtract.tb1 new file mode 100644 index 0000000..ae41140 Binary files /dev/null and b/tbtract.tb1 differ diff --git a/tviewscr.tb1 b/tviewscr.tb1 new file mode 100644 index 0000000..0d39b9f Binary files /dev/null and b/tviewscr.tb1 differ diff --git a/viewscr.tb1 b/viewscr.tb1 new file mode 100644 index 0000000..0d39b9f Binary files /dev/null and b/viewscr.tb1 differ diff --git a/vmwfan.tb1 b/vmwfan.tb1 new file mode 100644 index 0000000..7fe9430 Binary files /dev/null and b/vmwfan.tb1 differ diff --git a/vmwgraph.pas b/vmwgraph.pas new file mode 100644 index 0000000..0f3d7b5 --- /dev/null +++ b/vmwgraph.pas @@ -0,0 +1,744 @@ +unit VMWgraph; +{$X+} {$G+} +INTERFACE + +const charset:array[0..255,0..7] of byte= + ((0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), +{32' '}(0,0,0,0,0,0,0,0),($78,$78,$78,$30,$30,$00,$30,$00),($34,$34,$00,$00,$00,$00,$00,$00), +{35'#'}($28,$7C,$28,$28,$7C,$28,$28,$00),($10,$7C,$50,$7C,$14,$7C,$10,$00), +{37'$'}($00,$62,$64,$08,$10,$26,$46,$00),($00,$38,$40,$20,$54,$48,$34,$00), +{39'''}($30,$30,$10,$00,$00,$00,$00,$00),($08,$10,$20,$20,$20,$10,$08,$00), +{41')'}($20,$10,$08,$08,$08,$10,$20,$00),($92,$54,$38,$FE,$38,$54,$92,$00), +{43'+'}($00,$10,$10,$7C,$10,$10,$00,$00),($00,$00,$00,$00,$00,$10,$10,$20), +{45'-'}($00,$00,$00,$7C,$00,$00,$00,$00),($00,$00,$00,$00,$00,$30,$30,$00), +{47'/'}($02,$06,$0C,$18,$30,$E0,$C0,$00),($FE,$C6,$CE,$DA,$F2,$E2,$FE,$00), +{49'1'}($30,$70,$B0,$30,$30,$30,$FC,$00),($78,$84,$08,$10,$20,$40,$FC,$00), +{51'3'}($78,$84,$04,$3C,$04,$84,$78,$00),($C4,$C4,$C4,$FC,$04,$04,$04,$00), +{53'5'}($FC,$C0,$C0,$F8,$04,$04,$F8,$00),($7C,$C4,$C0,$F8,$C4,$C4,$F8,$00), +{55'7'}($FC,$84,$08,$10,$10,$20,$20,$00),($78,$C4,$C4,$78,$C4,$C4,$78,$00), +{57'9'}($7C,$C4,$C4,$7C,$04,$04,$04,$00),($00,$00,$30,$30,$00,$30,$30,$00), +{59';'}($00,$00,$30,$30,$00,$10,$10,$20),($18,$30,$60,$C0,$60,$30,$18,$00), +{61'='}($00,$00,$7C,$00,$7C,$00,$00,$00),($C0,$60,$30,$18,$30,$60,$C0,$00), +{63'?'}($78,$CC,$98,$30,$30,$00,$30,$00),($FC,$84,$BC,$A4,$BC,$80,$FC,$00), +{65'A'}($FE,$C2,$C2,$FE,$C2,$C2,$C2,$00),($F8,$C8,$C8,$FC,$C2,$C2,$FC,$00), +{67'C'}($FE,$C2,$C0,$C0,$C0,$C0,$FE,$00),($F8,$C4,$C2,$C2,$C2,$C2,$FC,$00), +{69'E'}($FE,$C0,$C0,$FE,$C0,$C0,$FE,$00),($FE,$C0,$C0,$FE,$C0,$C0,$C0,$00), +{71'G'}($FE,$C2,$C0,$CE,$C2,$C2,$FE,$00),($C2,$C2,$C2,$FE,$C2,$C2,$C2,$00), +{73'I'}($FE,$30,$30,$30,$30,$30,$FE,$00),($0E,$02,$02,$02,$C2,$64,$38,$00), +{75'K'}($C2,$C2,$CC,$F0,$CC,$C2,$C2,$00),($C0,$C0,$C0,$C0,$C0,$C0,$FE,$00), +{77'M'}($C2,$E6,$EE,$DA,$D2,$C2,$C2,$00),($C2,$E2,$F2,$DA,$CA,$C6,$C6,$00), +{79'O'}($FE,$C2,$C2,$C2,$C2,$C2,$FE,$00),($FE,$C2,$C2,$FE,$C0,$C0,$C0,$00), +{81'Q'}($FE,$C2,$C2,$C2,$CA,$C6,$FE,$00),($FE,$C2,$C2,$FE,$C8,$C4,$C2,$00), +{83'S'}($FE,$C0,$C0,$FE,$02,$82,$FE,$00),($FE,$30,$30,$30,$30,$30,$30,$00), +{85'U'}($C2,$C2,$C2,$C2,$C2,$C2,$FE,$00),($C2,$C2,$C4,$64,$68,$38,$30,$00), +{87'W'}($C2,$C2,$C2,$D2,$F2,$FA,$C6,$00),($C2,$C6,$3C,$18,$3C,$C6,$C2,$00), +{89'Y'}($C2,$C2,$64,$68,$30,$30,$30,$00),($FE,$04,$08,$30,$60,$C0,$FE,$00), +{91'['}($F8,$C0,$C0,$C0,$C0,$C0,$F8,$00),($C0,$E0,$30,$18,$0C,$06,$02,$00), +{93']'}($1E,$02,$02,$02,$02,$02,$1E,$00),($10,$28,$44,$00,$00,$00,$00,$00), +{95'_'}($00,$00,$00,$00,$00,$00,$FF,$00),($08,$04,$02,$00,$00,$00,$00,$00), +{97'a'}($00,$00,$7C,$04,$7C,$44,$7E,$00),($C0,$40,$40,$7C,$44,$44,$FC,$00), +{99'c'}($00,$00,$00,$7C,$40,$40,$7C,$00),($06,$04,$04,$7C,$44,$44,$7E,$00), +{101e'}($00,$00,$7C,$44,$7C,$40,$7C,$00),($10,$28,$20,$70,$20,$20,$70,$00), +{103g'}($00,$00,$04,$7C,$44,$7C,$04,$7C),($E0,$40,$40,$7C,$44,$44,$EE,$00), +{105i'}($00,$10,$00,$30,$10,$10,$78,$00),($00,$04,$00,$0C,$04,$04,$44,$3C), +{107k'}($C0,$40,$40,$58,$60,$50,$48,$00),($30,$10,$10,$10,$10,$10,$78,$00), +{109m'}($00,$00,$00,$E8,$54,$54,$54,$00),($00,$00,$00,$F0,$48,$48,$48,$00), +{111o'}($00,$00,$00,$7C,$44,$44,$7C,$00),($00,$00,$00,$FC,$44,$7C,$40,$E0), +{113q'}($00,$00,$00,$7E,$44,$7C,$04,$0E),($00,$00,$00,$28,$34,$20,$70,$00), +{115s'}($00,$00,$7C,$40,$7C,$04,$7C,$00),($00,$20,$70,$20,$20,$28,$38,$00), +{117u'}($00,$00,$00,$C8,$48,$48,$7C,$00),($00,$00,$00,$44,$44,$28,$10,$00), +{119w'}($00,$00,$00,$42,$42,$5A,$66,$00),($00,$00,$66,$34,$18,$34,$66,$00), +{121y'}($00,$00,$00,$44,$44,$7C,$04,$7C),($00,$00,$7C,$08,$10,$20,$7C,$00), +{123|'}($30,$20,$20,$40,$20,$20,$30,$00),($10,$10,$10,$00,$10,$10,$10,$00), +{125~'}($18,$08,$08,$04,$08,$08,$18,$00),($3A,$6C,$00,$00,$00,$00,$00,$00), +{127''}($00,$54,$2A,$54,$2A,$54,$2A,$00), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0), + (0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0)); +CONST VGA = $a000; + +var unfadered:array[0..255] of byte; + unfadeblue:array[0..255] of byte; + unfadegreen:array[0..255] of byte; + +Procedure SetMCGA; +Procedure SetText; { This procedure returns you to text mode. } +Procedure Cls (Col : Byte; Where:word); +Procedure Putpixel (X,Y : Integer; Col : Byte; where:word); +function getpixel(x,y,where:word):byte; +Procedure Pal(Col,R,G,B : Byte); +Procedure GetPal(Col : Byte; Var R,G,B : Byte); +procedure egaputpix(x,y,col,where:word); +procedure WaitRetrace; +procedure flip(source,dest:Word); +procedure outtext(x,y,rowochar,col,background:integer;num:byte;where:word;overwrite:boolean); +procedure egaouttext(x,y,col:integer;num:byte;where:word;overwrite:boolean); +procedure outtextxy(st:string;x,y,rowochar,col,background:integer;where:word;overwrite:boolean); +procedure egaouttextxy(st:string;x,y,col:integer;where:word;overwrite:boolean); +function sgn(a:real):integer; +procedure line(a,b,c,d,col:integer;where:word); +procedure fade; +procedure unfade; +procedure SavePicSuperPacked(x1,y1,x2,y2,maxcolors:integer;filename:string); +function loadpicsuperpacked(x1,y1:integer;where:word;fil:string):byte; +procedure box(x1,y1,x2,y2,col:integer;where:word); +procedure vdelay(howlong:integer); + +IMPLEMENTATION + +Procedure SetMCGA; { This procedure gets you into 320x200x256 mode. } +BEGIN + asm + mov ax,0013h + int 10h + end; +END; + +Procedure SetText; { This procedure returns you to text mode. } +BEGIN + asm + mov ax,0003h + int 10h + end; +END; + +Procedure Cls (Col : Byte; Where:word); + { This clears the screen to the specified color } +BEGIN + asm + push es + mov cx, 32000; + mov es,[where] + xor di,di + mov al,[col] + mov ah,al + rep stosw + pop es + End; +END; + +Procedure Putpixel (X,Y : Integer; Col : Byte; where:word); + { This puts a pixel on the screen by writing directly to memory. } +BEGIN + Asm + push ds + push es + mov ax,[where] + mov es,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} + xor al,al + mov ah, [Col] + mov es:[di],ah + pop es + pop ds + End; +END; + +function getpixel(x,y,where:word):byte; +begin + getpixel:=mem[where:x+(y*320)]; +end; + +Procedure Pal(Col,R,G,B : Byte); + { This sets the Red, Green and Blue values of a certain color } +Begin + asm + mov dx,3c8h + mov al,[col] + out dx,al + inc dx + mov al,[r] + out dx,al + mov al,[g] + out dx,al + mov al,[b] + out dx,al + end; +End; + +procedure WaitRetrace; assembler; + { This waits for a vertical retrace to reduce snow on the screen } +label + l1, l2; +asm + mov dx,3DAh +l1: + in al,dx + and al,08h + jnz l1 +l2: + in al,dx + and al,08h + jz l2 +end; + +Procedure GetPal(Col : Byte; Var R,G,B : Byte); + { This gets the Red, Green and Blue values of a certain color } +Var + rr,gg,bb : Byte; +Begin + asm + mov dx,3c7h + mov al,col + out dx,al + + add dx,2 + + in al,dx + mov [rr],al + in al,dx + mov [gg],al + in al,dx + mov [bb],al + end; + r := rr; + g := gg; + b := bb; +end; + +procedure egaputpix(x,y,col,where:word); + +VAR red,blue,green,inte,P1,P2:byte; + col2:word; + +procedure semiput(x,y:word;col,p1,p2:byte;where:word); +var temp:word; + q3:word; + old,q1,q2,qz:byte; + label looper,loop2,loop3,looper2; +begin + asm + mov ax,where {Set Where screen is} + mov es,ax + mov ax,y {The following is 80*y} + mov dx,y {which makes (640*y)/8 uneccessary} + shl ax,6 + shl dx,4 + add ax,dx + mov temp,ax {saves temporary address} + mov bx,x {gets X DIV 8 and adds it to temp} + shl bx,5 + mov dl,bh + mov dh,00 + sub bh,bh + shr bx,5 + mov q2,bl {gets X MOD 8 for actual pixel} + mov ax,temp + add ax,dx + mov temp,ax + {inegaports} + mov dx,$3Ce {Sets us bitplane for input} + mov al,4 + out dx,al + mov dx,$3Cf + mov al,p1 + out dx,al + {old} {Gets old pixel values} + mov di,temp + mov al,es:[di] + mov ah,00 + mov cl,q2 + mov ch,00 + JCXZ loop2 + looper: + shl ax,1 + loop looper + loop2: + mov dh,ah + mov ah,00 + shl ax,1 + mov ah,col + shr ax,1 + mov ah,dh + mov cl,q2 + mov ch,00 + jcxz loop3 + looper2: + shr ax,1 + loop looper2 + loop3: + + mov qz,al + {Logically gets old and new} + {out} + mov dx,$3C4 + mov al,2 + out dx,al + mov dx,$3C5 + mov al,p2 + out dx,al {rewrites pixel} + {mem} + mov di,temp + mov al,qz + mov es:[di],al + + end; +end; +begin + asm + mov bx,col + shl bx,4 + shl bx,1 + mov inte,bh + sub bh,bh + shl bx,1 + mov red,bh + sub bh,bh + shl bx,1 + mov green,bh + sub bh,bh + shl bx,1 + mov blue,bh + end; + p1:=0; p2:=1; col2:=0; + if blue= 1 then col2:=1; + semiput(x,y,col2,p1,p2,vga); + p1:=1; p2:=2; col2:=0; + if green=1 then col2:=1; + semiput(x,y,col2,p1,p2,vga); + p1:=2; p2:=4; col2:=0; + if red=1 then col2:=1; + semiput(x,y,col2,p1,p2,vga); + p1:=3; p2:=8; col2:=0; + if inte=1 then col2:=1; + semiput(x,y,col2,p1,p2,vga); + +end; + + + +procedure flip(source,dest:Word); + { This copies the entire screen at "source" to destination } +begin + asm + push ds + mov ax, [Dest] + mov es, ax + mov ax, [Source] + mov ds, ax + xor si, si + xor di, di + mov cx, 32000 + rep movsw + pop ds + end; +end; + + + +procedure outtext(x,y,rowochar,col,background:integer;num:byte;where:word;overwrite:boolean); +label l0105; {^-15=all, 0-7= that row} +var n,k,l,o,min,max,qwerty:byte; +begin + if rowochar=15 then begin min:=0; max:=7; end + else begin min:=rowochar; max:=rowochar; end; + qwerty:=0; + + for n:=min to max do begin {Loop through charachter} + if rowochar=15 then qwerty:=n; + o:=charset[num,n]; {array in Hex} + for l:=0 to 7 do begin + asm {Hex to binary decoder} + mov bl,o {mov hex into o} + mov dl,00 + rcl bl,1 {Rotate O left into carry} + adc dl,00h {Add the carry into dl} + mov o,bl {Save O} + mov k,dl {Copy Dl (if carry) into k} + + end; + if k=1 then putpixel(x+l,y+qwerty,col,where) + else if overwrite then putpixel(x+l,y+qwerty,background,where); + + end; + end; +end; +procedure egaouttext(x,y,col:integer;num:byte;where:word;overwrite:boolean); +label l0105; +var n,k,l,o:byte; +begin + for n:=0 to 7 do begin {Loop through charachter} + o:=charset[num,n]; {array in Hex} + for l:=0 to 7 do begin + asm {Hex to binary decoder} + mov bl,o {mov hex into o} + mov dl,00 + rcl bl,1 {Rotate O left into carry} + adc dl,00h {Add the carry into dl} + mov o,bl {Save O} + mov k,dl {Copy Dl (if carry) into k} + end; + if k=1 then egaputpix(x+l,y+n,col,where) + else if overwrite then egaputpix(x+l,y+n,0,where); + + end; + end; +end; +procedure outtextxy(st:string;x,y,rowochar,col,background:integer;where:word;overwrite:boolean); +var l,len,i,xadd,yadd:integer; +begin + xadd:=0; yadd:=y; + len:=length(St); + l:=1; + repeat + outtext(x+xadd,yadd,rowochar,col,background,ord(st[l]),where,overwrite); + inc(xadd,8); + inc(l,1); + if (xadd>311) then begin xadd:=0; inc(yadd,8) end; + if (ord(st[l]))=13 then begin xadd:=0; inc(yadd,8); inc(l,1); end; + until l>=(len+1); + +end; +procedure egaouttextxy(st:string;x,y,col:integer;where:word;overwrite:boolean); +var l,len,i,xadd,yadd:integer; +begin + xadd:=0; yadd:=y; + len:=length(St); + l:=1; + repeat + egaouttext(x+xadd,yadd,col,ord(st[l]),where,overwrite); + inc(xadd,8); + inc(l,1); + if (xadd>311) then begin xadd:=0; inc(yadd,8) end; + if (ord(st[l]))=13 then begin xadd:=0; inc(yadd,8); inc(l,1); end; + until l=(len+1); + +end; +function sgn(a:real):integer; +begin + if a>0 then sgn:=+1; + if a<0 then sgn:=-1; + if a=0 then sgn:=0; +end; + +procedure line(a,b,c,d,col:integer;where:word); +var u,s,v,d1x,d1y,d2x,d2y,m,n:real; + i:integer; +begin + u:= c - a; + v:= d - b; + d1x:= SGN(u); + d1y:= SGN(v); + d2x:= SGN(u); + d2y:= 0; + m:= ABS(u); + n := ABS(v); + IF NOT (M>N) then + BEGIN + d2x := 0 ; + d2y := SGN(v); + m := ABS(v); + n := ABS(u); + END; + s := INT(m / 2); + FOR i := 0 TO round(m) DO + BEGIN + putpixel(a,b,col,where); + s := s + n; + IF not (s0 then dec(r); + if g>0 then dec(g); + if b>0 then dec(b); + pal(j,r,g,b); + end; + end; +end; + +procedure unfade; +var i,j:integer; + r,g,b:byte; +begin + for i:=0 to 63 do begin + for j:=0 to 255 do begin + getpal(j,r,g,b); + if r=253 then writebuff2disk; + buffer[buffpointer]:=byte1; + buffer[buffpointer+1]:=byte2; + buffer[buffpointer+2]:=byte3; + inc(buffpointer,3); +end; + + + +begin + header:='PAINTPROV4.00'; + assign(f,filename); + rewrite(f,256); + buffpointer:=0; + for i:=1 to 13 do buffer[i-1]:=ord(header[i]); + buffpointer:=13; + xsize:=abs(x2-x1); + ysize:=abs(y2-y1); + integer23bytes(xsize,ysize); + writetemps2buffer; + integer23bytes(maxcolors,0); + writetemps2buffer; + + + for y:=y1 to y2 do begin + oldcol:=getpixel(x1,y,vga); numacross:=1; + for x:=(x1+1) to x2 do begin + col:=getpixel(x,y,vga); + if col=oldcol then inc(numacross) + else begin + integer23bytes(oldcol,numacross); + writetemps2buffer; + numacross:=1; + end; + oldcol:=col; + end; + integer23bytes(col,numacross); + writetemps2buffer; + end; + for x:=buffpointer to 254 do buffer[x]:=255; + buffer[255]:=90; + writebuff2disk; + close(f); +end; + +function loadpicsuperpacked(x1,y1:integer;where:word;fil:string):byte; + +var buffer:array[0..255] of byte; + f:file; + col,x,y,xsize,ysize,buffpointer,i,oldcol, + tempint1,tempint2,numacross:integer; + header:string; + lastread,done:boolean; + temp7:string; + +procedure readbuffer; +begin + blockread(f,buffer,1); + if buffer[255]=90 then lastread:=true; +end; + +procedure sixbytes2twoint; +var temp1,temp2,temp3:byte; + int1,int2:integer; +begin + if buffpointer>=253 then begin + readbuffer; + buffpointer:=0; + end; + if not done then begin + temp1:=buffer[buffpointer]; + temp2:=buffer[buffpointer+1]; + temp3:=buffer[buffpointer+2]; + if (temp1=255) and (temp2=255) and (temp3=255) then + done:=true; + inc(buffpointer,3); + asm + mov ah,temp1 + mov al,temp2 + shr ax,1 + shr ax,1 + shr ax,1 + shr ax,1 + mov int1,ax + mov ah,temp2 + mov al,temp3 + shl ah,1 + shl ah,1 + shl ah,1 + shl ah,1 + shr ah,1 + shr ah,1 + shr ah,1 + shr ah,1 + mov int2,ax + end; + tempint1:=int1; + tempint2:=int2; +end; +end; +label ender; +begin + done:=false; + header:='PAINTPROV4.00'; + assign(f,fil); + reset(f,256); + readbuffer; + buffpointer:=0; + temp7:=header; + for i:=1 to 13 do temp7[i]:=chr(buffer[i-1]); + if temp7<>header then begin + loadpicsuperpacked:=01; + exit; + end; + buffpointer:=13; + sixbytes2twoint; + xsize:=tempint1; + ysize:=tempint2; + sixbytes2twoint; + + x:=x1; + y:=y1; +repeat + sixbytes2twoint; + if done then goto ender; + col:=tempint1; + numacross:=tempint2; + for i:=x to (x+numacross) do putpixel(i,y,col,where); + if (x+numacross)>xsize+x1 then begin + inc(y); + x:=x1; + numacross:=0; + end; + x:=x+numacross; + ender: +until done=true; +close(f); +end; + +procedure box(x1,y1,x2,y2,col:integer;where:word); +begin + line(x1,y1,x1,y2,col,where); + line(x1,y2,x2,y2,col,where); + line(x2,y2,x2,y1,col,where); + line(x2,y1,x1,y1,col,where); +end; + +procedure vdelay(howlong:integer); +var i:integer; +begin + for i:=1 to howlong do waitretrace; +end; + +begin +end. diff --git a/weave1.tb1 b/weave1.tb1 new file mode 100644 index 0000000..e12cee1 Binary files /dev/null and b/weave1.tb1 differ diff --git a/xms.pas b/xms.pas new file mode 100644 index 0000000..d376224 --- /dev/null +++ b/xms.pas @@ -0,0 +1,115 @@ +{ SMIX is Copyright 1995 by Ethan Brodsky. All rights reserved. } +unit XMS; + interface + {Initialization} + function XMSInstalled: boolean; + procedure XMSInit; + + {Informational} + function XMSGetVersion: word; + function XMSGetFreeMem: word; + + {Allocation and deallocation} + function XMSAllocate(var Handle: word; Size: word): boolean; + function XMSReallocate(Handle: word; NewSize: word): boolean; + function XMSFree(Handle: word): boolean; + + {Memory moves} + type + PMoveParams = ^TMoveParams; + TMoveParams = + record + Length : LongInt; {Length must be a multiple of two} + SourceHandle : word; + SourceOffset : LongInt; + DestHandle : word; + DestOffset : LongInt; + end; + function XMSMove(Params: PMoveParams): boolean; + + implementation {ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ} + var + XMSDriver: pointer; + +{ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ} + + function XMSInstalled: boolean; assembler; + asm + mov ax, 4300h + int 2Fh + cmp al, 80h + jne @NoXMSDriver + mov al, TRUE + jmp @Done + @NoXMSDriver: + mov al, FALSE + @Done: + end; + +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} + + procedure XMSInit; assembler; + asm + mov ax, 4310h + int 2Fh + mov word ptr [XMSDriver], bx + mov word ptr [XMSDriver+2], es + end; + +{ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ} + + function XMSGetVersion: word; assembler; + asm + mov ah, 00h + call XMSDriver + end; + +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} + + function XMSGetFreeMem: word; assembler; + asm + mov ah, 08h + call XMSDriver + mov ax, dx + end; + +{ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ} + + function XMSAllocate(var Handle: word; Size: word): boolean; assembler; + asm + mov ah, 09h + mov dx, Size + call XMSDriver + les di, Handle + mov es:[di], dx + end; + +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} + + function XMSReallocate(Handle: word; NewSize: word): boolean; assembler; + asm + mov ah, 0Fh + mov bx, NewSize + mov dx, Handle + call XMSDriver + end; + +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} + + function XMSFree(Handle: word): boolean; assembler; + asm + mov ah, 0Ah + mov dx, Handle + call XMSDriver + end; + +{ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ} + function XMSMove(Params: PMoveParams): boolean; assembler; + asm + push ds + mov ah, 0Bh + lds si, Params + call XMSDriver + pop ds + end; + end. {ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ} \ No newline at end of file