Oak Tutorial

Back to Tutorials

Next Lesson


Oak Tutorial 1: Spawning

Lesson Requirements
A C compiler., and the Quake2 Source code

Instructions on using the LCCWin32 Compiler.

Lesson Summary
A quick intro to Spawning a bot in Quake2.


Ok I`ve now had a few days to play with the source code and have begun writing my bot. As I get further on with it I`ll be writing these tutorials explaining how it all works. In this one I`ll show you the bot spawn code I currently have, though do remember this will change. Heres the spawn function which is in my src file oak.c. NOTE you can not cut and paste this code from HTML!

* Function:	SP_Oak
* Description: spawns a oak bot
* Arguements:	
* void
* Returns:
* void

void SP_Oak(void)
	edict_t *newOak;
	vec3_t	spawn_origin, spawn_angles;

	// spawn the bot on a spawn spot
	newOak = G_Spawn();
	SelectSpawnPoint (spawn_origin, spawn_angles);
	VectorCopy (spawn_origin, newOak->s.origin);
	newOak->s.origin[2] += 1;	// make sure off ground
	newOak->classname = "bot";
	newOak->takedamage = DAMAGE_AIM;
	newOak->movetype = MOVETYPE_STEP;
	newOak->mass = 200;
	newOak->solid = SOLID_BBOX;
	newOak->deadflag = DEAD_NO;
	newOak->clipmask = MASK_PLAYERSOLID;
	newOak->model = "players/male/tris.md2";
	newOak->s.modelindex = 255;
	newOak->s.modelindex2 = 255;		// custom gun model
	newOak->s.frame = 0;
	newOak->waterlevel = 0;
	newOak->watertype = 0;
	newOak->health = 100;
	newOak->max_health = 100;
	newOak->gib_health = -40;

	// think functions
	newOak->pain = oak_pain;
	newOak->die = oak_die;

	VectorSet (newOak->mins, -16, -16, -24);
	VectorSet (newOak->maxs, 16, 16, 32);
	VectorClear (newOak->velocity);

	gi.linkentity (newOak);
	gi.bprintf (PRINT_HIGH, "A Oak bot has entered the game\n");


This code is fairly self explanatory. The function begins with some variable declarations. The next four lines create a entity, selects a spawn spot, and move the bots origin to the spawn spot. The next block set a number of the entities attirubtes all of which are fairly obvious. I`m going to skip the rest of the code unitl next time. but please note, that you must call the line:

gi.linkentity (newOak);

Otherwise you`ll not have much luck. Next you`ll need to add this code:

void SP_Oak(void);

At the top of the file, beneath the #include statements.

	else if (Q_stricmp (cmd, "oak") == 0)
After line 637 of g_cmds.c (preceeding line is):
	else if (Q_stricmp (cmd, "wave") == 0)
		Cmd_Wave_f (ent);

Ok if you compile that code in with the id code you can then spawn a bot by typing cmd oak in the console. Remember you must run quake with the command line:

quake2 +set game oak

Assuming you put the new gamex86.dll in the dir called oak.


Back to Tutorials

Next Lesson

Copyright © 1997, John Crickett.
Legal Information