JODI on Tue, 1 Feb 2000 18:03:49 +0100 (CET)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

<nettime> ; SOD


; WOLFHACK.ASM .386C IDEAL MODEL MEDIUM,C ;  SOD // http://sod.jodi.org
;============================================================================
DATASEG EXTRN mr_rowofs:WORD EXTRN mr_count:WORD EXTRN mr_xstep:WORD EXTRN
mr_ystep:WORD EXTRN mr_xfrac:WORD EXTRN mr_yfrac:WORD EXTRN mr_dest:WORD
FARDATA planepics db 8192 dup(?) ; // 4k of ceiling, 4k of floor PUBLIC
planepics
;============================================================================
CODESEG ;============================ ; ; MapRow ; ;
;============================ PROC MapRow PUBLIC MapRow push esi push edi
push ebp push ds mov bp,[mr_rowofs] mov cx,[mr_count] mov dx,[mr_ystep]
shl edx,16 mov dx,[mr_xstep] mov si,[mr_yfrac] shl esi,16 mov
si,[mr_xfrac] mov di,[mr_dest] mov ax,SEG planepics mov ds,ax mov
ax,0a000h mov es,ax mov ax,1111111111110b ; eax color lookup ; ebx scratch
offset and pixel values ; ecx loop counter ;  edx packed x / y step values
; esi packed x / y fractional values ; edi write pointer ; ebp toprow to
bottomrow delta ; es:  screenseg ; ds: pictures ; mov al,[esi] ; mov
al,[eax] ; mov [edi],al ; mov ax,[_variable+ebx+2] pixelloop: shld
ebx,esi,22 ;  shift y units in shld ebx,esi,7 ; shift x units in and one
extra bit and bx,63*65*2 ; mask off extra top bits and 0 low bit add
esi,edx ; position += step mov al,[bx] mov al,[eax] mov [es:di],al ; write
ceiling pixel mov al,[bx+1] mov al,[eax] mov [es:di+bp],al ; write floor
pixel inc di loop pixelloop pop ds pop ebp pop edi pop esi retf ENDP END
#define QUITSUR "Estas seguro que quieres\n"\ "parar este gran juego?"
#define CURGAME "Ahora estas en\n"\ "un juego. Si continuas\n"\ "borras el
juego viejo. O.K.?" #define GAMESVD "Ya hay un juego\n"\ "guardado en esta
posicion.\n"\ "sobre-escribir?"  #define ENDGAMESTR "Estas seguro que
quieres\n"\ "terminar el juego que\n"\ "estas jugando? (S o N):" #define
STR_NG "Juego nuevo" #define STR_SD "Sonido" #define STR_CL "Control"
#define STR_LG "Cargar juego" #define STR_SG "Guardar juego" #define
STR_CV "Cambiar vista" #define STR_VS "Ver anotacion" #define STR_EG
"Abandonar" #define STR_BD "Regresar al demo" #define STR_QT "Parar"
#define STR_LOADING "Cargando" #define STR_SAVING "Guardando" #define
STR_GAME "Regresar, jugar" #define STR_DEMO "Regresar al Demo" #define
STR_LGC "Cargar juego llamado\n\"" #define STR_EMPTY "vacio" #define
STR_CALIB "Calibrar" #define STR_JOYST "Joystick" #define STR_MOVEJOY
"Mover joystick a\n"\ "arriba izq y\n"\ "oprimir boton 0\n" #define
STR_MOVEJOY2 "Mover joystick a\n"\ "abajo derecha y\n"\ "oprimir boton
1\n" #define STR_ESCEXIT "ESC para salir" #define STR_NONE "Ninguno"
#define STR_PC "P.C. bocina" #define STR_ALSB "AdLib/Sound Blaster"
#define STR_DISNEY "Disney Sound Source" #define STR_SB "Sound Blaster"
#define STR_MOUSEEN "Raton activado"  #define STR_JOYEN "Joystick
activado" #define STR_PORT2 "Use joystick puerto 2" #define STR_GAMEPAD
"Gravis Gamepad Activada" #define STR_SENS "Raton Sensibilidad" #define
STR_CUSTOM "Modificar controles" #define STR_DADDY "Papi puedo jugar?"
#define STR_HURTME "No me hieras." #define STR_BRINGEM "-Echamelos!" 
#define STR_DEATH "La muerte encarnada" #define STR_MOUSEADJ "Raton
ajustar sensibilidad" #define STR_SLOW "Lento" #define STR_FAST "Rapido"
#define STR_CRUN "Corre" #define STR_COPEN "Abre" #define STR_CFIRE
"Fuego" #define STR_CSTRAFE "Ametrallar" #define STR_LEFT "Izquierda"
#define STR_RIGHT "Derecha" #define STR_FRWD "Adelante" #define STR_BKWD
"Atras" #define STR_THINK "Pensando" #define STR_SIZE1 "Use flechas para
ajustar" #define STR_SIZE2 "Enter para aceptar" #define STR_SIZE3 "Esc
para cancelar" #define STR_YOUWIN "Tu ganas" #define STR_TOTALTIME "Tiempo
total" #define STR_RATKILL "Muertes %" #define STR_RATSECRET "Secreto %"
#define STR_RATTREASURE "Tesoros %" #define STR_BONUS "Bono" #define
STR_TIME "Tiempo"  #define STR_PAR "Par" #define STR_RAT2KILL "Muertes %"
// ratio = promedio #define STR_RAT2SECRET "Secreto %" #define
STR_RAT2TREASURE "Tesoros %" #define STR_DEFEATED "Derrotado!" #define
STR_CHEATER1 "Ahora tienes 100% salud" #define STR_CHEATER2 "99 balas y
dos llaves" #define STR_CHEATER3 "Notar que has basicamente" #define
STR_CHEATER4 "eliminado tus chances de" #define STR_CHEATER5 "obtener
puntos altos"  #define STR_NOSPACE1 "No hay suficiente espacio" #define
STR_NOSPACE2 "en tu disco para guardar juego" #define STR_SAVECHT1 "Tu
archivo para guardar juego es" #define STR_SAVECHT2
"diremos,\"corrupto\"." #define STR_SAVECHT3 "Pero te dire, sigue y"
#define STR_SAVECHT4 "de todos modos juega" #define STR_SEEAGAIN "Veamos
eso de nuevo" /////////////////////////////////////// // // TED5 Map
Header for WL6 // /////////////////////////////////////// // // Map Names
// typedef enum { WOLF1_MAP1_MAP, // 0 WOLF1_MAP2_MAP, // 1
WOLF1_MAP3_MAP, // 2 WOLF1_MAP4_MAP, // 3 WOLF1_MAP5_MAP, // 4
WOLF1_MAP6_MAP, // 5 WOLF1_MAP7_MAP, // 6 WOLF1_MAP8_MAP, // 7
WOLF1_BOSS_MAP, // 8 WOLF1_SECRET_MAP, // 9 WOLF2_MAP1_MAP, // 10
WOLF2_MAP2_MAP, // 11 WOLF2_MAP3_MAP, // 12 WOLF2_MAP4_MAP, // 13
WOLF2_MAP5_MAP, // 14 WOLF2_MAP6_MAP, // 15 WOLF2_MAP7_MAP, // 16
WOLF2_MAP8_MAP, // 17 WOLF2_BOSS_MAP, // 18 WOLF2_SECRET_MAP, // 19
WOLF3_MAP1_MAP, // 20 WOLF3_MAP2_MAP, // 21 WOLF3_MAP3_MAP, // 22
WOLF3_MAP4_MAP, // 23 WOLF3_MAP5_MAP, // 24 WOLF3_MAP6_MAP, // 25
WOLF3_MAP7_MAP, // 26 WOLF3_MAP8_MAP, // 27 WOLF3_BOSS_MAP, // 28
WOLF3_SECRET_MAP, // 29 WOLF4_MAP_1_MAP, // 30 WOLF4_MAP_2_MAP, // 31
WOLF4_MAP_3_MAP, // 32 WOLF4_MAP_4_MAP, // 33 WOLF4_MAP_5_MAP, // 34
WOLF4_MAP_6_MAP, // 35 WOLF4_MAP_7_MAP, // 36 WOLF4_MAP_8_MAP, // 37
WOLF4_BOSS_MAP, // 38 WOLF4_SECRET_MAP, // 39 WOLF5_MAP_1_MAP, // 40
WOLF5_MAP_2_MAP, // 41 WOLF5_MAP_3_MAP, // 42 WOLF5_MAP_4_MAP, // 43
WOLF5_MAP_5_MAP, // 44 WOLF5_MAP_6_MAP, // 45 WOLF5_MAP_7_MAP, // 46
WOLF5_MAP_8_MAP, // 47 WOLF5_BOSS_MAP, // 48 WOLF5_SECRET_MAP, // 49
WOLF6_MAP_1_MAP, // 50 WOLF6_MAP_2_MAP, // 51 WOLF6_MAP_3_MAP, // 52
WOLF6_MAP_4_MAP, // 53 WOLF6_MAP_5_MAP, // 54 WOLF6_MAP_6_MAP, // 55
WOLF6_MAP_7_MAP, // 56 WOLF6_MAP_8_MAP, // 57 WOLF6_BOSS_MAP, // 58
WOLF6_SECRET_MAP, // 59 MAP4L10PATH_MAP, // 60 LASTMAP } mapnames;
/////////////////////////////////////// // // TED5 Map Header for WLF //
/////////////////////////////////////// // // Map Names // typedef enum {
LEVEL_ONE_MAP, // 0 LEVEL_TWO_MAP, // 1 LEVEL_THREE_MAP, // 2
LEVEL_FOUR_MAP, // 3 LASTMAP } mapnames; /* ================= = =
VL_MungePic = ================= */ void VL_MungePic (unsigned char far
*source, unsigned width, unsigned height) { unsigned
x,y,plane,size,pwidth; unsigned char far *temp, far *dest, far *srcline;
size = width*height; if (width&3) errout ("VL_MungePic: Not divisable by
4!\n"); // // copy the pic to a temp buffer // temp = (unsigned char far
*)farmalloc (size); if (!temp) errout ("Non enough memory for munge
buffer!\n"); _fmemcpy (temp,source,size); // // munge it back into the
original buffer // dest = source; pwidth = width/4; for
(plane=0;plane<4;plane++) { srcline = temp; for (y=0;y=stepbytwo) i += 2;
} memset (scaledirectory,0,sizeof(scaledirectory)); MM_SortMem (); // //
build the compiled scalers // stepbytwo = viewheight/2; // save space by
double stepping MM_GetPtr (&(memptr)work,20000); if (mmerror) return; for
(i=1;i<=maxscaleheight;i++) { BuildCompScale
(i*2,&(memptr)scaledirectory[i]); if (mmerror) { MM_FreePtr
(&(memptr)work); return; } if (i>=stepbytwo) i+= 2; } MM_FreePtr
(&(memptr)work); // // compact memory and lock down scalers // MM_SortMem
(); for (i=1;i<=maxscaleheight;i++) { MM_SetLock
(&(memptr)scaledirectory[i],true);  fullscalefarcall[i] =
(unsigned)scaledirectory[i]; fullscalefarcall[i] <<=16;
fullscalefarcall[i] += scaledirectory[i]->codeofs[0];  if (i>=stepbytwo) {
scaledirectory[i+1] = scaledirectory[i]; fullscalefarcall[i+1] =
fullscalefarcall[i]; scaledirectory[i+2] = scaledirectory[i];
fullscalefarcall[i+2] = fullscalefarcall[i]; i+=2; } } scaledirectory[0] =
scaledirectory[1]; fullscalefarcall[0] = fullscalefarcall[1]; // // check
for oversize wall drawing // for (i=maxscaleheight;icode[0]; toppix =
(viewheight-height)/2;  fix = 0; for (src=0;src<=64;src++) { startpix =
fix>>16; fix += step; endpix = fix>>16; if (endpix>startpix) 
work->width[src] = endpix-startpix; else work->width[src] = 0; // // mark
the start of the code // work->codeofs[src] = FP_OFF(code); // // compile
some code if the source pixel generates any screen pixels //
startpix+=toppix; endpix+=toppix;  if (startpix == endpix || endpix < 0 ||
startpix >= viewheight || src == 64) continue; // // mov al,[si+src] //
*code++ = 0x8a;  *code++ = 0x44; *code++ = src; for (;startpix=
viewheight) break; // off the bottom of the view area if (startpix < 0) 
continue; // not into the view area // // mov [es:di+heightofs],al //
*code++ = 0x26; *code++ = 0x88; *code++ = 0x85;  *((unsigned far *)code)++
= startpix*SCREENBWIDE; } } // // retf // *code++ = 0xcb; totalsize =
FP_OFF(code);  MM_GetPtr (finalspot,totalsize); if (mmerror) return 0;
_fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize);  return
totalsize; } /* ======================= = = ScaleLine = = linescale should
have the high word set to the segment of the scaler =
======================= */ extern int slinex,slinewidth; extern unsigned
far *linecmds;  extern long linescale; extern unsigned maskword; byte
mask1,mask2,mask3; void near ScaleLine (void) { asm mov cx,WORD PTR
[linescale+2] asm mov es,cx // segment of scaler asm mov bp,WORD PTR
[linecmds] asm mov dx,SC_INDEX+1 // to set SC_MAPMASK asm mov bx,[slinex]
asm mov di,bx asm shr di,2 // X in bytes asm add di,[bufferofs] asm and
bx,3 asm shl bx,3 asm add bx,[slinewidth] // bx = (pixel*8+pixwidth) asm
mov al,BYTE [mapmasks3-1+bx] // -1 because pixwidth of 1 is first asm mov
ds,WORD PTR [linecmds+2] asm or al,al asm jz notthreebyte // scale across
three bytes asm jmp threebyte notthreebyte: asm mov al,BYTE PTR
ss:[mapmasks2-1+bx] // -1 because pixwidth of 1 is first asm or al,al asm
jnz twobyte // scale across two bytes // // one byte scaling // asm mov
al,BYTE PTR ss:[mapmasks1-1+bx] // -1 because pixwidth of 1 is first asm
out dx,al // set map mask register scalesingle:  asm mov bx,[ds:bp] //
table location of rtl to patch asm or bx,bx asm jz linedone // 0 signals
end of segment list asm mov bx,[es:bx] asm mov dl,[es:bx] // save old
value asm mov BYTE PTR es:[bx],OP_RETF // patch a RETF in asm mov
si,[ds:bp+4] // table location of entry spot asm mov ax,[es:si] asm mov
WORD PTR ss:[linescale],ax // call here to start scaling asm mov
si,[ds:bp+2] // corrected top of shape for this segment asm add bp,6 //
next segment list asm mov ax,SCREENSEG asm mov es,ax asm call
ss:[linescale] // scale the segment of pixels asm mov es,cx // segment of
scaler asm mov BYTE PTR es:[bx],dl // unpatch the RETF asm jmp scalesingle
// do the next segment // // done // linedone: asm mov ax,ss asm mov ds,ax
return; // // two byte scaling // twobyte: asm mov ss:[mask2],al asm mov
al,BYTE PTR ss:[mapmasks1-1+bx] // -1 because pixwidth of 1 is first asm
mov ss:[mask1],al scaledouble: asm mov bx,[ds:bp] // table location of rtl
to patch asm or bx,bx asm jz linedone // 0 signals end of segment list asm
mov bx,[es:bx] asm mov cl,[es:bx] // save old value asm mov BYTE PTR
es:[bx],OP_RETF // patch a RETF in asm mov si,[ds:bp+4] // table location
of entry spot asm mov ax,[es:si] asm mov WORD PTR ss:[linescale],ax //
call here to start scaling asm mov si,[ds:bp+2] // corrected top of shape
for this segment asm add bp,6 // next segment list asm mov ax,SCREENSEG
asm mov es,ax asm mov al,ss:[mask1] asm out dx,al // set map mask register
asm call ss:[linescale] // scale the segment of pixels asm inc di asm mov
al,ss:[mask2] asm out dx,al // set map mask register asm call
ss:[linescale] // scale the segment of pixels asm dec di asm mov es,WORD
PTR ss:[linescale+2] // segment of scaler asm mov BYTE PTR es:[bx],cl //
unpatch the RETF asm jmp scaledouble // do the next segment // // three
byte scaling // threebyte: asm mov ss:[mask3],al asm mov al,BYTE PTR
ss:[mapmasks2-1+bx] // -1 because pixwidth of 1 is first asm mov
ss:[mask2],al asm mov al,BYTE PTR ss:[mapmasks1-1+bx] // -1 because
pixwidth of 1 is first asm mov ss:[mask1],al scaletriple: asm mov
bx,[ds:bp] // table location of rtl to patch asm or bx,bx asm jz linedone
// 0 signals end of segment list asm mov bx,[es:bx] asm mov cl,[es:bx] //
save old value asm mov BYTE PTR es:[bx],OP_RETF // patch a RETF in asm mov
si,[ds:bp+4] // table location of entry spot asm mov ax,[es:si] asm mov
WORD PTR ss:[linescale],ax // call here to start scaling asm mov
si,[ds:bp+2] // corrected top of shape for this segment asm add bp,6 //
next segment list asm mov ax,SCREENSEG asm mov es,ax asm mov al,ss:[mask1]
asm out dx,al // set map mask register asm call ss:[linescale] // scale
the segment of pixels asm inc di asm mov al,ss:[mask2] asm out dx,al //
set map mask register asm call ss:[linescale] // scale the segment of
pixels asm inc di asm mov al,ss:[mask3] asm out dx,al // set map mask
register asm call ss:[linescale] // scale the segment of pixels asm dec di
asm dec di asm mov es,WORD PTR ss:[linescale+2] // segment of scaler asm
mov BYTE PTR es:[bx],cl // unpatch the RETF asm jmp scaletriple // do the
next segment } /* ======================= = = ScaleShape = = Draws a
compiled shape at [scale] pixels high = = each vertical line of the shape
has a pointer to segment data: = end of segment pixel*2 (0 terminates
line) used to patch rtl in scaler = top of virtual line with segment in
proper place = start of segment pixel*2, used to jsl into compiled scaler
= = = Setup for call = -------------- = GC_MODE read mode 1, write mode 2
= GC_COLORDONTCARE set to 0, so all reads from video memory return 0xff =
GC_INDEX pointing at GC_BITMASK = ======================= */ static long
longtemp; void ScaleShape (int xcenter, int shapenum, unsigned height) {
t_compshape _seg *shape; t_compscale _seg *comptable; unsigned
scale,srcx,stopx,tempx; int t; unsigned far *cmdptr;  boolean
leftvis,rightvis; shape = PM_GetSpritePage (shapenum); scale = height>>3;
// low three bits are fractional if (!scale || scale>maxscale) return; //
too close or far away comptable = scaledirectory[scale]; *(((unsigned
*)&linescale)+1)=(unsigned)comptable; // seg of far call *(((unsigned
*)&linecmds)+1)=(unsigned)shape; // seg of shape // // scale to the left
(from pixel 31 to shape->leftpix) // srcx = 32; slinex = xcenter; stopx =
shape->leftpix; cmdptr = &shape->dataofs[31-stopx]; while ( --srcx >=stopx
&& slinex>0) { (unsigned)linecmds = *cmdptr--; if ( !(slinewidth =
comptable->width[srcx]) ) continue; if (slinewidth == 1) { slinex--; if
(slinex= height) continue; // obscured by closer wall ScaleLine (); }
continue; } // // handle multi pixel lines // if (slinex>viewwidth) {
slinex -= slinewidth; slinewidth = viewwidth-slinex; if (slinewidth<1)
continue; // still off the right side } else { if (slinewidth>slinex)
slinewidth = slinex;  slinex -= slinewidth; } leftvis =
(wallheight[slinex] < height); rightvis = (wallheight[slinex+slinewidth-1]
< height); if (leftvis) { if (rightvis) ScaleLine (); else { while
(wallheight[slinex+slinewidth-1] >= height) slinewidth--; ScaleLine (); }
} else { if (!rightvis) continue; // totally obscured while
(wallheight[slinex] >= height) { slinex++; slinewidth--; } ScaleLine ();
break; // the rest of the shape is gone } } // // scale to the right //
slinex = xcenter; stopx = shape->rightpix; if (shape->leftpix<31) { srcx =
31; cmdptr = &shape->dataofs[32-shape->leftpix]; } else { srcx =
shape->leftpix-1; cmdptr = &shape->dataofs[0]; } slinewidth = 0; while (
++srcx <= stopx && (slinex+=slinewidth)width[srcx]) ) continue; if
(slinewidth == 1) { if (slinex>=0 && wallheight[slinex] < height) {
ScaleLine (); } continue; } // // handle multi pixel lines // if
(slinex<0) { if (slinewidth <= -slinex) continue; // still off the left
edge slinewidth += slinex; slinex = 0; } else { if (slinex + slinewidth >
viewwidth) slinewidth = viewwidth-slinex; } leftvis = (wallheight[slinex]
< height); rightvis = (wallheight[slinex+slinewidth-1] < height); if
(leftvis) { if (rightvis) { ScaleLine (); } else { while
(wallheight[slinex+slinewidth-1] >= height) slinewidth--; ScaleLine ();
break; // the rest of the shape is gone } } else { if (rightvis) { while
(wallheight[slinex] >= height) { slinex++; slinewidth--; } ScaleLine (); }
else continue; // totally obscured } } } /* ======================= = =
SimpleScaleShape = = NO CLIPPING, height in pixels = = Draws a compiled
shape at [scale] pixels high = = each vertical line of the shape has a
pointer to segment data: = end of segment pixel*2 (0 terminates line) used
to patch rtl in scaler = top of virtual line with segment in proper place
= start of segment pixel*2, used to jsl into compiled scaler = = = Setup
for call = -------------- = GC_MODE read mode 1, write mode 2 =
GC_COLORDONTCARE set to 0, so all reads from video memory return 0xff =
GC_INDEX pointing at GC_BITMASK = ======================= */ void
SimpleScaleShape (int xcenter, int shapenum, unsigned height) {
t_compshape _seg *shape; t_compscale _seg *comptable; unsigned
scale,srcx,stopx,tempx; int t; unsigned far *cmdptr; boolean
leftvis,rightvis; shape = PM_GetSpritePage (shapenum); scale = height>>1;
comptable = scaledirectory[scale]; *(((unsigned
*)&linescale)+1)=(unsigned)comptable; // seg of far call *(((unsigned
*)&linecmds)+1)=(unsigned)shape; // seg of shape // // scale to the left
(from pixel 31 to shape->leftpix) // srcx = 32; slinex = xcenter; stopx =
shape->leftpix; cmdptr = &shape->dataofs[31-stopx]; while ( --srcx >=stopx
) { (unsigned)linecmds = *cmdptr--; if ( !(slinewidth =
comptable->width[srcx]) ) continue; slinex -= slinewidth; ScaleLine (); }
// // scale to the right // slinex = xcenter; stopx = shape->rightpix; if
(shape->leftpix<31) { srcx = 31; cmdptr =
&shape->dataofs[32-shape->leftpix]; } else { srcx = shape->leftpix-1;
cmdptr = &shape->dataofs[0]; } slinewidth = 0; while ( ++srcx <= stopx ) {
(unsigned)linecmds = *cmdptr++; if ( !(slinewidth =
comptable->width[srcx]) ) continue; ScaleLine (); slinex+=slinewidth; } }
// // bit mask tables for drawing scaled strips up to eight pixels wide //
// down here so the STUPID inline assembler doesn't get confused! // byte
mapmasks1[4][8] = { {1 ,3 ,7 ,15,15,15,15,15}, {2 ,6 ,14,14,14,14,14,14},
{4 ,12,12,12,12,12,12,12}, {8 ,8 ,8 ,8 ,8 ,8 ,8 ,8} }; byte
mapmasks2[4][8] = { {0 ,0 ,0 ,0 ,1 ,3 ,7 ,15}, {0 ,0 ,0 ,1 ,3 ,7 ,15,15},
{0 ,0 ,1 ,3 ,7 ,15,15,15}, {0 ,1 ,3 ,7 ,15,15,15,15} }; byte
mapmasks3[4][8] = { {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0}, {0 ,0 ,0 ,0 ,0 ,0 ,0 ,1}, {0
,0 ,0 ,0 ,0 ,0 ,1 ,3}, {0 ,0 ,0 ,0 ,0 ,1 ,3 ,7} }; unsigned
wordmasks[8][8] = {
{0x0080,0x00c0,0x00e0,0x00f0,0x00f8,0x00fc,0x00fe,0x00ff},
{0x0040,0x0060,0x0070,0x0078,0x007c,0x007e,0x007f,0x807f},
{0x0020,0x0030,0x0038,0x003c,0x003e,0x003f,0x803f,0xc03f},
{0x0010,0x0018,0x001c,0x001e,0x001f,0x801f,0xc01f,0xe01f},
{0x0008,0x000c,0x000e,0x000f,0x800f,0xc00f,0xe00f,0xf00f},
{0x0004,0x0006,0x0007,0x8007,0xc007,0xe007,0xf007,0xf807},
{0x0002,0x0003,0x8003,0xc003,0xe003,0xf003,0xf803,0xfc03},
{0x0001,0x8001,0xc001,0xe001,0xf001,0xf801,0xfc01,0xfe01} }; int
slinex,slinewidth; unsigned far *linecmds; long linescale; unsigned
maskword; ////////////////////////////////////// // // Graphics .H file
for .WL1 // IGRAB-ed on Sat May 02 02:32:49 1992 //
////////////////////////////////////// typedef enum { // Lump Start
H_BJPIC=3, H_CASTLEPIC, // 4 H_KEYBOARDPIC, // 5 H_JOYPIC, // 6
H_MOUSEPIC, // 7 H_BOTHPIC, // 8 H_GAMEPADPIC, // 9 H_HEALPIC, // 10
H_TREASUREPIC, // 11 H_GUNPIC, // 12 H_KEYPIC, // 13 H_BLAZEPIC, // 14
H_WEAPON1234PIC, // 15 H_WOLFLOGOPIC, // 16 H_VISAPIC, // 17 H_MCPIC, //
18 H_IDLOGOPIC, // 19 H_FAXPIC, // 20 H_GALACTIXPIC, // 21 H_FGODMOMPIC,
// 22 H_AUSTRALIAPIC, // 23 H_CANADAPIC, // 24 H_UKPIC, // 25
H_TOPWINDOWPIC, // 26 H_LEFTWINDOWPIC, // 27 H_RIGHTWINDOWPIC, // 28
H_BOTTOMINFOPIC, // 29 #define SPEAR #define SPEARDEMO #define ARTSEXTERN
#define DEMOSEXTERN #define CARMACIZED //#define MYPROFILE //#define
DEBCHECK //#define UPLOAD "This game is shareware.\n" "Share it with
everyone.\n"  "Thanks.\n\n" " Id Software\n" "This game is NOT
shareware.\n" "Please do not distribute it.\n" "Thanks.\n\n" " Id
Software\n" #define SPEAR #define ARTSEXTERN #define DEMOSEXTERN #define
CARMACIZED //#define MYPROFILE //#define DEBCHECK //#define UPLOAD

 


#  distributed via <nettime>: no commercial use without permission
#  <nettime> is a moderated mailing list for net criticism,
#  collaborative text filtering and cultural politics of the nets
#  more info: majordomo@bbs.thing.net and "info nettime-l" in the msg body
#  archive: http://www.nettime.org contact: nettime@bbs.thing.net