1.0
14 Mar 2013 15:58
/***Constants***/
enum BASE {
BLUE = 0,
RED = 1
}
const int PLAYSLOT = 32768;
/***Variables***/
int BlueBase = -1;
int RedBase = -1;
bool RedKill = false;
bool BlueKill = false;
int RedFlagHolder = -1;
int BlueFlagHolder = -1;
/***Other functions***/
void ChangeBase(int playerID) {
//Create a new base
int NewBase = jjAddObject(OBJECT::CTFBASE, jjPlayers[playerID].xPos, jjPlayers[playerID].yPos);
//Change the color to red if the player lost the red flag
if (!jjPlayers[playerID].teamRed)
jjObjects[NewBase].var[1] = BASE::RED;
//Change the global base variable to the new one
if (jjObjects[NewBase].var[1] == BASE::BLUE)
BlueBase = NewBase;
else
RedBase = NewBase;
//Remove the old base, also if there are any bugged extra bases it will also remove them
for (int i = 0; i < jjObjectCount; i++)
if (jjObjects[i].isActive && jjObjects[i].eventID == 244)
if (jjObjects[i].var[1] == BASE::BLUE && i != BlueBase)
jjDeleteObject(i);
else if (jjObjects[i].var[1] == BASE::RED && i != RedBase)
jjDeleteObject(i);
}
void InitBaseID() {
for (int i = 0; i < jjObjectCount; i++)
if (jjObjects[i].isActive && jjObjects[i].eventID == 244)
if (jjObjects[i].var[1] == 0)
BlueBase = i;
else
RedBase = i;
}
/***Gameplay functions***/
void onMain() {
if (jjGameTicks == 1)
InitBaseID();
if (jjGameState == GAME::STARTED) {
//Detect when a flag is captured and change flagvar to 2 for the player that captured the flag
if (jjObjects[BlueBase].var[0] > 0 && BlueFlagHolder == -1) {
BlueFlagHolder = jjObjects[BlueBase].var[0] - PLAYSLOT;
BlueKill = false;
}
if (jjObjects[RedBase].var[0] > 0 && RedFlagHolder == -1) {
RedFlagHolder = jjObjects[RedBase].var[0] - PLAYSLOT;
RedKill = false;
}
//Check if the flag holder is killed (CLIENT ONLY)
if (jjObjects[BlueBase].var[0] > 0) {
if (jjPlayers[BlueFlagHolder].health == 0 && jjPlayers[BlueFlagHolder].isActive)
BlueKill = true;
}
if (jjObjects[RedBase].var[0] > 0) {
if (jjPlayers[RedFlagHolder].health == 0 && jjPlayers[RedFlagHolder].isActive)
RedKill = true;
}
//Check if the flag is back to base, if so: is it because of a score or player kill?
if (jjObjects[BlueBase].var[0] == 0 && BlueFlagHolder > -1) {
if ((!jjIsServer && BlueKill) || (jjIsServer && jjPlayers[BlueFlagHolder].flag == 0)) { //The server uses the .flag variable of a player to see if the player died with the flag, the client uses .health instead
if (jjPlayers[BlueFlagHolder].isActive) //We dont want to lose the base when someone is ctoĆng :D
ChangeBase(BlueFlagHolder);
BlueKill = false;
} else {
jjObjects[RedBase].counter = 0;
jjObjects[RedBase].var[4] = 1;
}
BlueFlagHolder = -1;
}
if (jjObjects[RedBase].var[0] == 0 && RedFlagHolder > -1) {
if ((!jjIsServer && RedKill) || (jjIsServer && jjPlayers[RedFlagHolder].flag == 0)) {
if (jjPlayers[RedFlagHolder].isActive)
ChangeBase(RedFlagHolder);
RedKill = false;
} else{
jjObjects[BlueBase].counter = 0;
jjObjects[BlueBase].var[4] = 1;
}
RedFlagHolder = -1;
}
//Also, swapping while holding the flag is not a bug, just a good troll! (A.k.a. im too lazy to fix that)
}
}
Jazz2Online © 1999-INFINITY (Site Credits). We have a Privacy Policy. Jazz Jackrabbit, Jazz Jackrabbit 2, Jazz Jackrabbit Advance and all related trademarks and media are ™ and © Epic Games. Lori Jackrabbit is © Dean Dodrill. J2O development powered by Loops of Fury and Chemical Beats.
Eat your lima beans, Johnny.