From bigbang@seanet.com ...ahh...glory.... the first guy to hack quake....

Hi,
	There ARE monsters in the test of Quake... sort of...
All the code is there it just takes a little hacking to see
them. Here are the steps.

	1. Rip apart the .PAK file. I have included a .C file
	   to do just that!!

	2. Use a hex editor to edit MAPS\TEST1.BSP.

	3. Search for <weapon_> You should see a line like...
		"classname" "weapon_supershotgun"

	4. Replace "weapon_supershotgun" with "monster_demon1" (be sure to pad with 0x0a)

	5. Change "origin" "48 1152 0" to "origin" "48 1152 50" otherwise monster
	   starts in a wall.
	
	6. rename or delete ID1.PAK (so QUAKE.EXE will look at modified file)

	7. Run quake. load map test1.

	8. Enjoy.

Other monsters you can try are:
	monster_fish
	monster_wizard 
	monster_dragon
	monster_knight
	monster_ogre

	
	If you dont understand any part of the above DONT TRY!
	Wait for someone to post an editor.

	That said, I'd like to say that I'm somewhat dissapointed
by the test version of Quake. But I urge everyone to give it a 
chance. Just a few hours of hacking around have revealed a lot
of complexity. It just needs some time for ID to really explore it.
For an example try fiddling with the GRAVITY....Neat!!!

		Regards 
		 Chris

<included cfile for unpacker>

#include <stdio.h>
#include <dos.h>
#include <malloc.h>
typedef struct{
	char fn[0x40-8];
	long pos,len;
	}ENTRY;

ENTRY entrys[200];
long num_entrys;

make_path(char *p)
{
char *t;
char temp[0x40];

	sprintf(temp,"%s",p);
	t=&temp[0];
	while(*t)
		{
		if(*t=='/')
			{
			*t=0;
			mkdir(temp);
			*t='/';
			}
		t++;
		}
}

main()
{
FILE *f;
FILE *fo;
long pos,len,dummy;
long i;
char *temp;

	f=fopen("id1.pak","rb");
	fread(&dummy,sizeof(long),1,f);
	fread(&pos,sizeof(long),1,f);
	fread(&len,sizeof(long),1,f);
	fseek(f,pos,SEEK_SET);
	for(i=0;i<len/0x40;i++)
		fread(&entrys[i],sizeof(ENTRY),1,f);

	for(i=0;i<len/0x40;i++)
		{
		printf("%x:%x:%s\n",entrys[i].pos,entrys[i].len,entrys[i].fn);
		make_path(entrys[i].fn);
		fo=fopen(entrys[i].fn,"wb");
		fseek(f,entrys[i].pos,SEEK_SET);
		temp = malloc(entrys[i].len);
		fread(temp,sizeof(char),entrys[i].len,f);
		fwrite(temp,sizeof(char),entrys[i].len,fo);
		free(temp);
		fclose(fo);
		}
	fclose(f);

}


