mirror of
https://github.com/nzp-team/quakec.git
synced 2024-11-25 05:11:05 +00:00
SERVER: Improve versatility and readability for perk_random
This commit is contained in:
parent
5ddd0a0474
commit
0e35a6e87f
1 changed files with 112 additions and 100 deletions
|
@ -1322,110 +1322,122 @@ void() power_switch =
|
||||||
isPowerOn = false;
|
isPowerOn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sorta ugly function but whatever
|
//
|
||||||
void() perk_random =
|
// Random Perk-A-Cola
|
||||||
|
//
|
||||||
|
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_QUICKREVIVE 1
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_JUGGERNOG 2
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_SPEEDCOLA 4
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_DOUBLETAP 8
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_PHDFLOPPER 16
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_STAMINUP 32
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_DEADSHOT 64
|
||||||
|
#define SPAWNFLAG_PERKRANDOM_MULEKICK 128
|
||||||
|
|
||||||
|
float perk_random_placed; // bitfield to track what perk_random ents have placed.
|
||||||
|
|
||||||
|
//
|
||||||
|
// Perk_RandomAssign(perk_classname, spawnfunc)
|
||||||
|
// Transforms perk_random into the designated entity passed.
|
||||||
|
// If the entity already exists in the world, it will
|
||||||
|
// instead teleport it at the desired location.
|
||||||
|
//
|
||||||
|
void(string perk_classname, void() spawnfunc) Perk_RandomAssign =
|
||||||
|
{
|
||||||
|
entity machine = find(world, classname, perk_classname);
|
||||||
|
|
||||||
|
// Machine does not already exist, so spawn a new one
|
||||||
|
// with default parameters.
|
||||||
|
if (!machine) {
|
||||||
|
self.spawnflags = 0; // reset spawnflags, for default lights.
|
||||||
|
spawnfunc();
|
||||||
|
}
|
||||||
|
// The machine is in the world, so move it here instead.
|
||||||
|
else {
|
||||||
|
setorigin(machine, self.origin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Perk_RandomDecide()
|
||||||
|
// Called by perk_random, will conduct the process of
|
||||||
|
// deciding what Perk-A-Cola machine it will become.
|
||||||
|
//
|
||||||
|
void() Perk_RandomDecide =
|
||||||
{
|
{
|
||||||
float i;
|
float i;
|
||||||
float foundperk;
|
|
||||||
|
// If a perk_random entity has already placed down a Perk-A-Cola
|
||||||
// remove perks from our selection if they already exist
|
// given it's respective spawnflag, remove it from the ent selection.
|
||||||
// ugly ugly
|
for(i = 1; i < 256; i *= 2) {
|
||||||
if ((find(world,classname,"perk_revive") && (self.spawnflags & 1))) {
|
if ((perk_random_placed & i) && (self.spawnflags & 1))
|
||||||
self.spawnflags -= self.spawnflags & 1;
|
self.spawnflags -= self.spawnflags & i;
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_juggernog") && (self.spawnflags & 2))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 2;
|
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_speed") && (self.spawnflags & 4))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 4;
|
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_double") && (self.spawnflags & 8))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 8;
|
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_flopper") && (self.spawnflags & 16))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 16;
|
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_staminup") && (self.spawnflags & 32))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 32;
|
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_deadshot") && (self.spawnflags & 64))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 64;
|
|
||||||
}
|
|
||||||
if ((find(world,classname,"perk_mule") && (self.spawnflags & 128))) {
|
|
||||||
self.spawnflags -= self.spawnflags & 128;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// obj error because there are no possible perks for us to obtain
|
// Choose which of the eight machines we want to become, if permitted.
|
||||||
if (self.spawnflags == 0) {
|
while (true) {
|
||||||
|
i = random();
|
||||||
|
// Quick Revive
|
||||||
|
if (i < (1/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_QUICKREVIVE)) {
|
||||||
|
Perk_RandomAssign("perk_revive", perk_revive);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_QUICKREVIVE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Jugger-Nog
|
||||||
|
else if (i < (2/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_JUGGERNOG)) {
|
||||||
|
Perk_RandomAssign("perk_juggernog", perk_juggernog);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_JUGGERNOG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Speed Cola
|
||||||
|
else if (i < (3/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_SPEEDCOLA)) {
|
||||||
|
Perk_RandomAssign("perk_speed", perk_speed);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_SPEEDCOLA;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Double Tap
|
||||||
|
else if (i < (4/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_DOUBLETAP)) {
|
||||||
|
Perk_RandomAssign("perk_double", perk_double);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_DOUBLETAP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// PhD Flopper
|
||||||
|
else if (i < (5/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_PHDFLOPPER)) {
|
||||||
|
Perk_RandomAssign("perk_flopper", perk_flopper);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_PHDFLOPPER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Stamin-Up
|
||||||
|
else if (i < (6/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_STAMINUP)) {
|
||||||
|
Perk_RandomAssign("perk_staminup", perk_staminup);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_STAMINUP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Deadshot Daiquiri
|
||||||
|
else if (i < (7/8) && (self.spawnflags & SPAWNFLAG_PERKRANDOM_DEADSHOT)) {
|
||||||
|
Perk_RandomAssign("perk_deadshot", perk_deadshot);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_DEADSHOT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Mule Kick
|
||||||
|
else if (i < 1 && (self.spawnflags & SPAWNFLAG_PERKRANDOM_MULEKICK)) {
|
||||||
|
Perk_RandomAssign("perk_mule", perk_mule);
|
||||||
|
perk_random_placed += SPAWNFLAG_PERKRANDOM_MULEKICK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void() perk_random =
|
||||||
|
{
|
||||||
|
// Quit out because there are no Perk-A-Cola machines for us to choose between.
|
||||||
|
if (!self.spawnflags) {
|
||||||
objerror("No available Perks to choose from!");
|
objerror("No available Perks to choose from!");
|
||||||
}
|
}
|
||||||
|
|
||||||
foundperk = false;
|
// We can't transform right away, because we need to assert that
|
||||||
while (foundperk == false) {
|
// all other entities are loaded in the world.
|
||||||
i = random();
|
self.think = Perk_RandomDecide;
|
||||||
// Quick Revive
|
self.nextthink = time + 0.2;
|
||||||
if (i < (1/8) && (self.spawnflags & 1)) {
|
};
|
||||||
if !(find(world, classname, "perk_revive")) {
|
|
||||||
self.spawnflags = 8;
|
|
||||||
perk_revive();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Jugger-Nog
|
|
||||||
else if (i < (2/8) && (self.spawnflags & 2)) {
|
|
||||||
if !(find(world, classname, "perk_juggernog")) {
|
|
||||||
self.spawnflags = 2;
|
|
||||||
perk_juggernog();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Speed Cola
|
|
||||||
else if (i < (3/8) && (self.spawnflags & 4)) {
|
|
||||||
if !(find(world, classname, "perk_speed")) {
|
|
||||||
self.spawnflags = 4;
|
|
||||||
perk_speed();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Double Tap
|
|
||||||
else if (i < (4/8) && (self.spawnflags & 8)) {
|
|
||||||
if !(find(world, classname, "perk_double")) {
|
|
||||||
self.spawnflags = 16;
|
|
||||||
perk_double();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// PhD Flopper
|
|
||||||
else if (i < (5/8) && (self.spawnflags & 16)) {
|
|
||||||
if !(find(world, classname, "perk_flopper")) {
|
|
||||||
self.spawnflags = 16;
|
|
||||||
perk_flopper();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Stamin-Up
|
|
||||||
else if (i < (6/8) && (self.spawnflags & 32)) {
|
|
||||||
if !(find(world, classname, "perk_staminup")) {
|
|
||||||
self.spawnflags = 16;
|
|
||||||
perk_staminup();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Deadshot Daiquiri
|
|
||||||
else if (i < (7/8) && (self.spawnflags & 64)) {
|
|
||||||
if (!find(world, classname, "perk_deadshot")) {
|
|
||||||
self.spawnflags = 16;
|
|
||||||
perk_deadshot();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Mule Kick
|
|
||||||
else if (i < 1 && (self.spawnflags & 128)) {
|
|
||||||
if (!find(world, classname, "perk_mule")) {
|
|
||||||
self.spawnflags = 4;
|
|
||||||
perk_mule();
|
|
||||||
foundperk = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue