|
| Tutorials are copyrighted by their author and the Inside3D staff. And may be used in any Quake modification provided that the author and the InsideQC staff are credited. Please direct any comments to the author. |
Chris Voss' Quake Menu SystemStep 1: This is a tutorial to show you how to make a menu. For this one I am making a class menu because that is what I use it for. This will display a menu for the player when they start a new level and no impulses work until the choices are made off of the menu.
Step 2: First thing you should do is make a new .qc file, I'll call it menu.qc, and put this in it:
/*
==================================================
Menu.qc By: Chris Voss 3-18-99
==================================================
*/
.float count; // for counting triggers
.float menu_count;
.float menu_time;
.float class; // object.class is what this will be
float c_none=1; // no class
float c_mage=2; // Mage class
float c_warrior=4; // Warrior class
void() GetClass =
{
if (self.class==c_none) // If they haven't chosen a class do this
{
if ((self.menu_count < 1) && (self.menu_time < time))
//1 = seconds the menu will be displayed but it redisplays over and over
{
self.menu_time = time + 1;
self.menu_count = self.menu_count + 1;
centerprint(self, "(1)Be a Mage\n (2)Be a Warrior\n"); //this is what your choices are in the menu
return;
}if (self.menu_count == 1) //If they haven't chosen anything
// then restart the display
{
self.menu_count = 0; // set it to 0 again
}
}
else
{
return;
}
};// this is called when an impulse is called instead of regular impulses
void(float inp) ChangeClass =
{
if (inp == 1)
{
self.class = c_mage; // set to mage class
sprint (self, "You are a Mage\n");
}
else if (inp == 2)
{
self.class = c_warrior; // set to warrior class
sprint (self, "You are a Warrior\n");
}
};and when finished save it, open up progs.src and put the menu.qc filename right before weapons.qc.
Step 3: After that open up client.qc and goto the function PutClientInServer() and scroll down to where it says:
self.invincible_time = 0;
after that put:
self.class = c_none; //This sets your class to nothing used later
Step 4: Then scroll down to the function PlayerPostThink() then goto the line that says:
CheckPowerups ();
then under that put:
GetClass();
close client.qc and save it.
Step 5: Open up weapons.qc and goto ImpulseCommands() function then replace the function with this:
void() ImpulseCommands =
{
if (self.class != c_none) // If they have a class go regularly
{
if (self.impulse >= 1 && self.impulse <= 8)
W_ChangeWeapon ();if (self.impulse == 9)
CheatCommand ();
if (self.impulse == 10)
CycleWeaponCommand ();
if (self.impulse == 11)
ServerflagsCommand ();
if (self.impulse == 12)
CycleWeaponReverseCommand ();if (self.impulse == 255)
QuadCheat ();self.impulse = 0;
}
else // If they don't have a class do this
{
SecondImpulse(); // call special impulse commands below
}
};void() SecondImpulse =
{
if (self.impulse == 1)
ChangeClass(1); // call class change commands
if (self.impulse == 2)
ChangeClass(2); // call class change commands
};Step 6: Save it all and compile and prepare for the menu to show up on the screen when you first start the game.